From 0669d1b3cb7152c3ebc58618dd766a41705503c0 Mon Sep 17 00:00:00 2001 From: Yuneng Jiang Date: Thu, 25 Jun 2026 17:31:13 -0700 Subject: [PATCH 01/79] =?UTF-8?q?bump:=20version=200.1.43=20=E2=86=92=200.?= =?UTF-8?q?1.44?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- enterprise/pyproject.toml | 4 ++-- pyproject.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/enterprise/pyproject.toml b/enterprise/pyproject.toml index b032942427c..66f6aeb7abc 100644 --- a/enterprise/pyproject.toml +++ b/enterprise/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "litellm-enterprise" -version = "0.1.43" +version = "0.1.44" description = "Package for LiteLLM Enterprise features" readme = "README.md" requires-python = ">=3.9" @@ -26,7 +26,7 @@ required-version = ">=0.10.9" module-root = "" [tool.commitizen] -version = "0.1.43" +version = "0.1.44" version_files = [ "pyproject.toml:^version", "../pyproject.toml:litellm-enterprise==", diff --git a/pyproject.toml b/pyproject.toml index 6a6a47f540e..6e99d81f8f3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -63,7 +63,7 @@ proxy = [ "azure-storage-blob>=12.28.0,<13.0", "mcp>=1.26.0,<2.0", "litellm-proxy-extras==0.4.74", - "litellm-enterprise==0.1.43", + "litellm-enterprise==0.1.44", "RestrictedPython>=8.1,<9.0", "rich>=13.9.4,<14.0", "polars>=1.38.1,<2.0", From 2c8cd6ad4dc65371ac3b7f3dc58206c6120773ac Mon Sep 17 00:00:00 2001 From: Yuneng Jiang Date: Thu, 25 Jun 2026 17:35:56 -0700 Subject: [PATCH 02/79] uv lock --- uv.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/uv.lock b/uv.lock index 917dff39e38..da44ad25715 100644 --- a/uv.lock +++ b/uv.lock @@ -9,7 +9,7 @@ resolution-markers = [ ] [options] -exclude-newer = "2026-06-22T19:05:55.080417Z" +exclude-newer = "2026-06-23T00:31:52.495979Z" exclude-newer-span = "P3D" [manifest] @@ -3597,7 +3597,7 @@ proxy-dev = [ [[package]] name = "litellm-enterprise" -version = "0.1.43" +version = "0.1.44" source = { editable = "enterprise" } [[package]] From 4a6f0dbd8c4af8eb56d0ee6a60eaf7139d051931 Mon Sep 17 00:00:00 2001 From: Yuneng Jiang Date: Fri, 26 Jun 2026 00:10:14 -0700 Subject: [PATCH 03/79] fix(ui): size Request Logs table columns so it scrolls instead of overflowing Tremor's Table forwards className to a wrapper div rather than the inner table element, so the table-fixed class never reached the table and it stayed table-layout: auto. Across 16 whitespace-nowrap columns that expanded the table far past the viewport Give each spend-logs column an explicit pixel size and drive the table width from getCenterTotalSize(), matching the Virtual Keys table. The shared DataTable applies this only when columns declare sizes, so the other consumers keep their existing fluid layout --- .../src/components/view_logs/columns.tsx | 16 +++++++ .../src/components/view_logs/table.test.tsx | 44 +++++++++++++++++++ .../src/components/view_logs/table.tsx | 15 ++++++- 3 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 ui/litellm-dashboard/src/components/view_logs/table.test.tsx diff --git a/ui/litellm-dashboard/src/components/view_logs/columns.tsx b/ui/litellm-dashboard/src/components/view_logs/columns.tsx index 1265b8449de..aeeb31f78f3 100644 --- a/ui/litellm-dashboard/src/components/view_logs/columns.tsx +++ b/ui/litellm-dashboard/src/components/view_logs/columns.tsx @@ -119,11 +119,13 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] ) : "Time", accessorKey: "startTime", + size: 200, cell: (info: any) => , }, { header: "Type", id: "type", + size: 90, cell: (info: any) => { const row = info.row.original; const sessionCount = row.session_total_count || 1; @@ -168,6 +170,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] { header: "Status", accessorKey: "metadata.status", + size: 100, cell: (info: any) => { const status = info.getValue() || "Success"; const isSuccess = status.toLowerCase() !== "failure"; @@ -186,6 +189,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] { header: "Session ID", accessorKey: "session_id", + size: 160, cell: (info: any) => { const value = String(info.getValue() || ""); const onSessionClick = info.row.original.onSessionClick; @@ -207,6 +211,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] { header: "Request ID", accessorKey: "request_id", + size: 160, cell: (info: any) => ( {String(info.getValue() || "")} @@ -226,6 +231,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] ) : "Cost", accessorKey: "spend", + size: 110, cell: (info: any) => { const row = info.row.original; const mcpCount = row.mcp_tool_call_count || 0; @@ -258,6 +264,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] ) : "Duration (s)", accessorKey: "request_duration_ms", + size: 120, cell: (info: any) => { const ms = info.getValue(); if (ms == null) return -; @@ -282,6 +289,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] ) : "TTFT (s)", accessorKey: "completionStartTime", + size: 110, cell: (info: any) => { const row = info.row.original; const completionStartTime = info.getValue(); @@ -301,6 +309,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] { header: "Team Name", accessorKey: "metadata.user_api_key_team_alias", + size: 150, cell: (info: any) => ( {String(info.getValue() || "-")} @@ -310,6 +319,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] { header: "Key Hash", accessorKey: "metadata.user_api_key", + size: 160, cell: (info: any) => { const value = String(info.getValue() || "-"); const onKeyHashClick = info.row.original.onKeyHashClick; @@ -329,6 +339,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] { header: "Key Alias", accessorKey: "metadata.user_api_key_alias", + size: 150, cell: (info: any) => ( {String(info.getValue() || "-")} @@ -348,6 +359,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] ) : "Model", accessorKey: "model", + size: 200, cell: (info: any) => { const row = info.row.original; const provider = row.custom_llm_provider; @@ -385,6 +397,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] ) : "Tokens", accessorKey: "total_tokens", + size: 140, cell: (info: any) => { const row = info.row.original; return ( @@ -400,6 +413,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] { header: "Internal User", accessorKey: "user", + size: 150, cell: (info: any) => ( {String(info.getValue() || "-")} @@ -409,6 +423,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] { header: "End User", accessorKey: "end_user", + size: 140, cell: (info: any) => ( {String(info.getValue() || "-")} @@ -419,6 +434,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] { header: "Tags", accessorKey: "request_tags", + size: 150, cell: (info: any) => { const tags = info.getValue(); if (!tags || Object.keys(tags).length === 0) return "-"; diff --git a/ui/litellm-dashboard/src/components/view_logs/table.test.tsx b/ui/litellm-dashboard/src/components/view_logs/table.test.tsx new file mode 100644 index 00000000000..f88e9bd75c8 --- /dev/null +++ b/ui/litellm-dashboard/src/components/view_logs/table.test.tsx @@ -0,0 +1,44 @@ +import type { ColumnDef } from "@tanstack/react-table"; +import { render, screen } from "@testing-library/react"; +import { describe, expect, it } from "vitest"; +import { DataTable } from "./table"; + +type Row = { request_id: string; a: string; b: string }; + +const data: Row[] = [{ request_id: "r1", a: "alpha", b: "beta" }]; + +const sizedColumns: ColumnDef[] = [ + { header: "A", accessorKey: "a", size: 120 }, + { header: "B", accessorKey: "b", size: 80 }, +]; + +const unsizedColumns: ColumnDef[] = [ + { header: "A", accessorKey: "a" }, + { header: "B", accessorKey: "b" }, +]; + +describe("DataTable column sizing", () => { + it("widths the table and every cell from column sizes when columns declare them", () => { + render(); + + expect(screen.getByRole("table").style.width).toBe("200px"); + + const headers = screen.getAllByRole("columnheader"); + expect(headers.map((h) => h.style.width)).toEqual(["120px", "80px"]); + + const cells = screen.getAllByRole("cell"); + expect(cells.map((c) => c.style.width)).toEqual(["120px", "80px"]); + }); + + it("leaves cells unsized and keeps the fluid table when no column declares a size", () => { + render(); + + const table = screen.getByRole("table"); + expect(table.style.width).toBe(""); + expect(table.style.minWidth).toBe("400px"); + + for (const cell of [...screen.getAllByRole("columnheader"), ...screen.getAllByRole("cell")]) { + expect(cell.style.width).toBe(""); + } + }); +}); diff --git a/ui/litellm-dashboard/src/components/view_logs/table.tsx b/ui/litellm-dashboard/src/components/view_logs/table.tsx index 6aa349513d5..a47bf5a8e5c 100644 --- a/ui/litellm-dashboard/src/components/view_logs/table.tsx +++ b/ui/litellm-dashboard/src/components/view_logs/table.tsx @@ -41,6 +41,7 @@ export function DataTable({ enableSorting = false, }: DataTableProps) { const supportsExpansion = !!(renderSubComponent || renderChildRows) && !!getRowCanExpand; + const hasExplicitColumnSizes = columns.some((column) => column.size !== undefined); const [sorting, setSorting] = useState([]); const table = useReactTable({ @@ -63,9 +64,14 @@ export function DataTable({ ...(supportsExpansion && { getExpandedRowModel: getExpandedRowModel() }), }); + const tableClassName = hasExplicitColumnSizes + ? "[&_td]:py-0.5 [&_th]:py-1 [&_table]:table-fixed" + : "[&_td]:py-0.5 [&_th]:py-1 table-fixed w-full box-border"; + const tableStyle = hasExplicitColumnSizes ? { width: table.getCenterTotalSize() } : { minWidth: "400px" }; + return (
- +
{table.getHeaderGroups().map((headerGroup) => ( @@ -77,6 +83,7 @@ export function DataTable({ {header.isPlaceholder ? null : ( @@ -112,7 +119,11 @@ export function DataTable({ onClick={() => onRowClick?.(row.original)} > {row.getVisibleCells().map((cell) => ( - + {flexRender(cell.column.columnDef.cell, cell.getContext())} ))} From 014754be947e60cbefa1a3ecaae0a68a05a7443f Mon Sep 17 00:00:00 2001 From: Yuneng Jiang Date: Fri, 26 Jun 2026 18:34:07 -0700 Subject: [PATCH 04/79] fix(ui): let dashboard main pane shrink so wide tables scroll instead of overflowing The Request Logs page pushed the whole page past the viewport horizontally. The cause was the app shell flex layout:
is a flex item, and flex items default to min-width: auto, so they refuse to shrink below their content's intrinsic width. The logs table is intrinsically ~2300px across its 16 nowrap columns, so main grew to that width and dragged the page with it; the table's own overflow-x-auto wrapper never got the chance to scroll Add min-w-0 to main so it can shrink to the available width, at which point the existing overflow-x-auto wrapper engages and the table scrolls inside its card. This applies to every dashboard page, not just logs Also drop the dead max-w-screen class on the logs container (not a real Tailwind utility, so it was a no-op), and revert the earlier column-sizing attempt which targeted table-layout rather than the actual containment problem --- .../src/app/(dashboard)/layout.tsx | 2 +- .../src/components/view_logs/columns.tsx | 16 ------- .../src/components/view_logs/index.tsx | 2 +- .../src/components/view_logs/table.test.tsx | 44 ------------------- .../src/components/view_logs/table.tsx | 15 +------ 5 files changed, 4 insertions(+), 75 deletions(-) delete mode 100644 ui/litellm-dashboard/src/components/view_logs/table.test.tsx diff --git a/ui/litellm-dashboard/src/app/(dashboard)/layout.tsx b/ui/litellm-dashboard/src/app/(dashboard)/layout.tsx index a5e83436888..09951dc1923 100644 --- a/ui/litellm-dashboard/src/app/(dashboard)/layout.tsx +++ b/ui/litellm-dashboard/src/app/(dashboard)/layout.tsx @@ -126,7 +126,7 @@ function DashboardShell({ children }: { children: React.ReactNode }) {
-
{children}
+
{children}
)} diff --git a/ui/litellm-dashboard/src/components/view_logs/columns.tsx b/ui/litellm-dashboard/src/components/view_logs/columns.tsx index aeeb31f78f3..1265b8449de 100644 --- a/ui/litellm-dashboard/src/components/view_logs/columns.tsx +++ b/ui/litellm-dashboard/src/components/view_logs/columns.tsx @@ -119,13 +119,11 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] ) : "Time", accessorKey: "startTime", - size: 200, cell: (info: any) => , }, { header: "Type", id: "type", - size: 90, cell: (info: any) => { const row = info.row.original; const sessionCount = row.session_total_count || 1; @@ -170,7 +168,6 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] { header: "Status", accessorKey: "metadata.status", - size: 100, cell: (info: any) => { const status = info.getValue() || "Success"; const isSuccess = status.toLowerCase() !== "failure"; @@ -189,7 +186,6 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] { header: "Session ID", accessorKey: "session_id", - size: 160, cell: (info: any) => { const value = String(info.getValue() || ""); const onSessionClick = info.row.original.onSessionClick; @@ -211,7 +207,6 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] { header: "Request ID", accessorKey: "request_id", - size: 160, cell: (info: any) => ( {String(info.getValue() || "")} @@ -231,7 +226,6 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] ) : "Cost", accessorKey: "spend", - size: 110, cell: (info: any) => { const row = info.row.original; const mcpCount = row.mcp_tool_call_count || 0; @@ -264,7 +258,6 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] ) : "Duration (s)", accessorKey: "request_duration_ms", - size: 120, cell: (info: any) => { const ms = info.getValue(); if (ms == null) return -; @@ -289,7 +282,6 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] ) : "TTFT (s)", accessorKey: "completionStartTime", - size: 110, cell: (info: any) => { const row = info.row.original; const completionStartTime = info.getValue(); @@ -309,7 +301,6 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] { header: "Team Name", accessorKey: "metadata.user_api_key_team_alias", - size: 150, cell: (info: any) => ( {String(info.getValue() || "-")} @@ -319,7 +310,6 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] { header: "Key Hash", accessorKey: "metadata.user_api_key", - size: 160, cell: (info: any) => { const value = String(info.getValue() || "-"); const onKeyHashClick = info.row.original.onKeyHashClick; @@ -339,7 +329,6 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] { header: "Key Alias", accessorKey: "metadata.user_api_key_alias", - size: 150, cell: (info: any) => ( {String(info.getValue() || "-")} @@ -359,7 +348,6 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] ) : "Model", accessorKey: "model", - size: 200, cell: (info: any) => { const row = info.row.original; const provider = row.custom_llm_provider; @@ -397,7 +385,6 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] ) : "Tokens", accessorKey: "total_tokens", - size: 140, cell: (info: any) => { const row = info.row.original; return ( @@ -413,7 +400,6 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] { header: "Internal User", accessorKey: "user", - size: 150, cell: (info: any) => ( {String(info.getValue() || "-")} @@ -423,7 +409,6 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] { header: "End User", accessorKey: "end_user", - size: 140, cell: (info: any) => ( {String(info.getValue() || "-")} @@ -434,7 +419,6 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] { header: "Tags", accessorKey: "request_tags", - size: 150, cell: (info: any) => { const tags = info.getValue(); if (!tags || Object.keys(tags).length === 0) return "-"; diff --git a/ui/litellm-dashboard/src/components/view_logs/index.tsx b/ui/litellm-dashboard/src/components/view_logs/index.tsx index 6c5fd03f0a0..cfe1bd6025a 100644 --- a/ui/litellm-dashboard/src/components/view_logs/index.tsx +++ b/ui/litellm-dashboard/src/components/view_logs/index.tsx @@ -234,7 +234,7 @@ export default function SpendLogsTable({ accessToken, token, userRole, userID, p }; return ( -
+
setActiveTab(index === 0 ? "request logs" : "audit logs")}> Request Logs diff --git a/ui/litellm-dashboard/src/components/view_logs/table.test.tsx b/ui/litellm-dashboard/src/components/view_logs/table.test.tsx deleted file mode 100644 index f88e9bd75c8..00000000000 --- a/ui/litellm-dashboard/src/components/view_logs/table.test.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import type { ColumnDef } from "@tanstack/react-table"; -import { render, screen } from "@testing-library/react"; -import { describe, expect, it } from "vitest"; -import { DataTable } from "./table"; - -type Row = { request_id: string; a: string; b: string }; - -const data: Row[] = [{ request_id: "r1", a: "alpha", b: "beta" }]; - -const sizedColumns: ColumnDef[] = [ - { header: "A", accessorKey: "a", size: 120 }, - { header: "B", accessorKey: "b", size: 80 }, -]; - -const unsizedColumns: ColumnDef[] = [ - { header: "A", accessorKey: "a" }, - { header: "B", accessorKey: "b" }, -]; - -describe("DataTable column sizing", () => { - it("widths the table and every cell from column sizes when columns declare them", () => { - render(); - - expect(screen.getByRole("table").style.width).toBe("200px"); - - const headers = screen.getAllByRole("columnheader"); - expect(headers.map((h) => h.style.width)).toEqual(["120px", "80px"]); - - const cells = screen.getAllByRole("cell"); - expect(cells.map((c) => c.style.width)).toEqual(["120px", "80px"]); - }); - - it("leaves cells unsized and keeps the fluid table when no column declares a size", () => { - render(); - - const table = screen.getByRole("table"); - expect(table.style.width).toBe(""); - expect(table.style.minWidth).toBe("400px"); - - for (const cell of [...screen.getAllByRole("columnheader"), ...screen.getAllByRole("cell")]) { - expect(cell.style.width).toBe(""); - } - }); -}); diff --git a/ui/litellm-dashboard/src/components/view_logs/table.tsx b/ui/litellm-dashboard/src/components/view_logs/table.tsx index a47bf5a8e5c..6aa349513d5 100644 --- a/ui/litellm-dashboard/src/components/view_logs/table.tsx +++ b/ui/litellm-dashboard/src/components/view_logs/table.tsx @@ -41,7 +41,6 @@ export function DataTable({ enableSorting = false, }: DataTableProps) { const supportsExpansion = !!(renderSubComponent || renderChildRows) && !!getRowCanExpand; - const hasExplicitColumnSizes = columns.some((column) => column.size !== undefined); const [sorting, setSorting] = useState([]); const table = useReactTable({ @@ -64,14 +63,9 @@ export function DataTable({ ...(supportsExpansion && { getExpandedRowModel: getExpandedRowModel() }), }); - const tableClassName = hasExplicitColumnSizes - ? "[&_td]:py-0.5 [&_th]:py-1 [&_table]:table-fixed" - : "[&_td]:py-0.5 [&_th]:py-1 table-fixed w-full box-border"; - const tableStyle = hasExplicitColumnSizes ? { width: table.getCenterTotalSize() } : { minWidth: "400px" }; - return (
-
+
{table.getHeaderGroups().map((headerGroup) => ( @@ -83,7 +77,6 @@ export function DataTable({ {header.isPlaceholder ? null : ( @@ -119,11 +112,7 @@ export function DataTable({ onClick={() => onRowClick?.(row.original)} > {row.getVisibleCells().map((cell) => ( - + {flexRender(cell.column.columnDef.cell, cell.getContext())} ))} From 76be4461cad2dfe89fb2930d42eb99a65546d004 Mon Sep 17 00:00:00 2001 From: Yuneng Jiang Date: Fri, 26 Jun 2026 19:05:33 -0700 Subject: [PATCH 05/79] feat(ui): give Request Logs columns explicit widths and tighten the dense ones Now that the page-overflow bug is fixed by letting the main pane shrink, bring back per-column sizing purely to control widths. Columns declare explicit pixel sizes and the table derives its min-width from getCenterTotalSize(), so it stretches to fill a wide card but scrolls once the columns no longer fit. The shared DataTable applies this only when columns declare sizes, leaving the other consumers on their existing fluid layout Trim the columns that were eating horizontal space without earning it: Request ID and Key Hash drop ~30% (Key Hash now narrower than Key Alias, which is the more useful of the two), and Duration and TTFT shrink to fit their short numeric values --- .../src/components/view_logs/columns.tsx | 16 +++++++ .../src/components/view_logs/table.test.tsx | 46 +++++++++++++++++++ .../src/components/view_logs/table.tsx | 15 +++++- 3 files changed, 75 insertions(+), 2 deletions(-) create mode 100644 ui/litellm-dashboard/src/components/view_logs/table.test.tsx diff --git a/ui/litellm-dashboard/src/components/view_logs/columns.tsx b/ui/litellm-dashboard/src/components/view_logs/columns.tsx index 1265b8449de..310316d205e 100644 --- a/ui/litellm-dashboard/src/components/view_logs/columns.tsx +++ b/ui/litellm-dashboard/src/components/view_logs/columns.tsx @@ -119,11 +119,13 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] ) : "Time", accessorKey: "startTime", + size: 200, cell: (info: any) => , }, { header: "Type", id: "type", + size: 90, cell: (info: any) => { const row = info.row.original; const sessionCount = row.session_total_count || 1; @@ -168,6 +170,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] { header: "Status", accessorKey: "metadata.status", + size: 100, cell: (info: any) => { const status = info.getValue() || "Success"; const isSuccess = status.toLowerCase() !== "failure"; @@ -186,6 +189,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] { header: "Session ID", accessorKey: "session_id", + size: 160, cell: (info: any) => { const value = String(info.getValue() || ""); const onSessionClick = info.row.original.onSessionClick; @@ -207,6 +211,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] { header: "Request ID", accessorKey: "request_id", + size: 110, cell: (info: any) => ( {String(info.getValue() || "")} @@ -226,6 +231,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] ) : "Cost", accessorKey: "spend", + size: 110, cell: (info: any) => { const row = info.row.original; const mcpCount = row.mcp_tool_call_count || 0; @@ -258,6 +264,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] ) : "Duration (s)", accessorKey: "request_duration_ms", + size: 90, cell: (info: any) => { const ms = info.getValue(); if (ms == null) return -; @@ -282,6 +289,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] ) : "TTFT (s)", accessorKey: "completionStartTime", + size: 80, cell: (info: any) => { const row = info.row.original; const completionStartTime = info.getValue(); @@ -301,6 +309,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] { header: "Team Name", accessorKey: "metadata.user_api_key_team_alias", + size: 150, cell: (info: any) => ( {String(info.getValue() || "-")} @@ -310,6 +319,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] { header: "Key Hash", accessorKey: "metadata.user_api_key", + size: 110, cell: (info: any) => { const value = String(info.getValue() || "-"); const onKeyHashClick = info.row.original.onKeyHashClick; @@ -329,6 +339,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] { header: "Key Alias", accessorKey: "metadata.user_api_key_alias", + size: 150, cell: (info: any) => ( {String(info.getValue() || "-")} @@ -348,6 +359,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] ) : "Model", accessorKey: "model", + size: 200, cell: (info: any) => { const row = info.row.original; const provider = row.custom_llm_provider; @@ -385,6 +397,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] ) : "Tokens", accessorKey: "total_tokens", + size: 140, cell: (info: any) => { const row = info.row.original; return ( @@ -400,6 +413,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] { header: "Internal User", accessorKey: "user", + size: 150, cell: (info: any) => ( {String(info.getValue() || "-")} @@ -409,6 +423,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] { header: "End User", accessorKey: "end_user", + size: 140, cell: (info: any) => ( {String(info.getValue() || "-")} @@ -419,6 +434,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] { header: "Tags", accessorKey: "request_tags", + size: 150, cell: (info: any) => { const tags = info.getValue(); if (!tags || Object.keys(tags).length === 0) return "-"; diff --git a/ui/litellm-dashboard/src/components/view_logs/table.test.tsx b/ui/litellm-dashboard/src/components/view_logs/table.test.tsx new file mode 100644 index 00000000000..da9bcef1455 --- /dev/null +++ b/ui/litellm-dashboard/src/components/view_logs/table.test.tsx @@ -0,0 +1,46 @@ +import type { ColumnDef } from "@tanstack/react-table"; +import { render, screen } from "@testing-library/react"; +import { describe, expect, it } from "vitest"; +import { DataTable } from "./table"; + +type Row = { request_id: string; a: string; b: string }; + +const data: Row[] = [{ request_id: "r1", a: "alpha", b: "beta" }]; + +const sizedColumns: ColumnDef[] = [ + { header: "A", accessorKey: "a", size: 120 }, + { header: "B", accessorKey: "b", size: 80 }, +]; + +const unsizedColumns: ColumnDef[] = [ + { header: "A", accessorKey: "a" }, + { header: "B", accessorKey: "b" }, +]; + +describe("DataTable column sizing", () => { + it("min-widths the table to the column total and sizes every cell when columns declare sizes", () => { + render(); + + const table = screen.getByRole("table"); + expect(table.style.minWidth).toBe("200px"); + expect(table.style.width).toBe(""); + + const headers = screen.getAllByRole("columnheader"); + expect(headers.map((h) => h.style.width)).toEqual(["120px", "80px"]); + + const cells = screen.getAllByRole("cell"); + expect(cells.map((c) => c.style.width)).toEqual(["120px", "80px"]); + }); + + it("leaves cells unsized and keeps the fluid table when no column declares a size", () => { + render(); + + const table = screen.getByRole("table"); + expect(table.style.width).toBe(""); + expect(table.style.minWidth).toBe("400px"); + + for (const cell of [...screen.getAllByRole("columnheader"), ...screen.getAllByRole("cell")]) { + expect(cell.style.width).toBe(""); + } + }); +}); diff --git a/ui/litellm-dashboard/src/components/view_logs/table.tsx b/ui/litellm-dashboard/src/components/view_logs/table.tsx index 6aa349513d5..4510cc9a1f0 100644 --- a/ui/litellm-dashboard/src/components/view_logs/table.tsx +++ b/ui/litellm-dashboard/src/components/view_logs/table.tsx @@ -41,6 +41,7 @@ export function DataTable({ enableSorting = false, }: DataTableProps) { const supportsExpansion = !!(renderSubComponent || renderChildRows) && !!getRowCanExpand; + const hasExplicitColumnSizes = columns.some((column) => column.size !== undefined); const [sorting, setSorting] = useState([]); const table = useReactTable({ @@ -63,9 +64,14 @@ export function DataTable({ ...(supportsExpansion && { getExpandedRowModel: getExpandedRowModel() }), }); + const tableClassName = hasExplicitColumnSizes + ? "[&_td]:py-0.5 [&_th]:py-1 [&_table]:table-fixed" + : "[&_td]:py-0.5 [&_th]:py-1 table-fixed w-full box-border"; + const tableStyle = hasExplicitColumnSizes ? { minWidth: table.getCenterTotalSize() } : { minWidth: "400px" }; + return (
-
+
{table.getHeaderGroups().map((headerGroup) => ( @@ -77,6 +83,7 @@ export function DataTable({ {header.isPlaceholder ? null : ( @@ -112,7 +119,11 @@ export function DataTable({ onClick={() => onRowClick?.(row.original)} > {row.getVisibleCells().map((cell) => ( - + {flexRender(cell.column.columnDef.cell, cell.getContext())} ))} From 84d7a320201edc57c4ab6a293a08375909bbb3fd Mon Sep 17 00:00:00 2001 From: Yuneng Jiang Date: Mon, 29 Jun 2026 21:08:40 -0700 Subject: [PATCH 06/79] fix(ui): revert Duration and TTFT column widths to default The explicit 90px/80px sizes were too narrow for the Duration (s) and TTFT (s) headers once the sort arrows were factored in, cramping the header labels. Dropping the size lets these two columns fall back to the default width like before --- ui/litellm-dashboard/src/components/view_logs/columns.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/ui/litellm-dashboard/src/components/view_logs/columns.tsx b/ui/litellm-dashboard/src/components/view_logs/columns.tsx index 310316d205e..73eecf9c01e 100644 --- a/ui/litellm-dashboard/src/components/view_logs/columns.tsx +++ b/ui/litellm-dashboard/src/components/view_logs/columns.tsx @@ -264,7 +264,6 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] ) : "Duration (s)", accessorKey: "request_duration_ms", - size: 90, cell: (info: any) => { const ms = info.getValue(); if (ms == null) return -; @@ -289,7 +288,6 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] ) : "TTFT (s)", accessorKey: "completionStartTime", - size: 80, cell: (info: any) => { const row = info.row.original; const completionStartTime = info.getValue(); From 256b5aadfbf5168facfd1add1cfc956dce44773b Mon Sep 17 00:00:00 2001 From: Yuneng Jiang Date: Mon, 29 Jun 2026 21:16:59 -0700 Subject: [PATCH 07/79] fix(ui): revert Request ID width to default, tighten Session ID Drop the explicit size on Request ID so it falls back to the default width like the other reverted columns. Narrow Session ID from 160px to 120px since its truncated value needs less room --- ui/litellm-dashboard/src/components/view_logs/columns.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ui/litellm-dashboard/src/components/view_logs/columns.tsx b/ui/litellm-dashboard/src/components/view_logs/columns.tsx index 73eecf9c01e..8de67e6ae19 100644 --- a/ui/litellm-dashboard/src/components/view_logs/columns.tsx +++ b/ui/litellm-dashboard/src/components/view_logs/columns.tsx @@ -189,7 +189,7 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] { header: "Session ID", accessorKey: "session_id", - size: 160, + size: 120, cell: (info: any) => { const value = String(info.getValue() || ""); const onSessionClick = info.row.original.onSessionClick; @@ -211,7 +211,6 @@ export const createColumns = (sortProps?: LogsSortProps): ColumnDef[] { header: "Request ID", accessorKey: "request_id", - size: 110, cell: (info: any) => ( {String(info.getValue() || "")} From 70eb4e5d00c2beff458934e70c722ed8248b6d7e Mon Sep 17 00:00:00 2001 From: Yassin Kortam Date: Tue, 30 Jun 2026 12:34:17 +0300 Subject: [PATCH 08/79] feat(prometheus): add litellm_total_overhead_latency_metric (SDK overhead + guardrails) (#31593) litellm_overhead_latency_metric only covers the SDK wrapper window and excludes proxy guardrails. Add a histogram that sums SDK overhead plus pre/post-call guardrail durations (during-call excluded since it runs concurrently with the LLM call, alongside logging_only and MCP modes that never block the response), recorded next to the existing overhead metric with the same labels and buckets. No existing metric's value is changed. --- litellm/integrations/prometheus.py | 83 +++++- litellm/types/integrations/prometheus.py | 11 + ...est_prometheus_overhead_with_guardrails.py | 238 ++++++++++++++++++ 3 files changed, 331 insertions(+), 1 deletion(-) create mode 100644 tests/test_litellm/integrations/test_prometheus_overhead_with_guardrails.py diff --git a/litellm/integrations/prometheus.py b/litellm/integrations/prometheus.py index fcec551f25a..1f516e9dc93 100644 --- a/litellm/integrations/prometheus.py +++ b/litellm/integrations/prometheus.py @@ -49,12 +49,16 @@ from litellm.proxy._types import ( from litellm.repositories.organization_repository import OrganizationRepository from litellm.repositories.team_repository import TeamRepository from litellm.repositories.user_repository import UserRepository +from litellm.types.guardrails import GuardrailEventHooks from litellm.types.integrations.prometheus import * from litellm.types.integrations.prometheus import ( _sanitize_prometheus_label_name, _sanitize_prometheus_label_value, ) -from litellm.types.utils import StandardLoggingPayload +from litellm.types.utils import ( + StandardLoggingGuardrailInformation, + StandardLoggingPayload, +) if TYPE_CHECKING: from apscheduler.schedulers.asyncio import AsyncIOScheduler @@ -65,6 +69,8 @@ else: class PrometheusLogger(CustomLogger): # Class variables or attributes + _ADDITIVE_GUARDRAIL_MODES = frozenset((GuardrailEventHooks.pre_call.value, GuardrailEventHooks.post_call.value)) + @staticmethod def get_instance() -> Optional["PrometheusLogger"]: """Find the PrometheusLogger instance from litellm.callbacks, if registered.""" @@ -343,6 +349,14 @@ class PrometheusLogger(CustomLogger): buckets=self.latency_buckets, ) + self.litellm_overhead_with_guardrails_latency_metric = self._histogram_factory( + "litellm_overhead_with_guardrails_latency_metric", + "Total internal latency (seconds) added by LiteLLM, including " + "pre/post-call guardrails (excludes the LLM API call)", + labelnames=self.get_labels_for_metric("litellm_overhead_with_guardrails_latency_metric"), + buckets=self.latency_buckets, + ) + # Request queue time metric self.litellm_request_queue_time_metric = self._histogram_factory( "litellm_request_queue_time_seconds", @@ -1001,6 +1015,67 @@ class PrometheusLogger(CustomLogger): self._cached_metric_labels[metric_name] = filtered_labels return filtered_labels + @staticmethod + def _guardrail_is_additive(info: StandardLoggingGuardrailInformation) -> bool: + mode = info.get("guardrail_mode") + modes = mode if isinstance(mode, list) else [mode] + mode_values = frozenset( + m.value if isinstance(m, GuardrailEventHooks) else m for m in modes if isinstance(m, str) + ) + return bool(mode_values) and mode_values <= PrometheusLogger._ADDITIVE_GUARDRAIL_MODES + + @staticmethod + def _get_guardrail_overhead_seconds( + standard_logging_payload: StandardLoggingPayload, + ) -> float: + """Seconds of additive guardrail time (pre/post-call only) on the payload. + + during_call guardrails run concurrently with the LLM call, so their + wall-clock overlaps the provider call and is not additive overhead; + logging_only and MCP modes never block the user-facing response. A + guardrail counts only when every mode it carries is pre/post-call, so a + mixed list such as ["pre_call", "during_call"] is excluded. + + guardrail_information is typed as a list, but some guardrails assign a + single dict directly, so normalize that shape to a one-item list. + """ + guardrail_information = standard_logging_payload.get("guardrail_information") + entries: list[StandardLoggingGuardrailInformation] = ( + [cast("StandardLoggingGuardrailInformation", guardrail_information)] + if isinstance(guardrail_information, dict) + else guardrail_information or [] + ) + return sum( + (float(info.get("duration") or 0.0) for info in entries if PrometheusLogger._guardrail_is_additive(info)), + 0.0, + ) + + def _set_overhead_with_guardrails_metric( + self, + standard_logging_payload: StandardLoggingPayload, + enum_values: UserAPIKeyLabelValues, + label_context: Optional[PrometheusLabelFactoryContext] = None, + ) -> None: + """Record litellm_overhead_with_guardrails_latency_metric (seconds): SDK overhead + + pre/post-call guardrail time. Recorded outside the SDK-overhead gate so + guardrail-only overhead is still captured when litellm_overhead_time_ms + is 0 or absent. + """ + litellm_overhead_time_ms = standard_logging_payload["hidden_params"].get("litellm_overhead_time_ms") + guardrail_overhead_seconds = self._get_guardrail_overhead_seconds(standard_logging_payload) + if litellm_overhead_time_ms is None and guardrail_overhead_seconds <= 0: + return + labels = prometheus_label_factory( + supported_enum_labels=self.get_labels_for_metric( + metric_name="litellm_overhead_with_guardrails_latency_metric" + ), + enum_values=enum_values, + label_context=label_context, + ) + self.litellm_overhead_with_guardrails_latency_metric.labels(**labels).observe( + ((litellm_overhead_time_ms or 0.0) / 1000) + guardrail_overhead_seconds + ) + def _track_end_user_metric_series( self, metric: Any, @@ -2346,6 +2421,12 @@ class PrometheusLogger(CustomLogger): litellm_overhead_time_ms / 1000 ) # set as seconds + self._set_overhead_with_guardrails_metric( + standard_logging_payload=standard_logging_payload, + enum_values=enum_values, + label_context=label_context, + ) + if remaining_requests: """ "model_group", diff --git a/litellm/types/integrations/prometheus.py b/litellm/types/integrations/prometheus.py index 8f460b79955..fca3319254c 100644 --- a/litellm/types/integrations/prometheus.py +++ b/litellm/types/integrations/prometheus.py @@ -195,6 +195,7 @@ DEFINED_PROMETHEUS_METRICS = Literal[ "litellm_llm_api_time_to_first_token_metric", "litellm_request_total_latency_metric", "litellm_overhead_latency_metric", + "litellm_overhead_with_guardrails_latency_metric", "litellm_remaining_requests_metric", "litellm_remaining_tokens_metric", "litellm_proxy_total_requests_metric", @@ -379,6 +380,16 @@ class PrometheusMetricLabels: UserAPIKeyLabelNames.MODEL_ID.value, ] + litellm_overhead_with_guardrails_latency_metric = [ + UserAPIKeyLabelNames.MODEL_GROUP.value, + UserAPIKeyLabelNames.API_PROVIDER.value, + UserAPIKeyLabelNames.API_BASE.value, + UserAPIKeyLabelNames.v2_LITELLM_MODEL_NAME.value, + UserAPIKeyLabelNames.API_KEY_HASH.value, + UserAPIKeyLabelNames.API_KEY_ALIAS.value, + UserAPIKeyLabelNames.MODEL_ID.value, + ] + litellm_remaining_requests_metric = [ UserAPIKeyLabelNames.MODEL_GROUP.value, UserAPIKeyLabelNames.API_PROVIDER.value, diff --git a/tests/test_litellm/integrations/test_prometheus_overhead_with_guardrails.py b/tests/test_litellm/integrations/test_prometheus_overhead_with_guardrails.py new file mode 100644 index 00000000000..56c9702189e --- /dev/null +++ b/tests/test_litellm/integrations/test_prometheus_overhead_with_guardrails.py @@ -0,0 +1,238 @@ +""" +Unit tests for litellm_overhead_with_guardrails_latency_metric. + +The metric reports total internal latency LiteLLM adds around the provider +call = SDK overhead (litellm_overhead_time_ms) + pre/post-call guardrail +durations. During-call (moderation) guardrails run concurrently with the LLM +call and are excluded so they don't inflate the overhead. +""" + +from unittest.mock import MagicMock + +import pytest +from prometheus_client import REGISTRY + +from litellm.integrations.prometheus import PrometheusLogger +from litellm.types.guardrails import GuardrailEventHooks +from litellm.types.utils import StandardLoggingPayload + + +@pytest.fixture(autouse=True) +def cleanup_prometheus_registry(): + """Clean up prometheus registry before/after each test.""" + for collector in list(REGISTRY._collector_to_names.keys()): + REGISTRY.unregister(collector) + yield + for collector in list(REGISTRY._collector_to_names.keys()): + REGISTRY.unregister(collector) + + +def test_get_guardrail_overhead_seconds_sums_pre_post_excludes_during(): + """Helper sums pre/post durations, excludes during_call, tolerates missing values.""" + payload = StandardLoggingPayload( + guardrail_information=[ + {"guardrail_mode": GuardrailEventHooks.pre_call, "duration": 0.1}, + {"guardrail_mode": GuardrailEventHooks.during_call, "duration": 0.5}, + {"guardrail_mode": GuardrailEventHooks.post_call, "duration": 0.25}, + {"guardrail_mode": GuardrailEventHooks.post_call}, # no duration -> 0 + ], + ) + # 0.1 (pre) + 0.25 (post) = 0.35; during_call 0.5 excluded; missing duration -> 0 + assert abs(PrometheusLogger._get_guardrail_overhead_seconds(payload) - 0.35) < 1e-6 + + +def test_get_guardrail_overhead_seconds_no_guardrails_is_zero(): + """No guardrail_information at all -> 0.0.""" + assert ( + PrometheusLogger._get_guardrail_overhead_seconds( + StandardLoggingPayload(model="gpt-4o") + ) + == 0.0 + ) + + +def test_get_guardrail_overhead_seconds_accepts_plain_string_mode(): + """guardrail_mode may arrive as a plain string after serialization.""" + payload = StandardLoggingPayload( + guardrail_information=[ + {"guardrail_mode": "pre_call", "duration": 0.2}, + {"guardrail_mode": "during_call", "duration": 0.9}, + ], + ) + # only pre_call counts; during_call excluded + assert abs(PrometheusLogger._get_guardrail_overhead_seconds(payload) - 0.2) < 1e-6 + + +def test_get_guardrail_overhead_seconds_excludes_list_mode_with_during_call(): + """A list-typed guardrail_mode containing during_call must be excluded. + + guardrail_mode is typed Optional[Union[GuardrailEventHooks, + List[GuardrailEventHooks], GuardrailMode]]; a list mixing in during_call is + not additive (concurrent) overhead and must not be counted. + """ + payload = StandardLoggingPayload( + guardrail_information=[ + { + "guardrail_mode": [ + GuardrailEventHooks.pre_call, + GuardrailEventHooks.during_call, + ], + "duration": 0.3, + }, + {"guardrail_mode": GuardrailEventHooks.post_call, "duration": 0.05}, + ], + ) + # the list entry mixes in during_call -> excluded; only the post_call counts + assert abs(PrometheusLogger._get_guardrail_overhead_seconds(payload) - 0.05) < 1e-6 + + +def test_get_guardrail_overhead_seconds_counts_pure_pre_post_list_mode(): + """A list-typed mode containing only additive (pre/post) phases is counted.""" + payload = StandardLoggingPayload( + guardrail_information=[ + {"guardrail_mode": [GuardrailEventHooks.pre_call], "duration": 0.1}, + {"guardrail_mode": ["post_call"], "duration": 0.2}, + ], + ) + assert abs(PrometheusLogger._get_guardrail_overhead_seconds(payload) - 0.3) < 1e-6 + + +def test_get_guardrail_overhead_seconds_excludes_logging_only_and_mcp(): + """logging_only and MCP-specific modes do not block the response -> excluded.""" + payload = StandardLoggingPayload( + guardrail_information=[ + {"guardrail_mode": GuardrailEventHooks.logging_only, "duration": 0.4}, + {"guardrail_mode": GuardrailEventHooks.pre_mcp_call, "duration": 0.3}, + {"guardrail_mode": GuardrailEventHooks.during_mcp_call, "duration": 0.2}, + {"guardrail_mode": GuardrailEventHooks.post_call, "duration": 0.05}, + ], + ) + # only the post_call guardrail is additive, user-visible overhead + assert abs(PrometheusLogger._get_guardrail_overhead_seconds(payload) - 0.05) < 1e-6 + + +def test_get_guardrail_overhead_seconds_ignores_dict_mode_without_error(): + """guardrail_mode may be a GuardrailMode TypedDict (an unhashable dict at + runtime, from the enterprise Mode-hook path). It must not raise TypeError and + must not be counted (the phase can't be resolved to a blocking pre/post).""" + payload = StandardLoggingPayload( + guardrail_information=[ + # GuardrailMode TypedDict -> plain dict at runtime + {"guardrail_mode": {"tags": {"default": ["pre_call"]}}, "duration": 0.3}, + {"guardrail_mode": GuardrailEventHooks.post_call, "duration": 0.05}, + ], + ) + # dict-typed mode is ignored (no TypeError); only the post_call entry counts + assert abs(PrometheusLogger._get_guardrail_overhead_seconds(payload) - 0.05) < 1e-6 + + +def test_get_guardrail_overhead_seconds_ignores_dict_inside_list_mode(): + """A list-typed mode containing a dict must not raise and the dict is ignored.""" + payload = StandardLoggingPayload( + guardrail_information=[ + {"guardrail_mode": [GuardrailEventHooks.pre_call, {"k": "v"}], "duration": 0.1}, + ], + ) + # the dict is ignored; remaining mode is pre_call -> counted + assert abs(PrometheusLogger._get_guardrail_overhead_seconds(payload) - 0.1) < 1e-6 + + +def test_get_guardrail_overhead_seconds_handles_single_dict_payload(): + """guardrail_information may be a single dict (e.g. xecguard) rather than a + list. Iterating it would yield string keys and crash the success-metrics + block, so a lone dict must be evaluated as one entry, not raise.""" + payload = StandardLoggingPayload( + guardrail_information={ + "guardrail_mode": "logging_only", + "duration": 0.7, + "guardrail_name": "xecguard", + }, + ) + # the single dict is logging_only -> excluded, and must not raise + assert PrometheusLogger._get_guardrail_overhead_seconds(payload) == 0.0 + + +def test_get_guardrail_overhead_seconds_counts_single_pre_call_dict(): + """A single pre/post-call dict (not wrapped in a list) is still counted.""" + payload = StandardLoggingPayload( + guardrail_information={"guardrail_mode": "pre_call", "duration": 0.3}, + ) + assert abs(PrometheusLogger._get_guardrail_overhead_seconds(payload) - 0.3) < 1e-6 + + +def _patch_label_factory(monkeypatch): + monkeypatch.setattr( + "litellm.integrations.prometheus.prometheus_label_factory", + lambda **kwargs: {}, + ) + + +def test_overhead_with_guardrails_recorded_when_only_guardrails_no_sdk_overhead(monkeypatch): + """Guardrail-only overhead is recorded even when SDK overhead is absent.""" + _patch_label_factory(monkeypatch) + logger = PrometheusLogger() + mock_metric = MagicMock() + logger.litellm_overhead_with_guardrails_latency_metric = mock_metric + + payload = StandardLoggingPayload( + hidden_params={}, # no litellm_overhead_time_ms + guardrail_information=[ + {"guardrail_mode": GuardrailEventHooks.post_call, "duration": 0.2} + ], + ) + logger._set_overhead_with_guardrails_metric( + payload, enum_values=MagicMock(), label_context=MagicMock() + ) + + mock_metric.labels.return_value.observe.assert_called_once() + observed = mock_metric.labels.return_value.observe.call_args[0][0] + assert abs(observed - 0.2) < 1e-6 + + +def test_overhead_with_guardrails_recorded_when_sdk_overhead_is_zero(monkeypatch): + """SDK overhead of exactly 0 (walrus-falsy) must not suppress the metric.""" + _patch_label_factory(monkeypatch) + logger = PrometheusLogger() + mock_metric = MagicMock() + logger.litellm_overhead_with_guardrails_latency_metric = mock_metric + + payload = StandardLoggingPayload( + hidden_params={"litellm_overhead_time_ms": 0.0}, + guardrail_information=[ + {"guardrail_mode": GuardrailEventHooks.pre_call, "duration": 0.1} + ], + ) + logger._set_overhead_with_guardrails_metric( + payload, enum_values=MagicMock(), label_context=MagicMock() + ) + + observed = mock_metric.labels.return_value.observe.call_args[0][0] + assert abs(observed - 0.1) < 1e-6 + + +def test_overhead_with_guardrails_skipped_when_no_overhead_and_no_guardrails(monkeypatch): + """Nothing to record -> the metric is not touched.""" + _patch_label_factory(monkeypatch) + logger = PrometheusLogger() + mock_metric = MagicMock() + logger.litellm_overhead_with_guardrails_latency_metric = mock_metric + + payload = StandardLoggingPayload(hidden_params={}) + logger._set_overhead_with_guardrails_metric( + payload, enum_values=MagicMock(), label_context=MagicMock() + ) + + mock_metric.labels.assert_not_called() + + +def test_overhead_with_guardrails_metric_is_registered(): + """The overhead-with-guardrails histogram is defined and registered on logger init.""" + logger = PrometheusLogger() + assert logger.litellm_overhead_with_guardrails_latency_metric is not None + + registered = [ + name + for name in REGISTRY._names_to_collectors + if name.startswith("litellm_overhead_with_guardrails_latency_metric") + ] + assert registered, "litellm_overhead_with_guardrails_latency_metric not registered" From 0965a4d1f4350e6991aa00ce77ef8eddc655d5fe Mon Sep 17 00:00:00 2001 From: Mateo Wang <277851410+mateo-berri@users.noreply.github.com> Date: Tue, 30 Jun 2026 09:37:12 -0700 Subject: [PATCH 09/79] chore: shift CI lint left with an opt-in `make pre-commit` and CLAUDE.md rule (#31544) * chore: shift CI lint left with a pre-commit hook and CLAUDE.md rule Add an opt-in pre-commit hook (.githooks/pre-commit, active after make install-hooks) that runs the CI-equivalent checks against staged files: make lint for Python, prettier plus eslint for the dashboard, and a gen:api drift check for the proxy OpenAPI types. Document the same expectation in CLAUDE.md so reds surface locally instead of in CI. * fix: make `make lint` isomorphic to the CI lint job `make lint` diverged from test-linting.yml in ways that produced both false reds and false greens: its format-check ran over the whole repo (CI scopes it to changed files vs the base), its ruff-strict budget ran in absolute mode (CI runs it as a delta vs base), and it omitted the type-discipline gate entirely. Recompose `lint` to replay CI's exact sequence: diff-scoped ruff format check, whole-tree ruff check, the strict / type-discipline / basedpyright budgets as a delta resolved the same way CI resolves it (merge-base with origin/litellm_internal_staging), then circular-import and import-safety. Factor the repeated base fetch into one shared prerequisite so the chain hits the network once. Align the pre-commit hook's eslint invocation with the CI frontend-lint job (`--pass-on-unpruned-suppressions`) and fix the CLAUDE.md guidance to point at the diff-scoped frontend commands instead of the whole-folder npm scripts, which are broader than CI. * fix(githooks): make pre-commit 1:1 with CI frontend-lint, lint, and type-gen The shift-left pre-commit hook diverged from the CI jobs it claims to mirror, so a clean commit did not actually mean a green CI lint. The dashboard block only ran prettier and eslint over js/jsx/ts/tsx/mjs/cjs, but CI's frontend-lint runs prettier over a wider set (also json, css, scss, md, mdx, yml, yaml, html) and additionally gates the whole-folder eslint lint budgets via scripts/check-lint-budgets.mjs. The hook now mirrors that split and runs the budget check, so a dashboard commit that passes locally passes the job. The API-types block ran npm run gen:api without LITELLM_PYTHON, so it shelled out to the system python3 which has no litellm installed and always failed with a false 'could not regenerate API types' red. It now passes LITELLM_PYTHON="uv run --no-sync python" the way check-ui-api-types.yml does. make lint format-checks the files in origin/base...HEAD, which at pre-commit time predates the staged change, so a brand-new commit's formatting went unchecked. The Python block now also runs ruff format --check over the staged litellm files directly to cover that case, and its trigger is scoped to staged litellm/ files (the only tree CI's lint job inspects) so a tests-only or scripts-only commit skips the slow make lint instead of wasting time on a run that could not catch anything. CLAUDE.md's shift-left rule was cut off mid-sentence and understated the frontend checks; it now describes all three gates accurately and points agents at make install-hooks to run them automatically before each commit. Co-authored-by: Mateo Wang * fix(githooks): scope the API-types check to all of check-ui-api-types.yml's triggers spec_files was filtered from the staged Python files, so the gen:api drift check only fired for .py changes under litellm/proxy or litellm/types. CI's check-ui-api-types.yml triggers on any file under those directories (Prisma schema, configs) plus the generator script and the dashboard package files, so a non-Python proxy/types change could pass the hook and still fail CI. Match the workflow's full trigger set instead. * fix(pre-commit): run prisma generate before gen:api to mirror CI * refactor(githooks): run shift-left lint via on-demand make pre-commit, not an auto-firing hook The pre-commit hook ran make lint plus the dashboard eslint budgets, which are minutes of work (basedpyright over litellm/, a whole-folder eslint . pass at ~40s). Wiring that into core.hooksPath via make install-hooks meant every human commit, not just an agent's, paid that cost, which is real friction for interactive committers. Move the staged-file checks out of .githooks/ into scripts/pre_commit_lint.sh and expose them as make pre-commit, and keep .githooks/ to only the fast Conventional Commits / Branches hooks so make install-hooks no longer makes commits slow. Agents run make pre-commit right before each commit (CLAUDE.md instructs this), so the slow gates fire only for the commits an agent is making and never auto-fire for a human typing git commit. The script stays hook-compatible for anyone who still wants it to fire automatically via a symlink. Preferred this over sniffing an agent env var to auto-fire only for agents: that is fragile (misses agents when the var is unset, fires on humans when it leaks into their shell, and silently no-ops a hook a human deliberately installed), whereas an on-demand command achieves the same humans-never, agents-per-commit outcome deterministically. Co-authored-by: Mateo Wang * fix(pre-commit): run make lint last so it can't prune the proxy deps gen:api needs make lint's install-dev prerequisite runs uv sync --frozen, which prunes the proxy extras (prisma, websockets, ...) from the venv. With the Python block running first, the subsequent API-types block then failed: gen:api imports litellm.proxy.proxy_server, which needs those deps, so every litellm/proxy change (the main trigger for the API-types check) hit a false 'could not regenerate API types' red. Run the dashboard and API-types blocks before the Python block so gen:api sees an intact env; CI is unaffected because there the lint and check-ui-api-types jobs run in separate environments. Co-authored-by: Mateo Wang * fix: make CLAUDE.md more concise * fix(makefile): give make lint the CI lint env and stop it pruning the venv make lint diverged from test-linting.yml's lint job in two ways: it never generated the Prisma client (so basedpyright resolved the DB wrappers as Unknown, drifting from CI's counts), and its bare uv sync --frozen pruned the proxy extras (prisma, websockets, ...) out of the venv on every run, which broke the gen:api step that imports litellm.proxy.proxy_server and left a dev unable to run the proxy until re-syncing. Add a lint-install target that mirrors the job's environment (the proxy-dev group plus prisma generate) and runs before the checks, and make both it and install-dev use uv sync --inexact so they top up the venv instead of tearing packages out. CI is unaffected since it installs its own env per job. Because make lint no longer prunes, the pre-commit reorder that ran it last (to dodge the prune) is no longer needed, so restore the original block order. Co-authored-by: Mateo Wang * fix(makefile): drop lint-install so make lint matches CI's slimmer env test-linting.yml's lint job installs deps with a bare uv sync --frozen (default dev group only, no proxy-dev, no prisma generate), but the lint-install target chained into make lint pulled in --group proxy-dev and ran prisma generate. Because the basedpyright budget step compares head and base counts against fixed thresholds, the extra symbols and Prisma client locally resolved can shift error counts away from CI's, producing false greens or false reds on the type-check gate. Remove the lint-install target and its slot in lint. The remaining sub-targets already chain install-dev, which now uses uv sync --inexact --frozen, so the venv still isn't pruned but the installed set stays aligned with what CI sees. * ci(linting): install proxy-dev and generate prisma in lint job, matching make lint make lint now installs the proxy-dev group and generates the Prisma client so basedpyright resolves the DB wrappers; the lint job here still installed only the base env, so a local pre-commit could pass while the required CI lint failed (or vice versa). Bring this job in line, which is the same environment litellm_internal_staging's lint job already uses. Co-authored-by: Mateo Wang * fix(makefile): keep make lint on the proxy-dev + prisma env to match CI A concurrent change dropped lint-install to match what looked like CI's slim env, but test-linting.yml's lint job (and the merge ref this PR's CI actually runs) installs --group proxy-dev and generates the Prisma client. With make lint slim and CI fat, basedpyright resolves fewer symbols locally than CI, so a prisma-typed error can stay Unknown locally (green) while CI catches it (red). Restore lint-install so make lint installs the same env CI does; the previous commit also brought this PR's test-linting.yml in line with that env, so the two now match. Co-authored-by: Mateo Wang --------- Co-authored-by: Cursor Agent Co-authored-by: Mateo Wang --- CLAUDE.md | 4 +- Makefile | 62 ++++++++++++++++--- scripts/install_git_hooks.sh | 3 + scripts/pre_commit_lint.sh | 112 +++++++++++++++++++++++++++++++++++ 4 files changed, 171 insertions(+), 10 deletions(-) create mode 100755 scripts/pre_commit_lint.sh diff --git a/CLAUDE.md b/CLAUDE.md index eb32c2cd6da..cea38b8527b 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -34,7 +34,7 @@ If you ever make public-facing PR descriptions, comments, issues, commit message Don't hesitate to use values in .env to get needed API keys and other secrets, as long as you never add them to conversation history, commit them, or include them in GitHub issues / PRs -Run tests, format your code, and lint your code before each commit +Run tests before you commit. Also, run `make pre-commit` right before each commit, which generates types (as needed) and formats/lints your code. Any errors found must be fixed When you fix violations gated by `ruff-strict-budget.json` or `basedpyright-code-budget.json`, run `make lint-budget-update` and commit the lowered baselines so the ceilings ratchet down instead of leaving stale headroom @@ -42,7 +42,7 @@ If you're trying to create a new function that relies on untyped stuff, instead If you get an LIT001 or LIT002 fail, refactor the code to follow functional programming best practices rather than introducing mutable data structures. For example, build values in one shot with comprehensions or generators wrapped in `tuple()` / `frozenset()` instead of seeding an empty `list`/`dict`/`set` and mutating it over time. Ideally `# mutable-ok` is never used; reach for it only as a genuine last resort when an immutable rewrite is truly impossible, and always pair it with a real reason -Ask to commit and push your work when you're done (or if you're confident that your code is good and works, just do it) +Commit and push your work when you're done without asking When you must use real LLM models to, for example, write e2e tests, write a QA runbook, etc., make sure to use the latest models (doesn't have to be smartest, can also be a modern small, fast one. No strong preference for smart vs fast here, just use something modern) as of the year and month of the current date. Do a web search as necessary to figure that out diff --git a/Makefile b/Makefile index 7701f54e15c..fb927148c80 100644 --- a/Makefile +++ b/Makefile @@ -8,7 +8,8 @@ lint-basedpyright lint-basedpyright-budget-update \ lint-ruff-budget lint-ruff-budget-update lint-budget-update lint-gate \ install-dev install-proxy-dev install-test-deps install-hooks \ - install-helm-unittest check-circular-imports check-import-safety + install-helm-unittest check-circular-imports check-import-safety pre-commit \ + lint-install lint-fetch-base # Default target help: @@ -20,6 +21,7 @@ help: @echo " make install-test-deps - Install the full local test environment" @echo " make install-helm-unittest - Install helm unittest plugin" @echo " make install-hooks - Install git hooks (Conventional Commits + Branches)" + @echo " make pre-commit - Run CI-equivalent lint on staged files (run before committing)" @echo " make format - Apply ruff format code formatting" @echo " make format-check - Check ruff format code formatting (matches CI)" @echo " make lint - Run all linting (Ruff, basedpyright, format check, circular imports, import safety)" @@ -56,8 +58,11 @@ info: @echo "UV: $(UV)" # Installation targets +# --inexact: sync the locked deps without pruning anything already installed, so running +# a lint/format target doesn't tear the proxy extras (prisma, websockets, ...) out from +# under a dev's venv (CI installs its own env per job, so it is unaffected by this). install-dev: - $(UV) sync --frozen + $(UV) sync --inexact --frozen install-proxy-dev: $(UV) sync --frozen --group proxy-dev --extra proxy @@ -90,6 +95,31 @@ format: install-dev format-check: install-dev cd litellm && $(UV_RUN) ruff format --check --exclude '/enterprise/' . && cd .. +# Single fetch of the PR base so the delta-based gates below share one network round +# trip instead of each re-fetching when chained from `lint`. +lint-fetch-base: + git fetch origin litellm_internal_staging + +# Mirror test-linting.yml's lint job environment: the proxy-dev group plus a generated +# Prisma client, so basedpyright resolves the same modules CI does (without the generated +# client the DB wrappers typed against it degrade to Unknown, drifting the budget from +# CI's). --inexact tops up the venv instead of pruning the proxy extras gen:api and the +# running proxy need. +lint-install: + $(UV) sync --inexact --frozen --group proxy-dev + $(UV_RUN) prisma generate --schema litellm/proxy/schema.prisma + +# Diff-scoped format check, identical to test-linting.yml's "Check ruff format" step: +# only the litellm Python files changed vs the base are checked, so a pre-existing +# format issue elsewhere doesn't block an unrelated commit. +lint-format-check-changed: install-dev lint-fetch-base + @files=$$(git diff --name-only origin/litellm_internal_staging...HEAD -- 'litellm/**/*.py' | grep -v '^litellm/enterprise/' || true); \ + if [ -z "$$files" ]; then \ + echo "No changed litellm Python files to format-check."; \ + else \ + echo "$$files" | xargs $(UV_RUN) ruff format --check --exclude '/enterprise/'; \ + fi + # Linting targets lint-ruff: install-dev cd litellm && $(UV_RUN) ruff check . && cd .. @@ -126,10 +156,14 @@ lint-ruff-FULL-dev: install-dev if [ -n "$$files" ]; then echo "$$files" | xargs $(UV_RUN) ruff check; \ else echo "No changed .py files to check."; fi -lint-basedpyright: install-dev - git fetch origin litellm_internal_staging +lint-basedpyright: install-dev lint-fetch-base ($(UV_RUN) basedpyright --outputjson || true) | $(UV_RUN) python scripts/type_check_gate.py --base origin/litellm_internal_staging +# Type-discipline budget (mutable collections / casts / type guards / kwargs / +# unexplained suppressions), the test-linting.yml step `make lint` used to omit. +lint-type-discipline: install-dev lint-fetch-base + $(UV_RUN) python scripts/type_discipline_gate.py --base origin/litellm_internal_staging + lint-basedpyright-budget-update: install-dev ($(UV_RUN) basedpyright --outputjson || true) | $(UV_RUN) python scripts/type_check_gate.py --update @@ -140,8 +174,7 @@ lint-ruff-budget: install-dev # Strict gate, invoked the same way CI does in test-linting.yml so a local pass # means the CI check will pass too. -lint-gate: install-dev - git fetch origin litellm_internal_staging +lint-gate: install-dev lint-fetch-base $(UV_RUN) python scripts/ruff_strict_gate.py --base origin/litellm_internal_staging lint-ruff-budget-update: install-dev @@ -156,12 +189,25 @@ check-circular-imports: install-dev check-import-safety: install-dev @$(UV_RUN) python -c "from litellm import *; print('[from litellm import *] OK! no issues!');" || (echo '🚨 import failed, this means you introduced unprotected imports! 🚨'; exit 1) -# Combined linting (matches test-linting.yml workflow) -lint: format-check lint-ruff lint-basedpyright check-circular-imports check-import-safety lint-ruff-budget +# Combined linting, isomorphic to test-linting.yml's lint job so a local pass means a +# green CI lint: it installs the same env (proxy-dev + generated Prisma client) and then +# runs the diff-scoped ruff format check, whole-tree ruff check, the strict-rule / +# type-discipline / basedpyright budgets as a delta vs the base, then the circular-import +# and import-safety checks. Steps that compare against the base resolve it the same way CI +# does (merge-base with origin/litellm_internal_staging). lint-install is first so the +# Prisma client exists before basedpyright runs. +lint: lint-install lint-format-check-changed lint-ruff lint-gate lint-type-discipline lint-basedpyright check-circular-imports check-import-safety # Faster linting for local development (only checks changed code) lint-dev: lint-format-changed check-circular-imports check-import-safety +# Run the gating CI checks against your staged files right before committing. Mirrors +# test-linting.yml (Python), test-litellm-ui-build.yml's frontend-lint (dashboard), and +# check-ui-api-types.yml (API-type drift), skipping any whose files you didn't stage. +# Not auto-installed as a git hook so it never slows an unrelated human commit. +pre-commit: + ./scripts/pre_commit_lint.sh + # Testing targets test: install-test-deps $(UV_RUN) pytest tests/ diff --git a/scripts/install_git_hooks.sh b/scripts/install_git_hooks.sh index 1e4e3c6de19..7ea8c3ff2e9 100755 --- a/scripts/install_git_hooks.sh +++ b/scripts/install_git_hooks.sh @@ -34,5 +34,8 @@ cat < `make lint` (test-linting.yml's lint job) +# - dashboard staged -> prettier + eslint + lint budgets (test-litellm-ui-build.yml's frontend-lint) +# - proxy/types staged -> regenerate dashboard API types and fail on drift (check-ui-api-types.yml) +# +# Each block is skipped when no matching files are staged, so unrelated commits stay +# fast. This is intentionally not auto-installed as a git hook (see scripts/install_git_hooks.sh): +# the dashboard and basedpyright passes can take minutes, so it's run on demand rather +# than firing on every human commit. It is hook-compatible if you want that anyway: +# `ln -s ../../scripts/pre_commit_lint.sh .git/hooks/pre-commit`. + +set -eu + +repo_root=$(git rev-parse --show-toplevel) +cd "$repo_root" + +staged=$(git diff --cached --name-only --diff-filter=ACMR) +staged_match() { printf '%s\n' "$staged" | grep -E "$1" || true; } + +# CI's lint job (test-linting.yml) only inspects litellm/, so a tests-only or +# scripts-only commit can't turn it red; scope the trigger there to skip the slow +# make lint when it couldn't catch anything. +litellm_py_files=$(staged_match '^litellm/.*\.py$') +# ruff format (and CI's format step) skip enterprise; the rest of make lint covers it. +fmt_files=$(printf '%s\n' "$litellm_py_files" | grep -v '^litellm/enterprise/' || true) +# check-ui-api-types.yml triggers on any file under litellm/proxy or litellm/types +# (Prisma schema and configs included, not just Python) plus the generator and its +# lockfiles, so match that whole trigger set rather than a Python subset. +spec_files=$(staged_match '^(litellm/(proxy|types)/.*|ui/litellm-dashboard/(scripts/gen-api-types\.mjs|package\.json|package-lock\.json|src/lib/http/schema\.d\.ts))$') +# CI's frontend-lint runs prettier over a wider extension set than eslint; keep that +# split so this flags exactly what the job would. +ui_prettier_files=$(staged_match '^ui/litellm-dashboard/.*\.(js|jsx|ts|tsx|mjs|cjs|json|css|scss|md|mdx|yml|yaml|html)$') +ui_eslint_files=$(staged_match '^ui/litellm-dashboard/.*\.(js|jsx|ts|tsx|mjs|cjs)$') + +lint_dashboard() { + ( + rc=0 + prettier_rel=() + eslint_rel=() + while IFS= read -r f; do + [ -n "$f" ] && prettier_rel+=("${f#ui/litellm-dashboard/}") + done <&2; status=1; } + # `make lint` format-checks files in origin/base...HEAD, which at pre-commit time + # predates the staged change, so format-check the staged litellm files directly to + # cover a brand-new commit before it lands. + if [ -n "$fmt_files" ]; then + echo "pre-commit: ruff format --check (staged litellm files)" + printf '%s\n' "$fmt_files" | xargs uv run --no-sync ruff format --check --exclude '/enterprise/' \ + || { echo "✗ Unformatted staged files. Fix with: make format, then re-stage." >&2; status=1; } + fi +fi + +if [ -n "$ui_prettier_files" ] || [ -n "$ui_eslint_files" ]; then + echo "pre-commit: linting dashboard (prettier + eslint + lint budgets)" + lint_dashboard || { echo "✗ Dashboard lint failed. See above; format with: (cd ui/litellm-dashboard && npm run format)." >&2; status=1; } +fi + +if [ -n "$spec_files" ]; then + echo "pre-commit: checking dashboard API types are in sync (npm run gen:api)" + # gen-api-types.mjs imports litellm.proxy.proxy_server, which needs the proxy deps + # and an up-to-date Prisma client; check-ui-api-types.yml installs those and runs + # prisma generate before gen:api, so mirror that here or a stale client can mask + # drift that CI will still flag. + if ! uv run --no-sync prisma generate --schema litellm/proxy/schema.prisma; then + echo "✗ Could not regenerate Prisma client (prisma generate failed)." >&2 + status=1 + elif ( cd ui/litellm-dashboard && LITELLM_PYTHON="uv run --no-sync python" npm run gen:api ); then + if ! git diff --quiet -- ui/litellm-dashboard/src/lib/http/schema.d.ts; then + echo "✗ Dashboard API types are stale; regenerated src/lib/http/schema.d.ts. Stage it and re-run make pre-commit." >&2 + status=1 + fi + else + echo "✗ Could not regenerate API types (npm run gen:api failed)." >&2 + status=1 + fi +fi + +exit $status From 3dce3daff644863178a7d59b53630d0519a6417b Mon Sep 17 00:00:00 2001 From: ryan-crabbe-berri Date: Tue, 30 Jun 2026 09:58:01 -0700 Subject: [PATCH 10/79] feat(proxy): type Customer Management response_model for OpenAPI coverage (#31043) * feat(proxy): type Customer Management response_model for OpenAPI coverage Add response_model to the five remaining untyped /customer operations (block, unblock, new, update, delete) so the generated OpenAPI schema documents a concrete response body. new/update reuse the canonical LiteLLM_EndUserTable (matching info/list); block, unblock, and delete get small dedicated models in litellm/types/proxy/management_endpoints/customer_endpoints.py. Together with the already-typed info/list/daily-activity routes this brings the Customer Management group to full response_model coverage. Regression tests assert each public /customer/* route declares the expected response_model and that /customer/new surfaces a typed schema in app.openapi(), so dropping a response_model fails CI. * fix(proxy): keep budget_id in typed customer responses Address review feedback on the Customer Management response_model typing. Greptile flagged that response_model=LiteLLM_EndUserTable on /customer/new and /customer/update silently drops fields the raw Prisma model_dump() echoed. Checking the schema, budget_id is the only such scalar column that was missing from the Pydantic model (created_at/updated_at/tpm_limit do not exist on litellm_endusertable), so add budget_id to LiteLLM_EndUserTable. This restores budget_id on new/update and also fixes the pre-existing gap where /customer/info and /customer/list (already typed) dropped it, which the UI Customer type expects. A regression test pins budget_id surviving the response_model filter on /customer/update. Also document UnblockUsersResponse.blocked_users via a Field description: it holds the users that remain blocked after the call. The key name predates this PR and is kept to avoid a backwards-incompatible rename on a beta route. * fix(proxy): keep nested budget fields in customer responses response_model=LiteLLM_EndUserTable nests the budget as the narrow write allowlist LiteLLM_BudgetTable, which silently drops the server-managed fields the customer endpoints used to return (budget_reset_at, created_at). Introduce CustomerResponse, a thin response model that nests LiteLLM_BudgetTableFull (the repo's budget response model), and apply it on /customer/new, /customer/update, /customer/info and /customer/list. list also builds CustomerResponse so its budget isn't narrowed at construction time. created_by/updated_at/updated_by remain omitted, matching how budgets are returned elsewhere. The shared LiteLLM_EndUserTable is left untouched: it's constructed in many places that pass narrow budget instances, and pydantic v2 won't coerce a budget instance into a wider nested model. Typing only at the response boundary (where the handler hands FastAPI a dict) sidesteps that. A regression test pins budget_reset_at + created_at through the filter and asserts the internal audit fields stay out. * test(proxy): add golden-master characterization tests for customer responses Lock the exact JSON body each customer-object endpoint (info/list/new/update) and delete return today, so the upcoming type-safety refactor of the handlers is only allowed to land if it reproduces these byte for byte. Pins null-field inclusion, the nested budget shape (server fields kept, audit fields dropped), and object_permission reverse-relation stripping. Green against current code. * refactor(proxy): make the customer response flow type-safe Replace the untyped dict + bolt-on response_model pattern on the customer object endpoints with explicit typed construction. A single mapper, _to_customer_response, validates a DB row into CustomerResponse at one Any -> typed seam; new/update/info/list now return it (or a list of it) and carry real -> CustomerResponse / -> List[CustomerResponse] return annotations, and delete returns DeleteCustomersResponse. basedpyright now verifies the handlers' return shapes instead of a runtime filter doing it silently. This also deletes the four copy-pasted object_permission reverse-relation cleanup loops: pydantic's extra=ignore drops those undeclared fields during validation, so the loops were dead code (proven by the golden-master tests, which stay byte-for-byte green). basedpyright errors on the file drop from 140 to 116, all from removed dict plumbing. CustomerResponse stays a thin subclass of LiteLLM_EndUserTable so it inherits the existing validators/config unchanged (behavior preservation); only the nested budget type is widened. * refactor(proxy): annotate customer response mapper param as BaseModel Address review nit: the mapper's untyped `record` added an ANN001 violation. The incoming rows are pydantic v2 models, so type the param as BaseModel rather than object (object has no model_dump, which would just move the problem to basedpyright). This clears the ANN001 and also drops three basedpyright unknown-type violations the untyped param was adding. * style(test): ruff format customer endpoint tests * test(proxy): give customer budget test update mocks a valid model_dump The type-safe response refactor validates the update result via _to_customer_response (CustomerResponse.model_validate(record.model_dump())). These budget tests mocked the end-user update to return a bare MagicMock, so model_dump() yielded a MagicMock that fails validation. Give each update mock a minimal valid dict; the tests assert on the prisma calls, not the body. * chore(ui): regenerate API types from proxy OpenAPI spec * fix(ui): make generated API types stable across Python versions Python 3.13 strips a docstring's common leading indentation at compile time while 3.12 keeps it, so app.openapi() emits differently-indented description strings depending on the interpreter. The dashboard type generator ran locally on 3.13 and in CI on 3.12, so schema.d.ts drifted and the "Verify schema.d.ts matches the proxy OpenAPI spec" check failed Normalize every description through inspect.cleandoc in the spec dump so the output is identical regardless of interpreter, then regenerate --- litellm/models/end_user.py | 1 + .../customer_endpoints.py | 105 ++--- .../customer_endpoints.py | 30 ++ .../test_customer_budget.py | 13 +- .../test_customer_endpoints.py | 380 +++++++++++++++--- .../scripts/gen-api-types.mjs | 15 +- ui/litellm-dashboard/src/lib/http/schema.d.ts | 101 +++-- 7 files changed, 495 insertions(+), 150 deletions(-) create mode 100644 litellm/types/proxy/management_endpoints/customer_endpoints.py diff --git a/litellm/models/end_user.py b/litellm/models/end_user.py index 15fd03ec2ca..9bf895b9447 100644 --- a/litellm/models/end_user.py +++ b/litellm/models/end_user.py @@ -21,6 +21,7 @@ class LiteLLM_EndUserTable(LiteLLMPydanticObjectBase): spend: float = 0.0 allowed_model_region: Optional[Literal["eu", "us"]] = None default_model: Optional[str] = None + budget_id: Optional[str] = None litellm_budget_table: Optional[LiteLLM_BudgetTable] = None object_permission_id: Optional[str] = None object_permission: Optional[LiteLLM_ObjectPermissionTable] = None diff --git a/litellm/proxy/management_endpoints/customer_endpoints.py b/litellm/proxy/management_endpoints/customer_endpoints.py index 7c8a9b88191..84f67bdc3bc 100644 --- a/litellm/proxy/management_endpoints/customer_endpoints.py +++ b/litellm/proxy/management_endpoints/customer_endpoints.py @@ -15,6 +15,7 @@ from typing import List, Optional import fastapi from fastapi import APIRouter, Depends, HTTPException, Request +from pydantic import BaseModel import litellm from litellm._logging import verbose_proxy_logger @@ -32,10 +33,26 @@ from litellm.repositories.table_repositories import EndUserRepository from litellm.types.proxy.management_endpoints.common_daily_activity import ( SpendAnalyticsPaginatedResponse, ) +from litellm.types.proxy.management_endpoints.customer_endpoints import ( + BlockUsersResponse, + CustomerResponse, + DeleteCustomersResponse, + UnblockUsersResponse, +) router = APIRouter() +def _to_customer_response(record: BaseModel) -> CustomerResponse: + """Validate a raw end-user DB row into the typed customer response. + + object_permission reverse relations and the budget's audit fields are + dropped here by the response model's field set, so callers need no manual + cleanup. + """ + return CustomerResponse.model_validate(record.model_dump()) + + @router.post( "/end_user/block", tags=["Customer Management"], @@ -46,6 +63,7 @@ router = APIRouter() "/customer/block", tags=["Customer Management"], dependencies=[Depends(user_api_key_auth)], + response_model=BlockUsersResponse, ) async def block_user(data: BlockUsers): """ @@ -100,6 +118,7 @@ async def block_user(data: BlockUsers): "/customer/unblock", tags=["Customer Management"], dependencies=[Depends(user_api_key_auth)], + response_model=UnblockUsersResponse, ) async def unblock_user(data: BlockUsers): """ @@ -213,11 +232,12 @@ async def _handle_customer_object_permission_update( "/customer/new", tags=["Customer Management"], dependencies=[Depends(user_api_key_auth)], + response_model=CustomerResponse, ) async def new_end_user( data: NewCustomerRequest, user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), -): +) -> CustomerResponse: """ Allow creating a new Customer @@ -370,20 +390,7 @@ async def new_end_user( include={"litellm_budget_table": True, "object_permission": True}, ) - # Convert to dict and clean up recursive fields - response_dict = end_user_record.model_dump() - if response_dict.get("object_permission"): - # Remove reverse relations from object_permission - for field in [ - "teams", - "verification_tokens", - "organizations", - "users", - "end_users", - ]: - response_dict["object_permission"].pop(field, None) - - return response_dict + return _to_customer_response(end_user_record) except Exception as e: verbose_proxy_logger.exception( "litellm.proxy.management_endpoints.customer_endpoints.new_end_user(): Exception occured - {}".format( @@ -404,7 +411,7 @@ async def new_end_user( "/customer/info", tags=["Customer Management"], dependencies=[Depends(user_api_key_auth)], - response_model=LiteLLM_EndUserTable, + response_model=CustomerResponse, ) @router.get( "/end_user/info", @@ -414,7 +421,7 @@ async def new_end_user( ) async def end_user_info( end_user_id: str = fastapi.Query(description="End User ID in the request parameters"), -): +) -> CustomerResponse: """ Get information about an end-user. An `end_user` is a customer (external user) of the proxy. @@ -449,20 +456,7 @@ async def end_user_info( param="end_user_id", ) - # Convert to dict and clean up recursive fields - response_dict = user_info.model_dump(exclude_none=True) - if response_dict.get("object_permission"): - # Remove reverse relations from object_permission - for field in [ - "teams", - "verification_tokens", - "organizations", - "users", - "end_users", - ]: - response_dict["object_permission"].pop(field, None) - - return response_dict + return _to_customer_response(user_info) except Exception as e: verbose_proxy_logger.exception( @@ -477,6 +471,7 @@ async def end_user_info( "/customer/update", tags=["Customer Management"], dependencies=[Depends(user_api_key_auth)], + response_model=CustomerResponse, ) @router.post( "/end_user/update", @@ -487,7 +482,7 @@ async def end_user_info( async def update_end_user( data: UpdateCustomerRequest, user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), -): +) -> CustomerResponse: """ Example curl @@ -641,20 +636,7 @@ async def update_end_user( raise ValueError(f"Failed updating customer data. User ID does not exist passed user_id={data.user_id}") verbose_proxy_logger.debug(f"received response from updating prisma client. response={response}") - # Convert to dict and clean up recursive fields - response_dict = response.model_dump() - if response_dict.get("object_permission"): - # Remove reverse relations from object_permission - for field in [ - "teams", - "verification_tokens", - "organizations", - "users", - "end_users", - ]: - response_dict["object_permission"].pop(field, None) - - return response_dict + return _to_customer_response(response) else: raise ValueError(f"user_id is required, passed user_id = {data.user_id}") @@ -671,6 +653,7 @@ async def update_end_user( "/customer/delete", tags=["Customer Management"], dependencies=[Depends(user_api_key_auth)], + response_model=DeleteCustomersResponse, ) @router.post( "/end_user/delete", @@ -681,7 +664,7 @@ async def update_end_user( async def delete_end_user( data: DeleteCustomerRequest, user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), -): +) -> DeleteCustomersResponse: """ Delete multiple end-users. @@ -728,10 +711,10 @@ async def delete_end_user( where={"user_id": {"in": data.user_ids}} ) verbose_proxy_logger.debug(f"received response from updating prisma client. response={response}") - return { - "deleted_customers": response, - "message": "Successfully deleted customers with ids: " + str(data.user_ids), - } + return DeleteCustomersResponse( + deleted_customers=response, + message="Successfully deleted customers with ids: " + str(data.user_ids), + ) else: raise ValueError(f"user_id is required, passed user_id = {data.user_ids}") @@ -747,7 +730,7 @@ async def delete_end_user( "/customer/list", tags=["Customer Management"], dependencies=[Depends(user_api_key_auth)], - response_model=List[LiteLLM_EndUserTable], + response_model=List[CustomerResponse], ) @router.get( "/end_user/list", @@ -758,7 +741,7 @@ async def delete_end_user( async def list_end_user( http_request: Request, user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), -): +) -> List[CustomerResponse]: """ [Admin-only] List all available customers @@ -791,21 +774,7 @@ async def list_end_user( include={"litellm_budget_table": True, "object_permission": True} ) - returned_response: List[LiteLLM_EndUserTable] = [] - for item in response: - item_dict = item.model_dump() - # Remove reverse relations from object_permission - if item_dict.get("object_permission"): - for field in [ - "teams", - "verification_tokens", - "organizations", - "users", - "end_users", - ]: - item_dict["object_permission"].pop(field, None) - returned_response.append(LiteLLM_EndUserTable(**item_dict)) - return returned_response + return [_to_customer_response(item) for item in response] except Exception as e: verbose_proxy_logger.exception( diff --git a/litellm/types/proxy/management_endpoints/customer_endpoints.py b/litellm/types/proxy/management_endpoints/customer_endpoints.py new file mode 100644 index 00000000000..e7653360d63 --- /dev/null +++ b/litellm/types/proxy/management_endpoints/customer_endpoints.py @@ -0,0 +1,30 @@ +from typing import List, Optional + +from pydantic import BaseModel, Field + +from litellm.models.budget import LiteLLM_BudgetTableFull +from litellm.models.end_user import LiteLLM_EndUserTable + + +class CustomerResponse(LiteLLM_EndUserTable): + """Customer object returned by the /customer read+write endpoints. + + Nests the full budget response model so server-managed budget fields + (budget_reset_at, created_at) survive response_model filtering, rather than + the narrow write-allowlist shape LiteLLM_EndUserTable carries for internal use. + """ + + litellm_budget_table: Optional[LiteLLM_BudgetTableFull] = None # pyright: ignore + + +class BlockUsersResponse(BaseModel): + blocked_users: List[LiteLLM_EndUserTable] + + +class UnblockUsersResponse(BaseModel): + blocked_users: List[str] = Field(description="User IDs that remain blocked after this unblock call") + + +class DeleteCustomersResponse(BaseModel): + deleted_customers: int + message: str diff --git a/tests/test_litellm/proxy/management_endpoints/test_customer_budget.py b/tests/test_litellm/proxy/management_endpoints/test_customer_budget.py index 41f43c75f7d..0beca0c15e8 100644 --- a/tests/test_litellm/proxy/management_endpoints/test_customer_budget.py +++ b/tests/test_litellm/proxy/management_endpoints/test_customer_budget.py @@ -134,8 +134,10 @@ async def test_update_customer_creates_budget_with_proper_relations( ) # Mock end user update + mock_updated_user = MagicMock() + mock_updated_user.model_dump.return_value = {"user_id": "test-user", "blocked": False} mock_prisma_client.db.litellm_endusertable.update = AsyncMock( - return_value=MagicMock() + return_value=mock_updated_user ) # Create update request with budget creation fields (not just budget_id) @@ -190,8 +192,10 @@ async def test_update_customer_creates_budget_with_required_fields( ) # Mock end user update + mock_updated_user = MagicMock() + mock_updated_user.model_dump.return_value = {"user_id": "test-user", "blocked": False} mock_prisma_client.db.litellm_endusertable.update = AsyncMock( - return_value=MagicMock() + return_value=mock_updated_user ) # Create update request with budget creation fields @@ -253,8 +257,10 @@ async def test_update_customer_budget_creation_with_fallback_admin( ) # Mock end user update + mock_updated_user = MagicMock() + mock_updated_user.model_dump.return_value = {"user_id": "test-user", "blocked": False} mock_prisma_client.db.litellm_endusertable.update = AsyncMock( - return_value=MagicMock() + return_value=mock_updated_user ) # Create update request with budget creation fields @@ -309,6 +315,7 @@ async def test_update_customer_with_budget_id_and_creation_fields( # Mock end user update mock_updated_user = MagicMock() + mock_updated_user.model_dump.return_value = {"user_id": "test-user", "blocked": False} mock_prisma_client.db.litellm_endusertable.update = AsyncMock( return_value=mock_updated_user ) diff --git a/tests/test_litellm/proxy/management_endpoints/test_customer_endpoints.py b/tests/test_litellm/proxy/management_endpoints/test_customer_endpoints.py index 6c5ccd3562f..d4089b23e81 100644 --- a/tests/test_litellm/proxy/management_endpoints/test_customer_endpoints.py +++ b/tests/test_litellm/proxy/management_endpoints/test_customer_endpoints.py @@ -1,18 +1,28 @@ +from typing import List from unittest.mock import AsyncMock, MagicMock, patch import pytest from fastapi import FastAPI, HTTPException, Request, status from fastapi.responses import JSONResponse +from fastapi.routing import APIRoute from fastapi.testclient import TestClient from litellm.proxy._types import ( - LiteLLM_BudgetTable, LiteLLM_EndUserTable, LitellmUserRoles, ProxyException, ) from litellm.proxy.auth.user_api_key_auth import UserAPIKeyAuth, user_api_key_auth from litellm.proxy.management_endpoints.customer_endpoints import router +from litellm.types.proxy.management_endpoints.common_daily_activity import ( + SpendAnalyticsPaginatedResponse, +) +from litellm.types.proxy.management_endpoints.customer_endpoints import ( + BlockUsersResponse, + CustomerResponse, + DeleteCustomersResponse, + UnblockUsersResponse, +) app = FastAPI() @@ -22,9 +32,7 @@ async def openai_exception_handler(request: Request, exc: ProxyException): headers = exc.headers error_dict = exc.to_dict() return JSONResponse( - status_code=( - int(exc.code) if exc.code else status.HTTP_500_INTERNAL_SERVER_ERROR - ), + status_code=(int(exc.code) if exc.code else status.HTTP_500_INTERNAL_SERVER_ERROR), content={"error": error_dict}, headers=headers, ) @@ -54,30 +62,20 @@ def mock_user_api_key_auth(): def test_update_customer_success(mock_prisma_client, mock_user_api_key_auth): # Mock the database responses - mock_end_user = LiteLLM_EndUserTable( - user_id="test-user-1", alias="Test User", blocked=False - ) - updated_mock_end_user = LiteLLM_EndUserTable( - user_id="test-user-1", alias="Updated Test User", blocked=False - ) + mock_end_user = LiteLLM_EndUserTable(user_id="test-user-1", alias="Test User", blocked=False) + updated_mock_end_user = LiteLLM_EndUserTable(user_id="test-user-1", alias="Updated Test User", blocked=False) # Mock the find_first response - mock_prisma_client.db.litellm_endusertable.find_first = AsyncMock( - return_value=mock_end_user - ) + mock_prisma_client.db.litellm_endusertable.find_first = AsyncMock(return_value=mock_end_user) # Mock the update response - mock_prisma_client.db.litellm_endusertable.update = AsyncMock( - return_value=updated_mock_end_user - ) + mock_prisma_client.db.litellm_endusertable.update = AsyncMock(return_value=updated_mock_end_user) # Test data test_data = {"user_id": "test-user-1", "alias": "Updated Test User"} # Make the request - response = client.post( - "/customer/update", json=test_data, headers={"Authorization": "Bearer test-key"} - ) + response = client.post("/customer/update", json=test_data, headers={"Authorization": "Bearer test-key"}) # Assert response assert response.status_code == 200 @@ -106,10 +104,7 @@ def test_update_customer_not_found(mock_prisma_client, mock_user_api_key_auth): assert response.status_code == 404 response_json = response.json() assert "error" in response_json - assert ( - response_json["error"]["message"] - == "End User Id=non-existent-user does not exist in db" - ) + assert response_json["error"]["message"] == "End User Id=non-existent-user does not exist in db" assert response_json["error"]["type"] == "not_found" assert response_json["error"]["param"] == "user_id" assert response_json["error"]["code"] == "404" @@ -132,10 +127,7 @@ def test_info_customer_not_found(mock_prisma_client, mock_user_api_key_auth): assert response.status_code == 404 response_json = response.json() assert "error" in response_json - assert ( - response_json["error"]["message"] - == "End User Id=non-existent-user does not exist in db" - ) + assert response_json["error"]["message"] == "End User Id=non-existent-user does not exist in db" assert response_json["error"]["type"] == "not_found" assert response_json["error"]["param"] == "end_user_id" assert response_json["error"]["code"] == "404" @@ -220,11 +212,6 @@ def test_error_schema_consistency(mock_prisma_client, mock_user_api_key_auth): assert error["code"] == "404" # Test /customer/new - duplicate user error - from unittest.mock import MagicMock - - mock_end_user = LiteLLM_EndUserTable( - user_id="existing-user", alias="Existing User", blocked=False - ) mock_prisma_client.db.litellm_endusertable.create = AsyncMock( side_effect=Exception("Unique constraint failed on the fields: (`user_id`)") ) @@ -238,9 +225,7 @@ def test_error_schema_consistency(mock_prisma_client, mock_user_api_key_auth): assert error["code"] == "400" -def test_customer_endpoints_error_schema_consistency( - mock_prisma_client, mock_user_api_key_auth -): +def test_customer_endpoints_error_schema_consistency(mock_prisma_client, mock_user_api_key_auth): """ Test the exact scenarios from the curl examples provided. @@ -307,9 +292,7 @@ def test_customer_endpoints_error_schema_consistency( assert "Customer already exists" in error2["message"] # Verify both errors have the same schema structure - assert set(error1.keys()) == set( - error2.keys() - ), "Both errors should have the same top-level keys" + assert set(error1.keys()) == set(error2.keys()), "Both errors should have the same top-level keys" # Both should have string values for all fields for key in ["message", "type", "code"]: @@ -317,6 +300,153 @@ def test_customer_endpoints_error_schema_consistency( assert isinstance(error2[key], str), f"error2[{key}] should be a string" +EXPECTED_RESPONSE_MODELS = { + "/customer/block": BlockUsersResponse, + "/customer/unblock": UnblockUsersResponse, + "/customer/new": CustomerResponse, + "/customer/update": CustomerResponse, + "/customer/delete": DeleteCustomersResponse, + "/customer/info": CustomerResponse, + "/customer/list": List[CustomerResponse], + "/customer/daily/activity": SpendAnalyticsPaginatedResponse, +} + + +@pytest.mark.parametrize("path, expected_model", EXPECTED_RESPONSE_MODELS.items()) +def test_customer_routes_declare_response_model(path, expected_model): + """ + Every public /customer/* operation must declare a typed response_model so + the generated OpenAPI schema documents the response body. Regression for the + OpenAPI response-type coverage goal: drop a response_model and this fails. + """ + route = next(r for r in router.routes if isinstance(r, APIRoute) and r.path == path) + assert route.response_model == expected_model + + +def test_customer_new_documented_in_openapi_schema(): + """ + The response_model must surface in the OpenAPI schema as a concrete ref, not + an empty/default response. This is what the coverage metric measures. + """ + schema = app.openapi()["paths"]["/customer/new"]["post"] + json_schema = schema["responses"]["200"]["content"]["application/json"]["schema"] + assert json_schema["$ref"].endswith("/CustomerResponse") + + +def test_update_customer_response_preserves_budget_id(mock_prisma_client, mock_user_api_key_auth): + """ + Regression for the response_model field-stripping concern: budget_id is a real + column on the end-user table that /customer/update echoes. response_model= + LiteLLM_EndUserTable must NOT drop it, so budget_id stays in LiteLLM_EndUserTable. + """ + existing = LiteLLM_EndUserTable(user_id="cust-1", blocked=False) + updated = LiteLLM_EndUserTable(user_id="cust-1", blocked=False, budget_id="budget-123") + mock_prisma_client.db.litellm_endusertable.find_first = AsyncMock(return_value=existing) + mock_prisma_client.db.litellm_endusertable.update = AsyncMock(return_value=updated) + + response = client.post( + "/customer/update", + json={"user_id": "cust-1", "budget_id": "budget-123"}, + headers={"Authorization": "Bearer test-key"}, + ) + + assert response.status_code == 200 + assert response.json()["budget_id"] == "budget-123" + + +def test_update_customer_response_keeps_nested_budget_server_fields(mock_prisma_client, mock_user_api_key_auth): + """ + Faithfulness regression: /customer/update embeds the full budget row. The + response_model must keep the server-managed budget fields the endpoint used + to return (budget_reset_at, created_at) instead of the narrow write-allowlist + shape. The intentionally-internal audit fields (created_by/updated_by) stay out. + """ + existing = LiteLLM_EndUserTable(user_id="cust-1", blocked=False) + raw_row = MagicMock() + raw_row.model_dump.return_value = { + "user_id": "cust-1", + "blocked": False, + "alias": "renamed", + "spend": 0.0, + "allowed_model_region": None, + "default_model": None, + "budget_id": "b-1", + "object_permission_id": None, + "object_permission": None, + "litellm_budget_table": { + "budget_id": "b-1", + "max_budget": 10.0, + "budget_duration": "30d", + "budget_reset_at": "2024-02-01T00:00:00", + "created_at": "2024-01-01T00:00:00", + "created_by": "admin", + "updated_at": "2024-01-02T00:00:00", + "updated_by": "admin", + }, + } + mock_prisma_client.db.litellm_endusertable.find_first = AsyncMock(return_value=existing) + mock_prisma_client.db.litellm_endusertable.update = AsyncMock(return_value=raw_row) + + response = client.post( + "/customer/update", + json={"user_id": "cust-1", "alias": "renamed"}, + headers={"Authorization": "Bearer test-key"}, + ) + + assert response.status_code == 200 + budget = response.json()["litellm_budget_table"] + assert budget["budget_reset_at"] == "2024-02-01T00:00:00" + assert budget["created_at"] == "2024-01-01T00:00:00" + assert "created_by" not in budget + assert "updated_by" not in budget + + +def test_block_customer_success_serializes_through_response_model(mock_prisma_client, mock_user_api_key_auth): + """ + /customer/block returns {"blocked_users": []}. With + response_model=BlockUsersResponse, a shape mismatch would raise a 500 + ResponseValidationError, so a clean 200 proves the model matches runtime output. + """ + blocked_row = LiteLLM_EndUserTable(user_id="blocked-1", blocked=True) + mock_prisma_client.db.litellm_endusertable.upsert = AsyncMock(return_value=blocked_row) + + response = client.post( + "/customer/block", + json={"user_ids": ["blocked-1"]}, + headers={"Authorization": "Bearer test-key"}, + ) + + assert response.status_code == 200 + body = response.json() + assert body["blocked_users"][0]["user_id"] == "blocked-1" + assert body["blocked_users"][0]["blocked"] is True + + +def test_delete_customer_success_serializes_through_response_model(mock_prisma_client, mock_user_api_key_auth): + """ + /customer/delete returns {"deleted_customers": , "message": }. + response_model=DeleteCustomersResponse enforces that exact shape. + """ + existing = [ + LiteLLM_EndUserTable(user_id="u1", blocked=False), + LiteLLM_EndUserTable(user_id="u2", blocked=False), + ] + mock_prisma_client.db.litellm_endusertable.find_many = AsyncMock(return_value=existing) + mock_prisma_client.db.litellm_endusertable.delete_many = AsyncMock(return_value=2) + + response = client.post( + "/customer/delete", + json={"user_ids": ["u1", "u2"]}, + headers={"Authorization": "Bearer test-key"}, + ) + + assert response.status_code == 200 + assert response.json() == { + "deleted_customers": 2, + "message": "Successfully deleted customers with ids: ['u1', 'u2']", + } + + @pytest.mark.asyncio async def test_get_customer_daily_activity_admin_param_passing(monkeypatch): from litellm.proxy._types import LitellmUserRoles, UserAPIKeyAuth @@ -331,9 +461,7 @@ async def test_get_customer_daily_activity_admin_param_passing(monkeypatch): mocked_response = MagicMock(name="SpendAnalyticsPaginatedResponse") get_daily_activity_mock = AsyncMock(return_value=mocked_response) - monkeypatch.setattr( - customer_endpoints, "get_daily_activity", get_daily_activity_mock - ) + monkeypatch.setattr(customer_endpoints, "get_daily_activity", get_daily_activity_mock) auth = UserAPIKeyAuth(user_role=LitellmUserRoles.PROXY_ADMIN, user_id="admin1") result = await get_customer_daily_activity( @@ -380,16 +508,12 @@ async def test_get_customer_daily_activity_with_end_user_aliases(monkeypatch): mock_end_user2.user_id = "end-user-2" mock_end_user2.alias = "Customer Two" - mock_prisma_client.db.litellm_endusertable.find_many = AsyncMock( - return_value=[mock_end_user1, mock_end_user2] - ) + mock_prisma_client.db.litellm_endusertable.find_many = AsyncMock(return_value=[mock_end_user1, mock_end_user2]) monkeypatch.setattr("litellm.proxy.proxy_server.prisma_client", mock_prisma_client) mocked_response = MagicMock(name="SpendAnalyticsPaginatedResponse") get_daily_activity_mock = AsyncMock(return_value=mocked_response) - monkeypatch.setattr( - customer_endpoints, "get_daily_activity", get_daily_activity_mock - ) + monkeypatch.setattr(customer_endpoints, "get_daily_activity", get_daily_activity_mock) auth = UserAPIKeyAuth(user_role=LitellmUserRoles.PROXY_ADMIN, user_id="admin1") await get_customer_daily_activity( @@ -436,9 +560,7 @@ async def test_get_customer_daily_activity_non_admin_is_rejected(monkeypatch): monkeypatch.setattr("litellm.proxy.proxy_server.prisma_client", mock_prisma_client) get_daily_activity_mock = AsyncMock() - monkeypatch.setattr( - customer_endpoints, "get_daily_activity", get_daily_activity_mock - ) + monkeypatch.setattr(customer_endpoints, "get_daily_activity", get_daily_activity_mock) non_admin_key = UserAPIKeyAuth( user_id="regular-user-abc", @@ -482,9 +604,7 @@ async def test_get_customer_daily_activity_service_account_key_is_rejected(monke monkeypatch.setattr("litellm.proxy.proxy_server.prisma_client", mock_prisma_client) get_daily_activity_mock = AsyncMock() - monkeypatch.setattr( - customer_endpoints, "get_daily_activity", get_daily_activity_mock - ) + monkeypatch.setattr(customer_endpoints, "get_daily_activity", get_daily_activity_mock) service_account_key = UserAPIKeyAuth( user_id=None, @@ -507,3 +627,157 @@ async def test_get_customer_daily_activity_service_account_key_is_rejected(monke assert exc_info.value.status_code == 401 assert "Admin-only endpoint" in str(exc_info.value.detail) get_daily_activity_mock.assert_not_called() + + +# --------------------------------------------------------------------------- +# Characterization (golden-master) tests. +# +# These lock the EXACT JSON body every customer-object endpoint returns today, +# so a type-safety refactor of the handlers is only allowed to land if it +# reproduces these byte for byte. The input below is what a Prisma row's +# .model_dump() yields (full nested budget incl. audit fields + object_permission +# incl. reverse relations); the expected output is what the live endpoint emits. +# --------------------------------------------------------------------------- + +_FULL_DB_ROW = { + "user_id": "c1", + "blocked": False, + "alias": "Acme", + "spend": 1.5, + "allowed_model_region": None, + "default_model": None, + "budget_id": "b1", + "object_permission_id": "p1", + "litellm_budget_table": { + "budget_id": "b1", + "max_budget": 10.0, + "soft_budget": None, + "max_parallel_requests": None, + "tpm_limit": None, + "rpm_limit": None, + "model_max_budget": None, + "budget_duration": "30d", + "allowed_models": [], + "budget_reset_at": "2024-02-01T00:00:00", + "created_at": "2024-01-01T00:00:00", + "created_by": "admin", + "updated_at": "2024-01-02T00:00:00", + "updated_by": "admin", + }, + "object_permission": { + "object_permission_id": "p1", + "mcp_servers": ["s1"], + "mcp_access_groups": [], + "mcp_tool_permissions": None, + "vector_stores": [], + "agents": [], + "agent_access_groups": [], + "models": [], + "mcp_toolsets": None, + "blocked_tools": [], + "search_tools": [], + "teams": [{"team_id": "t1"}], + "users": [{"user_id": "x"}], + "end_users": [], + "organizations": [], + "verification_tokens": [], + }, +} + +_EXPECTED_CUSTOMER = { + "user_id": "c1", + "blocked": False, + "alias": "Acme", + "spend": 1.5, + "allowed_model_region": None, + "default_model": None, + "budget_id": "b1", + "litellm_budget_table": { + "budget_id": "b1", + "soft_budget": None, + "max_budget": 10.0, + "max_parallel_requests": None, + "tpm_limit": None, + "rpm_limit": None, + "model_max_budget": None, + "budget_duration": "30d", + "allowed_models": [], + "budget_reset_at": "2024-02-01T00:00:00", + "created_at": "2024-01-01T00:00:00", + }, + "object_permission_id": "p1", + "object_permission": { + "object_permission_id": "p1", + "mcp_servers": ["s1"], + "mcp_access_groups": [], + "mcp_tool_permissions": None, + "vector_stores": [], + "agents": [], + "agent_access_groups": [], + "models": [], + "mcp_toolsets": None, + "blocked_tools": [], + "search_tools": [], + }, +} + + +def _row(dump: dict) -> MagicMock: + row = MagicMock() + row.model_dump.return_value = dump + return row + + +def test_char_info_body(mock_prisma_client, mock_user_api_key_auth): + mock_prisma_client.db.litellm_endusertable.find_first = AsyncMock(return_value=_row(_FULL_DB_ROW)) + response = client.get("/customer/info?end_user_id=c1", headers={"Authorization": "Bearer k"}) + assert response.status_code == 200 + assert response.json() == _EXPECTED_CUSTOMER + + +def test_char_list_body(mock_prisma_client, mock_user_api_key_auth): + mock_prisma_client.db.litellm_endusertable.find_many = AsyncMock(return_value=[_row(_FULL_DB_ROW)]) + response = client.get("/customer/list", headers={"Authorization": "Bearer k"}) + assert response.status_code == 200 + assert response.json() == [_EXPECTED_CUSTOMER] + + +def test_char_new_body(mock_prisma_client, mock_user_api_key_auth): + mock_prisma_client.db.litellm_endusertable.create = AsyncMock(return_value=_row(_FULL_DB_ROW)) + response = client.post("/customer/new", json={"user_id": "c1"}, headers={"Authorization": "Bearer k"}) + assert response.status_code == 200 + assert response.json() == _EXPECTED_CUSTOMER + + +def test_char_update_body(mock_prisma_client, mock_user_api_key_auth): + mock_prisma_client.db.litellm_endusertable.find_first = AsyncMock( + return_value=_row({"user_id": "c1", "blocked": False}) + ) + mock_prisma_client.db.litellm_endusertable.update = AsyncMock(return_value=_row(_FULL_DB_ROW)) + response = client.post( + "/customer/update", + json={"user_id": "c1", "alias": "Acme"}, + headers={"Authorization": "Bearer k"}, + ) + assert response.status_code == 200 + assert response.json() == _EXPECTED_CUSTOMER + + +def test_char_delete_body(mock_prisma_client, mock_user_api_key_auth): + mock_prisma_client.db.litellm_endusertable.find_many = AsyncMock( + return_value=[ + LiteLLM_EndUserTable(user_id="c1", blocked=False), + LiteLLM_EndUserTable(user_id="c2", blocked=False), + ] + ) + mock_prisma_client.db.litellm_endusertable.delete_many = AsyncMock(return_value=2) + response = client.post( + "/customer/delete", + json={"user_ids": ["c1", "c2"]}, + headers={"Authorization": "Bearer k"}, + ) + assert response.status_code == 200 + assert response.json() == { + "deleted_customers": 2, + "message": "Successfully deleted customers with ids: ['c1', 'c2']", + } diff --git a/ui/litellm-dashboard/scripts/gen-api-types.mjs b/ui/litellm-dashboard/scripts/gen-api-types.mjs index 3c9373ec547..6b9f8581292 100644 --- a/ui/litellm-dashboard/scripts/gen-api-types.mjs +++ b/ui/litellm-dashboard/scripts/gen-api-types.mjs @@ -26,15 +26,26 @@ const python = (process.env.LITELLM_PYTHON ?? "python3").split(" "); // The dashboard calls internal UI routes that the public /openapi.json hides via // include_in_schema=False. Force them in so they get typed here; this mutates a // throwaway interpreter, so the spec the proxy actually serves is unchanged. +// Python 3.13 strips a docstring's common leading indentation at compile time +// while 3.12 keeps it, so the same model yields differently-indented descriptions +// depending on the interpreter — enough to make this output non-reproducible +// across CI and contributors. inspect.cleandoc normalizes every description to one +// canonical form regardless of interpreter, so the generated file is stable. const dumpSpec = [ - "import json, sys", + "import inspect, json, sys", "from litellm.proxy.proxy_server import app", "from fastapi.routing import APIRoute", "for route in app.routes:", " if isinstance(route, APIRoute):", " route.include_in_schema = True", "app.openapi_schema = None", - "with open(sys.argv[1], 'w') as f: json.dump(app.openapi(), f, sort_keys=True)", + "def normalize(node):", + " if isinstance(node, dict):", + " return {k: inspect.cleandoc(v) if k == 'description' and isinstance(v, str) else normalize(v) for k, v in node.items()}", + " if isinstance(node, list):", + " return [normalize(v) for v in node]", + " return node", + "with open(sys.argv[1], 'w') as f: json.dump(normalize(app.openapi()), f, sort_keys=True)", ].join("\n"); try { diff --git a/ui/litellm-dashboard/src/lib/http/schema.d.ts b/ui/litellm-dashboard/src/lib/http/schema.d.ts index 7d5d617c824..f15eaf9ea1f 100644 --- a/ui/litellm-dashboard/src/lib/http/schema.d.ts +++ b/ui/litellm-dashboard/src/lib/http/schema.d.ts @@ -3027,8 +3027,8 @@ export interface paths { /** * Get Active Tasks Stats * @description Returns: - * total_active_tasks: int - * by_name: { coroutine_name: count } + * total_active_tasks: int + * by_name: { coroutine_name: count } */ get: operations["get_active_tasks_stats_debug_asyncio_tasks_get"]; put?: never; @@ -21003,6 +21003,11 @@ export interface components { /** User Ids */ user_ids: string[]; }; + /** BlockUsersResponse */ + BlockUsersResponse: { + /** Blocked Users */ + blocked_users: components["schemas"]["LiteLLM_EndUserTable"][]; + }; /** * BlockedWord * @description Represents a blocked word with its action and optional description @@ -22651,10 +22656,10 @@ export interface components { /** * ContentFilterCategoryConfig * @description category: "harmful_self_harm" - * enabled: true - * action: "BLOCK" - * severity_threshold: "medium" - * category_file: "/path/to/custom_file.yaml" # optional override + * enabled: true + * action: "BLOCK" + * severity_threshold: "medium" + * category_file: "/path/to/custom_file.yaml" # optional override */ ContentFilterCategoryConfig: { /** @@ -22879,6 +22884,37 @@ export interface components { [key: string]: unknown; }; }; + /** + * CustomerResponse + * @description Customer object returned by the /customer read+write endpoints. + * + * Nests the full budget response model so server-managed budget fields + * (budget_reset_at, created_at) survive response_model filtering, rather than + * the narrow write-allowlist shape LiteLLM_EndUserTable carries for internal use. + */ + CustomerResponse: { + /** Alias */ + alias?: string | null; + /** Allowed Model Region */ + allowed_model_region?: ("eu" | "us") | null; + /** Blocked */ + blocked: boolean; + /** Budget Id */ + budget_id?: string | null; + /** Default Model */ + default_model?: string | null; + litellm_budget_table?: components["schemas"]["LiteLLM_BudgetTableFull"] | null; + object_permission?: components["schemas"]["LiteLLM_ObjectPermissionTable"] | null; + /** Object Permission Id */ + object_permission_id?: string | null; + /** + * Spend + * @default 0 + */ + spend: number; + /** User Id */ + user_id: string; + }; /** DailySpendData */ DailySpendData: { breakdown?: components["schemas"]["BreakdownMetrics"]; @@ -23043,6 +23079,13 @@ export interface components { /** User Ids */ user_ids: string[]; }; + /** DeleteCustomersResponse */ + DeleteCustomersResponse: { + /** Deleted Customers */ + deleted_customers: number; + /** Message */ + message: string; + }; /** * DeleteEvalResponse * @description Response from deleting an evaluation @@ -24792,6 +24835,8 @@ export interface components { allowed_model_region?: ("eu" | "us") | null; /** Blocked */ blocked: boolean; + /** Budget Id */ + budget_id?: string | null; /** Default Model */ default_model?: string | null; litellm_budget_table?: components["schemas"]["LiteLLM_BudgetTable"] | null; @@ -31477,6 +31522,14 @@ export interface components { */ workers: components["schemas"]["WorkerRegistryEntry"][]; }; + /** UnblockUsersResponse */ + UnblockUsersResponse: { + /** + * Blocked Users + * @description User IDs that remain blocked after this unblock call + */ + blocked_users: string[]; + }; /** * UpdateCustomerRequest * @description Update a Customer, use this to update customer budgets etc @@ -37482,7 +37535,7 @@ export interface operations { [name: string]: unknown; }; content: { - "application/json": unknown; + "application/json": components["schemas"]["BlockUsersResponse"]; }; }; /** @description Validation Error */ @@ -37553,7 +37606,7 @@ export interface operations { [name: string]: unknown; }; content: { - "application/json": unknown; + "application/json": components["schemas"]["DeleteCustomersResponse"]; }; }; /** @description Validation Error */ @@ -37585,7 +37638,7 @@ export interface operations { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["LiteLLM_EndUserTable"]; + "application/json": components["schemas"]["CustomerResponse"]; }; }; /** @description Validation Error */ @@ -37614,7 +37667,7 @@ export interface operations { [name: string]: unknown; }; content: { - "application/json": components["schemas"]["LiteLLM_EndUserTable"][]; + "application/json": components["schemas"]["CustomerResponse"][]; }; }; }; @@ -37638,7 +37691,7 @@ export interface operations { [name: string]: unknown; }; content: { - "application/json": unknown; + "application/json": components["schemas"]["CustomerResponse"]; }; }; /** @description Validation Error */ @@ -37671,7 +37724,7 @@ export interface operations { [name: string]: unknown; }; content: { - "application/json": unknown; + "application/json": components["schemas"]["UnblockUsersResponse"]; }; }; /** @description Validation Error */ @@ -37704,7 +37757,7 @@ export interface operations { [name: string]: unknown; }; content: { - "application/json": unknown; + "application/json": components["schemas"]["CustomerResponse"]; }; }; /** @description Validation Error */ @@ -38130,7 +38183,7 @@ export interface operations { [name: string]: unknown; }; content: { - "application/json": unknown; + "application/json": components["schemas"]["DeleteCustomersResponse"]; }; }; /** @description Validation Error */ @@ -38162,7 +38215,7 @@ export interface operations { [name: string]: unknown; }; content: { - "application/json": unknown; + "application/json": components["schemas"]["CustomerResponse"]; }; }; /** @description Validation Error */ @@ -38191,7 +38244,7 @@ export interface operations { [name: string]: unknown; }; content: { - "application/json": unknown; + "application/json": components["schemas"]["CustomerResponse"][]; }; }; }; @@ -38215,7 +38268,7 @@ export interface operations { [name: string]: unknown; }; content: { - "application/json": unknown; + "application/json": components["schemas"]["CustomerResponse"]; }; }; /** @description Validation Error */ @@ -38281,7 +38334,7 @@ export interface operations { [name: string]: unknown; }; content: { - "application/json": unknown; + "application/json": components["schemas"]["CustomerResponse"]; }; }; /** @description Validation Error */ @@ -43890,13 +43943,13 @@ export interface operations { /** * @description Unified rate-limit error. * - * Every rate-limit condition surfaced by litellm — whether it originated from - * an upstream LLM provider, a vendor batch endpoint, or one of litellm's own - * proxy-side limiters (parallel-requests, dynamic-rate, batch-rate, budget, - * max-iterations, etc.) — is raised as an instance of this class. + * Every rate-limit condition surfaced by litellm — whether it originated from + * an upstream LLM provider, a vendor batch endpoint, or one of litellm's own + * proxy-side limiters (parallel-requests, dynamic-rate, batch-rate, budget, + * max-iterations, etc.) — is raised as an instance of this class. * - * The :attr:`category` attribute lets callers distinguish the source. See - * :class:`RateLimitErrorCategory` for the available values. + * The :attr:`category` attribute lets callers distinguish the source. See + * :class:`RateLimitErrorCategory` for the available values. */ 429: { headers: { From 2e575d39f2557926c0aecadd67b8afba81c640e2 Mon Sep 17 00:00:00 2001 From: Yassin Kortam Date: Tue, 30 Jun 2026 20:26:20 +0300 Subject: [PATCH 11/79] perf(otel): memoize per-request lazy import of otel runtime hooks (#31707) The proxy auth path calls phase_span() and seed_request_identity() in litellm/integrations/otel/runtime.py on every request, each doing a try/except lazy import of litellm.integrations.otel.logger. When the OpenTelemetry SDK is not installed (the default), that import raises, and CPython never caches a failed import, so every request re-scanned sys.path and contended on the import lock. At 750 concurrent users this cost about 12% throughput versus v1.85.0. Resolve the hooks once and cache the outcome, absence included, with functools.cache, so the import is attempted a single time instead of per request. Throughput returns to the v1.85.0 baseline. --- litellm/integrations/otel/runtime.py | 34 ++++++---- .../integrations/otel/test_runtime.py | 64 +++++++++++++++++++ 2 files changed, 87 insertions(+), 11 deletions(-) create mode 100644 tests/test_litellm/integrations/otel/test_runtime.py diff --git a/litellm/integrations/otel/runtime.py b/litellm/integrations/otel/runtime.py index ac3b991c971..eb512375023 100644 --- a/litellm/integrations/otel/runtime.py +++ b/litellm/integrations/otel/runtime.py @@ -8,7 +8,23 @@ identity unconditionally. """ from contextlib import contextmanager -from typing import Any, Iterator +from functools import cache +from typing import Any, Callable, Iterator, Optional + + +@cache +def _otel_runtime() -> "Optional[tuple[Callable[[str], Any], Callable[..., None]]]": + """Resolve the SDK-backed hooks once and cache the outcome, absence included. + + CPython never caches a failed import, so without this memoization every call + site re-attempts the import on each request; when the OTel SDK is not installed + that re-scans ``sys.path`` and contends on the import lock on the hot path. + """ + try: + from litellm.integrations.otel import logger + except Exception: + return None + return (logger.phase_span, logger.seed_request_identity) @contextmanager @@ -18,21 +34,17 @@ def phase_span(name: str) -> "Iterator[Any]": Yields ``None`` (a plain no-op) when the OTel SDK is unavailable or V2 is not the active logger. """ - try: - from litellm.integrations.otel.logger import phase_span as _phase_span - except Exception: + runtime = _otel_runtime() + if runtime is None: yield None return - with _phase_span(name) as span: + with runtime[0](name) as span: yield span def seed_request_identity(user_api_key_dict: Any, model: Any = None) -> None: """Seed request-identity Baggage at the auth boundary (no-op without V2).""" - try: - from litellm.integrations.otel.logger import ( - seed_request_identity as _seed_request_identity, - ) - except Exception: + runtime = _otel_runtime() + if runtime is None: return - _seed_request_identity(user_api_key_dict, model=model) + runtime[1](user_api_key_dict, model=model) diff --git a/tests/test_litellm/integrations/otel/test_runtime.py b/tests/test_litellm/integrations/otel/test_runtime.py new file mode 100644 index 00000000000..d11f31b2523 --- /dev/null +++ b/tests/test_litellm/integrations/otel/test_runtime.py @@ -0,0 +1,64 @@ +"""Regression tests for the SDK-free OTel runtime shim. + +The proxy auth hot path calls ``phase_span`` and ``seed_request_identity`` on +every request. These wrappers resolve the SDK-backed implementations with a +lazy import. CPython never caches a failed import, so before memoization an +absent OTel SDK made every request re-scan ``sys.path`` and contend on the +import lock. These tests pin the import to a single resolution. +""" + +import builtins + +import litellm.integrations.otel.runtime as runtime + + +def test_logger_not_reimported_after_first_resolution(monkeypatch): + runtime._otel_runtime.cache_clear() + + counts = {"n": 0} + real_import = builtins.__import__ + + def counting_import(name, globals=None, locals=None, fromlist=(), level=0): + if name == "litellm.integrations.otel" and fromlist and "logger" in fromlist: + counts["n"] += 1 + return real_import(name, globals, locals, fromlist, level) + + monkeypatch.setattr(builtins, "__import__", counting_import) + + with runtime.phase_span("auth /v1/chat/completions"): + pass + after_first = counts["n"] + + for _ in range(49): + with runtime.phase_span("auth /v1/chat/completions"): + pass + + assert counts["n"] == after_first, ( + f"otel.logger re-imported {counts['n'] - after_first} times after the first " + "resolution; it must be memoized so it does not re-scan sys.path per request" + ) + + runtime._otel_runtime.cache_clear() + + +def test_resolution_is_memoized(): + runtime._otel_runtime.cache_clear() + + for _ in range(25): + with runtime.phase_span("p"): + pass + + info = runtime._otel_runtime.cache_info() + assert info.misses == 1 + assert info.hits >= 24 + + runtime._otel_runtime.cache_clear() + + +def test_wrappers_no_op_when_runtime_absent(monkeypatch): + monkeypatch.setattr(runtime, "_otel_runtime", lambda: None) + + with runtime.phase_span("auth") as span: + assert span is None + + assert runtime.seed_request_identity({"token": "sk-x"}, model="gpt-4o") is None From 468d11f71d2edeb2118d14de73d7733fbce62511 Mon Sep 17 00:00:00 2001 From: ryan-crabbe-berri Date: Tue, 30 Jun 2026 10:26:57 -0700 Subject: [PATCH 12/79] feat(otel): emit a tools/list CLIENT span for MCP discovery under otel_v2 (#31525) * feat(otel): emit a tools/list CLIENT span for MCP discovery under otel_v2 Under otel_v2 an MCP tools/call already produced a dedicated CLIENT span, but tools/list produced none. The discovery call surfaced only as the bare POST /{mcp_server_name}/mcp server span with no MCP attributes, indistinguishable from initialize and impossible to query by method The list success event already reaches the v2 logger with call_type list_mcp_tools, but _emit_mcp_tool_call only matched call_mcp_tool, so listing fell through to the LLM-call path and emitted nothing. This adds a dedicated MCP_LIST_TOOLS span role with its own MCPListToolsSpanData, emitted from a sibling _emit_mcp_list_tools branch that mirrors the tools/call path Per the OTel GenAI MCP semantic conventions the span is named tools/list (the method name alone, since there is no low-cardinality target), is a CLIENT span parented to the request span, and carries mcp.method.name plus the call id. It deliberately omits gen_ai.operation.name and gen_ai.tool.name, which the convention reserves for tool executions, since listing runs no tool * fix(otel): anchor MCP spans to params._meta trace context, not the transport span MCP streamable-HTTP multiplexes many JSON-RPC messages over one session, so the request-root anchor captured on initialize persisted and every later message's span (tools/call, tools/list) nested under it. A tools/list run 44s after the initialize rendered 44s to the right of its parent with a clock-skew warning, because the MCP message and the HTTP transport are independent lifecycles Following the OTel GenAI MCP semantic conventions, an MCP span now parents to the W3C trace context the client propagated in the request's params._meta (a remote parent, per SEP-414), records the transport/session span as a span link rather than the parent, and starts its own root trace when nothing was propagated. The MCP gateway captures traceparent/tracestate/baggage from each message's params._meta into a per-message contextvar that the otel_v2 emitter reads; opentelemetry stays an optional dependency via guarded lazy imports This applies to tools/call as well as the new tools/list span, since both shared the same transport-anchoring bug * fix(otel): drop client baggage from MCP params._meta to prevent identity spoofing The MCP trace propagation added a W3CBaggagePropagator, so resolve_mcp_span_context extracted the client's W3C Baggage from params._meta into the span's parent context. The LiteLLMBaggageSpanProcessor then stamps allowlisted baggage keys onto the span, and the list-tools/tool-call mappers don't set those identity keys, so nothing overwrites them. A malicious MCP client could send params._meta.baggage: litellm.team.id=...,litellm.metadata.user_api_key_user_id=... and have those identity attributes attributed to its spans. Extract trace context only (traceparent/tracestate) in the propagator, and stop collecting the baggage key at the source in _mcp_meta_trace_carrier. Parenting to the client's trace context, the actual goal, needs only trace context; remote baggage had no legitimate consumer here. Regression tests at both layers assert a spoofed params._meta.baggage never lands as a span identity attribute. * style(mcp): clear ruff strict-budget breach in otel trace-carrier helpers The otel MCP trace-carrier helpers added in this branch pushed the BLE001 and UP006 strict-rule totals past their ceilings. Use PEP 585 `dict[str, str]` instead of `Dict`, and narrow the optional-import guards to `except ImportError` (the only failure these can hit, matching the "when otel_v2 is unavailable" intent) instead of a blind `except Exception`. * fix(otel): stamp authenticated identity baggage onto MCP spans Parenting MCP spans to the client's params._meta trace context over an empty Context() meant the tool-call and tools/list spans carried no team/key/metadata identity at all, so they couldn't be attributed or filtered by team in a traces backend. The LLM-call span already re-seeds identity from the parsed, authenticated StandardLoggingPayload rather than trusting ambient/remote context; extract that into a shared _seed_identity_baggage helper and run both MCP emitters through it. Identity comes only from the authenticated payload, never the client carrier, so this keeps the earlier spoofing fix intact while restoring attribution. Regression tests assert the authenticated team lands on both MCP spans and that a spoofed params._meta.baggage value can't override it. * refactor(otel): model MCP spans as roots that link the transport in SPAN_REGISTRY --- litellm/integrations/otel/__init__.py | 4 + litellm/integrations/otel/emitter.py | 21 +- litellm/integrations/otel/logger.py | 85 ++++++-- litellm/integrations/otel/mappers/base.py | 3 +- litellm/integrations/otel/mappers/genai.py | 12 ++ litellm/integrations/otel/model/payloads.py | 38 ++++ litellm/integrations/otel/model/spans.py | 36 +++- litellm/integrations/otel/plumbing/context.py | 61 +++++- .../proxy/_experimental/mcp_server/server.py | 56 +++++ .../integrations/otel/test_otel_v2_logger.py | 192 +++++++++++++++++- .../otel/test_otel_v2_sources_of_truth.py | 19 +- .../mcp_server/test_mcp_server.py | 51 +++++ 12 files changed, 547 insertions(+), 31 deletions(-) diff --git a/litellm/integrations/otel/__init__.py b/litellm/integrations/otel/__init__.py index da3ce4af3e7..7f78f7156b4 100644 --- a/litellm/integrations/otel/__init__.py +++ b/litellm/integrations/otel/__init__.py @@ -32,11 +32,13 @@ from litellm.integrations.otel.model.payloads import ( LLMCallSpanData, LLMRequestParams, LLMUsage, + MCPListToolsSpanData, MCPToolCallSpanData, ProxyRequestSpanData, ServerInfo, ServiceSpanData, SpanError, + is_mcp_list_tools, is_mcp_tool_call, ) from litellm.integrations.otel.model.semconv import ( @@ -106,6 +108,7 @@ __all__ = [ "LLMCallSpanData", "LLMRequestParams", "LLMUsage", + "MCPListToolsSpanData", "MCPToolCallSpanData", "ProxyRequestSpanData", "RequestContext", @@ -113,6 +116,7 @@ __all__ = [ "ServerInfo", "ServiceSpanData", "SpanError", + "is_mcp_list_tools", "is_mcp_tool_call", "promoted_baggage", ] diff --git a/litellm/integrations/otel/emitter.py b/litellm/integrations/otel/emitter.py index 69fc53c5b9d..8441cbae834 100644 --- a/litellm/integrations/otel/emitter.py +++ b/litellm/integrations/otel/emitter.py @@ -4,7 +4,7 @@ from collections import OrderedDict from typing import Callable, Sequence from opentelemetry.context import Context -from opentelemetry.trace import Span, Tracer +from opentelemetry.trace import Link, Span, Tracer from opentelemetry.trace.status import Status, StatusCode from litellm.integrations.otel.model.config import OpenTelemetryV2Config @@ -13,6 +13,7 @@ from litellm.integrations.otel.mappers.base import AttributeMapper, SpanData from litellm.integrations.otel.model.payloads import ( GuardrailSpanData, LLMCallSpanData, + MCPListToolsSpanData, MCPToolCallSpanData, ServiceSpanData, ) @@ -23,6 +24,7 @@ from litellm.integrations.otel.model.spans import ( SpanRole, guardrail_span_name, llm_call_span_name, + mcp_list_tools_span_name, mcp_tool_call_span_name, service_span_name, ) @@ -33,6 +35,7 @@ from litellm.integrations.otel.model.spans import ( _NAME_BUILDERS: dict[SpanRole, Callable[..., str]] = { SpanRole.LLM_CALL: llm_call_span_name, SpanRole.MCP_TOOL_CALL: mcp_tool_call_span_name, + SpanRole.MCP_LIST_TOOLS: mcp_list_tools_span_name, SpanRole.GUARDRAIL: guardrail_span_name, # DB_CALL and SERVICE are both built from ServiceSpanData; they differ only in # span kind (CLIENT vs INTERNAL) and attribute vocabulary, not in naming. @@ -74,18 +77,21 @@ class SpanEmitter: start_time_ns: int | None = None, *, tracer: Tracer | None = None, + links: Sequence[Link] | None = None, ) -> Span: """Start a span for ``role`` without dedup or attribute mapping. For callers that own and manage their own span lifecycle. ``tracer`` overrides the bound tracer for this span only, used for per-request - multi-tenant credential routing. + multi-tenant credential routing. ``links`` records related-but-not-parent + spans (e.g. the transport span of an MCP message, per MCP semconv). """ return (tracer or self._tracer).start_span( name, context=parent_context, kind=to_otel_span_kind(SPAN_REGISTRY[role].kind), start_time=start_time_ns, + links=list(links) if links else None, ) def _seen(self, dedup_key: str | None, role: SpanRole) -> bool: @@ -116,16 +122,23 @@ class SpanEmitter: start_time_ns: int | None = None, end_time_ns: int | None = None, tracer: Tracer | None = None, + links: Sequence[Link] | None = None, ) -> Span | None: """Emit one complete span: dedup, start, map attributes, status, end. Return the span, or ``None`` if it was deduplicated away. ``tracer`` overrides the bound tracer for this span, used for per-request routing. + ``links`` records related-but-not-parent spans (the transport span of an + MCP message). """ # LLM-call and MCP tool-call spans carry a dedup key (their request's # call id), so a sync+async double-firing coalesces. ``isinstance`` narrows # the type for mypy and keeps the engine free of duck-typed attribute reads. - dedup_key = data.identity.call_id if isinstance(data, (LLMCallSpanData, MCPToolCallSpanData)) else None + dedup_key = ( + data.identity.call_id + if isinstance(data, (LLMCallSpanData, MCPToolCallSpanData, MCPListToolsSpanData)) + else None + ) if self._seen(dedup_key, role): return None span = self.start_span( @@ -134,6 +147,7 @@ class SpanEmitter: parent_context=parent_context, start_time_ns=start_time_ns, tracer=tracer, + links=links, ) self.finish_span(role, span, data, end_time_ns=end_time_ns) return span @@ -166,6 +180,7 @@ class SpanEmitter: ( LLMCallSpanData, MCPToolCallSpanData, + MCPListToolsSpanData, ServiceSpanData, GuardrailSpanData, ), diff --git a/litellm/integrations/otel/logger.py b/litellm/integrations/otel/logger.py index 44484559948..5e729e12be0 100644 --- a/litellm/integrations/otel/logger.py +++ b/litellm/integrations/otel/logger.py @@ -5,7 +5,7 @@ from contextlib import contextmanager from datetime import datetime from typing import TYPE_CHECKING, Any, Callable, Iterator, Mapping, Sequence, cast -from opentelemetry.context import attach, get_current +from opentelemetry.context import Context, attach, get_current from opentelemetry.sdk.trace import TracerProvider from opentelemetry.trace import Span, Tracer, get_current_span, use_span @@ -17,6 +17,7 @@ from litellm.integrations.otel.model.config import OpenTelemetryV2Config from litellm.integrations.otel.plumbing.context import ( is_recordable_span, request_root_span, + resolve_mcp_span_context, resolve_parent_context, resolve_request_span_context, set_request_baggage, @@ -32,9 +33,11 @@ from litellm.integrations.otel.model.metadata import ( from litellm.integrations.otel.model.payloads import ( GuardrailSpanData, LLMCallSpanData, + MCPListToolsSpanData, MCPToolCallSpanData, ServiceSpanData, SpanError, + is_mcp_list_tools, is_mcp_tool_call, ) from litellm.integrations.otel.plumbing.metrics import ( @@ -218,6 +221,8 @@ class OpenTelemetryV2(CustomLogger): async def async_log_success_event(self, kwargs, response_obj, start_time, end_time): if self._emit_mcp_tool_call(kwargs, start_time, end_time): return + if self._emit_mcp_list_tools(kwargs, start_time, end_time): + return self._close_llm_call(kwargs, start_time, end_time) self._record_metrics(kwargs, response_obj, start_time, end_time) @@ -242,8 +247,24 @@ class OpenTelemetryV2(CustomLogger): async def async_log_failure_event(self, kwargs, response_obj, start_time, end_time): if self._emit_mcp_tool_call(kwargs, start_time, end_time): return + if self._emit_mcp_list_tools(kwargs, start_time, end_time): + return self._close_llm_call(kwargs, start_time, end_time) + def _seed_identity_baggage(self, identity: RequestIdentity, model: str | None, context: Context) -> Context: + """Seed authenticated request-identity Baggage onto ``context`` so the Baggage + processor stamps team/key/metadata onto the span. Identity is read from the + parsed payload, never the client's ``params._meta`` carrier, so it can't be + spoofed.""" + bag = promoted_baggage( + identity, + model, + promoted_keys=tuple(self.config.baggage_promoted_keys), + metadata_keys=tuple(self.config.baggage_metadata_keys), + team_metadata_keys=tuple(self.config.baggage_team_metadata_keys), + ) + return set_request_baggage(bag, context=context) if bag else context + def _emit_mcp_tool_call( self, kwargs: Mapping[str, Any], @@ -254,10 +275,12 @@ class OpenTelemetryV2(CustomLogger): MCP tool calls reach the success/failure callbacks like any other request (with ``call_type`` ``call_mcp_tool``), but they are not LLM calls and have - no ``pre_call`` carrier — so they get their own CLIENT span here, parented - to the request's server span. Returns whether it handled the event, so the - caller skips the LLM-call path. The whole span is emitted at once (there is - no boundary to open it at), deduped on the call id by the emitter. + no ``pre_call`` carrier — so they get their own CLIENT span here. Per the MCP + semconv it parents to the trace context the client propagated in + ``params._meta`` (or starts a new root) and links the transport span, rather + than nesting under the HTTP/session span. Returns whether it handled the + event, so the caller skips the LLM-call path. The whole span is emitted at + once (there is no boundary to open it at), deduped on the call id. """ raw_payload = kwargs.get("standard_logging_object") if not raw_payload or not is_mcp_tool_call(cast(Mapping[str, object], raw_payload)): @@ -271,12 +294,51 @@ class OpenTelemetryV2(CustomLogger): # as a phantom LLM span. if data.identity.call_id: self._open_llm_calls.pop(data.identity.call_id, None) + parent_context, links = resolve_mcp_span_context() + parent_context = self._seed_identity_baggage(data.identity, None, parent_context) self._emitter.emit( SpanRole.MCP_TOOL_CALL, data, - parent_context=resolve_request_span_context(), + parent_context=parent_context, start_time_ns=to_ns(start_time), end_time_ns=to_ns(end_time), + links=links, + ) + return True + + def _emit_mcp_list_tools( + self, + kwargs: Mapping[str, object], + start_time: datetime | float | None, + end_time: datetime | float | None, + ) -> bool: + """Emit an MCP ``tools/list`` span when the closed request was a discovery call. + + Like a tool call, listing reaches the success/failure callbacks (here with + ``call_type`` ``list_mcp_tools``) with no ``pre_call`` carrier, so it gets its + own CLIENT span. Per the MCP semconv it parents to the ``params._meta`` trace + context (or starts a new root) and links the transport span, rather than + nesting under the HTTP/session span. Returns whether it handled the event so + the caller skips the LLM-call path. + """ + raw_payload = kwargs.get("standard_logging_object") + if not raw_payload or not is_mcp_list_tools(cast(Mapping[str, object], raw_payload)): + return False + payload = cast("StandardLoggingPayload", raw_payload) + data = MCPListToolsSpanData.from_standard_logging_payload( + payload, capture_content=self.config.capture_span_content + ) + if data.identity.call_id: + self._open_llm_calls.pop(data.identity.call_id, None) + parent_context, links = resolve_mcp_span_context() + parent_context = self._seed_identity_baggage(data.identity, None, parent_context) + self._emitter.emit( + SpanRole.MCP_LIST_TOOLS, + data, + parent_context=parent_context, + start_time_ns=to_ns(start_time), + end_time_ns=to_ns(end_time), + links=links, ) return True @@ -319,16 +381,7 @@ class OpenTelemetryV2(CustomLogger): # root span — parent to it (ambient fallback on the SDK path). Seed identity # Baggage so the span — and the SDK path, which has none — is labeled # consistently. - parent_ctx = resolve_request_span_context() - bag = promoted_baggage( - data.identity, - data.request_model, - promoted_keys=tuple(self.config.baggage_promoted_keys), - metadata_keys=tuple(self.config.baggage_metadata_keys), - team_metadata_keys=tuple(self.config.baggage_team_metadata_keys), - ) - if bag: - parent_ctx = set_request_baggage(bag, context=parent_ctx) + parent_ctx = self._seed_identity_baggage(data.identity, data.request_model, resolve_request_span_context()) return self._emitter.emit( SpanRole.LLM_CALL, data, diff --git a/litellm/integrations/otel/mappers/base.py b/litellm/integrations/otel/mappers/base.py index 6685e34578b..809d956a9c7 100644 --- a/litellm/integrations/otel/mappers/base.py +++ b/litellm/integrations/otel/mappers/base.py @@ -7,6 +7,7 @@ from typing_extensions import Protocol, runtime_checkable from litellm.integrations.otel.model.payloads import ( GuardrailSpanData, LLMCallSpanData, + MCPListToolsSpanData, MCPToolCallSpanData, ServiceSpanData, ) @@ -20,7 +21,7 @@ AttributeMap = dict[str, AttrValue] # The closed set of span-data types the engine routes through the mapper chain. # Server spans (PROXY_REQUEST + management routes) belong to the mounted FastAPI # instrumentor, not the mapper chain. -SpanData = LLMCallSpanData | MCPToolCallSpanData | GuardrailSpanData | ServiceSpanData +SpanData = LLMCallSpanData | MCPToolCallSpanData | MCPListToolsSpanData | GuardrailSpanData | ServiceSpanData @runtime_checkable diff --git a/litellm/integrations/otel/mappers/genai.py b/litellm/integrations/otel/mappers/genai.py index ad6d3e7ff21..c5d8c35de7d 100644 --- a/litellm/integrations/otel/mappers/genai.py +++ b/litellm/integrations/otel/mappers/genai.py @@ -19,6 +19,7 @@ from litellm.integrations.otel.mappers.utils import ( from litellm.integrations.otel.model.payloads import ( GuardrailSpanData, LLMCallSpanData, + MCPListToolsSpanData, MCPToolCallSpanData, ServiceSpanData, ToolDefinition, @@ -100,6 +101,15 @@ class GenAIMapper: f"{LiteLLM.COST_PREFIX}total": lambda d: d.response_cost, } + # A tools/list discovery span: the method and session only. Per semconv it must + # NOT carry gen_ai.operation.name (execute_tool) or gen_ai.tool.name — those are + # for tool calls, and listing executes no tool. + _MCP_LIST_ATTRS: dict[str, Callable[[MCPListToolsSpanData], AttrValue | None]] = { + MCP.METHOD_NAME: lambda d: d.method, + MCP.SESSION_ID: lambda d: d.session_id, + LiteLLM.CALL_ID: lambda d: d.identity.call_id or None, + } + _GUARDRAIL_ATTRS: dict[str, Callable[[GuardrailSpanData], AttrValue | None]] = { LiteLLM.GUARDRAIL_NAME: lambda d: d.guardrail_name, LiteLLM.GUARDRAIL_MODE: lambda d: d.mode, @@ -130,6 +140,8 @@ class GenAIMapper: return self._llm_call(data) case MCPToolCallSpanData(): return collect(self._MCP_ATTRS, data) + case MCPListToolsSpanData(): + return collect(self._MCP_LIST_ATTRS, data) case GuardrailSpanData(): return self._guardrail(data) case ServiceSpanData(): diff --git a/litellm/integrations/otel/model/payloads.py b/litellm/integrations/otel/model/payloads.py index a368a862024..b0dcf97b787 100644 --- a/litellm/integrations/otel/model/payloads.py +++ b/litellm/integrations/otel/model/payloads.py @@ -37,12 +37,14 @@ __all__ = [ "LLMCost", "LLMRequestParams", "LLMUsage", + "MCPListToolsSpanData", "MCPToolCallSpanData", "ProxyRequestSpanData", "ServerInfo", "ServiceSpanData", "SpanError", "ToolDefinition", + "is_mcp_list_tools", "is_mcp_tool_call", ] @@ -415,6 +417,42 @@ def is_mcp_tool_call(payload: Mapping[str, object]) -> bool: return bool(_mcp_tool_call_metadata(payload)) or (payload.get("call_type") == "call_mcp_tool") +@dataclass(frozen=True) +class MCPListToolsSpanData: + """One MCP ``tools/list`` discovery call, parsed from a closed request's payload. + + The proxy is an MCP *client* enumerating an upstream server's tools, so this is + a CLIENT span. It carries neither ``gen_ai.operation.name`` nor ``gen_ai.tool.name``: + the GenAI semconv sets ``execute_tool`` (and the tool name) only for tool *calls*, + and listing executes no tool. + """ + + method: str + session_id: str | None + error: SpanError | None + identity: RequestIdentity + + @classmethod + def from_standard_logging_payload( + cls, payload: StandardLoggingPayload, capture_content: bool = False + ) -> MCPListToolsSpanData: + # The list-tools logging path does not thread an MCP session id into the + # payload (only the tool-call path stamps ``mcp_tool_call_metadata``), so + # there is none to read here; ``mcp.session.id`` is simply omitted. + return cls( + method=MCPMethod.TOOLS_LIST.value, + session_id=None, + error=_parse_error(payload), + identity=RequestContext.from_standard_logging_payload(payload).identity, + ) + + +def is_mcp_list_tools(payload: Mapping[str, object]) -> bool: + """Whether a closed request's payload is an MCP ``tools/list`` discovery call + rather than a tool call or an LLM call — true when the call type says so.""" + return payload.get("call_type") == "list_mcp_tools" + + # --- service event_metadata sanitization ------------------------------------ # # Substrings (case-insensitive) of keys that must never reach a span: secrets, diff --git a/litellm/integrations/otel/model/spans.py b/litellm/integrations/otel/model/spans.py index bc624cf6a57..c93f95ec97d 100644 --- a/litellm/integrations/otel/model/spans.py +++ b/litellm/integrations/otel/model/spans.py @@ -18,6 +18,13 @@ before the LLM call even starts), so a guardrail is a sibling of the LLM call, not a child of it. The emitter parents every span to the ambient OTel context (the active server span), which matches this. +MCP spans (``MCP_TOOL_CALL``, ``MCP_LIST_TOOLS``) are intentionally NOT in this +tree. Per the OTel GenAI MCP semconv, MCP and the HTTP transport are independent +contexts, so an MCP span parents to the trace context the client propagated in +``params._meta`` (or starts its own root when none is propagated) and records the +``PROXY_REQUEST`` transport span as a span *link*, never a parent. The registry +encodes this as ``parent=None, links=PROXY_REQUEST``. + Not every service call becomes a span — :func:`span_role_for_service` decides: - ``DB_CALL`` (CLIENT) — outbound datastores (redis, postgres, @@ -46,6 +53,7 @@ if TYPE_CHECKING: from litellm.integrations.otel.model.payloads import ( GuardrailSpanData, LLMCallSpanData, + MCPListToolsSpanData, MCPToolCallSpanData, ProxyRequestSpanData, ServiceSpanData, @@ -56,6 +64,7 @@ class SpanRole(str, Enum): PROXY_REQUEST = "proxy_request" LLM_CALL = "llm_call" MCP_TOOL_CALL = "mcp_tool_call" + MCP_LIST_TOOLS = "mcp_list_tools" GUARDRAIL = "guardrail" DB_CALL = "db_call" SERVICE = "service" @@ -74,14 +83,24 @@ class SpanSpec: role: SpanRole kind: LiteLLMSpanKind parent: SpanRole | None + links: SpanRole | None = None SPAN_REGISTRY: dict[SpanRole, SpanSpec] = { SpanRole.PROXY_REQUEST: SpanSpec(SpanRole.PROXY_REQUEST, LiteLLMSpanKind.SERVER, parent=None), SpanRole.LLM_CALL: SpanSpec(SpanRole.LLM_CALL, LiteLLMSpanKind.CLIENT, parent=SpanRole.PROXY_REQUEST), - # The proxy is an MCP client to the upstream server it dispatches the tool - # call to, so this is a CLIENT span, sibling of the LLM call under the request. - SpanRole.MCP_TOOL_CALL: SpanSpec(SpanRole.MCP_TOOL_CALL, LiteLLMSpanKind.CLIENT, parent=SpanRole.PROXY_REQUEST), + # MCP and the HTTP transport are independent contexts (OTel GenAI MCP semconv), + # so an MCP span does not nest under the transport span. The proxy is an MCP + # client to the upstream server, so it's a CLIENT span; it parents to the trace + # context the client propagated in ``params._meta`` (or starts its own root when + # none is propagated) and records the PROXY_REQUEST transport span as a span + # *link*, never a parent — hence ``parent=None, links=PROXY_REQUEST``. + SpanRole.MCP_TOOL_CALL: SpanSpec( + SpanRole.MCP_TOOL_CALL, LiteLLMSpanKind.CLIENT, parent=None, links=SpanRole.PROXY_REQUEST + ), + SpanRole.MCP_LIST_TOOLS: SpanSpec( + SpanRole.MCP_LIST_TOOLS, LiteLLMSpanKind.CLIENT, parent=None, links=SpanRole.PROXY_REQUEST + ), SpanRole.GUARDRAIL: SpanSpec(SpanRole.GUARDRAIL, LiteLLMSpanKind.INTERNAL, parent=SpanRole.PROXY_REQUEST), SpanRole.DB_CALL: SpanSpec(SpanRole.DB_CALL, LiteLLMSpanKind.CLIENT, parent=SpanRole.PROXY_REQUEST), SpanRole.SERVICE: SpanSpec(SpanRole.SERVICE, LiteLLMSpanKind.INTERNAL, parent=SpanRole.PROXY_REQUEST), @@ -163,6 +182,12 @@ def mcp_tool_call_span_name(data: "MCPToolCallSpanData") -> str: return f"{data.method} {data.tool_name}".strip() +def mcp_list_tools_span_name(data: "MCPListToolsSpanData") -> str: + """``"{mcp.method.name}"`` i.e. ``"tools/list"`` — no low-cardinality target, so + the method name alone names the span (MCP semconv).""" + return data.method + + def proxy_request_span_name(data: "ProxyRequestSpanData") -> str: """``"{method} {route}"`` (HTTP semconv).""" return f"{data.http_method} {data.route}".strip() @@ -179,7 +204,8 @@ def service_span_name(data: "ServiceSpanData") -> str: def root_roles() -> list[SpanRole]: - """Roles that start a new trace (no in-process parent).""" + """Roles with no in-process parent. They start a new trace unless they adopt a + remote parent (e.g. an MCP span joining the client's propagated context).""" return [role for role, spec in SPAN_REGISTRY.items() if spec.parent is None] @@ -196,6 +222,8 @@ def validate_registry( raise ValueError(f"SPAN_REGISTRY[{role}] has mismatched role {spec.role}") if spec.parent is not None and spec.parent not in reg: raise ValueError(f"span role {role} declares unknown parent {spec.parent}") + if spec.links is not None and spec.links not in reg: + raise ValueError(f"span role {role} declares unknown link target {spec.links}") missing = [role for role in SpanRole if role not in reg] if missing: raise ValueError(f"SPAN_REGISTRY is missing roles: {missing}") diff --git a/litellm/integrations/otel/plumbing/context.py b/litellm/integrations/otel/plumbing/context.py index ff513c84d95..8acac112c3d 100644 --- a/litellm/integrations/otel/plumbing/context.py +++ b/litellm/integrations/otel/plumbing/context.py @@ -1,11 +1,11 @@ """Trace-context + Baggage helpers.""" -from contextvars import ContextVar +from contextvars import ContextVar, Token from typing import Mapping from opentelemetry import baggage from opentelemetry.context import Context, get_current -from opentelemetry.trace import Span, get_current_span, set_span_in_context +from opentelemetry.trace import Link, Span, get_current_span, set_span_in_context from opentelemetry.trace.propagation.tracecontext import ( TraceContextTextMapPropagator, ) @@ -47,6 +47,31 @@ def request_root_span() -> "Span | None": return span if is_recordable_span(span) else None +# The W3C trace-context carrier (``traceparent``/``tracestate``/``baggage``) the +# MCP client propagated in the current request's ``params._meta``. The MCP gateway +# sets it per message so the MCP span can parent to the client's span rather than +# to the transport. A ``ContextVar`` because, like the root-span anchor, it must +# ride the request task and be readable by the inline success-logging callback. +_mcp_message_trace_carrier: "ContextVar[Mapping[str, str] | None]" = ContextVar( + "litellm_otel_mcp_message_trace_carrier", default=None +) + + +def set_mcp_message_trace_carrier( + carrier: "Mapping[str, str] | None", +) -> "Token[Mapping[str, str] | None]": + """Stash the current MCP message's propagated trace-context carrier. + + Returns the reset token; the caller must reset it once the message is handled + so the carrier never leaks to the next message on the same session task. + """ + return _mcp_message_trace_carrier.set(carrier) + + +def reset_mcp_message_trace_carrier(token: "Token[Mapping[str, str] | None]") -> None: + _mcp_message_trace_carrier.reset(token) + + def set_request_baggage(values: Mapping[str, str], context: Context | None = None) -> Context: """Return a context with ``values`` written into Baggage.""" ctx = context @@ -104,6 +129,38 @@ def resolve_request_span_context() -> Context: return get_current() +def resolve_mcp_span_context( + carrier: "Mapping[str, str] | None" = None, +) -> "tuple[Context, tuple[Link, ...]]": + """Parent context + links for an MCP message span, per the OTel GenAI MCP semconv. + + MCP and the underlying transport (HTTP) are independent lifecycles — one + streamable-HTTP session multiplexes many messages, so nesting the message span + under the HTTP/session span is wrong (it renders the message at the session's + start, skewed by however long the session has been open). Instead: + + * parent to the trace context the client propagated in the request's + ``params._meta`` (a *remote* parent), and + * record the transport/session span as a *link*, never the parent. + + Only trace context (``traceparent``/``tracestate``) is extracted, never the + client's W3C Baggage: ``params._meta`` is caller-controlled, and the otel + baggage processor stamps allowlisted baggage keys (``litellm.team.id``, + ``litellm.metadata.*``, ...) onto the span as attributes, so honoring remote + baggage would let a client spoof a span's identity attribution. + + With no propagated context the returned context carries no span, so the span + starts its own root trace (still linked to the transport). The base context is + explicitly empty so an absent ``traceparent`` can never fall through to the + ambient (stale session) span. + """ + source = carrier if carrier is not None else _mcp_message_trace_carrier.get() + parent = _PROPAGATOR.extract(dict(source or {}), context=Context()) + transport = request_root_span() + links = (Link(transport.get_span_context()),) if transport is not None else () + return parent, links + + def is_recordable_span(obj: object) -> bool: """True if ``obj`` is a live span with a valid context (safe to parent under).""" if not isinstance(obj, Span): diff --git a/litellm/proxy/_experimental/mcp_server/server.py b/litellm/proxy/_experimental/mcp_server/server.py index 4b55510a629..158fdda6c39 100644 --- a/litellm/proxy/_experimental/mcp_server/server.py +++ b/litellm/proxy/_experimental/mcp_server/server.py @@ -229,6 +229,56 @@ def _jsonrpc_text_has_top_level_method(text: str) -> bool: return False +def _mcp_meta_trace_carrier(req_ctx: object) -> Optional[dict[str, str]]: + """The W3C trace context (``traceparent``/``tracestate``) the MCP client + propagated in the request's ``params._meta`` (SEP-414), or ``None``. + + Per the OTel MCP semconv the MCP span parents to this propagated context rather + than to the HTTP/session transport (which is recorded as a link instead), so a + streamable-HTTP session that multiplexes many messages does not glue every + message under the session's first request. The client's W3C Baggage is + deliberately excluded: it is caller-controlled, and the otel baggage processor + stamps allowlisted baggage keys (``litellm.team.id``, ``litellm.metadata.*``, + ...) onto the span, so honoring remote baggage would let a client spoof a + span's identity attribution. + """ + meta = getattr(req_ctx, "meta", None) + extra = getattr(meta, "model_extra", None) + if not isinstance(extra, dict): + return None + carrier = {key: extra[key] for key in ("traceparent", "tracestate") if isinstance(extra.get(key), str)} + return carrier or None + + +def _otel_set_mcp_trace_carrier(carrier: Optional[dict[str, str]]) -> object: + """Stash ``carrier`` for the otel_v2 MCP span and return a reset token, or + ``None`` when otel_v2 is unavailable. Lazily imported so opentelemetry stays an + optional dependency.""" + try: + from litellm.integrations.otel.plumbing.context import ( + set_mcp_message_trace_carrier, + ) + + return set_mcp_message_trace_carrier(carrier) + except ImportError: + return None + + +def _otel_reset_mcp_trace_carrier(token: object) -> None: + """Clear the per-message trace carrier so it never leaks to the next message on + the same session task. Paired with ``_otel_set_mcp_trace_carrier``.""" + if token is None: + return + try: + from litellm.integrations.otel.plumbing.context import ( + reset_mcp_message_trace_carrier, + ) + + reset_mcp_message_trace_carrier(token) + except ImportError: + return + + def _proxy_exception_to_http_exception(exc: ProxyException) -> HTTPException: """Map a ``ProxyException`` to an ``HTTPException`` that preserves its real status code and headers. @@ -595,8 +645,10 @@ if MCP_AVAILABLE: _session_reset_token = None if req_ctx: _session_reset_token = active_mcp_session_var.set(req_ctx.session) + _trace_token = None try: + _trace_token = _otel_set_mcp_trace_carrier(_mcp_meta_trace_carrier(req_ctx)) # Get user authentication from context variable ( user_api_key_auth, @@ -632,6 +684,7 @@ if MCP_AVAILABLE: # This prevents the HTTP stream from failing and allows the client to get a response return [] finally: + _otel_reset_mcp_trace_carrier(_trace_token) if _session_reset_token is not None: active_mcp_session_var.reset(_session_reset_token) @@ -658,8 +711,10 @@ if MCP_AVAILABLE: _session_reset_token = None if req_ctx: _session_reset_token = active_mcp_session_var.set(req_ctx.session) + _trace_token = None try: + _trace_token = _otel_set_mcp_trace_carrier(_mcp_meta_trace_carrier(req_ctx)) # Validate arguments ( user_api_key_auth, @@ -778,6 +833,7 @@ if MCP_AVAILABLE: return response finally: + _otel_reset_mcp_trace_carrier(_trace_token) if _session_reset_token is not None: active_mcp_session_var.reset(_session_reset_token) diff --git a/tests/test_litellm/integrations/otel/test_otel_v2_logger.py b/tests/test_litellm/integrations/otel/test_otel_v2_logger.py index 0ceb7efbe0b..674b2bec829 100644 --- a/tests/test_litellm/integrations/otel/test_otel_v2_logger.py +++ b/tests/test_litellm/integrations/otel/test_otel_v2_logger.py @@ -27,9 +27,11 @@ from litellm.integrations.otel import ( # noqa: E402 OpenTelemetryV2Config, ) from litellm.integrations.otel.plumbing import providers # noqa: E402 -from litellm.integrations.otel.plumbing.context import ( +from litellm.integrations.otel.plumbing.context import ( # noqa: E402 + reset_mcp_message_trace_carrier, + set_mcp_message_trace_carrier, set_request_root_span, -) # noqa: E402 +) from litellm.integrations.otel.logger import OpenTelemetryV2 # noqa: E402 from litellm.integrations.otel.model.spans import ( # noqa: E402 LITELLM_PROXY_REQUEST_SPAN_NAME, @@ -53,8 +55,10 @@ def _reset_request_root_span(): from litellm.integrations.otel.plumbing import context as _otel_context _otel_context._request_root_span.set(None) + _otel_context._mcp_message_trace_carrier.set(None) yield _otel_context._request_root_span.set(None) + _otel_context._mcp_message_trace_carrier.set(None) def _payload(**overrides): @@ -387,6 +391,190 @@ def test_mcp_tool_call_metadata_read_from_nested_metadata_not_top_level(): assert LiteLLM.MCP_SERVER_NAME not in span.attributes +def _mcp_list_payload(**overrides): + payload = { + "call_type": "list_mcp_tools", + "status": "success", + "litellm_call_id": "mcp_list_1", + "metadata": { + "user_api_key_team_id": "t1", + "spend_logs_metadata": {"mcp_operation": "list_tools"}, + }, + "hidden_params": {}, + } + payload.update(overrides) + return payload + + +def test_mcp_list_tools_emits_client_span(): + """An MCP ``tools/list`` discovery call becomes a CLIENT span named ``tools/list``, + carrying only the MCP method and the call id. Per the GenAI MCP semconv the list + span omits ``gen_ai.operation.name`` and ``gen_ai.tool.name`` (tool-call-only) and + ``mcp.session.id`` (the list path threads no session id), so a naive reuse of the + tool-call mapper would wrongly stamp them, and the pre-fix code emitted no span at + all for a ``list_mcp_tools`` payload.""" + logger, exporter = _logger() + kwargs = {"standard_logging_object": _mcp_list_payload()} + asyncio.run(logger.async_log_success_event(kwargs, None, None, None)) + (span,) = exporter.get_finished_spans() + assert span.name == "tools/list" + assert span.kind is SpanKind.CLIENT + assert span.attributes["mcp.method.name"] == "tools/list" + assert span.attributes[LiteLLM.CALL_ID] == "mcp_list_1" + assert span.status.status_code is StatusCode.UNSET + # Bug-killers: no span pre-fix (empty exporter -> the unpack above raises), and a + # tool-call-shaped fix would leak execute_tool / tool name / session id here. + assert GenAI.OPERATION_NAME not in span.attributes + assert "gen_ai.tool.name" not in span.attributes + assert "mcp.session.id" not in span.attributes + + +_MCP_SPAN_CASES = [ + (_mcp_payload, "tools/call get_weather"), + (_mcp_list_payload, "tools/list"), +] + + +@pytest.mark.parametrize("make_payload, span_name", _MCP_SPAN_CASES) +def test_mcp_span_roots_and_links_transport_without_propagated_context( + make_payload, span_name +): + """MCP and the HTTP transport are independent lifecycles (one streamable-HTTP + session multiplexes many messages), so per the MCP semconv the message span + must NOT nest under the session/transport span — that is what made it render + skewed at the session's start. With no propagated ``params._meta`` context it + starts its own root trace and records the transport span as a *link*, never + the parent.""" + logger, exporter = _logger() + transport = logger._emitter.start_span( + SpanRole.PROXY_REQUEST, LITELLM_PROXY_REQUEST_SPAN_NAME + ) + set_request_root_span(transport) + asyncio.run( + logger.async_log_success_event( + {"standard_logging_object": make_payload()}, None, None, None + ) + ) + transport.end() + span = next(s for s in exporter.get_finished_spans() if s.name == span_name) + assert span.parent is None + assert span.context.trace_id != transport.get_span_context().trace_id + assert [link.context.span_id for link in span.links] == [ + transport.get_span_context().span_id + ] + + +@pytest.mark.parametrize("make_payload, span_name", _MCP_SPAN_CASES) +def test_mcp_span_parents_to_propagated_meta_trace_context(make_payload, span_name): + """When the client propagates W3C trace context in the request's + ``params._meta`` (SEP-414), the MCP span parents to it (one distributed trace) + and still links the transport span — never falling through to the + ambient/session span.""" + logger, exporter = _logger() + transport = logger._emitter.start_span( + SpanRole.PROXY_REQUEST, LITELLM_PROXY_REQUEST_SPAN_NAME + ) + set_request_root_span(transport) + token = set_mcp_message_trace_carrier( + {"traceparent": "00-11111111111111111111111111111111-2222222222222222-01"} + ) + try: + asyncio.run( + logger.async_log_success_event( + {"standard_logging_object": make_payload()}, None, None, None + ) + ) + finally: + reset_mcp_message_trace_carrier(token) + transport.end() + span = next(s for s in exporter.get_finished_spans() if s.name == span_name) + assert span.context.trace_id == 0x11111111111111111111111111111111 + assert span.parent is not None + assert span.parent.span_id == 0x2222222222222222 + assert [link.context.span_id for link in span.links] == [ + transport.get_span_context().span_id + ] + + +@pytest.mark.parametrize("make_payload, span_name", _MCP_SPAN_CASES) +def test_mcp_span_ignores_client_supplied_baggage(make_payload, span_name): + """The MCP span must NOT honor W3C Baggage from the client's ``params._meta``. + + ``params._meta`` is caller-controlled and the baggage processor stamps + allowlisted baggage keys onto every span, so extracting remote baggage would + let a client spoof a span's identity (e.g. ``litellm.team.id``). The propagator + extracts trace context only, so the spoofed keys never reach the span while the + legitimate traceparent parenting still works.""" + logger, exporter = _logger() + transport = logger._emitter.start_span( + SpanRole.PROXY_REQUEST, LITELLM_PROXY_REQUEST_SPAN_NAME + ) + set_request_root_span(transport) + token = set_mcp_message_trace_carrier( + { + "traceparent": "00-11111111111111111111111111111111-2222222222222222-01", + "baggage": "litellm.team.id=spoofed-team,litellm.metadata.user_api_key_user_id=attacker", + } + ) + try: + asyncio.run( + logger.async_log_success_event( + {"standard_logging_object": make_payload()}, None, None, None + ) + ) + finally: + reset_mcp_message_trace_carrier(token) + transport.end() + span = next(s for s in exporter.get_finished_spans() if s.name == span_name) + # Trace context still honored: proves the carrier was processed, not dropped wholesale. + assert span.parent is not None and span.parent.span_id == 0x2222222222222222 + # Identity is the authenticated payload's team, never the client's spoofed value. + assert span.attributes[LiteLLM.TEAM_ID] == "t1" + assert "litellm.metadata.user_api_key_user_id" not in span.attributes + + +@pytest.mark.parametrize("make_payload, span_name", _MCP_SPAN_CASES) +def test_mcp_span_carries_authenticated_identity(make_payload, span_name): + """An MCP span is labeled with the authenticated request's identity (team/key), + seeded from the parsed payload like the LLM-call span. Without this seeding the + span — parented to an empty remote context — would carry no team/key attribute at + all, so it couldn't be attributed or filtered by team in the traces backend.""" + logger, exporter = _logger() + asyncio.run( + logger.async_log_success_event( + {"standard_logging_object": make_payload()}, None, None, None + ) + ) + span = next(s for s in exporter.get_finished_spans() if s.name == span_name) + assert span.attributes[LiteLLM.TEAM_ID] == "t1" + + +def test_mcp_span_malformed_traceparent_starts_root(): + """A malformed traceparent in ``params._meta`` must not crash or parent to a + bogus span: the propagator ignores it, so the span starts its own root trace and + still links the transport span.""" + logger, exporter = _logger() + transport = logger._emitter.start_span( + SpanRole.PROXY_REQUEST, LITELLM_PROXY_REQUEST_SPAN_NAME + ) + set_request_root_span(transport) + token = set_mcp_message_trace_carrier({"traceparent": "not-a-valid-traceparent"}) + try: + asyncio.run( + logger.async_log_success_event( + {"standard_logging_object": _mcp_list_payload()}, None, None, None + ) + ) + finally: + reset_mcp_message_trace_carrier(token) + transport.end() + span = next(s for s in exporter.get_finished_spans() if s.name == "tools/list") + assert span.parent is None + assert [link.context.span_id for link in span.links] == [ + transport.get_span_context().span_id + ] + + def test_pre_call_idempotent_keeps_first_span(): """A retried call may re-enter ``pre_call`` with the same call id; the first span (with the true start time) is kept, not replaced.""" diff --git a/tests/test_litellm/integrations/otel/test_otel_v2_sources_of_truth.py b/tests/test_litellm/integrations/otel/test_otel_v2_sources_of_truth.py index 4bb26a70b02..834a484090f 100644 --- a/tests/test_litellm/integrations/otel/test_otel_v2_sources_of_truth.py +++ b/tests/test_litellm/integrations/otel/test_otel_v2_sources_of_truth.py @@ -94,19 +94,32 @@ def test_registry_parent_integrity_no_orphans(): def test_registry_hierarchy_shape(): - assert set(root_roles()) == {SpanRole.PROXY_REQUEST} + # MCP roles have no in-process parent: per the MCP semconv they root (or adopt + # the client's propagated _meta context), so they sit alongside PROXY_REQUEST. + assert set(root_roles()) == { + SpanRole.PROXY_REQUEST, + SpanRole.MCP_TOOL_CALL, + SpanRole.MCP_LIST_TOOLS, + } # Guardrails parent to the request span, not the LLM call: a pre-call # guardrail runs before the LLM call exists, so it's a sibling of it. assert set(child_roles(SpanRole.PROXY_REQUEST)) == { SpanRole.LLM_CALL, - SpanRole.MCP_TOOL_CALL, SpanRole.GUARDRAIL, SpanRole.DB_CALL, SpanRole.SERVICE, } assert SPAN_REGISTRY[SpanRole.LLM_CALL].kind is LiteLLMSpanKind.CLIENT - # The proxy is an MCP client to the upstream tool server: CLIENT span. + # The proxy is an MCP client to the upstream tool server: CLIENT span. Listing + # tools is the same client relationship, so it's a CLIENT span too. assert SPAN_REGISTRY[SpanRole.MCP_TOOL_CALL].kind is LiteLLMSpanKind.CLIENT + assert SPAN_REGISTRY[SpanRole.MCP_LIST_TOOLS].kind is LiteLLMSpanKind.CLIENT + # MCP spans don't nest under the transport: they link the PROXY_REQUEST span + # instead of parenting to it (OTel GenAI MCP semconv). + assert SPAN_REGISTRY[SpanRole.MCP_TOOL_CALL].parent is None + assert SPAN_REGISTRY[SpanRole.MCP_LIST_TOOLS].parent is None + assert SPAN_REGISTRY[SpanRole.MCP_TOOL_CALL].links is SpanRole.PROXY_REQUEST + assert SPAN_REGISTRY[SpanRole.MCP_LIST_TOOLS].links is SpanRole.PROXY_REQUEST assert SPAN_REGISTRY[SpanRole.PROXY_REQUEST].kind is LiteLLMSpanKind.SERVER assert SPAN_REGISTRY[SpanRole.GUARDRAIL].parent is SpanRole.PROXY_REQUEST # An outbound datastore call is a CLIENT span; an internal service is INTERNAL. diff --git a/tests/test_litellm/proxy/_experimental/mcp_server/test_mcp_server.py b/tests/test_litellm/proxy/_experimental/mcp_server/test_mcp_server.py index 34e932b6ae7..abefb2fd984 100644 --- a/tests/test_litellm/proxy/_experimental/mcp_server/test_mcp_server.py +++ b/tests/test_litellm/proxy/_experimental/mcp_server/test_mcp_server.py @@ -6447,3 +6447,54 @@ class TestStreamableHttpAuthErrorMapping: m.get("type") == "http.response.start" and m.get("status") == 500 for m in sent ) + + +class TestMCPMetaTraceCarrier: + """`_mcp_meta_trace_carrier` extracts the W3C trace context the MCP client + propagated in the request's params._meta (SEP-414) so the otel_v2 MCP span can + parent to the client's span. Exercises the real MCP SDK `RequestParams.Meta` + shape (extra='allow' preserves the unprefixed keys), not just an injected + carrier.""" + + def test_extracts_trace_context_and_excludes_baggage_and_other_meta(self): + """Only traceparent/tracestate are carried. The client's W3C ``baggage`` is + deliberately dropped even though it rides in params._meta: it is + caller-controlled, and the otel baggage processor stamps allowlisted baggage + keys onto the span, so honoring it would let a client spoof a span's identity + (e.g. ``litellm.team.id``). Dropping it at the source is the regression guard.""" + from types import SimpleNamespace + + from mcp.types import RequestParams + + from litellm.proxy._experimental.mcp_server.server import ( + _mcp_meta_trace_carrier, + ) + + meta = RequestParams.Meta.model_validate( + { + "traceparent": "00-11111111111111111111111111111111-2222222222222222-01", + "tracestate": "rojo=1", + "baggage": "litellm.team.id=spoofed-team,litellm.metadata.user_api_key_user_id=attacker", + "progressToken": "p1", + } + ) + carrier = _mcp_meta_trace_carrier(SimpleNamespace(meta=meta)) + assert carrier == { + "traceparent": "00-11111111111111111111111111111111-2222222222222222-01", + "tracestate": "rojo=1", + } + assert "baggage" not in carrier + + def test_none_when_no_trace_context(self): + from types import SimpleNamespace + + from mcp.types import RequestParams + + from litellm.proxy._experimental.mcp_server.server import ( + _mcp_meta_trace_carrier, + ) + + assert _mcp_meta_trace_carrier(None) is None + assert _mcp_meta_trace_carrier(SimpleNamespace(meta=None)) is None + only_progress = RequestParams.Meta.model_validate({"progressToken": "p1"}) + assert _mcp_meta_trace_carrier(SimpleNamespace(meta=only_progress)) is None From 1eb712246579bcf27734099155a3145a6aad6e3b Mon Sep 17 00:00:00 2001 From: Yassin Kortam Date: Tue, 30 Jun 2026 20:27:12 +0300 Subject: [PATCH 13/79] test(benchmarks): add CodSpeed benchmarks for inference, MCP and A2A hot paths (#31716) Guard the per-request CPU cost of the chat completion, MCP tool and A2A message transforms against regressions on every commit. All benchmarks are pure in-process work with no network I/O so they stay deterministic under CodSpeed's simulation mode, and they import under the base dependency set the benchmark job installs. Inference covers the full SDK overhead via mock_response (simple, multi-turn, tools, streaming) plus convert_to_model_response_object as a deterministic anchor. MCP covers the client-side tool translation and the proxy server-side tool-name prefix round-trip. A2A covers the client request/response transforms and the proxy server-ingress message conversion. Adds the mcp and a2a-sdk packages to the benchmark run since those transform modules need them, and broadens the workflow triggers to litellm_internal_staging so the internal branch flow is benchmarked too. --- .github/workflows/codspeed.yml | 4 + tests/benchmarks/test_a2a_benchmarks.py | 76 ++++++++++++ tests/benchmarks/test_inference_benchmarks.py | 113 ++++++++++++++++++ tests/benchmarks/test_mcp_benchmarks.py | 84 +++++++++++++ 4 files changed, 277 insertions(+) create mode 100644 tests/benchmarks/test_a2a_benchmarks.py create mode 100644 tests/benchmarks/test_inference_benchmarks.py create mode 100644 tests/benchmarks/test_mcp_benchmarks.py diff --git a/.github/workflows/codspeed.yml b/.github/workflows/codspeed.yml index 17efbf90339..1fad82827ff 100644 --- a/.github/workflows/codspeed.yml +++ b/.github/workflows/codspeed.yml @@ -4,9 +4,11 @@ on: push: branches: - main + - litellm_internal_staging pull_request: branches: - main + - litellm_internal_staging # Allow CodSpeed to trigger backtest performance analysis # in order to generate initial data workflow_dispatch: @@ -48,6 +50,8 @@ jobs: uv run --frozen --no-default-groups --with pytest==8.3.5 --with pytest-codspeed==4.3.0 + --with "mcp>=1.26.0,<2.0" + --with "a2a-sdk>=1.1.0,<2.0" pytest -p pytest_codspeed.plugin tests/benchmarks/ diff --git a/tests/benchmarks/test_a2a_benchmarks.py b/tests/benchmarks/test_a2a_benchmarks.py new file mode 100644 index 00000000000..cf7726230b6 --- /dev/null +++ b/tests/benchmarks/test_a2a_benchmarks.py @@ -0,0 +1,76 @@ +""" +Performance benchmarks for the A2A (agent-to-agent) message-translation hot path. + +Both directions are covered: the client direction (litellm.completion talking to +an upstream A2A agent) converts OpenAI messages into a prompt and extracts text +from the A2A response, and the proxy server-ingress direction converts an inbound +A2A message into OpenAI messages before bridging to a completion. All are pure-CPU +per-request transforms. +""" + +import pytest + +from litellm.a2a_protocol.litellm_completion_bridge.transformation import ( + A2ACompletionBridgeTransformation, +) +from litellm.llms.a2a.common_utils import ( + convert_messages_to_prompt, + extract_text_from_a2a_response, +) + +MESSAGES = [ + {"role": "system", "content": "You are a helpful research assistant."}, + {"role": "user", "content": "What is the capital of France?"}, + {"role": "assistant", "content": "The capital of France is Paris."}, + {"role": "user", "content": "And what is its population?"}, +] + +MESSAGE_RESPONSE = { + "result": { + "kind": "message", + "parts": [ + {"kind": "text", "text": "The population of Paris is about 2.1 million."}, + {"kind": "text", "text": "The metro area has over 12 million people."}, + ], + } +} + +TASK_RESPONSE = { + "result": { + "kind": "task", + "artifacts": [{"parts": [{"kind": "text", "text": "Paris has a population of about 2.1 million."}]}], + } +} + +A2A_INBOUND_MESSAGE = { + "role": "user", + "parts": [ + {"kind": "text", "text": "Summarize the latest quarterly report."}, + {"kind": "text", "text": "Focus on revenue and margins."}, + ], + "messageId": "msg-1", +} + + +@pytest.mark.benchmark +def test_convert_messages_to_a2a_prompt(): + """Benchmark converting OpenAI messages into an A2A prompt string.""" + convert_messages_to_prompt(messages=MESSAGES) + + +@pytest.mark.benchmark +def test_extract_text_from_a2a_message_response(): + """Benchmark extracting text from a direct-message A2A response.""" + extract_text_from_a2a_response(response_dict=MESSAGE_RESPONSE) + + +@pytest.mark.benchmark +def test_extract_text_from_a2a_task_response(): + """Benchmark extracting text from a task-with-artifacts A2A response.""" + extract_text_from_a2a_response(response_dict=TASK_RESPONSE) + + +@pytest.mark.benchmark +def test_a2a_inbound_message_to_openai_messages(): + """Benchmark the proxy converting an inbound A2A message into OpenAI messages.""" + A2ACompletionBridgeTransformation.a2a_message_to_openai_messages(A2A_INBOUND_MESSAGE) diff --git a/tests/benchmarks/test_inference_benchmarks.py b/tests/benchmarks/test_inference_benchmarks.py new file mode 100644 index 00000000000..0a95e34a32c --- /dev/null +++ b/tests/benchmarks/test_inference_benchmarks.py @@ -0,0 +1,113 @@ +""" +Performance benchmarks for the LLM inference (chat completion) hot path. + +The end-to-end cases use ``mock_response`` so the full SDK overhead is exercised +-- provider resolution, request/response transformation, ``ModelResponse`` +construction, token counting and cost calculation -- without any network I/O. The +``convert_to_model_response_object`` case isolates the provider-response to +``ModelResponse`` translation, the single deterministic core every non-streaming +completion runs. +""" + +import pytest + +import litellm +from litellm.litellm_core_utils.llm_response_utils.convert_dict_to_response import ( + convert_to_model_response_object, +) +from litellm.types.utils import ModelResponse + +SIMPLE_MESSAGES = [{"role": "user", "content": "Hello, how are you?"}] + +MULTI_TURN_MESSAGES = [ + {"role": "system", "content": "You are a helpful assistant."}, + {"role": "user", "content": "What is the capital of France?"}, + { + "role": "assistant", + "content": "The capital of France is Paris. It is known as the City of Light.", + }, + {"role": "user", "content": "Tell me more about Paris."}, +] + +TOOL_DEFINITIONS = [ + { + "type": "function", + "function": { + "name": "get_weather", + "description": "Get the current weather in a given location", + "parameters": { + "type": "object", + "properties": { + "location": { + "type": "string", + "description": "The city and state, e.g. San Francisco, CA", + }, + "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}, + }, + "required": ["location"], + }, + }, + } +] + +MOCK_RESPONSE = "The capital of France is Paris, the country's largest city and cultural centre." + +PROVIDER_RESPONSE = { + "id": "chatcmpl-abc123", + "object": "chat.completion", + "created": 1700000000, + "model": "gpt-4o", + "choices": [ + { + "index": 0, + "finish_reason": "stop", + "message": {"role": "assistant", "content": MOCK_RESPONSE}, + } + ], + "usage": {"prompt_tokens": 12, "completion_tokens": 16, "total_tokens": 28}, +} + + +@pytest.mark.benchmark +def test_completion_simple_message(): + """Benchmark a single-message completion through the full SDK path.""" + litellm.completion(model="gpt-4o", messages=SIMPLE_MESSAGES, mock_response=MOCK_RESPONSE) + + +@pytest.mark.benchmark +def test_completion_multi_turn(): + """Benchmark a multi-turn completion through the full SDK path.""" + litellm.completion(model="gpt-4o", messages=MULTI_TURN_MESSAGES, mock_response=MOCK_RESPONSE) + + +@pytest.mark.benchmark +def test_completion_with_tools(): + """Benchmark a completion that has to process tool schemas.""" + litellm.completion( + model="gpt-4o", + messages=SIMPLE_MESSAGES, + tools=TOOL_DEFINITIONS, + mock_response=MOCK_RESPONSE, + ) + + +@pytest.mark.benchmark +def test_completion_streaming(): + """Benchmark consuming a full streamed completion (CustomStreamWrapper).""" + stream = litellm.completion( + model="gpt-4o", + messages=SIMPLE_MESSAGES, + mock_response=MOCK_RESPONSE, + stream=True, + ) + for _ in stream: + pass + + +@pytest.mark.benchmark +def test_response_to_model_response_object(): + """Benchmark the provider-response to ModelResponse translation core.""" + convert_to_model_response_object( + response_object=PROVIDER_RESPONSE, + model_response_object=ModelResponse(), + ) diff --git a/tests/benchmarks/test_mcp_benchmarks.py b/tests/benchmarks/test_mcp_benchmarks.py new file mode 100644 index 00000000000..7e23ab1b4f5 --- /dev/null +++ b/tests/benchmarks/test_mcp_benchmarks.py @@ -0,0 +1,84 @@ +""" +Performance benchmarks for the MCP tool hot path. + +Two layers are covered: the client-side translation between MCP and OpenAI +function-calling formats, and the server-side tool-name prefixing that the proxy +runs on every list-tools (prefix each tool) and call-tool (strip prefix to route) +request. Both are pure-CPU and deterministic. +""" + +import pytest +from mcp.types import Tool as MCPTool + +from litellm.experimental_mcp_client.tools import ( + transform_mcp_tool_to_openai_tool, + transform_openai_tool_call_request_to_mcp_tool_call_request, +) +from litellm.proxy._experimental.mcp_server.utils import ( + add_server_prefix_to_name, + split_server_prefix_from_name, +) + + +def _make_tool(index: int) -> MCPTool: + return MCPTool( + name=f"tool_{index}", + description=f"Test tool number {index} that performs an operation", + inputSchema={ + "type": "object", + "properties": { + "query": {"type": "string", "description": "The search query"}, + "limit": {"type": "integer", "description": "Max results"}, + }, + "required": ["query"], + }, + ) + + +SINGLE_TOOL = _make_tool(0) +TOOL_LIST = tuple(_make_tool(i) for i in range(20)) +TOOL_NAMES = tuple(t.name for t in TOOL_LIST) + +SERVER_NAME = "github_mcp" +PREFIXED_TOOL_NAME = add_server_prefix_to_name("tool_0", SERVER_NAME) + +OPENAI_TOOL_CALL = { + "id": "call_abc123", + "type": "function", + "function": { + "name": "tool_0", + "arguments": '{"query": "weather in San Francisco", "limit": 5}', + }, +} + + +@pytest.mark.benchmark +def test_transform_single_mcp_tool_to_openai(): + """Benchmark translating one MCP tool into OpenAI tool format.""" + transform_mcp_tool_to_openai_tool(mcp_tool=SINGLE_TOOL) + + +@pytest.mark.benchmark +def test_transform_mcp_tool_list_to_openai(): + """Benchmark translating a full list-tools response into OpenAI format.""" + for tool in TOOL_LIST: + transform_mcp_tool_to_openai_tool(mcp_tool=tool) + + +@pytest.mark.benchmark +def test_transform_openai_tool_call_to_mcp(): + """Benchmark translating an OpenAI tool call into an MCP call request.""" + transform_openai_tool_call_request_to_mcp_tool_call_request(openai_tool=OPENAI_TOOL_CALL) + + +@pytest.mark.benchmark +def test_mcp_server_prefix_tool_list(): + """Benchmark the proxy prefixing every tool name on a list-tools response.""" + for name in TOOL_NAMES: + add_server_prefix_to_name(name, SERVER_NAME) + + +@pytest.mark.benchmark +def test_mcp_server_strip_prefix_on_call(): + """Benchmark the proxy stripping the server prefix to route a tool call.""" + split_server_prefix_from_name(PREFIXED_TOOL_NAME) From 7ed25de12028ba24975c0ac6e43dc77eafc75746 Mon Sep 17 00:00:00 2001 From: ryan-crabbe-berri Date: Tue, 30 Jun 2026 10:29:49 -0700 Subject: [PATCH 14/79] fix(ui): allow any git host on the skills add form (LIT-4053) (#31652) * fix(ui): allow any git host on the skills add form (LIT-4053) The skills add form only accepted GitHub URLs: its URL parser bailed on any host that did not start with github.com, so GitLab, Bitbucket, and self-hosted repos (and any repo subfolder on them) were rejected before a request was ever sent. The backend already accepts arbitrary git hosts via its url and git-subdir sources, with no host allowlist, so this was a client-side restriction only. Generalize the parser into an exported, host-agnostic parseSkillSource: GitHub URLs keep their github / git-subdir shorthand, every other host is treated as a raw repo url, and an optional Subfolder path field turns any repo into a git-subdir source (url + path). When a pasted GitHub tree/blob URL already encodes a subfolder, the field is cleared and disabled so a contradictory source can never be submitted. The parser is hardened to match the backend contract: query strings and fragments are stripped, the host match is case-insensitive and drops a leading www., the extracted and field-entered subfolder paths are both validated against the same regex the server uses, a real file-extension allowlist (not "any dot") decides whether a trailing blob segment is a file, a branch-only tree URL falls back to the repo, non-GitHub URLs require at least an org/repo, and the suggested skill name is kebab-cased so it satisfies the name field's own rule. The git-subdir source is now handled in the display helpers (getSourceDisplayText, getSourceLink, formatInstallCommand), which previously showed it as "Unknown source" with no link. The submit path is fully typed (RegisterPluginRequest plus an AddPluginFormValues interface), removing the two prior any usages; as a result an author with an email but no name is dropped rather than sent, since the backend requires the author name. No backend changes. Tests cover the full host/subfolder matrix at the parser level plus form-submit assertions on the exact source payload. * refactor(ui): sync skill register types to the generated OpenAPI schema, surface backend errors Replace the hand-maintained, already-drifted API types for the skills add flow with the generated ones from schema.d.ts: PluginAuthor now aliases components["schemas"]["PluginAuthor"], the registration payload is a new SkillRegisterRequest (the generated RegisterPluginRequest envelope with source narrowed to our PluginSource union, since the backend types source as a loose string map, and version kept optional since the backend defaults it), and the dead, mismatched RegisterPluginResponse is deleted. registerClaudeCodePlugin's inline payload type (which was missing the git-subdir path field entirely) is replaced with SkillRegisterRequest, so the networking layer and the form can no longer drift from the backend. Error handling: the add-skill form swallowed the real failure and always showed "Failed to register skill". registerClaudeCodePlugin already derives the backend message and throws it, so the form now surfaces it ("Failed to register skill: "), and the networking helper falls back to the raw body / status when the error response is not JSON instead of throwing a JSON parse error. A regression test asserts the backend message reaches the user. * fix(ui): reject credentialed git URLs on the skills form A repo URL with embedded user-info (user:token@host) passed the raw-host parser and was stored verbatim as the skill source, which is served on the unauthenticated /public/skill_hub and marketplace.json feeds, leaking the credentials. Reject any host segment containing '@'. * fix(ui): validate skill repo URLs through one WHATWG URL gate Replace the ad-hoc string parsing (stripScheme / splitHost / manual scheme, @, ?# checks) with a single parseRepoUrl gate built on the URL parser, so every malformed/unsafe class is handled in one place and the URL stored on the public skill feeds is always canonical. It enforces https (rejecting http/ssh/git/file/javascript/data and protocol-relative //host), rejects embedded credentials (user:token@host, including userinfo-confusion like github.com@evil.com), rejects IP-literal hosts (loopback/private/metadata and obfuscated/IPv6 forms), and rebuilds the stored url from origin+pathname so query strings, fragments, and trailing slashes can never be published. The GitHub org/repo shorthand is now charset-validated like the other paths, so junk can't reach the stored repo. Closes both Veria findings (credentialed and http sources) plus the adversarial-review follow-ups, with regression tests for each class. --- ui/litellm-dashboard/eslint-metrics.json | 4 +- ui/litellm-dashboard/eslint-suppressions.json | 5 - .../add_plugin_form.test.tsx | 190 ++++++++++++- .../claude_code_plugins/add_plugin_form.tsx | 219 ++++++++------- .../claude_code_plugins/helpers.test.ts | 260 +++++++++++++++++- .../components/claude_code_plugins/helpers.ts | 191 ++++++++++++- .../components/claude_code_plugins/types.ts | 48 +--- .../src/components/networking.tsx | 24 +- 8 files changed, 750 insertions(+), 191 deletions(-) diff --git a/ui/litellm-dashboard/eslint-metrics.json b/ui/litellm-dashboard/eslint-metrics.json index deef1136b43..09ad247391b 100644 --- a/ui/litellm-dashboard/eslint-metrics.json +++ b/ui/litellm-dashboard/eslint-metrics.json @@ -1,5 +1,5 @@ { - "@typescript-eslint/no-explicit-any": 2016, - "complexity": 127, + "@typescript-eslint/no-explicit-any": 2014, + "complexity": 126, "max-depth": 61 } diff --git a/ui/litellm-dashboard/eslint-suppressions.json b/ui/litellm-dashboard/eslint-suppressions.json index e3ae304c41c..7a3c8f4a42c 100644 --- a/ui/litellm-dashboard/eslint-suppressions.json +++ b/ui/litellm-dashboard/eslint-suppressions.json @@ -873,11 +873,6 @@ "count": 1 } }, - "src/components/claude_code_plugins/helpers.test.ts": { - "unused-imports/no-unused-imports": { - "count": 1 - } - }, "src/components/claude_code_plugins/plugin_table.tsx": { "no-restricted-imports": { "count": 1 diff --git a/ui/litellm-dashboard/src/components/claude_code_plugins/add_plugin_form.test.tsx b/ui/litellm-dashboard/src/components/claude_code_plugins/add_plugin_form.test.tsx index 9aa6ec7a969..0453cd8a695 100644 --- a/ui/litellm-dashboard/src/components/claude_code_plugins/add_plugin_form.test.tsx +++ b/ui/litellm-dashboard/src/components/claude_code_plugins/add_plugin_form.test.tsx @@ -3,11 +3,20 @@ import { act, fireEvent, screen, waitFor } from "@testing-library/react"; import { describe, it, expect, vi, beforeEach } from "vitest"; import { renderWithProviders } from "../../../tests/test-utils"; import AddPluginForm from "./add_plugin_form"; +import { registerClaudeCodePlugin } from "../networking"; +import MessageManager from "@/components/molecules/message_manager"; vi.mock("../networking", () => ({ registerClaudeCodePlugin: vi.fn().mockResolvedValue({ status: "success" }), })); +vi.mock("@/components/molecules/message_manager", () => ({ + default: { error: vi.fn(), success: vi.fn() }, +})); + +const mockRegister = vi.mocked(registerClaudeCodePlugin); +const mockMessageError = vi.mocked(MessageManager.error); + const DEFAULT_PROPS = { visible: true, onClose: vi.fn(), @@ -15,22 +24,27 @@ const DEFAULT_PROPS = { onSuccess: vi.fn(), }; +const URL_PLACEHOLDER = "https://github.com/org/repo or https://gitlab.com/org/repo"; +const SUBPATH_PLACEHOLDER = "plugins/my-skill"; + describe("AddPluginForm", () => { beforeEach(() => { vi.clearAllMocks(); }); - it("renders with GitHub URL input", () => { + it("renders the host-agnostic repository URL input and subfolder field", () => { renderWithProviders(); - expect(screen.getByText("GitHub URL")).toBeInTheDocument(); - expect(screen.getByPlaceholderText("https://github.com/org/repo/tree/main/my-skill")).toBeInTheDocument(); + expect(screen.getByText("Repository URL")).toBeInTheDocument(); + expect(screen.getByPlaceholderText(URL_PLACEHOLDER)).toBeInTheDocument(); + expect(screen.getByText("Subfolder path (Optional)")).toBeInTheDocument(); + expect(screen.getByPlaceholderText(SUBPATH_PLACEHOLDER)).toBeInTheDocument(); }); it("shows GitHub repo preview for a plain repo URL", async () => { renderWithProviders(); - const urlInput = screen.getByPlaceholderText("https://github.com/org/repo/tree/main/my-skill"); + const urlInput = screen.getByPlaceholderText(URL_PLACEHOLDER); await act(async () => { fireEvent.change(urlInput, { @@ -43,10 +57,10 @@ describe("AddPluginForm", () => { }); }); - it("shows git-subdir preview for a tree URL", async () => { + it("shows git-subdir preview for a tree URL and disables the subfolder field", async () => { renderWithProviders(); - const urlInput = screen.getByPlaceholderText("https://github.com/org/repo/tree/main/my-skill"); + const urlInput = screen.getByPlaceholderText(URL_PLACEHOLDER); await act(async () => { fireEvent.change(urlInput, { @@ -59,12 +73,51 @@ describe("AddPluginForm", () => { await waitFor(() => { expect(screen.getByText(/GitHub subdir/)).toBeInTheDocument(); }); + expect(screen.getByPlaceholderText(SUBPATH_PLACEHOLDER)).toBeDisabled(); + }); + + it("shows a raw url preview for a non-github host", async () => { + renderWithProviders(); + + const urlInput = screen.getByPlaceholderText(URL_PLACEHOLDER); + + await act(async () => { + fireEvent.change(urlInput, { + target: { value: "https://gitlab.com/group/repo" }, + }); + }); + + await waitFor(() => { + expect(screen.getByText(/Git repo/)).toBeInTheDocument(); + }); + expect(screen.getByPlaceholderText(SUBPATH_PLACEHOLDER)).not.toBeDisabled(); + }); + + it("combines a repo URL with a subfolder into a git-subdir preview", async () => { + renderWithProviders(); + + const urlInput = screen.getByPlaceholderText(URL_PLACEHOLDER); + await act(async () => { + fireEvent.change(urlInput, { + target: { value: "https://gitlab.com/group/repo" }, + }); + }); + + const subPathInput = screen.getByPlaceholderText(SUBPATH_PLACEHOLDER); + await act(async () => { + fireEvent.change(subPathInput, { target: { value: "plugins/x" } }); + }); + + await waitFor(() => { + expect(screen.getByText(/Git subdir/)).toBeInTheDocument(); + expect(screen.getByText(/plugins\/x/)).toBeInTheDocument(); + }); }); it("auto-fills skill name from repo URL", async () => { renderWithProviders(); - const urlInput = screen.getByPlaceholderText("https://github.com/org/repo/tree/main/my-skill"); + const urlInput = screen.getByPlaceholderText(URL_PLACEHOLDER); await act(async () => { fireEvent.change(urlInput, { @@ -84,7 +137,7 @@ describe("AddPluginForm", () => { const nameInput = screen.getByPlaceholderText("my-skill") as HTMLInputElement; fireEvent.change(nameInput, { target: { value: "existing-name" } }); - const urlInput = screen.getByPlaceholderText("https://github.com/org/repo/tree/main/my-skill"); + const urlInput = screen.getByPlaceholderText(URL_PLACEHOLDER); await act(async () => { fireEvent.change(urlInput, { @@ -96,4 +149,125 @@ describe("AddPluginForm", () => { expect(nameInput.value).toBe("existing-name"); }); }); + + const typeUrl = async (value: string) => { + await act(async () => { + fireEvent.change(screen.getByPlaceholderText(URL_PLACEHOLDER), { target: { value } }); + }); + }; + + const typeSubPath = async (value: string) => { + await act(async () => { + fireEvent.change(screen.getByPlaceholderText(SUBPATH_PLACEHOLDER), { target: { value } }); + }); + }; + + const submit = async () => { + await act(async () => { + fireEvent.click(screen.getByRole("button", { name: "Add Skill" })); + }); + }; + + it("submits a github repo source", async () => { + renderWithProviders(); + + await typeUrl("https://github.com/anthropics/claude-code"); + await submit(); + + await waitFor(() => { + expect(mockRegister).toHaveBeenCalledWith( + "sk-test", + expect.objectContaining({ source: { source: "github", repo: "anthropics/claude-code" } }), + ); + }); + }); + + it("submits a github subdir source from a tree URL", async () => { + renderWithProviders(); + + await typeUrl("https://github.com/anthropics/claude-code/tree/main/plugins/my-skill"); + await submit(); + + await waitFor(() => { + expect(mockRegister).toHaveBeenCalledWith( + "sk-test", + expect.objectContaining({ + source: { source: "git-subdir", url: "https://github.com/anthropics/claude-code", path: "plugins/my-skill" }, + }), + ); + }); + }); + + it("submits a raw url source for a gitlab repo", async () => { + renderWithProviders(); + + await typeUrl("https://gitlab.com/group/repo"); + await submit(); + + await waitFor(() => { + expect(mockRegister).toHaveBeenCalledWith( + "sk-test", + expect.objectContaining({ source: { source: "url", url: "https://gitlab.com/group/repo" } }), + ); + }); + }); + + it("submits a git-subdir source from a gitlab repo plus subfolder field", async () => { + renderWithProviders(); + + await typeUrl("https://gitlab.com/group/repo"); + await typeSubPath("plugins/x"); + await submit(); + + await waitFor(() => { + expect(mockRegister).toHaveBeenCalledWith( + "sk-test", + expect.objectContaining({ + source: { source: "git-subdir", url: "https://gitlab.com/group/repo", path: "plugins/x" }, + }), + ); + }); + }); + + it("clears the subfolder field and uses the URL path once a tree URL is entered", async () => { + renderWithProviders(); + + await typeSubPath("plugins/x"); + const subPathInput = screen.getByPlaceholderText(SUBPATH_PLACEHOLDER) as HTMLInputElement; + expect(subPathInput.value).toBe("plugins/x"); + + await typeUrl("https://github.com/anthropics/claude-code/tree/main/plugins/from-url"); + + await waitFor(() => { + expect(subPathInput.value).toBe(""); + expect(subPathInput).toBeDisabled(); + }); + + await submit(); + + await waitFor(() => { + expect(mockRegister).toHaveBeenCalledWith( + "sk-test", + expect.objectContaining({ + source: { + source: "git-subdir", + url: "https://github.com/anthropics/claude-code", + path: "plugins/from-url", + }, + }), + ); + }); + }); + + it("surfaces the backend error message when registration fails", async () => { + mockRegister.mockRejectedValueOnce(new Error("Plugin 'claude-code' already exists")); + renderWithProviders(); + + await typeUrl("https://github.com/anthropics/claude-code"); + await submit(); + + await waitFor(() => { + expect(mockMessageError).toHaveBeenCalledWith(expect.stringContaining("Plugin 'claude-code' already exists")); + }); + }); }); diff --git a/ui/litellm-dashboard/src/components/claude_code_plugins/add_plugin_form.tsx b/ui/litellm-dashboard/src/components/claude_code_plugins/add_plugin_form.tsx index f90261ae3a3..a1587bc5189 100644 --- a/ui/litellm-dashboard/src/components/claude_code_plugins/add_plugin_form.tsx +++ b/ui/litellm-dashboard/src/components/claude_code_plugins/add_plugin_form.tsx @@ -3,7 +3,17 @@ import { Modal, Form, Input, Select } from "antd"; import MessageManager from "@/components/molecules/message_manager"; import { Button } from "@tremor/react"; import { registerClaudeCodePlugin } from "../networking"; -import { validatePluginName, isValidSemanticVersion, isValidEmail, isValidUrl, parseKeywords } from "./helpers"; +import { + validatePluginName, + isValidSemanticVersion, + isValidEmail, + isValidUrl, + parseKeywords, + parseSkillSource, + isValidSubPath, + SkillSourcePreview, +} from "./helpers"; +import { PluginAuthor, PluginSource, SkillRegisterRequest } from "./types"; const { TextArea } = Input; const { Option } = Select; @@ -15,6 +25,46 @@ interface AddPluginFormProps { onSuccess: () => void; } +interface AddPluginFormValues { + name: string; + skillUrl?: string; + subPath?: string; + version?: string; + description?: string; + authorName?: string; + authorEmail?: string; + homepage?: string; + category?: string; + keywords?: string; + domain?: string; + namespace?: string; +} + +const buildAuthor = (values: AddPluginFormValues): PluginAuthor | undefined => { + const name = values.authorName?.trim(); + const email = values.authorEmail?.trim(); + if (!name) { + return undefined; + } + return email ? { name, email } : { name }; +}; + +const buildRegisterRequest = (values: AddPluginFormValues, source: PluginSource): SkillRegisterRequest => { + const author = buildAuthor(values); + return { + name: values.name.trim(), + source, + ...(values.version ? { version: values.version.trim() } : {}), + ...(values.description ? { description: values.description.trim() } : {}), + ...(author ? { author } : {}), + ...(values.homepage ? { homepage: values.homepage.trim() } : {}), + ...(values.category ? { category: values.category } : {}), + ...(values.keywords ? { keywords: parseKeywords(values.keywords) } : {}), + ...(values.domain ? { domain: values.domain.trim() } : {}), + ...(values.namespace ? { namespace: values.namespace.trim() } : {}), + }; +}; + const PREDEFINED_CATEGORIES = [ "Development", "Productivity", @@ -26,106 +76,41 @@ const PREDEFINED_CATEGORIES = [ "Documentation", ]; -interface ParsedSource { - source: "github" | "url" | "git-subdir"; - repo?: string; - url?: string; - path?: string; -} - -interface ParsePreview { - parsed: ParsedSource; - label: string; - suggestedName: string; -} - -function parseGitHubUrl(raw: string): ParsePreview | null { - // Strip protocol and trailing slashes/spaces - let s = raw - .trim() - .replace(/^https?:\/\//, "") - .replace(/\/+$/, ""); - - if (!s.startsWith("github.com/")) return null; - - // Remove "github.com/" - const rest = s.slice("github.com/".length); - const parts = rest.split("/"); - - if (parts.length < 2) return null; - - const org = parts[0]; - const repo = parts[1]; - const repoBase = repo.replace(/\.git$/, ""); - - // github.com/org/repo (exactly 2 parts, or ends with .git) - if (parts.length === 2 || (parts.length === 2 && repoBase)) { - return { - parsed: { source: "github", repo: `${org}/${repoBase}` }, - label: `GitHub repo — ${org}/${repoBase}`, - suggestedName: repoBase, - }; - } - - // github.com/org/repo/tree/branch/folder or /blob/branch/folder/FILE.md - if (parts.length >= 5 && (parts[2] === "tree" || parts[2] === "blob")) { - // parts[3] = branch, parts[4..] = path segments - const pathParts = parts.slice(4); - // If last segment looks like a file (has extension), drop it - const lastPart = pathParts[pathParts.length - 1]; - if (lastPart && lastPart.includes(".")) { - pathParts.pop(); - } - if (pathParts.length === 0) { - // Path resolved to repo root — treat as plain github source - return { - parsed: { source: "github", repo: `${org}/${repoBase}` }, - label: `GitHub repo — ${org}/${repoBase}`, - suggestedName: repoBase, - }; - } - const subPath = pathParts.join("/"); - const suggestedName = pathParts[pathParts.length - 1]; - return { - parsed: { - source: "git-subdir", - url: `https://github.com/${org}/${repoBase}`, - path: subPath, - }, - label: `GitHub subdir — ${org}/${repoBase} @ ${subPath}`, - suggestedName, - }; - } - - return null; -} - const AddPluginForm: React.FC = ({ visible, onClose, accessToken, onSuccess }) => { const [form] = Form.useForm(); const [isSubmitting, setIsSubmitting] = useState(false); - const [urlPreview, setUrlPreview] = useState(null); + const [urlPreview, setUrlPreview] = useState(null); + const [urlEncodesSubdir, setUrlEncodesSubdir] = useState(false); - const handleUrlChange = (e: React.ChangeEvent) => { - const val = e.target.value; - const preview = parseGitHubUrl(val); + const recomputePreview = (skillUrl: string, subPath: string) => { + const encodesSubdir = parseSkillSource(skillUrl)?.parsed.source === "git-subdir"; + setUrlEncodesSubdir(encodesSubdir); + if (encodesSubdir && form.getFieldValue("subPath")) { + form.setFieldsValue({ subPath: "" }); + } + const preview = parseSkillSource(skillUrl, encodesSubdir ? undefined : subPath); setUrlPreview(preview); - if (preview) { - // Auto-fill name only if it's currently empty - const currentName = form.getFieldValue("name"); - if (!currentName) { - form.setFieldsValue({ name: preview.suggestedName }); - } + if (preview && !form.getFieldValue("name")) { + form.setFieldsValue({ name: preview.suggestedName }); } }; - const handleSubmit = async (values: any) => { + const handleUrlChange = (e: React.ChangeEvent) => { + recomputePreview(e.target.value, form.getFieldValue("subPath") ?? ""); + }; + + const handleSubPathChange = (e: React.ChangeEvent) => { + recomputePreview(form.getFieldValue("skillUrl") ?? "", e.target.value); + }; + + const handleSubmit = async (values: AddPluginFormValues) => { if (!accessToken) { MessageManager.error("No access token available"); return; } if (!urlPreview) { - MessageManager.error("Please enter a valid GitHub URL"); + MessageManager.error("Please enter a valid repository URL"); return; } @@ -151,33 +136,17 @@ const AddPluginForm: React.FC = ({ visible, onClose, accessT setIsSubmitting(true); try { - const pluginData: any = { - name: values.name.trim(), - source: urlPreview.parsed, - }; - - if (values.version) pluginData.version = values.version.trim(); - if (values.description) pluginData.description = values.description.trim(); - if (values.authorName || values.authorEmail) { - pluginData.author = {}; - if (values.authorName) pluginData.author.name = values.authorName.trim(); - if (values.authorEmail) pluginData.author.email = values.authorEmail.trim(); - } - if (values.homepage) pluginData.homepage = values.homepage.trim(); - if (values.category) pluginData.category = values.category; - if (values.keywords) pluginData.keywords = parseKeywords(values.keywords); - if (values.domain) pluginData.domain = values.domain.trim(); - if (values.namespace) pluginData.namespace = values.namespace.trim(); - - await registerClaudeCodePlugin(accessToken, pluginData); + await registerClaudeCodePlugin(accessToken, buildRegisterRequest(values, urlPreview.parsed)); MessageManager.success("Skill registered successfully"); form.resetFields(); setUrlPreview(null); + setUrlEncodesSubdir(false); onSuccess(); onClose(); } catch (error) { console.error("Error registering skill:", error); - MessageManager.error("Failed to register skill"); + const reason = error instanceof Error && error.message ? error.message : "Failed to register skill"; + MessageManager.error(`Failed to register skill: ${reason}`); } finally { setIsSubmitting(false); } @@ -186,6 +155,7 @@ const AddPluginForm: React.FC = ({ visible, onClose, accessT const handleCancel = () => { form.resetFields(); setUrlPreview(null); + setUrlEncodesSubdir(false); onClose(); }; @@ -194,18 +164,45 @@ const AddPluginForm: React.FC = ({ visible, onClose, accessT
{/* Smart URL Input */} + {/* Optional subfolder for monorepos */} + + !value || isValidSubPath(value) + ? Promise.resolve() + : Promise.reject( + new Error( + "Subfolder must be a relative path like plugins/my-skill (letters, numbers, dots, hyphens, underscores)", + ), + ), + }, + ]} + tooltip="Path within the repository where the skill lives (e.g., plugins/my-skill). Leave empty if the skill is at the repo root." + extra={urlEncodesSubdir ? "The URL already points to a subfolder, so this field is disabled" : undefined} + > + + + {/* Parsed preview */} {urlPreview && (
diff --git a/ui/litellm-dashboard/src/components/claude_code_plugins/helpers.test.ts b/ui/litellm-dashboard/src/components/claude_code_plugins/helpers.test.ts index b3930d15718..4c84db2a97d 100644 --- a/ui/litellm-dashboard/src/components/claude_code_plugins/helpers.test.ts +++ b/ui/litellm-dashboard/src/components/claude_code_plugins/helpers.test.ts @@ -15,23 +15,34 @@ import { isValidUrl, parseKeywords, formatKeywords, + parseSkillSource, + isValidSubPath, } from "./helpers"; import { MarketplacePluginEntry, PluginSource } from "./types"; describe("formatInstallCommand", () => { it("formats github source with repo", () => { - const plugin = { name: "my-plugin", source: { source: "github" as const, repo: "org/repo" } }; - expect(formatInstallCommand(plugin)).toBe("/plugin marketplace add org/repo"); + const source: PluginSource = { source: "github", repo: "org/repo" }; + expect(formatInstallCommand({ name: "my-plugin", source })).toBe("/plugin marketplace add org/repo"); }); it("formats url source", () => { - const plugin = { name: "my-plugin", source: { source: "url" as const, url: "https://example.com/plugin" } }; - expect(formatInstallCommand(plugin)).toBe("/plugin marketplace add https://example.com/plugin"); + const source: PluginSource = { source: "url", url: "https://example.com/plugin" }; + expect(formatInstallCommand({ name: "my-plugin", source })).toBe( + "/plugin marketplace add https://example.com/plugin", + ); + }); + + it("formats git-subdir source using its url", () => { + const source: PluginSource = { source: "git-subdir", url: "https://github.com/org/repo", path: "plugins/x" }; + expect(formatInstallCommand({ name: "my-plugin", source })).toBe( + "/plugin marketplace add https://github.com/org/repo", + ); }); it("falls back to plugin name when no repo or url", () => { - const plugin = { name: "my-plugin", source: { source: "github" as const } }; - expect(formatInstallCommand(plugin)).toBe("/plugin marketplace add my-plugin"); + const source: PluginSource = { source: "github" }; + expect(formatInstallCommand({ name: "my-plugin", source })).toBe("/plugin marketplace add my-plugin"); }); }); @@ -91,6 +102,18 @@ describe("getSourceDisplayText", () => { expect(getSourceDisplayText({ source: "url", url: "https://example.com" })).toBe("https://example.com"); }); + it("shows git-subdir as url @ path for a github subdir", () => { + expect(getSourceDisplayText({ source: "git-subdir", url: "https://github.com/org/repo", path: "plugins/x" })).toBe( + "https://github.com/org/repo @ plugins/x", + ); + }); + + it("shows git-subdir as url @ path for a gitlab subdir", () => { + expect(getSourceDisplayText({ source: "git-subdir", url: "https://gitlab.com/org/repo", path: "sub/dir" })).toBe( + "https://gitlab.com/org/repo @ sub/dir", + ); + }); + it("returns unknown for missing data", () => { expect(getSourceDisplayText({ source: "github" })).toBe("Unknown source"); }); @@ -105,6 +128,18 @@ describe("getSourceLink", () => { expect(getSourceLink({ source: "url", url: "https://example.com" })).toBe("https://example.com"); }); + it("returns the repo url for a github git-subdir source", () => { + expect(getSourceLink({ source: "git-subdir", url: "https://github.com/org/repo", path: "plugins/x" })).toBe( + "https://github.com/org/repo", + ); + }); + + it("returns the repo url for a gitlab git-subdir source", () => { + expect(getSourceLink({ source: "git-subdir", url: "https://gitlab.com/org/repo", path: "sub/dir" })).toBe( + "https://gitlab.com/org/repo", + ); + }); + it("returns null when no repo or url", () => { expect(getSourceLink({ source: "github" })).toBeNull(); }); @@ -323,3 +358,216 @@ describe("formatKeywords", () => { expect(formatKeywords(undefined)).toBe(""); }); }); + +describe("parseSkillSource", () => { + it("parses a plain github repo", () => { + expect(parseSkillSource("github.com/org/repo")?.parsed).toEqual({ source: "github", repo: "org/repo" }); + }); + + it("strips a .git suffix from the github repo shorthand", () => { + expect(parseSkillSource("https://github.com/org/repo.git")?.parsed).toEqual({ + source: "github", + repo: "org/repo", + }); + }); + + it("parses a github tree URL into a git-subdir", () => { + expect(parseSkillSource("github.com/org/repo/tree/main/plugins/x")?.parsed).toEqual({ + source: "git-subdir", + url: "https://github.com/org/repo", + path: "plugins/x", + }); + }); + + it("drops a trailing file segment from a github blob URL", () => { + expect(parseSkillSource("github.com/org/repo/blob/main/x/SKILL.md")?.parsed).toEqual({ + source: "git-subdir", + url: "https://github.com/org/repo", + path: "x", + }); + }); + + it("combines a github repo with an explicit subfolder", () => { + expect(parseSkillSource("github.com/org/repo", "plugins/x")?.parsed).toEqual({ + source: "git-subdir", + url: "https://github.com/org/repo", + path: "plugins/x", + }); + }); + + it("treats a gitlab repo as a raw url source", () => { + expect(parseSkillSource("gitlab.com/org/repo")?.parsed).toEqual({ + source: "url", + url: "https://gitlab.com/org/repo", + }); + }); + + it("keeps the .git suffix on raw urls", () => { + expect(parseSkillSource("https://gitlab.com/org/repo.git")?.parsed).toEqual({ + source: "url", + url: "https://gitlab.com/org/repo.git", + }); + }); + + it("combines a gitlab repo with an explicit subfolder", () => { + expect(parseSkillSource("gitlab.com/org/repo", "plugins/x")?.parsed).toEqual({ + source: "git-subdir", + url: "https://gitlab.com/org/repo", + path: "plugins/x", + }); + }); + + it("combines a self-hosted host with an explicit subfolder", () => { + expect(parseSkillSource("https://git.acme.com/team/repo", "sub/dir")?.parsed).toEqual({ + source: "git-subdir", + url: "https://git.acme.com/team/repo", + path: "sub/dir", + }); + }); + + it("lets a github URL-encoded subdir win over an also-provided subfolder", () => { + expect(parseSkillSource("github.com/org/repo/tree/main/plugins/x", "ignored/path")?.parsed).toEqual({ + source: "git-subdir", + url: "https://github.com/org/repo", + path: "plugins/x", + }); + }); + + it("rejects traversal, absolute, and double-slash subfolders", () => { + expect(parseSkillSource("gitlab.com/org/repo", "../etc")).toBeNull(); + expect(parseSkillSource("gitlab.com/org/repo", "/abs")).toBeNull(); + expect(parseSkillSource("gitlab.com/org/repo", "a//b")).toBeNull(); + }); + + it("returns null for empty and garbage input", () => { + expect(parseSkillSource("")).toBeNull(); + expect(parseSkillSource(" ")).toBeNull(); + expect(parseSkillSource("not a url")).toBeNull(); + }); + + it("suggests a kebab-friendly name from the last path segment", () => { + expect(parseSkillSource("github.com/org/my-awesome-skill")?.suggestedName).toBe("my-awesome-skill"); + expect(parseSkillSource("github.com/org/repo/tree/main/plugins/cool-skill")?.suggestedName).toBe("cool-skill"); + expect(parseSkillSource("gitlab.com/org/repo", "plugins/x")?.suggestedName).toBe("x"); + }); + + it("rejects a bad explicit subfolder for a github repo", () => { + expect(parseSkillSource("github.com/org/repo", "../etc")).toBeNull(); + expect(parseSkillSource("github.com/org/repo", "/abs")).toBeNull(); + expect(parseSkillSource("github.com/org/repo", "a//b")).toBeNull(); + }); + + it("treats a blob URL pointing at a root file as the plain repo", () => { + expect(parseSkillSource("github.com/org/repo/blob/main/SKILL.md")?.parsed).toEqual({ + source: "github", + repo: "org/repo", + }); + }); + + it("strips query strings and fragments before parsing", () => { + expect(parseSkillSource("github.com/org/repo?tab=readme")?.parsed).toEqual({ source: "github", repo: "org/repo" }); + expect(parseSkillSource("github.com/org/repo#section")?.parsed).toEqual({ source: "github", repo: "org/repo" }); + }); + + it("rejects a tree URL whose folder has a space or percent-encoded segment", () => { + expect(parseSkillSource("github.com/org/repo/tree/main/a b")).toBeNull(); + expect(parseSkillSource("github.com/org/repo/tree/main/a%20b")).toBeNull(); + }); + + it("routes uppercase and www github hosts through the github shorthand", () => { + expect(parseSkillSource("GitHub.com/org/repo/tree/main/x")?.parsed).toEqual({ + source: "git-subdir", + url: "https://github.com/org/repo", + path: "x", + }); + expect(parseSkillSource("www.github.com/org/repo")?.parsed).toEqual({ source: "github", repo: "org/repo" }); + }); + + it("keeps a dotted folder name as the subdir path", () => { + expect(parseSkillSource("github.com/org/repo/blob/main/my.skill")?.parsed).toEqual({ + source: "git-subdir", + url: "https://github.com/org/repo", + path: "my.skill", + }); + }); + + it("falls back to the repo for a tree URL with a branch but no folder", () => { + expect(parseSkillSource("github.com/org/repo/tree/main")?.parsed).toEqual({ source: "github", repo: "org/repo" }); + }); + + it("kebab-cases the suggested name from a mixed-case repo", () => { + expect(parseSkillSource("github.com/Org/My_Repo")?.suggestedName).toBe("my-repo"); + }); + + it("rejects a bare host or single-segment raw git url", () => { + expect(parseSkillSource("gitlab.com")).toBeNull(); + expect(parseSkillSource("gitlab.com/org")).toBeNull(); + }); +}); + +// Skill sources are served on the unauthenticated public feeds and cloned by clients, so the +// parser must never publish an insecure, credentialed, internal, or malformed clone URL. +describe("parseSkillSource — security boundary", () => { + it("rejects non-https schemes", () => { + for (const url of [ + "http://gitlab.com/org/repo", + "HTTP://gitlab.com/org/repo", + "ssh://gitlab.com/org/repo", + "git://gitlab.com/org/repo", + "ftp://gitlab.com/org/repo", + "file:///etc/passwd", + "javascript:alert(1)", + "data:text/plain,hi", + "//gitlab.com/org/repo", + ]) { + expect(parseSkillSource(url)).toBeNull(); + } + }); + + it("rejects URLs with embedded credentials", () => { + expect(parseSkillSource("https://user:token@gitlab.com/org/repo")).toBeNull(); + expect(parseSkillSource("https://user@gitlab.com/org/repo")).toBeNull(); + // userinfo confusion: the real host is evil.com, not github.com + expect(parseSkillSource("https://github.com@evil.com/org/repo")).toBeNull(); + }); + + it("rejects IP-literal hosts (loopback, private, metadata, obfuscated, IPv6)", () => { + for (const url of [ + "https://127.0.0.1/org/repo", + "https://10.0.0.5/org/repo", + "https://169.254.169.254/org/repo", + "https://2130706433/org/repo", + "https://[::ffff:127.0.0.1]/org/repo", + ]) { + expect(parseSkillSource(url)).toBeNull(); + } + }); + + it("does not grant GitHub shorthand to a look-alike host", () => { + expect(parseSkillSource("https://github.com.evil.com/org/repo")?.parsed).toEqual({ + source: "url", + url: "https://github.com.evil.com/org/repo", + }); + }); + + it("rejects GitHub org/repo segments with illegal characters", () => { + expect(parseSkillSource("github.com/o@x/repo")).toBeNull(); + expect(parseSkillSource("github.com/org/..%2f..%2fx")).toBeNull(); + }); +}); + +describe("isValidSubPath", () => { + it("accepts relative segment paths", () => { + expect(isValidSubPath("plugins/x")).toBe(true); + expect(isValidSubPath("sub/dir")).toBe(true); + expect(isValidSubPath("a.b-c_d")).toBe(true); + expect(isValidSubPath("plugins/x/")).toBe(true); + }); + + it("rejects empty, traversal, absolute, and double-slash paths", () => { + expect(isValidSubPath("")).toBe(false); + expect(isValidSubPath("../etc")).toBe(false); + expect(isValidSubPath("/abs")).toBe(false); + expect(isValidSubPath("a//b")).toBe(false); + }); +}); diff --git a/ui/litellm-dashboard/src/components/claude_code_plugins/helpers.ts b/ui/litellm-dashboard/src/components/claude_code_plugins/helpers.ts index d696a78b4cc..cab3c5cba3c 100644 --- a/ui/litellm-dashboard/src/components/claude_code_plugins/helpers.ts +++ b/ui/litellm-dashboard/src/components/claude_code_plugins/helpers.ts @@ -4,15 +4,189 @@ import { PluginSource, MarketplacePluginEntry } from "./types"; +export interface SkillSourcePreview { + parsed: PluginSource; + label: string; + suggestedName: string; +} + +export const SUBDIR_PATH_REGEX = /^[a-zA-Z0-9][a-zA-Z0-9._-]*(\/[a-zA-Z0-9][a-zA-Z0-9._-]*)*$/; + +export const normalizeSubPath = (subPath: string): string => subPath.trim().replace(/\/+$/, ""); + +export const isValidSubPath = (subPath: string): boolean => { + const normalized = normalizeSubPath(subPath); + return normalized !== "" && SUBDIR_PATH_REGEX.test(normalized); +}; + +const GITHUB_HOST = "github.com"; + +const SKILL_FILE_EXTENSION_REGEX = /\.(md|markdown|txt|json|ya?ml|toml)$/i; + +// WHATWG normalizes obfuscated IPv4 (e.g. 2130706433, 0x7f.0.0.1) to dotted-decimal, so this +// catches every IPv4 form; bracketed IPv6 is rejected separately. +const IPV4_HOST_REGEX = /^\d{1,3}(\.\d{1,3}){3}$/; + +const GITHUB_ORG_REGEX = /^[A-Za-z0-9-]+$/; +const GITHUB_REPO_REGEX = /^[A-Za-z0-9._-]+$/; + +const buildRepoUrl = (url: URL): string => `${url.protocol}//${url.host}${url.pathname.replace(/\/+$/, "")}`; + +const pathSegments = (url: URL): string[] => url.pathname.split("/").filter((seg) => seg !== ""); + +/** + * Validate and normalize a repository URL into a parsed URL, or null. Enforces https (rejects + * http/ssh/git/etc.), rejects embedded credentials, and requires a dotted host, so the public + * skill feeds never serve an insecure or credentialed clone URL. Everything downstream parses + * this normalized object rather than the raw string. + */ +const parseRepoUrl = (raw: string): URL | null => { + const trimmed = raw.trim(); + if (trimmed === "" || trimmed.startsWith("//")) { + return null; + } + const withScheme = /^[a-z][a-z0-9+.-]*:\/\//i.test(trimmed) ? trimmed : `https://${trimmed}`; + let url: URL; + try { + url = new URL(withScheme); + } catch { + return null; + } + if ( + url.protocol !== "https:" || + url.username !== "" || + url.password !== "" || + !url.hostname.includes(".") || + url.hostname.startsWith("[") || + IPV4_HOST_REGEX.test(url.hostname) + ) { + return null; + } + return url; +}; + +const lastSegment = (path: string): string => { + const segments = path.split("/").filter((seg) => seg !== ""); + return segments[segments.length - 1] ?? ""; +}; + +const toKebabCase = (value: string): string => + value + .toLowerCase() + .replace(/[^a-z0-9-]+/g, "-") + .replace(/-+/g, "-") + .replace(/^-+|-+$/g, ""); + +const parseGitHubSource = (url: URL, subPath?: string): SkillSourcePreview | null => { + const parts = pathSegments(url); + if (parts.length < 2) { + return null; + } + + const org = parts[0]; + const repoBase = parts[1].replace(/\.git$/, ""); + if (!GITHUB_ORG_REGEX.test(org) || !GITHUB_REPO_REGEX.test(repoBase)) { + return null; + } + const repoFull = `${org}/${repoBase}`; + const repoUrl = `https://github.com/${repoFull}`; + const repoPreview: SkillSourcePreview = { + parsed: { source: "github", repo: repoFull }, + label: `GitHub repo — ${repoFull}`, + suggestedName: toKebabCase(repoBase), + }; + + const isTreeOrBlob = parts.length >= 4 && (parts[2] === "tree" || parts[2] === "blob"); + if (isTreeOrBlob) { + const pathParts = parts.slice(4); + const last = lastSegment(pathParts.join("/")); + const effective = SKILL_FILE_EXTENSION_REGEX.test(last) ? pathParts.slice(0, -1) : pathParts; + if (effective.length === 0) { + return repoPreview; + } + const path = normalizeSubPath(effective.join("/")); + if (!SUBDIR_PATH_REGEX.test(path)) { + return null; + } + return { + parsed: { source: "git-subdir", url: repoUrl, path }, + label: `GitHub subdir — ${repoFull} @ ${path}`, + suggestedName: toKebabCase(lastSegment(path)), + }; + } + + if (parts.length !== 2) { + return null; + } + + const normalized = normalizeSubPath(subPath ?? ""); + if (normalized !== "") { + if (!SUBDIR_PATH_REGEX.test(normalized)) { + return null; + } + return { + parsed: { source: "git-subdir", url: repoUrl, path: normalized }, + label: `GitHub subdir — ${repoFull} @ ${normalized}`, + suggestedName: toKebabCase(lastSegment(normalized)), + }; + } + + return repoPreview; +}; + +const parseRawGitSource = (url: URL, subPath?: string): SkillSourcePreview | null => { + if (pathSegments(url).length < 2) { + return null; + } + + const repoUrl = buildRepoUrl(url); + + const normalized = normalizeSubPath(subPath ?? ""); + if (normalized !== "") { + if (!SUBDIR_PATH_REGEX.test(normalized)) { + return null; + } + return { + parsed: { source: "git-subdir", url: repoUrl, path: normalized }, + label: `Git subdir — ${repoUrl} @ ${normalized}`, + suggestedName: toKebabCase(lastSegment(normalized)), + }; + } + + return { + parsed: { source: "url", url: repoUrl }, + label: `Git repo — ${repoUrl}`, + suggestedName: toKebabCase(lastSegment(url.pathname).replace(/\.git$/, "")), + }; +}; + +/** + * Parse any git-accessible repository URL into a registerable skill source. + * GitHub URLs keep their `github`/`git-subdir` shorthand; every other host is + * treated as a raw repo URL, with an optional subfolder turning it into git-subdir. + */ +export const parseSkillSource = (rawUrl: string, subPath?: string): SkillSourcePreview | null => { + const url = parseRepoUrl(rawUrl); + if (!url) { + return null; + } + if (url.hostname.replace(/^www\./, "") === GITHUB_HOST) { + return parseGitHubSource(url, subPath); + } + return parseRawGitSource(url, subPath); +}; + /** * Generate install command for Claude Code CLI * Format: /plugin marketplace add org/repo OR /plugin marketplace add url */ export const formatInstallCommand = (plugin: { name: string; source: PluginSource }): string => { - if (plugin.source.source === "github" && plugin.source.repo) { - return `/plugin marketplace add ${plugin.source.repo}`; - } else if (plugin.source.source === "url" && plugin.source.url) { - return `/plugin marketplace add ${plugin.source.url}`; + const { source } = plugin; + if (source.source === "github" && source.repo) { + return `/plugin marketplace add ${source.repo}`; + } + if ((source.source === "url" || source.source === "git-subdir") && source.url) { + return `/plugin marketplace add ${source.url}`; } // Fallback to plugin name return `/plugin marketplace add ${plugin.name}`; @@ -55,7 +229,11 @@ export const validatePluginName = (name: string): boolean => { export const getSourceDisplayText = (source: PluginSource): string => { if (source.source === "github" && source.repo) { return `GitHub: ${source.repo}`; - } else if (source.source === "url" && source.url) { + } + if (source.source === "git-subdir" && source.url && source.path) { + return `${source.url} @ ${source.path}`; + } + if (source.source === "url" && source.url) { return source.url; } return "Unknown source"; @@ -67,7 +245,8 @@ export const getSourceDisplayText = (source: PluginSource): string => { export const getSourceLink = (source: PluginSource): string | null => { if (source.source === "github" && source.repo) { return `https://github.com/${source.repo}`; - } else if (source.source === "url" && source.url) { + } + if ((source.source === "url" || source.source === "git-subdir") && source.url) { return source.url; } return null; diff --git a/ui/litellm-dashboard/src/components/claude_code_plugins/types.ts b/ui/litellm-dashboard/src/components/claude_code_plugins/types.ts index fcb1146685d..d16c880749b 100644 --- a/ui/litellm-dashboard/src/components/claude_code_plugins/types.ts +++ b/ui/litellm-dashboard/src/components/claude_code_plugins/types.ts @@ -1,8 +1,12 @@ /** * TypeScript types for Claude Code Marketplace - * Matches backend API types from /litellm/types/proxy/claude_code_endpoints.py + * API request/response shapes are synced from the generated OpenAPI types in @/lib/http/schema. */ +import type { components } from "@/lib/http/schema"; + +// Kept hand-written: the backend types `source` as Dict[str, str], so the generated type is a +// loose string map; this discriminant union is what the parser and display helpers rely on. export interface PluginSource { source: "github" | "url" | "git-subdir"; repo?: string; // Format: "org/repo" for GitHub @@ -10,10 +14,7 @@ export interface PluginSource { path?: string; // Subdirectory path for git-subdir } -export interface PluginAuthor { - name: string; - email?: string; -} +export type PluginAuthor = components["schemas"]["PluginAuthor"]; export interface Plugin { id: string; @@ -56,24 +57,12 @@ export interface ListPluginsResponse { count: number; } -export interface RegisterPluginRequest { - name: string; +// Request envelope synced from the OpenAPI spec, with `source` narrowed to our PluginSource +// union and `version` kept optional (the backend supplies its default). +export type SkillRegisterRequest = Omit & { source: PluginSource; version?: string; - description?: string; - author?: PluginAuthor; - homepage?: string; - keywords?: string[]; - category?: string; - domain?: string; - namespace?: string; -} - -export interface RegisterPluginResponse { - plugin: Plugin; - action: "created" | "updated"; - message: string; -} +}; // Public marketplace types export interface MarketplacePluginEntry { @@ -104,20 +93,3 @@ export interface CategoryTab { label: string; count: number; } - -export interface PluginFormData { - name: string; - sourceType: "github" | "url" | "git-subdir"; - repo: string; - url: string; - path: string; - version: string; - description: string; - authorName: string; - authorEmail: string; - homepage: string; - category: string; - keywords: string; // Comma-separated string, will be split into array - domain: string; - namespace: string; -} diff --git a/ui/litellm-dashboard/src/components/networking.tsx b/ui/litellm-dashboard/src/components/networking.tsx index f5bae832e64..0bbf4d2a6e8 100644 --- a/ui/litellm-dashboard/src/components/networking.tsx +++ b/ui/litellm-dashboard/src/components/networking.tsx @@ -27,6 +27,7 @@ import { TagNewRequest, TagUpdateRequest, TagListResponse, TagInfoResponse } fro import { Team } from "./key_team_helpers/key_list"; import { UserInfo } from "./view_users/types"; import { EmailEventSettingsResponse, EmailEventSettingsUpdateRequest } from "./email_events/types"; +import type { SkillRegisterRequest } from "./claude_code_plugins/types"; import { jsonFields } from "./common_components/check_openapi_schema"; import NotificationsManager from "./molecules/notifications_manager"; import type { MCPUserEnvVarsStatus } from "./mcp_tools/types"; @@ -7402,19 +7403,7 @@ export const getClaudeCodePluginDetails = async (accessToken: string, pluginName * @param accessToken - Admin access token * @param pluginData - Plugin registration data */ -export const registerClaudeCodePlugin = async ( - accessToken: string, - pluginData: { - name: string; - source: { source: string; repo?: string; url?: string }; - version?: string; - description?: string; - author?: { name: string; email?: string }; - homepage?: string; - keywords?: string[]; - category?: string; - }, -) => { +export const registerClaudeCodePlugin = async (accessToken: string, pluginData: SkillRegisterRequest) => { try { const proxyBaseUrl = getProxyBaseUrl(); const url = proxyBaseUrl ? `${proxyBaseUrl}/claude-code/plugins` : `/claude-code/plugins`; @@ -7429,8 +7418,13 @@ export const registerClaudeCodePlugin = async ( }); if (!response.ok) { - const errorData = await response.text(); - const errorMessage = deriveErrorMessage(JSON.parse(errorData)); + const errorBody = await response.text(); + let errorMessage: string; + try { + errorMessage = deriveErrorMessage(JSON.parse(errorBody)); + } catch { + errorMessage = errorBody || `Request failed with status ${response.status}`; + } handleError(errorMessage); throw new Error(errorMessage); } From 6ab3742fa673467433070c926986aa2600f45928 Mon Sep 17 00:00:00 2001 From: Yassin Kortam Date: Tue, 30 Jun 2026 20:31:02 +0300 Subject: [PATCH 15/79] perf(spend): move cost-callback payload deepcopy off the request event loop (#31579) --- litellm/proxy/db/db_spend_update_writer.py | 20 ++- .../proxy/db/test_db_spend_update_writer.py | 118 +++++++++++++++++- 2 files changed, 124 insertions(+), 14 deletions(-) diff --git a/litellm/proxy/db/db_spend_update_writer.py b/litellm/proxy/db/db_spend_update_writer.py index cf4c3e98f00..ca6875ca800 100644 --- a/litellm/proxy/db/db_spend_update_writer.py +++ b/litellm/proxy/db/db_spend_update_writer.py @@ -175,16 +175,9 @@ class DBSpendUpdateWriter: if team_id is not None and team_id != "": payload["team_id"] = team_id - # One deepcopy shared by all 6 daily spend helpers (was 5, fixes agent bug) - payload_copy = copy.deepcopy(payload) - - # Deepcopy request_tags for _update_tag_db - request_tags = copy.deepcopy(payload.get("request_tags")) - - # Keep _insert_spend_log_to_db awaited inline (not a task, preserve current behavior) if disable_spend_logs is False: await self._insert_spend_log_to_db( - payload=copy.deepcopy(payload), + payload=payload, prisma_client=prisma_client, ) else: @@ -204,8 +197,7 @@ class DBSpendUpdateWriter: prisma_client=prisma_client, user_api_key_cache=user_api_key_cache, litellm_proxy_budget_name=litellm_proxy_budget_name, - payload_copy=payload_copy, - request_tags=request_tags, + payload=payload, ) ) @@ -336,14 +328,18 @@ class DBSpendUpdateWriter: prisma_client: Optional[PrismaClient], user_api_key_cache: DualCache, litellm_proxy_budget_name: Optional[str], - payload_copy: SpendLogsPayload, - request_tags: Optional[Any], + payload: SpendLogsPayload, ): """ Runs all 11 spend-update helpers sequentially inside a single asyncio task. Each helper is wrapped in try/except so one failure doesn't prevent the others. + + The deepcopy runs here, off the awaited request path, so the daily spend + helpers get a payload isolated from the spend-log queue entry and the caller. """ + payload_copy = copy.deepcopy(payload) + request_tags = payload_copy.get("request_tags") try: await self._update_user_db( response_cost=response_cost, diff --git a/tests/test_litellm/proxy/db/test_db_spend_update_writer.py b/tests/test_litellm/proxy/db/test_db_spend_update_writer.py index 04c93f48ca9..c29cdaf4171 100644 --- a/tests/test_litellm/proxy/db/test_db_spend_update_writer.py +++ b/tests/test_litellm/proxy/db/test_db_spend_update_writer.py @@ -1,4 +1,5 @@ import asyncio +import copy import json import os import sys @@ -1419,8 +1420,7 @@ async def test_batch_database_updates_isolation_on_failure(): prisma_client=MagicMock(), user_api_key_cache=MagicMock(), litellm_proxy_budget_name="budget", - payload_copy={"key": "value"}, - request_tags=None, + payload={"key": "value"}, ) # _update_key_db raised, but all others should still have been called @@ -1704,3 +1704,117 @@ async def test_commit_spend_updates_iterates_in_sorted_order( ) assert captured_where_values == expected_order + + +@pytest.mark.asyncio +async def test_update_database_does_not_deepcopy_on_request_path(): + """ + Regression for LIT-4088: copy.deepcopy must not run while the caller awaits + update_database(). The deepcopy used to isolate the daily-spend helpers is + relocated into the _batch_database_updates background task, and the spend-log + insert receives the payload directly (all consumers are read-only). + + Asserts: + - zero copy.deepcopy calls happen on the awaited request path + - the batch background task still hands the daily helpers an isolated copy + (mutating the original after the task ran does not bleed into it) + - the spend-log insert receives the payload on the request path with the + correct content + """ + db_writer = DBSpendUpdateWriter() + + captured_batch_payloads = [] + captured_spend_log = {} + + async def capture_batch_payload(**kwargs): + captured_batch_payloads.append(kwargs.get("payload")) + + async def capture_spend_log(**kwargs): + payload = kwargs.get("payload") + captured_spend_log["ref"] = payload + captured_spend_log["model_at_call"] = payload["model"] + + db_writer._insert_spend_log_to_db = AsyncMock(side_effect=capture_spend_log) + db_writer._update_user_db = AsyncMock() + db_writer._update_key_db = AsyncMock() + db_writer._update_team_db = AsyncMock() + db_writer._update_org_db = AsyncMock() + db_writer._update_tag_db = AsyncMock() + db_writer._update_agent_db = AsyncMock() + db_writer.add_spend_log_transaction_to_daily_user_transaction = AsyncMock( + side_effect=capture_batch_payload + ) + db_writer.add_spend_log_transaction_to_daily_end_user_transaction = AsyncMock() + db_writer.add_spend_log_transaction_to_daily_agent_transaction = AsyncMock() + db_writer.add_spend_log_transaction_to_daily_team_transaction = AsyncMock() + db_writer.add_spend_log_transaction_to_daily_org_transaction = AsyncMock() + db_writer.add_spend_log_transaction_to_daily_tag_transaction = AsyncMock() + + fake_payload = { + "startTime": "2024-01-01T00:00:00", + "endTime": "2024-01-01T00:01:00", + "model": "gpt-4", + "custom_llm_provider": "openai", + "request_tags": '["prod-tag"]', + "spend": 0.0, + "nested": {"a": 1}, + } + + deepcopy_calls = [] + real_deepcopy = copy.deepcopy + + def counting_deepcopy(obj, *args, **kwargs): + deepcopy_calls.append(obj) + return real_deepcopy(obj, *args, **kwargs) + + with ( + patch("litellm.proxy.proxy_server.disable_spend_logs", False), + patch("litellm.proxy.proxy_server.prisma_client", MagicMock()), + patch("litellm.proxy.proxy_server.user_api_key_cache", MagicMock()), + patch("litellm.proxy.proxy_server.litellm_proxy_budget_name", "test-budget"), + patch( + "litellm.proxy.spend_tracking.spend_tracking_utils.get_logging_payload", + return_value=fake_payload, + ), + patch( + "litellm.proxy.db.db_spend_update_writer.copy.deepcopy", + counting_deepcopy, + ), + ): + await db_writer.update_database( + token="test-token", + user_id="test-user", + end_user_id="test-end-user", + team_id="test-team", + org_id="test-org", + kwargs={"model": "gpt-4", "custom_llm_provider": "openai"}, + completion_response=MagicMock(), + start_time=datetime.now(), + end_time=datetime.now(), + response_cost=0.1, + ) + + # Request path is clean: nothing was deepcopied while the caller awaited. + assert len(deepcopy_calls) == 0 + + # The spend-log insert ran inline on the request path with the real payload. + assert captured_spend_log["ref"] is fake_payload + assert captured_spend_log["model_at_call"] == "gpt-4" + assert fake_payload["spend"] == 0.1 + + # Now let the batch background task run; the deepcopy happens here. + await asyncio.sleep(0) + + assert len(deepcopy_calls) >= 1 + assert len(captured_batch_payloads) == 1 + batch_payload = captured_batch_payloads[0] + assert batch_payload is not fake_payload + assert batch_payload["model"] == "gpt-4" + assert batch_payload["spend"] == 0.1 + + # Mutating the original after the batch task captured its snapshot must not + # leak into the daily helper's isolated copy. + fake_payload["model"] = "MUTATED" + fake_payload["nested"]["a"] = 999 + assert batch_payload["model"] == "gpt-4" + assert batch_payload["nested"]["a"] == 1 From 59f51b2d72c0a9eefc06e9825ecff908f9dfdfb7 Mon Sep 17 00:00:00 2001 From: Mateo Wang <277851410+mateo-berri@users.noreply.github.com> Date: Tue, 30 Jun 2026 10:46:47 -0700 Subject: [PATCH 16/79] chore: prevent CLAUDE.md comment bloat (#31729) The existing comment rule is not strict enough --- CLAUDE.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index cea38b8527b..0cd1605b1b2 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,8 +1,7 @@ -Do not write comments unless they are absolutely necessary to explain some very complex business logic. Please clean up if there are comments that are not absolutely necessary. Do not remove comments that are unrelated to the addition of the code of this PR - -Explanation: code comments are, in a way, a violation of DRY code. You must update logic in two locations to change the code and "hard to change" is literally the definition of tech debt. We should instead aim to write code that is intuitive to the reader, while being both easy to maintain and high performance +Do not write any comments (existing comments can stay) unless explicitly asked to in a user (not system) prompt Don't assume that the existing code is correct or the right way of doing things / good coding patterns. In fact, there are a lot of bad coding practices, overly complex code, code smells, etc. If something doesn't look right, speak up. Feel free to break existing patterns or question weird existing code to make new code high quality, as in: + - correct - secure - performant From 1815636e1ce165096f45eceed5b968db01639402 Mon Sep 17 00:00:00 2001 From: yucheng-berri Date: Tue, 30 Jun 2026 10:58:22 -0700 Subject: [PATCH 17/79] feat(guardrails): expose streaming knobs on generic_guardrail_api (#31730) * feat(guardrails): expose streaming knobs on generic_guardrail_api Wire streaming_end_of_stream_only and streaming_sampling_rate through optional params, initialize_guardrail, and get_config_model so the generic guardrail API participates in UnifiedLLMGuardrails streaming checks with configurable cadence and end-of-stream-only mode. * fix(guardrails): use builtin type[] in get_config_model return Avoids a new UP006 violation that tripped the ruff strict-rule budget gate on the PR lint job. * fix(guardrails): default optional streaming knobs to None Non-None Pydantic defaults on GenericGuardrailAPIOptionalParams made _get_config_value treat unset nested fields as explicit values, which shadowed top-level litellm_params streaming flags whenever any other optional_params key was present. Real defaults stay in the constructor. * fix(guardrails): address review nits on generic_guardrail_api streaming Validate streaming_sampling_rate >= 1 in the constructor and Pydantic optional_params (ge=1), and add /v1/responses streaming coverage through the unified post-call hook so Responses API usage is exercised alongside chat completions. * fix(guardrails): read nested streaming config from dict optional_params Guardrail API/UI delivers optional_params as a plain dict, so getattr was silently ignoring streaming_sampling_rate and streaming_end_of_stream_only. Handle both dict and model shapes in _get_config_value with regression tests. * fix(guardrails): clear ruff findings in generic_guardrail_api tests/types * style(guardrails): ruff format generic_guardrail_api modules --------- Co-authored-by: Marton Schneider --- .../generic_guardrail_api/__init__.py | 18 +- .../generic_guardrail_api.py | 20 + .../guardrail_hooks/generic_guardrail_api.py | 26 +- .../test_generic_guardrail_api.py | 716 +++++++++++++++++- 4 files changed, 775 insertions(+), 5 deletions(-) diff --git a/litellm/proxy/guardrails/guardrail_hooks/generic_guardrail_api/__init__.py b/litellm/proxy/guardrails/guardrail_hooks/generic_guardrail_api/__init__.py index 2386f80e819..63ead52baa6 100644 --- a/litellm/proxy/guardrails/guardrail_hooks/generic_guardrail_api/__init__.py +++ b/litellm/proxy/guardrails/guardrail_hooks/generic_guardrail_api/__init__.py @@ -1,4 +1,4 @@ -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, Any, Optional from litellm.types.guardrails import SupportedGuardrailIntegrations @@ -8,9 +8,23 @@ if TYPE_CHECKING: from litellm.types.guardrails import Guardrail, LitellmParams +def _get_config_value(litellm_params: Any, optional_params: Any, attribute_name: str) -> Optional[Any]: + if optional_params is not None: + value = ( + optional_params.get(attribute_name) + if isinstance(optional_params, dict) + else getattr(optional_params, attribute_name, None) + ) + if value is not None: + return value + return getattr(litellm_params, attribute_name, None) + + def initialize_guardrail(litellm_params: "LitellmParams", guardrail: "Guardrail"): import litellm + optional_params = getattr(litellm_params, "optional_params", None) + _generic_guardrail_api_callback = GenericGuardrailAPI( api_base=litellm_params.api_base, api_key=litellm_params.api_key, @@ -22,6 +36,8 @@ def initialize_guardrail(litellm_params: "LitellmParams", guardrail: "Guardrail" guardrail_name=guardrail.get("guardrail_name", ""), event_hook=litellm_params.mode, default_on=litellm_params.default_on, + streaming_end_of_stream_only=_get_config_value(litellm_params, optional_params, "streaming_end_of_stream_only"), + streaming_sampling_rate=_get_config_value(litellm_params, optional_params, "streaming_sampling_rate"), ) litellm.logging_callback_manager.add_litellm_callback(_generic_guardrail_api_callback) diff --git a/litellm/proxy/guardrails/guardrail_hooks/generic_guardrail_api/generic_guardrail_api.py b/litellm/proxy/guardrails/guardrail_hooks/generic_guardrail_api/generic_guardrail_api.py index df80ea09de0..dc519f56d1a 100644 --- a/litellm/proxy/guardrails/guardrail_hooks/generic_guardrail_api/generic_guardrail_api.py +++ b/litellm/proxy/guardrails/guardrail_hooks/generic_guardrail_api/generic_guardrail_api.py @@ -33,6 +33,7 @@ from litellm.types.utils import GenericGuardrailAPIInputs if TYPE_CHECKING: from litellm.litellm_core_utils.litellm_logging import Logging as LiteLLMLoggingObj + from litellm.types.proxy.guardrails.guardrail_hooks.base import GuardrailConfigModel GUARDRAIL_NAME = "generic_guardrail_api" @@ -178,6 +179,8 @@ class GenericGuardrailAPI(CustomGuardrail): unreachable_fallback: Literal["fail_closed", "fail_open"] = "fail_closed", fail_on_error: Optional[bool] = True, extra_headers: Optional[list] = None, + streaming_end_of_stream_only: Optional[bool] = None, + streaming_sampling_rate: Optional[int] = None, **kwargs, ): self.async_handler = get_async_httpx_client(llm_provider=httpxSpecialProvider.GuardrailCallback) @@ -209,6 +212,15 @@ class GenericGuardrailAPI(CustomGuardrail): self.fail_on_error: bool = True if fail_on_error is None else fail_on_error + # Read by UnifiedLLMGuardrails.async_post_call_streaming_iterator_hook + # via getattr(guardrail_to_apply, "streaming_*", default). + self.streaming_end_of_stream_only: bool = ( + False if streaming_end_of_stream_only is None else streaming_end_of_stream_only + ) + if streaming_sampling_rate is not None and streaming_sampling_rate < 1: + raise ValueError(f"streaming_sampling_rate must be >= 1 (got {streaming_sampling_rate})") + self.streaming_sampling_rate: int = 5 if streaming_sampling_rate is None else streaming_sampling_rate + # Set supported event hooks if "supported_event_hooks" not in kwargs: kwargs["supported_event_hooks"] = [ @@ -470,3 +482,11 @@ class GenericGuardrailAPI(CustomGuardrail): return self._handle_guardrail_request_error(e, inputs, input_type, logging_obj) except Exception as e: return self._handle_guardrail_request_error(e, inputs, input_type, logging_obj, is_unreachable=False) + + @staticmethod + def get_config_model() -> Optional[type["GuardrailConfigModel"]]: + from litellm.types.proxy.guardrails.guardrail_hooks.generic_guardrail_api import ( + GenericGuardrailAPIConfigModel, + ) + + return GenericGuardrailAPIConfigModel diff --git a/litellm/types/proxy/guardrails/guardrail_hooks/generic_guardrail_api.py b/litellm/types/proxy/guardrails/guardrail_hooks/generic_guardrail_api.py index 28fb482b3af..d0ac8bb8998 100644 --- a/litellm/types/proxy/guardrails/guardrail_hooks/generic_guardrail_api.py +++ b/litellm/types/proxy/guardrails/guardrail_hooks/generic_guardrail_api.py @@ -1,7 +1,7 @@ from typing import Any, Dict, List, Literal, Optional, Union from pydantic import BaseModel, ConfigDict, Field -from typing_extensions import TYPE_CHECKING, TypedDict +from typing_extensions import TypedDict from litellm.types.llms.openai import ( AllMessageValues, @@ -60,6 +60,30 @@ class GenericGuardrailAPIOptionalParams(BaseModel): ), ) + streaming_end_of_stream_only: Optional[bool] = Field( + default=None, + description=( + "If False (default when unset), the guardrail runs on sampled chunks during " + "the stream at the cadence set by streaming_sampling_rate, and an in-flight " + "BLOCKED stops further chunks from streaming. If True, the guardrail runs " + "once at end of stream over the assembled response; lower cost and latency, " + "but flagged content has already streamed to the client before the terminal " + "block. Defaults are applied in GenericGuardrailAPI.__init__ when None so " + "unset optional_params does not shadow top-level litellm_params." + ), + ) + + streaming_sampling_rate: Optional[int] = Field( + default=None, + ge=1, + description=( + "When streaming_end_of_stream_only is False, the guardrail runs every Nth " + "streamed chunk. Ignored when streaming_end_of_stream_only is True. " + "Must be >= 1 when set. Defaults to 5 in GenericGuardrailAPI.__init__ " + "when None so unset optional_params does not shadow top-level litellm_params." + ), + ) + class GenericGuardrailAPIConfigModel( GuardrailConfigModel[GenericGuardrailAPIOptionalParams], diff --git a/tests/test_litellm/proxy/guardrails/guardrail_hooks/test_generic_guardrail_api.py b/tests/test_litellm/proxy/guardrails/guardrail_hooks/test_generic_guardrail_api.py index 399442a5f71..791fdd4077c 100644 --- a/tests/test_litellm/proxy/guardrails/guardrail_hooks/test_generic_guardrail_api.py +++ b/tests/test_litellm/proxy/guardrails/guardrail_hooks/test_generic_guardrail_api.py @@ -609,7 +609,6 @@ class TestImageSupport: request_data=mock_request_data_input, input_type="request", ) - result_texts = guardrailed_inputs.get("texts", []) result_images = guardrailed_inputs.get("images", None) # Verify API was called with images @@ -943,7 +942,7 @@ class TestMultimodalSupport: guardrail.async_handler, "post", return_value=mock_response ) as mock_post: # This should not raise SerializationIterator error - result = await guardrail.apply_guardrail( + await guardrail.apply_guardrail( inputs={ "texts": ["What's in this image?"], "images": ["https://example.com/image.jpg"], @@ -1006,7 +1005,7 @@ class TestMultimodalSupport: with patch.object( guardrail.async_handler, "post", return_value=mock_response ) as mock_post: - result = await guardrail.apply_guardrail( + await guardrail.apply_guardrail( inputs={ "texts": ["Hello", "World"], "structured_messages": messages_with_iterable, @@ -1023,6 +1022,717 @@ class TestMultimodalSupport: assert isinstance(json_payload["structured_messages"], list) +def _make_stream_chunk(content: str, finish_reason=None): + """Build a real ModelResponseStream so the handler's isinstance checks pass.""" + from litellm.types.utils import Delta, ModelResponseStream + + return ModelResponseStream( + model="gpt-4", + choices=[ + litellm.StreamingChoices( + index=0, + delta=Delta(role="assistant", content=content), + finish_reason=finish_reason, + ) + ], + ) + + +def _make_assembled_model_response(content: str) -> ModelResponse: + return ModelResponse( + id="mock-response", + model="gpt-4", + choices=[ + litellm.Choices( + index=0, + message=litellm.Message(role="assistant", content=content), + finish_reason="stop", + ) + ], + ) + + +def _mock_guardrail_post_response(action: str = "NONE", texts=None, blocked_reason=None): + mock_response = MagicMock() + payload = {"action": action} + if texts is not None: + payload["texts"] = texts + if blocked_reason is not None: + payload["blocked_reason"] = blocked_reason + mock_response.json.return_value = payload + mock_response.raise_for_status = MagicMock() + return mock_response + + +def _make_responses_stream_events(text: str): + """Minimal /v1/responses SSE event sequence ending in response.completed.""" + return ( + {"type": "response.created", "response": {"id": "resp_test"}}, + { + "type": "response.output_item.added", + "item": {"type": "message", "id": "msg_test"}, + }, + { + "type": "response.content_part.added", + "part": {"type": "output_text", "text": ""}, + }, + {"type": "response.output_text.delta", "delta": text}, + { + "type": "response.output_text.done", + "text": text, + }, + { + "type": "response.completed", + "response": { + "id": "resp_test", + "output": [ + { + "type": "message", + "id": "msg_test", + "status": "completed", + "role": "assistant", + "content": [{"type": "output_text", "text": text}], + } + ], + "status": "completed", + }, + }, + ) + + +class TestGenericGuardrailAPIStreamingConfig: + """Streaming knobs on GenericGuardrailAPI and initialize_guardrail plumbing.""" + + def test_streaming_defaults(self): + guardrail = GenericGuardrailAPI( + api_base="https://api.test.guardrail.com", + guardrail_name="test-generic-guardrail", + event_hook="post_call", + ) + assert guardrail.streaming_end_of_stream_only is False + assert guardrail.streaming_sampling_rate == 5 + + def test_streaming_overrides(self): + guardrail = GenericGuardrailAPI( + api_base="https://api.test.guardrail.com", + guardrail_name="test-generic-guardrail", + event_hook="post_call", + streaming_end_of_stream_only=True, + streaming_sampling_rate=2, + ) + assert guardrail.streaming_end_of_stream_only is True + assert guardrail.streaming_sampling_rate == 2 + + @pytest.mark.parametrize("invalid_rate", [0, -1, -5]) + def test_streaming_sampling_rate_rejects_non_positive(self, invalid_rate): + with pytest.raises(ValueError, match="streaming_sampling_rate must be >= 1"): + GenericGuardrailAPI( + api_base="https://api.test.guardrail.com", + guardrail_name="test-generic-guardrail", + event_hook="post_call", + streaming_sampling_rate=invalid_rate, + ) + + def test_optional_params_streaming_sampling_rate_ge_one(self): + from pydantic import ValidationError + + from litellm.types.proxy.guardrails.guardrail_hooks.generic_guardrail_api import ( + GenericGuardrailAPIOptionalParams, + ) + + with pytest.raises(ValidationError): + GenericGuardrailAPIOptionalParams(streaming_sampling_rate=0) + + def test_get_config_model(self): + from litellm.types.proxy.guardrails.guardrail_hooks.generic_guardrail_api import ( + GenericGuardrailAPIConfigModel, + ) + + assert GenericGuardrailAPI.get_config_model() is GenericGuardrailAPIConfigModel + + def test_initialize_guardrail_forwards_streaming_flags(self): + from litellm.proxy.guardrails.guardrail_hooks.generic_guardrail_api import ( + initialize_guardrail, + ) + from litellm.types.guardrails import LitellmParams + + litellm_params = LitellmParams( + guardrail="generic_guardrail_api", + mode="post_call", + api_base="https://api.test.guardrail.com", + default_on=False, + ) + # LitellmParams uses extra="allow" on the base; set streaming knobs dynamically + litellm_params.streaming_end_of_stream_only = False # type: ignore[attr-defined] + litellm_params.streaming_sampling_rate = 3 # type: ignore[attr-defined] + + guardrail_config = {"guardrail_name": "test-generic-streaming"} + + with patch( + "litellm.logging_callback_manager.add_litellm_callback" + ): + guardrail = initialize_guardrail(litellm_params, guardrail_config) + + assert guardrail.streaming_end_of_stream_only is False + assert guardrail.streaming_sampling_rate == 3 + + def test_initialize_guardrail_optional_params_defaults_do_not_shadow_top_level( + self, + ): + """Top-level streaming knobs win when optional_params only carries siblings.""" + from litellm.proxy.guardrails.guardrail_hooks.generic_guardrail_api import ( + initialize_guardrail, + ) + from litellm.types.guardrails import LitellmParams + from litellm.types.proxy.guardrails.guardrail_hooks.generic_guardrail_api import ( + GenericGuardrailAPIOptionalParams, + ) + + litellm_params = LitellmParams( + guardrail="generic_guardrail_api", + mode="post_call", + api_base="https://api.test.guardrail.com", + default_on=False, + ) + litellm_params.streaming_end_of_stream_only = True # type: ignore[attr-defined] + litellm_params.streaming_sampling_rate = 2 # type: ignore[attr-defined] + # Sibling optional_params only; streaming fields stay at Pydantic default None. + litellm_params.optional_params = GenericGuardrailAPIOptionalParams( # type: ignore[attr-defined] + additional_provider_specific_params={"tenant": "acme"}, + ) + + guardrail_config = {"guardrail_name": "test-generic-streaming-mixed"} + + with patch( + "litellm.logging_callback_manager.add_litellm_callback" + ): + guardrail = initialize_guardrail(litellm_params, guardrail_config) + + assert guardrail.streaming_end_of_stream_only is True + assert guardrail.streaming_sampling_rate == 2 + + def test_initialize_guardrail_explicit_optional_params_streaming_wins(self): + from litellm.proxy.guardrails.guardrail_hooks.generic_guardrail_api import ( + initialize_guardrail, + ) + from litellm.types.guardrails import LitellmParams + from litellm.types.proxy.guardrails.guardrail_hooks.generic_guardrail_api import ( + GenericGuardrailAPIOptionalParams, + ) + + litellm_params = LitellmParams( + guardrail="generic_guardrail_api", + mode="post_call", + api_base="https://api.test.guardrail.com", + default_on=False, + ) + litellm_params.streaming_end_of_stream_only = False # type: ignore[attr-defined] + litellm_params.streaming_sampling_rate = 9 # type: ignore[attr-defined] + litellm_params.optional_params = GenericGuardrailAPIOptionalParams( # type: ignore[attr-defined] + streaming_end_of_stream_only=True, + streaming_sampling_rate=1, + ) + + guardrail_config = {"guardrail_name": "test-generic-streaming-nested-wins"} + + with patch( + "litellm.logging_callback_manager.add_litellm_callback" + ): + guardrail = initialize_guardrail(litellm_params, guardrail_config) + + assert guardrail.streaming_end_of_stream_only is True + assert guardrail.streaming_sampling_rate == 1 + + def test_initialize_guardrail_dict_optional_params_streaming_wins(self): + """Guardrail API/UI delivers optional_params as a plain dict, not a model.""" + from litellm.proxy.guardrails.guardrail_hooks.generic_guardrail_api import ( + initialize_guardrail, + ) + from litellm.types.guardrails import LitellmParams + + litellm_params = LitellmParams( + guardrail="generic_guardrail_api", + mode="post_call", + api_base="https://api.test.guardrail.com", + default_on=False, + ) + litellm_params.streaming_end_of_stream_only = False # type: ignore[attr-defined] + litellm_params.streaming_sampling_rate = 9 # type: ignore[attr-defined] + # Plain dict mirrors how configs arrive from the guardrail API/UI. + litellm_params.optional_params = { # type: ignore[attr-defined] + "streaming_end_of_stream_only": True, + "streaming_sampling_rate": 1, + } + + guardrail_config = {"guardrail_name": "test-generic-streaming-dict-optional"} + + with patch( + "litellm.logging_callback_manager.add_litellm_callback" + ): + guardrail = initialize_guardrail(litellm_params, guardrail_config) + + assert guardrail.streaming_end_of_stream_only is True + assert guardrail.streaming_sampling_rate == 1 + + def test_initialize_guardrail_dict_optional_params_sibling_only_falls_through( + self, + ): + """Dict optional_params without streaming keys must not shadow top-level knobs.""" + from litellm.proxy.guardrails.guardrail_hooks.generic_guardrail_api import ( + initialize_guardrail, + ) + from litellm.types.guardrails import LitellmParams + + litellm_params = LitellmParams( + guardrail="generic_guardrail_api", + mode="post_call", + api_base="https://api.test.guardrail.com", + default_on=False, + ) + litellm_params.streaming_end_of_stream_only = True # type: ignore[attr-defined] + litellm_params.streaming_sampling_rate = 2 # type: ignore[attr-defined] + litellm_params.optional_params = { # type: ignore[attr-defined] + "additional_provider_specific_params": {"tenant": "acme"}, + } + + guardrail_config = {"guardrail_name": "test-generic-streaming-dict-sibling"} + + with patch( + "litellm.logging_callback_manager.add_litellm_callback" + ): + guardrail = initialize_guardrail(litellm_params, guardrail_config) + + assert guardrail.streaming_end_of_stream_only is True + assert guardrail.streaming_sampling_rate == 2 + + +class TestGenericGuardrailAPIStreamingViaUnified: + """Streaming output checks routed through UnifiedLLMGuardrails.""" + + @pytest.mark.asyncio + async def test_streaming_safe_content_yields_all_chunks(self): + from litellm.proxy.guardrails.guardrail_hooks.unified_guardrail.unified_guardrail import ( + UnifiedLLMGuardrails, + ) + + guardrail = GenericGuardrailAPI( + api_base="https://api.test.guardrail.com", + guardrail_name="test-generic-guardrail", + event_hook="post_call", + ) + unified_guardrail = UnifiedLLMGuardrails() + + async def mock_stream(): + chunks_data = ["Hello", " ", "world", "!", " Goodbye"] + for i, content in enumerate(chunks_data): + yield _make_stream_chunk( + content, + finish_reason="stop" if i == len(chunks_data) - 1 else None, + ) + + mock_post = AsyncMock( + return_value=_mock_guardrail_post_response( + action="NONE", texts=["Hello world! Goodbye"] + ) + ) + + with ( + patch.object(guardrail.async_handler, "post", mock_post), + patch( + "litellm.llms.openai.chat.guardrail_translation.handler.stream_chunk_builder", + return_value=_make_assembled_model_response("Hello world! Goodbye"), + ), + ): + user_api_key_dict = UserAPIKeyAuth( + api_key="test", request_route="/chat/completions" + ) + request_data = { + "messages": [{"role": "user", "content": "hi"}], + "guardrail_to_apply": guardrail, + "metadata": {"guardrails": ["test-generic-guardrail"]}, + } + + chunks_received = 0 + async for _ in unified_guardrail.async_post_call_streaming_iterator_hook( + user_api_key_dict=user_api_key_dict, + response=mock_stream(), + request_data=request_data, + ): + chunks_received += 1 + + assert chunks_received == 5 + assert mock_post.await_count >= 1 + + @pytest.mark.asyncio + async def test_streaming_blocked_content_raises(self): + from litellm.exceptions import GuardrailRaisedException + from litellm.proxy.guardrails.guardrail_hooks.unified_guardrail.unified_guardrail import ( + UnifiedLLMGuardrails, + ) + + guardrail = GenericGuardrailAPI( + api_base="https://api.test.guardrail.com", + guardrail_name="test-generic-guardrail", + event_hook="post_call", + streaming_sampling_rate=1, + ) + unified_guardrail = UnifiedLLMGuardrails() + + async def mock_stream(): + chunks_data = ["Hello", " ishaan", " here"] + for i, content in enumerate(chunks_data): + yield _make_stream_chunk( + content, + finish_reason="stop" if i == len(chunks_data) - 1 else None, + ) + + mock_post = AsyncMock( + return_value=_mock_guardrail_post_response( + action="BLOCKED", blocked_reason="Ishaan is not allowed" + ) + ) + + with ( + patch.object(guardrail.async_handler, "post", mock_post), + patch( + "litellm.llms.openai.chat.guardrail_translation.handler.stream_chunk_builder", + return_value=_make_assembled_model_response("Hello ishaan here"), + ), + ): + user_api_key_dict = UserAPIKeyAuth( + api_key="test", request_route="/chat/completions" + ) + request_data = { + "messages": [{"role": "user", "content": "hi"}], + "guardrail_to_apply": guardrail, + "metadata": {"guardrails": ["test-generic-guardrail"]}, + } + + with pytest.raises(GuardrailRaisedException) as exc_info: + async for _ in unified_guardrail.async_post_call_streaming_iterator_hook( + user_api_key_dict=user_api_key_dict, + response=mock_stream(), + request_data=request_data, + ): + pass + + assert "Ishaan is not allowed" in str(exc_info.value) + + @pytest.mark.asyncio + async def test_streaming_default_uses_sampled_cadence(self): + """Default samples every 5th chunk + final pass: 10 chunks → calls at 5, 10, and final = 3.""" + from litellm.proxy.guardrails.guardrail_hooks.unified_guardrail.unified_guardrail import ( + UnifiedLLMGuardrails, + ) + + guardrail = GenericGuardrailAPI( + api_base="https://api.test.guardrail.com", + guardrail_name="test-generic-guardrail", + event_hook="post_call", + ) + unified_guardrail = UnifiedLLMGuardrails() + + async def mock_stream(): + chunks_data = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"] + for i, content in enumerate(chunks_data): + yield _make_stream_chunk( + content, + finish_reason="stop" if i == len(chunks_data) - 1 else None, + ) + + mock_post = AsyncMock( + return_value=_mock_guardrail_post_response( + action="NONE", texts=["ABCDEFGHIJ"] + ) + ) + + with ( + patch.object(guardrail.async_handler, "post", mock_post), + patch( + "litellm.llms.openai.chat.guardrail_translation.handler.stream_chunk_builder", + return_value=_make_assembled_model_response("ABCDEFGHIJ"), + ), + ): + user_api_key_dict = UserAPIKeyAuth( + api_key="test", request_route="/chat/completions" + ) + request_data = { + "messages": [{"role": "user", "content": "hi"}], + "guardrail_to_apply": guardrail, + "metadata": {"guardrails": ["test-generic-guardrail"]}, + } + + async for _ in unified_guardrail.async_post_call_streaming_iterator_hook( + user_api_key_dict=user_api_key_dict, + response=mock_stream(), + request_data=request_data, + ): + pass + + assert mock_post.await_count == 3, ( + f"Expected 3 guardrail calls (2 sampled at chunks 5 / 10 + 1 final), " + f"got {mock_post.await_count}" + ) + for call in mock_post.await_args_list: + assert call.kwargs["json"]["input_type"] == "response" + + @pytest.mark.asyncio + async def test_streaming_end_of_stream_only_calls_guardrail_once(self): + from litellm.proxy.guardrails.guardrail_hooks.unified_guardrail.unified_guardrail import ( + UnifiedLLMGuardrails, + ) + + guardrail = GenericGuardrailAPI( + api_base="https://api.test.guardrail.com", + guardrail_name="test-generic-guardrail", + event_hook="post_call", + streaming_end_of_stream_only=True, + ) + unified_guardrail = UnifiedLLMGuardrails() + + async def mock_stream(): + chunks_data = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"] + for i, content in enumerate(chunks_data): + yield _make_stream_chunk( + content, + finish_reason="stop" if i == len(chunks_data) - 1 else None, + ) + + mock_post = AsyncMock( + return_value=_mock_guardrail_post_response( + action="NONE", texts=["ABCDEFGHIJ"] + ) + ) + + with ( + patch.object(guardrail.async_handler, "post", mock_post), + patch( + "litellm.llms.openai.chat.guardrail_translation.handler.stream_chunk_builder", + return_value=_make_assembled_model_response("ABCDEFGHIJ"), + ), + ): + user_api_key_dict = UserAPIKeyAuth( + api_key="test", request_route="/chat/completions" + ) + request_data = { + "messages": [{"role": "user", "content": "hi"}], + "guardrail_to_apply": guardrail, + "metadata": {"guardrails": ["test-generic-guardrail"]}, + } + + async for _ in unified_guardrail.async_post_call_streaming_iterator_hook( + user_api_key_dict=user_api_key_dict, + response=mock_stream(), + request_data=request_data, + ): + pass + + assert mock_post.await_count == 1, ( + f"Expected exactly one guardrail call at end of stream, " + f"got {mock_post.await_count}" + ) + + @pytest.mark.asyncio + async def test_streaming_sampling_rate_override(self): + """sampling_rate=2 on 6 chunks → in-stream at 2,4,6 plus final = 4 calls.""" + from litellm.proxy.guardrails.guardrail_hooks.unified_guardrail.unified_guardrail import ( + UnifiedLLMGuardrails, + ) + + guardrail = GenericGuardrailAPI( + api_base="https://api.test.guardrail.com", + guardrail_name="test-generic-guardrail", + event_hook="post_call", + streaming_end_of_stream_only=False, + streaming_sampling_rate=2, + ) + unified_guardrail = UnifiedLLMGuardrails() + + async def mock_stream(): + chunks_data = ["A", "B", "C", "D", "E", "F"] + for i, content in enumerate(chunks_data): + yield _make_stream_chunk( + content, + finish_reason="stop" if i == len(chunks_data) - 1 else None, + ) + + mock_post = AsyncMock( + return_value=_mock_guardrail_post_response(action="NONE", texts=["ABCDEF"]) + ) + + with ( + patch.object(guardrail.async_handler, "post", mock_post), + patch( + "litellm.llms.openai.chat.guardrail_translation.handler.stream_chunk_builder", + return_value=_make_assembled_model_response("ABCDEF"), + ), + ): + user_api_key_dict = UserAPIKeyAuth( + api_key="test", request_route="/chat/completions" + ) + request_data = { + "messages": [{"role": "user", "content": "hi"}], + "guardrail_to_apply": guardrail, + "metadata": {"guardrails": ["test-generic-guardrail"]}, + } + + async for _ in unified_guardrail.async_post_call_streaming_iterator_hook( + user_api_key_dict=user_api_key_dict, + response=mock_stream(), + request_data=request_data, + ): + pass + + assert mock_post.await_count == 4, ( + f"Expected 4 guardrail calls (3 sampled + 1 final aggregate), " + f"got {mock_post.await_count}" + ) + + @pytest.mark.asyncio + async def test_streaming_fail_open_on_unreachable_continues_stream(self): + from litellm.proxy.guardrails.guardrail_hooks.unified_guardrail.unified_guardrail import ( + UnifiedLLMGuardrails, + ) + + guardrail = GenericGuardrailAPI( + api_base="https://api.test.guardrail.com", + guardrail_name="test-generic-guardrail", + event_hook="post_call", + unreachable_fallback="fail_open", + streaming_end_of_stream_only=True, + ) + unified_guardrail = UnifiedLLMGuardrails() + + async def mock_stream(): + for i, content in enumerate(["A", "B", "C"]): + yield _make_stream_chunk( + content, finish_reason="stop" if i == 2 else None + ) + + mock_post = AsyncMock(side_effect=httpx.ConnectError("connection refused")) + + with ( + patch.object(guardrail.async_handler, "post", mock_post), + patch( + "litellm.llms.openai.chat.guardrail_translation.handler.stream_chunk_builder", + return_value=_make_assembled_model_response("ABC"), + ), + ): + user_api_key_dict = UserAPIKeyAuth( + api_key="test", request_route="/chat/completions" + ) + request_data = { + "messages": [{"role": "user", "content": "hi"}], + "guardrail_to_apply": guardrail, + "metadata": {"guardrails": ["test-generic-guardrail"]}, + } + + chunks_received = 0 + async for _ in unified_guardrail.async_post_call_streaming_iterator_hook( + user_api_key_dict=user_api_key_dict, + response=mock_stream(), + request_data=request_data, + ): + chunks_received += 1 + + assert chunks_received == 3 + + @pytest.mark.asyncio + async def test_responses_api_streaming_end_of_stream_only_calls_guardrail_once(self): + """/v1/responses path through unified hook; end-of-stream-only = one call.""" + from litellm.proxy.guardrails.guardrail_hooks.unified_guardrail.unified_guardrail import ( + UnifiedLLMGuardrails, + ) + + guardrail = GenericGuardrailAPI( + api_base="https://api.test.guardrail.com", + guardrail_name="test-generic-guardrail", + event_hook="post_call", + streaming_end_of_stream_only=True, + ) + unified_guardrail = UnifiedLLMGuardrails() + + async def mock_responses_stream(): + for event in _make_responses_stream_events("Hello world"): + yield event + + mock_post = AsyncMock( + return_value=_mock_guardrail_post_response( + action="NONE", texts=["Hello world"] + ) + ) + + with patch.object(guardrail.async_handler, "post", mock_post): + user_api_key_dict = UserAPIKeyAuth( + api_key="test", request_route="/v1/responses" + ) + request_data = { + "input": "hi", + "guardrail_to_apply": guardrail, + "metadata": {"guardrails": ["test-generic-guardrail"]}, + } + + events_received = 0 + async for _ in unified_guardrail.async_post_call_streaming_iterator_hook( + user_api_key_dict=user_api_key_dict, + response=mock_responses_stream(), + request_data=request_data, + ): + events_received += 1 + + assert events_received == 6 + assert mock_post.await_count == 1, ( + f"Expected exactly one guardrail call at end of /v1/responses stream, " + f"got {mock_post.await_count}" + ) + assert mock_post.await_args.kwargs["json"]["input_type"] == "response" + + @pytest.mark.asyncio + async def test_responses_api_streaming_blocked_raises(self): + """Mid-stream BLOCKED on /v1/responses surfaces GuardrailRaisedException.""" + from litellm.exceptions import GuardrailRaisedException + from litellm.proxy.guardrails.guardrail_hooks.unified_guardrail.unified_guardrail import ( + UnifiedLLMGuardrails, + ) + + guardrail = GenericGuardrailAPI( + api_base="https://api.test.guardrail.com", + guardrail_name="test-generic-guardrail", + event_hook="post_call", + streaming_sampling_rate=1, + ) + unified_guardrail = UnifiedLLMGuardrails() + + async def mock_responses_stream(): + for event in _make_responses_stream_events("blocked content"): + yield event + + mock_post = AsyncMock( + return_value=_mock_guardrail_post_response( + action="BLOCKED", blocked_reason="Responses content not allowed" + ) + ) + + with patch.object(guardrail.async_handler, "post", mock_post): + user_api_key_dict = UserAPIKeyAuth( + api_key="test", request_route="/v1/responses" + ) + request_data = { + "input": "hi", + "guardrail_to_apply": guardrail, + "metadata": {"guardrails": ["test-generic-guardrail"]}, + } + + with pytest.raises(GuardrailRaisedException) as exc_info: + async for _ in unified_guardrail.async_post_call_streaming_iterator_hook( + user_api_key_dict=user_api_key_dict, + response=mock_responses_stream(), + request_data=request_data, + ): + pass + + assert "Responses content not allowed" in str(exc_info.value) + class TestToolSupport: """Test tool handling in guardrail requests""" From fecaf5c9e525a50d1d49b4ce9df5ec1e5f699cfc Mon Sep 17 00:00:00 2001 From: Mateo Wang <277851410+mateo-berri@users.noreply.github.com> Date: Tue, 30 Jun 2026 11:00:30 -0700 Subject: [PATCH 18/79] feat(router): tag routing denylist support via ! prefix (#31728) Adds `!` prefix negation to tag-based routing so callers can exclude deployments by exact tag value without enumerating every allowed alternative. `!provider:anthropic` removes all deployments tagged exactly `provider:anthropic` before routing, and positive and negation tags compose. Matching is exact literal membership (frozenset intersection), so there is no regex or ReDoS surface for client-supplied tags. Ban-only requests that carry only negation tags stay within the default pool, mirroring untagged-request semantics so callers can't use negation to escape it. Fallback chains keep working because get_deployments_for_tag runs on each routing hop Copy of #31680; implementation credit to @deepanshululla Co-authored-by: deepanshululla <15312873+deepanshululla@users.noreply.github.com> --- litellm/router_strategy/tag_based_routing.py | 107 ++- .../test_router_tag_routing.py | 662 ++++++++++++++++-- 2 files changed, 674 insertions(+), 95 deletions(-) diff --git a/litellm/router_strategy/tag_based_routing.py b/litellm/router_strategy/tag_based_routing.py index 65e76ba909b..6ca4e1de322 100644 --- a/litellm/router_strategy/tag_based_routing.py +++ b/litellm/router_strategy/tag_based_routing.py @@ -7,7 +7,7 @@ Use this to route requests between Teams """ import re -from typing import TYPE_CHECKING, Any, Dict, List, Literal, Optional, Union +from typing import TYPE_CHECKING, Any, Literal, Optional, Union from litellm._logging import verbose_logger from litellm.types.router import RouterErrors @@ -21,8 +21,8 @@ else: def _is_valid_deployment_tag_regex( - tag_regexes: List[str], - header_strings: List[str], + tag_regexes: list[str], + header_strings: list[str], ) -> Optional[str]: """ Test compiled regex patterns against "Header-Name: value" strings. @@ -43,7 +43,7 @@ def _is_valid_deployment_tag_regex( return None -def is_valid_deployment_tag(deployment_tags: List[str], request_tags: List[str], match_any: bool = True) -> bool: +def is_valid_deployment_tag(deployment_tags: list[str], request_tags: list[str], match_any: bool = True) -> bool: """ Check if a tag is valid, the matching can be either any or all based on `match_any` flag """ @@ -71,10 +71,10 @@ def is_valid_deployment_tag(deployment_tags: List[str], request_tags: List[str], def _match_deployment( deployment: Any, - request_tags: Optional[List[str]], - header_strings: List[str], + request_tags: Optional[list[str]], + header_strings: list[str], match_any: bool, -) -> Optional[Dict[str, str]]: +) -> Optional[dict[str, str]]: """ Determine whether *deployment* matches the current request. @@ -87,8 +87,8 @@ def _match_deployment( ran and failed, so the regex cannot override strict-tag policy. """ litellm_params = deployment.get("litellm_params", {}) - deployment_tags: Optional[List[str]] = litellm_params.get("tags") - deployment_tag_regex: Optional[List[str]] = litellm_params.get("tag_regex") + deployment_tags: Optional[list[str]] = litellm_params.get("tags") + deployment_tag_regex: Optional[list[str]] = litellm_params.get("tag_regex") # 1. Exact tag match (existing behaviour). if deployment_tags and request_tags: @@ -114,11 +114,46 @@ def _match_deployment( return None +def _split_tags(tags: list[str]) -> tuple[list[str], list[str]]: + positive = [t for t in tags if not t.startswith("!")] + excluded = [tag[1:] for tag in tags if tag.startswith("!") and len(tag) > 1] + return positive, excluded + + +def _exclude_deployments( + deployments: Union[list[Any], dict[Any, Any]], + excluded_set: frozenset[str], +) -> list[Any]: + if not excluded_set: + return list(deployments) + return [d for d in deployments if not excluded_set.intersection(d.get("litellm_params", {}).get("tags") or [])] + + +def _require_candidates( + candidates: list[Any], + model: str, + request_tags: Any, +) -> list[Any]: + if not candidates: + raise ValueError( + f"{RouterErrors.no_deployments_with_tag_routing.value}. Passed model={model} and tags={request_tags}" + ) + return candidates + + +def _ban_only_base_pool( + deployments: Union[list[Any], dict[Any, Any]], +) -> list[Any]: + # Mirrors untagged-request semantics so callers can't use !tags to escape the default pool. + defaults = [d for d in deployments if "default" in (d.get("litellm_params", {}).get("tags") or [])] + return defaults if defaults else list(deployments) + + async def get_deployments_for_tag( llm_router_instance: LitellmRouter, model: str, # used to raise the correct error - healthy_deployments: Union[List[Any], Dict[Any, Any]], - request_kwargs: Optional[Dict[Any, Any]] = None, + healthy_deployments: Union[list[Any], dict[Any, Any]], + request_kwargs: Optional[dict[Any, Any]] = None, metadata_variable_name: Literal["metadata", "litellm_metadata"] = "metadata", ): """ @@ -136,13 +171,8 @@ async def get_deployments_for_tag( ) return healthy_deployments - if healthy_deployments is None: - verbose_logger.debug("get_deployments_for_tag: healthy_deployments is None returning healthy_deployments") - return healthy_deployments - - # Tag filtering applies only when there is at least one deployment to evaluate. - if isinstance(healthy_deployments, list) and len(healthy_deployments) == 0: - verbose_logger.debug("get_deployments_for_tag: empty candidate set; skipping tag filter") + if not healthy_deployments: + verbose_logger.debug("get_deployments_for_tag: empty or None healthy_deployments; skipping tag filter") return healthy_deployments verbose_logger.debug("request metadata: %s", request_kwargs.get(metadata_variable_name)) @@ -154,30 +184,36 @@ async def get_deployments_for_tag( # Build header strings for regex matching from what the proxy already stores. # Currently we match against User-Agent; format matches "^User-Agent: claude-code/..." user_agent = metadata.get("user_agent", "") - header_strings: List[str] = [f"User-Agent: {user_agent}"] if user_agent else [] + header_strings: list[str] = [f"User-Agent: {user_agent}"] if user_agent else [] - new_healthy_deployments: List[Any] = [] - default_deployments: List[Any] = [] + positive_tags, excluded_patterns = _split_tags(request_tags or []) + + excluded_set = frozenset(excluded_patterns) + candidates = _exclude_deployments(healthy_deployments, excluded_set) + + has_regex_deployments = any(d.get("litellm_params", {}).get("tag_regex") for d in candidates) + has_tag_filter = bool(positive_tags) or (bool(header_strings) and has_regex_deployments) + ban_only = bool(excluded_set) and not has_tag_filter + + if ban_only: + pool = _exclude_deployments(_ban_only_base_pool(healthy_deployments), excluded_set) + return _require_candidates(pool, model, request_tags) + + new_healthy_deployments: list[Any] = [] + default_deployments: list[Any] = [] - # Only activate header-based regex filtering when at least one deployment in - # the candidate set has tag_regex configured. This preserves existing - # behaviour for operators who use plain tags: a request that carries a - # User-Agent (all proxy requests do) but targets deployments with no - # tag_regex will continue to use the original tag-only code path. - has_regex_deployments = any(d.get("litellm_params", {}).get("tag_regex") for d in healthy_deployments) - has_tag_filter = bool(request_tags) or (bool(header_strings) and has_regex_deployments) if has_tag_filter: verbose_logger.debug( "get_deployments_for_tag routing: request_tags=%s user_agent=%s", request_tags, user_agent, ) - for deployment in healthy_deployments: + for deployment in candidates: deployment_tags = deployment.get("litellm_params", {}).get("tags") match_result = _match_deployment( deployment=deployment, - request_tags=request_tags, + request_tags=positive_tags, header_strings=header_strings, match_any=match_any, ) @@ -189,10 +225,6 @@ async def get_deployments_for_tag( match_result["matched_via"], match_result["matched_value"], ) - # Record provenance in metadata so it flows to SpendLogs. - # Written only for the first match — load balancer selects one - # deployment from new_healthy_deployments, so overwriting on - # subsequent matches would produce misleading observability data. if "tag_routing" not in metadata: metadata["tag_routing"] = { "matched_deployment": deployment.get("model_name"), @@ -208,7 +240,8 @@ async def get_deployments_for_tag( if len(new_healthy_deployments) == 0 and len(default_deployments) == 0: raise ValueError( - f"{RouterErrors.no_deployments_with_tag_routing.value}. Passed model={model} and tags={request_tags}" + f"{RouterErrors.no_deployments_with_tag_routing.value}." + f" Passed model={model} and tags={request_tags}" ) return new_healthy_deployments if len(new_healthy_deployments) > 0 else default_deployments @@ -231,9 +264,9 @@ async def get_deployments_for_tag( def _get_tags_from_request_kwargs( - request_kwargs: Optional[Dict[Any, Any]] = None, + request_kwargs: Optional[dict[Any, Any]] = None, metadata_variable_name: Literal["metadata", "litellm_metadata"] = "metadata", -) -> List[str]: +) -> list[str]: """ Helper to get tags from request kwargs diff --git a/tests/test_litellm/router_strategy/test_router_tag_routing.py b/tests/test_litellm/router_strategy/test_router_tag_routing.py index a6e39ec3c0a..eb289095c51 100644 --- a/tests/test_litellm/router_strategy/test_router_tag_routing.py +++ b/tests/test_litellm/router_strategy/test_router_tag_routing.py @@ -1,29 +1,17 @@ #### What this tests #### # This tests litellm router -import asyncio import os import sys -import time -import traceback -import openai import pytest -sys.path.insert( - 0, os.path.abspath("../..") -) # Adds the parent directory to the system path +sys.path.insert(0, os.path.abspath("../..")) # Adds the parent directory to the system path import logging import os -from collections import defaultdict -from concurrent.futures import ThreadPoolExecutor -from unittest.mock import AsyncMock, MagicMock, patch -import httpx -from dotenv import load_dotenv import litellm -from litellm import Router from litellm._logging import verbose_logger @@ -66,10 +54,7 @@ async def test_router_free_paid_tier(): mock_response="Tell me a joke.", ) - print("Response: ", response) - response_extra_info = response._hidden_params - print("response_extra_info: ", response_extra_info) assert response_extra_info["model_id"] == "very-cheap-model" @@ -82,10 +67,7 @@ async def test_router_free_paid_tier(): mock_response="Tell me a joke.", ) - print("Response: ", response) - response_extra_info = response._hidden_params - print("response_extra_info: ", response_extra_info) assert response_extra_info["model_id"] == "very-expensive-model" @@ -141,10 +123,7 @@ async def test_router_free_paid_tier_embeddings(): mock_response=[1, 2, 3], ) - print("Response: ", response) - response_extra_info = response._hidden_params - print("response_extra_info: ", response_extra_info) assert response_extra_info["model_id"] == "very-cheap-model" @@ -157,10 +136,7 @@ async def test_router_free_paid_tier_embeddings(): mock_response=[1, 2, 3], ) - print("Response: ", response) - response_extra_info = response._hidden_params - print("response_extra_info: ", response_extra_info) assert response_extra_info["model_id"] == "very-expensive-model" @@ -212,10 +188,7 @@ async def test_default_tagged_deployments(): mock_response="Tell me a joke.", ) - print("Response: ", response) - response_extra_info = response._hidden_params - print("response_extra_info: ", response_extra_info) assert response_extra_info["model_id"] == "default-model" @@ -228,10 +201,7 @@ async def test_default_tagged_deployments(): mock_response="Tell me a joke.", ) - print("Response: ", response) - response_extra_info = response._hidden_params - print("response_extra_info: ", response_extra_info) assert response_extra_info["model_id"] == "default-model" @@ -244,10 +214,7 @@ async def test_default_tagged_deployments(): mock_response="Tell me a joke.", ) - print("Response: ", response) - response_extra_info = response._hidden_params - print("response_extra_info: ", response_extra_info) assert response_extra_info["model_id"] == "default-model" @@ -257,10 +224,6 @@ async def test_error_from_tag_routing(): """ Tests the correct error raised when no deployments found for tag """ - import logging - - from litellm._logging import verbose_logger - verbose_logger.setLevel(logging.DEBUG) router = litellm.Router( model_list=[ @@ -294,7 +257,7 @@ async def test_error_from_tag_routing(): ) try: - response = await router.acompletion( + await router.acompletion( model="gpt-4", messages=[{"role": "user", "content": "Tell me a joke."}], metadata={"tags": ["paid"]}, @@ -306,7 +269,6 @@ async def test_error_from_tag_routing(): from litellm.types.router import RouterErrors assert RouterErrors.no_deployments_with_tag_routing.value in str(e) - print("got expected exception = ", e) pass @@ -332,16 +294,10 @@ def test_tag_routing_with_list_of_tags_match_all(): from litellm.router_strategy.tag_based_routing import is_valid_deployment_tag assert is_valid_deployment_tag(["teamA", "teamB"], ["teamA"], match_any=False) - assert is_valid_deployment_tag( - ["teamA", "teamB"], ["teamA", "teamB"], match_any=False - ) - assert not is_valid_deployment_tag( - ["teamA", "teamB", "teamC"], ["teamA", "teamD"], match_any=False - ) + assert is_valid_deployment_tag(["teamA", "teamB"], ["teamA", "teamB"], match_any=False) + assert not is_valid_deployment_tag(["teamA", "teamB", "teamC"], ["teamA", "teamD"], match_any=False) assert not is_valid_deployment_tag(["teamA"], ["teamA", "teamB"], match_any=False) - assert not is_valid_deployment_tag( - ["teamA", "teamB"], ["teamA", "teamC"], match_any=False - ) + assert not is_valid_deployment_tag(["teamA", "teamB"], ["teamA", "teamC"], match_any=False) assert not is_valid_deployment_tag(["teamA", "teamB"], [], match_any=False) assert not is_valid_deployment_tag(["default"], ["teamA"], match_any=False) @@ -413,10 +369,7 @@ async def test_router_free_paid_tier_with_responses_api(): mock_response="Tell me a joke.", ) - print("Response: ", response) - response_extra_info = response._hidden_params - print("response_extra_info: ", response_extra_info) assert response_extra_info["model_id"] == "very-cheap-model" @@ -429,10 +382,7 @@ async def test_router_free_paid_tier_with_responses_api(): mock_response="Tell me a joke.", ) - print("Response: ", response) - response_extra_info = response._hidden_params - print("response_extra_info: ", response_extra_info) assert response_extra_info["model_id"] == "very-expensive-model" @@ -455,9 +405,7 @@ def test_get_tags_from_request_kwargs_various_inputs(): assert _get_tags_from_request_kwargs({"metadata": None}) == [] # Indirect via "litellm_params" - metadata inside - assert _get_tags_from_request_kwargs( - {"litellm_params": {"metadata": {"tags": ["paid"]}}} - ) == ["paid"] + assert _get_tags_from_request_kwargs({"litellm_params": {"metadata": {"tags": ["paid"]}}}) == ["paid"] assert _get_tags_from_request_kwargs({"litellm_params": {"metadata": None}}) == [] assert _get_tags_from_request_kwargs({"litellm_params": {}}) == [] @@ -473,3 +421,601 @@ def test_get_tags_from_request_kwargs_various_inputs(): # No relevant keys present assert _get_tags_from_request_kwargs({"foo": "bar"}) == [] + + +# --- _split_tags unit tests --- + + +def test_split_tags_positive_only(): + from litellm.router_strategy.tag_based_routing import _split_tags + + positive, excluded = _split_tags(["paid", "teamA"]) + assert positive == ["paid", "teamA"] + assert excluded == [] + + +def test_split_tags_negation_only(): + from litellm.router_strategy.tag_based_routing import _split_tags + + positive, excluded = _split_tags(["!provider:anthropic"]) + assert positive == [] + assert excluded == ["provider:anthropic"] + + +def test_split_tags_mixed(): + from litellm.router_strategy.tag_based_routing import _split_tags + + positive, excluded = _split_tags(["paid", "!provider:anthropic", "!inference:cerebras"]) + assert positive == ["paid"] + assert len(excluded) == 2 + + +def test_split_tags_bare_bang_skipped(): + from litellm.router_strategy.tag_based_routing import _split_tags + + # A bare "!" with nothing after it is not a valid negation tag; skip it + positive, excluded = _split_tags(["paid", "!"]) + assert positive == ["paid"] + assert excluded == [] + + +def test_split_tags_empty(): + from litellm.router_strategy.tag_based_routing import _split_tags + + positive, excluded = _split_tags([]) + assert positive == [] + assert excluded == [] + + +# --- get_deployments_for_tag negation integration tests --- + + +@pytest.mark.asyncio() +async def test_negation_excludes_matching_deployments(): + router = litellm.Router( + model_list=[ + { + "model_name": "gpt-4", + "litellm_params": { + "model": "gpt-4o", + "api_base": "https://exampleopenaiendpoint-production.up.railway.app/", + "tags": ["provider:anthropic", "model:claude-sonnet-4-6"], + }, + "model_info": {"id": "anthropic-model"}, + }, + { + "model_name": "gpt-4", + "litellm_params": { + "model": "gpt-4o-mini", + "api_base": "https://exampleopenaiendpoint-production.up.railway.app/", + "tags": ["provider:openai", "model:gpt-4o"], + }, + "model_info": {"id": "openai-model"}, + }, + ], + enable_tag_filtering=True, + ) + + for _ in range(5): + response = await router.acompletion( + model="gpt-4", + messages=[{"role": "user", "content": "hi"}], + metadata={"tags": ["!provider:anthropic"]}, + mock_response="hi", + ) + assert response._hidden_params["model_id"] == "openai-model" + + +@pytest.mark.asyncio() +async def test_negation_multiple_tags_exclude_multiple_providers(): + router = litellm.Router( + model_list=[ + { + "model_name": "gpt-4", + "litellm_params": { + "model": "gpt-4o", + "api_base": "https://exampleopenaiendpoint-production.up.railway.app/", + "tags": ["provider:anthropic"], + }, + "model_info": {"id": "anthropic-model"}, + }, + { + "model_name": "gpt-4", + "litellm_params": { + "model": "gpt-4o-mini", + "api_base": "https://exampleopenaiendpoint-production.up.railway.app/", + "tags": ["provider:openai"], + }, + "model_info": {"id": "openai-model"}, + }, + { + "model_name": "gpt-4", + "litellm_params": { + "model": "gpt-4o", + "api_base": "https://exampleopenaiendpoint-production.up.railway.app/", + "tags": ["provider:vertex"], + }, + "model_info": {"id": "vertex-model"}, + }, + ], + enable_tag_filtering=True, + ) + + for _ in range(5): + response = await router.acompletion( + model="gpt-4", + messages=[{"role": "user", "content": "hi"}], + metadata={"tags": ["!provider:anthropic", "!provider:openai"]}, + mock_response="hi", + ) + assert response._hidden_params["model_id"] == "vertex-model" + + +@pytest.mark.asyncio() +async def test_negation_with_positive_tag(): + router = litellm.Router( + model_list=[ + { + "model_name": "gpt-4", + "litellm_params": { + "model": "gpt-4o", + "api_base": "https://exampleopenaiendpoint-production.up.railway.app/", + "tags": ["paid", "provider:anthropic"], + }, + "model_info": {"id": "anthropic-paid"}, + }, + { + "model_name": "gpt-4", + "litellm_params": { + "model": "gpt-4o-mini", + "api_base": "https://exampleopenaiendpoint-production.up.railway.app/", + "tags": ["paid", "provider:openai"], + }, + "model_info": {"id": "openai-paid"}, + }, + { + "model_name": "gpt-4", + "litellm_params": { + "model": "gpt-4o", + "api_base": "https://exampleopenaiendpoint-production.up.railway.app/", + "tags": ["free", "provider:openai"], + }, + "model_info": {"id": "openai-free"}, + }, + ], + enable_tag_filtering=True, + ) + + for _ in range(5): + response = await router.acompletion( + model="gpt-4", + messages=[{"role": "user", "content": "hi"}], + metadata={"tags": ["paid", "!provider:anthropic"]}, + mock_response="hi", + ) + assert response._hidden_params["model_id"] == "openai-paid" + + +@pytest.mark.asyncio() +async def test_negation_all_excluded_raises(): + router = litellm.Router( + model_list=[ + { + "model_name": "gpt-4", + "litellm_params": { + "model": "gpt-4o", + "api_base": "https://exampleopenaiendpoint-production.up.railway.app/", + "tags": ["provider:anthropic"], + }, + "model_info": {"id": "anthropic-model"}, + }, + ], + enable_tag_filtering=True, + ) + + with pytest.raises(Exception) as exc_info: + await router.acompletion( + model="gpt-4", + messages=[{"role": "user", "content": "hi"}], + metadata={"tags": ["!provider:anthropic"]}, + mock_response="hi", + ) + + from litellm.types.router import RouterErrors + + assert RouterErrors.no_deployments_with_tag_routing.value in str(exc_info.value) + + +@pytest.mark.asyncio() +async def test_negation_ban_only_cannot_escape_default_pool(): + # A ban-only request must not route to tagged deployments outside the default pool. + router = litellm.Router( + model_list=[ + { + "model_name": "gpt-4", + "litellm_params": { + "model": "gpt-4o", + "api_base": "https://exampleopenaiendpoint-production.up.railway.app/", + "tags": ["default"], + }, + "model_info": {"id": "default-model"}, + }, + { + "model_name": "gpt-4", + "litellm_params": { + "model": "gpt-4o-mini", + "api_base": "https://exampleopenaiendpoint-production.up.railway.app/", + "tags": ["paid"], + }, + "model_info": {"id": "paid-model"}, + }, + ], + enable_tag_filtering=True, + ) + + # Sending only "!default" must NOT route to the paid deployment. + # The base pool for ban-only is the default pool; banning the only + # default deployment should raise rather than falling through to paid. + with pytest.raises(Exception) as exc_info: + await router.acompletion( + model="gpt-4", + messages=[{"role": "user", "content": "hi"}], + metadata={"tags": ["!default"]}, + mock_response="hi", + ) + + from litellm.types.router import RouterErrors + + assert RouterErrors.no_deployments_with_tag_routing.value in str(exc_info.value) + + +@pytest.mark.asyncio() +async def test_negation_ban_only_respects_default_pool(): + # A ban-only request stays within the default pool; non-default deployments + # remain unreachable even when the negation tag is unrelated to the default. + router = litellm.Router( + model_list=[ + { + "model_name": "gpt-4", + "litellm_params": { + "model": "gpt-4o", + "api_base": "https://exampleopenaiendpoint-production.up.railway.app/", + "tags": ["default"], + }, + "model_info": {"id": "default-model"}, + }, + { + "model_name": "gpt-4", + "litellm_params": { + "model": "gpt-4o-mini", + "api_base": "https://exampleopenaiendpoint-production.up.railway.app/", + "tags": ["paid"], + }, + "model_info": {"id": "paid-model"}, + }, + ], + enable_tag_filtering=True, + ) + + # "!paid" bans the paid deployment, but the base pool for ban-only is + # already restricted to defaults; default-model must still be returned. + for _ in range(5): + response = await router.acompletion( + model="gpt-4", + messages=[{"role": "user", "content": "hi"}], + metadata={"tags": ["!paid"]}, + mock_response="hi", + ) + assert response._hidden_params["model_id"] == "default-model" + + +@pytest.mark.asyncio() +async def test_negation_untagged_deployment_kept(): + router = litellm.Router( + model_list=[ + { + "model_name": "gpt-4", + "litellm_params": { + "model": "gpt-4o", + "api_base": "https://exampleopenaiendpoint-production.up.railway.app/", + "tags": ["provider:anthropic"], + }, + "model_info": {"id": "anthropic-model"}, + }, + { + "model_name": "gpt-4", + "litellm_params": { + "model": "gpt-4o-mini", + "api_base": "https://exampleopenaiendpoint-production.up.railway.app/", + }, + "model_info": {"id": "untagged-model"}, + }, + ], + enable_tag_filtering=True, + ) + + for _ in range(5): + response = await router.acompletion( + model="gpt-4", + messages=[{"role": "user", "content": "hi"}], + metadata={"tags": ["!provider:anthropic"]}, + mock_response="hi", + ) + assert response._hidden_params["model_id"] == "untagged-model" + + +@pytest.mark.asyncio() +async def test_negation_literal_only_no_partial_match(): + router = litellm.Router( + model_list=[ + { + "model_name": "gpt-4", + "litellm_params": { + "model": "gpt-4o", + "api_base": "https://exampleopenaiendpoint-production.up.railway.app/", + "tags": ["provider:anthropic-haiku"], + }, + "model_info": {"id": "anthropic-haiku-model"}, + }, + { + "model_name": "gpt-4", + "litellm_params": { + "model": "gpt-4o-mini", + "api_base": "https://exampleopenaiendpoint-production.up.railway.app/", + "tags": ["provider:openai"], + }, + "model_info": {"id": "openai-model"}, + }, + ], + enable_tag_filtering=True, + ) + + # "!provider:anthropic" should NOT match "provider:anthropic-haiku" — exact tag match only + for _ in range(5): + response = await router.acompletion( + model="gpt-4", + messages=[{"role": "user", "content": "hi"}], + metadata={"tags": ["!provider:anthropic"]}, + mock_response="hi", + ) + assert response._hidden_params["model_id"] in ( + "anthropic-haiku-model", + "openai-model", + ) + + +@pytest.mark.asyncio() +async def test_negation_regex_pattern_treated_as_literal(): + # "!provider:(anthropic|openai)" looks like a regex but is treated as a literal string. + # It does NOT exclude deployments tagged "provider:anthropic" or "provider:openai". + router = litellm.Router( + model_list=[ + { + "model_name": "gpt-4", + "litellm_params": { + "model": "gpt-4o", + "api_base": "https://exampleopenaiendpoint-production.up.railway.app/", + "tags": ["provider:anthropic"], + }, + "model_info": {"id": "anthropic-model"}, + }, + { + "model_name": "gpt-4", + "litellm_params": { + "model": "gpt-4o-mini", + "api_base": "https://exampleopenaiendpoint-production.up.railway.app/", + "tags": ["provider:openai"], + }, + "model_info": {"id": "openai-model"}, + }, + ], + enable_tag_filtering=True, + ) + + # The regex-like string matches no deployment tag literally, so all + # candidates survive and both model IDs are reachable. + seen_ids = set() + for _ in range(10): + response = await router.acompletion( + model="gpt-4", + messages=[{"role": "user", "content": "hi"}], + metadata={"tags": ["!provider:(anthropic|openai)"]}, + mock_response="hi", + ) + seen_ids.add(response._hidden_params["model_id"]) + + assert seen_ids == {"anthropic-model", "openai-model"} + + +@pytest.mark.asyncio() +async def test_positive_tags_unchanged_by_negation(): + router = litellm.Router( + model_list=[ + { + "model_name": "gpt-4", + "litellm_params": { + "model": "gpt-4o", + "api_base": "https://exampleopenaiendpoint-production.up.railway.app/", + "tags": ["free"], + }, + "model_info": {"id": "free-model"}, + }, + { + "model_name": "gpt-4", + "litellm_params": { + "model": "gpt-4o-mini", + "api_base": "https://exampleopenaiendpoint-production.up.railway.app/", + "tags": ["paid"], + }, + "model_info": {"id": "paid-model"}, + }, + ], + enable_tag_filtering=True, + ) + + for _ in range(5): + response = await router.acompletion( + model="gpt-4", + messages=[{"role": "user", "content": "hi"}], + metadata={"tags": ["free"]}, + mock_response="hi", + ) + assert response._hidden_params["model_id"] == "free-model" + + +@pytest.mark.asyncio() +async def test_negation_skips_banned_group_and_uses_fallback(): + router = litellm.Router( + model_list=[ + { + "model_name": "primary", + "litellm_params": { + "model": "gpt-4o", + "api_base": "https://exampleopenaiendpoint-production.up.railway.app/", + "tags": ["provider:anthropic"], + }, + "model_info": {"id": "anthropic-primary"}, + }, + { + "model_name": "fallback", + "litellm_params": { + "model": "gpt-4o-mini", + "api_base": "https://exampleopenaiendpoint-production.up.railway.app/", + "tags": ["provider:openai"], + }, + "model_info": {"id": "openai-fallback"}, + }, + ], + fallbacks=[{"primary": ["fallback"]}], + enable_tag_filtering=True, + ) + + response = await router.acompletion( + model="primary", + messages=[{"role": "user", "content": "hi"}], + metadata={"tags": ["!provider:anthropic"]}, + mock_response="hi", + ) + assert response._hidden_params["model_id"] == "openai-fallback" + + +@pytest.mark.asyncio() +async def test_negation_exhausts_entire_fallback_chain(): + router = litellm.Router( + model_list=[ + { + "model_name": "primary", + "litellm_params": { + "model": "gpt-4o", + "api_base": "https://exampleopenaiendpoint-production.up.railway.app/", + "tags": ["provider:anthropic"], + }, + "model_info": {"id": "anthropic-primary"}, + }, + { + "model_name": "fallback", + "litellm_params": { + "model": "gpt-4o", + "api_base": "https://exampleopenaiendpoint-production.up.railway.app/", + "tags": ["provider:anthropic"], + }, + "model_info": {"id": "anthropic-fallback"}, + }, + ], + fallbacks=[{"primary": ["fallback"]}], + enable_tag_filtering=True, + ) + + with pytest.raises(Exception) as exc_info: + await router.acompletion( + model="primary", + messages=[{"role": "user", "content": "hi"}], + metadata={"tags": ["!provider:anthropic"]}, + mock_response="hi", + ) + + from litellm.types.router import RouterErrors + + assert RouterErrors.no_deployments_with_tag_routing.value in str(exc_info.value) + + +@pytest.mark.asyncio() +async def test_tag_regex_survives_when_negation_removes_other_deployment(): + # Negation removes a plain-tagged deployment; the surviving tag_regex deployment + # is still matched by User-Agent and selected. + router = litellm.Router( + model_list=[ + { + "model_name": "gpt-4", + "litellm_params": { + "model": "gpt-4o", + "api_base": "https://exampleopenaiendpoint-production.up.railway.app/", + "tag_regex": ["^User-Agent: claude-code\\/"], + }, + "model_info": {"id": "claude-code-deployment"}, + }, + { + "model_name": "gpt-4", + "litellm_params": { + "model": "gpt-4o-mini", + "api_base": "https://exampleopenaiendpoint-production.up.railway.app/", + "tags": ["provider:anthropic"], + }, + "model_info": {"id": "anthropic-deployment"}, + }, + ], + enable_tag_filtering=True, + tag_filtering_match_any=True, + ) + + for _ in range(5): + response = await router.acompletion( + model="gpt-4", + messages=[{"role": "user", "content": "hi"}], + metadata={"tags": ["!provider:anthropic"], "user_agent": "claude-code/1.2.3"}, + mock_response="hi", + ) + assert response._hidden_params["model_id"] == "claude-code-deployment" + + +@pytest.mark.asyncio() +async def test_negation_removes_tag_regex_deployment_falls_to_ban_only(): + # When a negation tag removes the only tag_regex deployment, no regex deployments + # remain in the candidate pool. has_tag_filter becomes False, ban_only fires, + # and the remaining plain-tagged deployment is returned via the ban-only path. + router = litellm.Router( + model_list=[ + { + "model_name": "gpt-4", + "litellm_params": { + "model": "gpt-4o", + "api_base": "https://exampleopenaiendpoint-production.up.railway.app/", + "tag_regex": ["^User-Agent: claude-code\\/"], + "tags": ["group:claude"], + }, + "model_info": {"id": "claude-code-deployment"}, + }, + { + "model_name": "gpt-4", + "litellm_params": { + "model": "gpt-4o-mini", + "api_base": "https://exampleopenaiendpoint-production.up.railway.app/", + "tags": ["provider:openai"], + }, + "model_info": {"id": "openai-deployment"}, + }, + ], + enable_tag_filtering=True, + tag_filtering_match_any=True, + ) + + # !group:claude removes the tag_regex deployment from candidates, so no regex + # deployments remain. The ban-only path fires and returns the openai deployment. + for _ in range(5): + response = await router.acompletion( + model="gpt-4", + messages=[{"role": "user", "content": "hi"}], + metadata={"tags": ["!group:claude"], "user_agent": "claude-code/1.2.3"}, + mock_response="hi", + ) + assert response._hidden_params["model_id"] == "openai-deployment" From 9968499aabf6d6b4e36579c05979fc1deda44098 Mon Sep 17 00:00:00 2001 From: ryan-crabbe-berri Date: Tue, 30 Jun 2026 11:28:51 -0700 Subject: [PATCH 19/79] fix(ui): fix Router Settings Loadbalancing tab save (LIT-4057) The Loadbalancing tab rendered routing_groups as a generic text input and sent its array value back as the JSON string "[]", which fails Pydantic list validation on POST /config/update and returns 422. routing_groups has its own dedicated Routing Groups tab, so this tab must neither render nor write it; exclude it the same way retry_policy and model_group_retry_policy are excluded for the Model Retry Settings tab. The save was also fire-and-forget: setCallbacksCall was not awaited, so the rejected promise escaped the try/catch and the success toast fired unconditionally, showing success even when the backend rejected the change. Await the call, gate the success toast on resolution, and surface the error. --- .../ReliabilityRetriesSection.tsx | 5 ++- .../components/router_settings/index.test.tsx | 40 +++++++++++++++++++ .../src/components/router_settings/index.tsx | 13 +++--- 3 files changed, 49 insertions(+), 9 deletions(-) diff --git a/ui/litellm-dashboard/src/components/router_settings/ReliabilityRetriesSection.tsx b/ui/litellm-dashboard/src/components/router_settings/ReliabilityRetriesSection.tsx index fa48c1c97b9..da089552b11 100644 --- a/ui/litellm-dashboard/src/components/router_settings/ReliabilityRetriesSection.tsx +++ b/ui/litellm-dashboard/src/components/router_settings/ReliabilityRetriesSection.tsx @@ -20,14 +20,15 @@ const ReliabilityRetriesSection: React.FC = ({
{Object.entries(routerSettings) .filter( - ([param, value]) => + ([param]) => param != "fallbacks" && param != "context_window_fallbacks" && param != "routing_strategy_args" && param != "routing_strategy" && param != "enable_tag_filtering" && param != "retry_policy" && - param != "model_group_retry_policy", + param != "model_group_retry_policy" && + param != "routing_groups", ) .map(([param, value]) => (
diff --git a/ui/litellm-dashboard/src/components/router_settings/index.test.tsx b/ui/litellm-dashboard/src/components/router_settings/index.test.tsx index 78a0b4b0dff..0df1cd81d6b 100644 --- a/ui/litellm-dashboard/src/components/router_settings/index.test.tsx +++ b/ui/litellm-dashboard/src/components/router_settings/index.test.tsx @@ -146,4 +146,44 @@ describe("RouterSettings", () => { expect(NotificationsManager.success).toHaveBeenCalledWith("router settings updated successfully"); }); + + it("should not render or save routing_groups (owned by the Routing Groups tab) (LIT-4057)", async () => { + const user = userEvent.setup(); + vi.mocked(getCallbacksCall).mockResolvedValue({ + router_settings: { + routing_strategy: "simple-shuffle", + num_retries: 3, + routing_groups: [{ group_name: "g1", models: ["gpt-4"], routing_strategy: "simple-shuffle" }], + }, + }); + renderWithProviders(); + + await waitFor(() => { + expect(screen.getByTestId("strategy-select")).toBeInTheDocument(); + }); + expect(document.querySelector('input[name="routing_groups"]')).toBeNull(); + + await user.click(screen.getByRole("button", { name: /save changes/i })); + + const payload = vi.mocked(setCallbacksCall).mock.calls[0][1] as { + router_settings: Record; + }; + expect(payload.router_settings).not.toHaveProperty("routing_groups"); + }); + + it("should surface an error and not claim success when saving fails (LIT-4057)", async () => { + const user = userEvent.setup(); + vi.mocked(setCallbacksCall).mockRejectedValue(new Error("422 Unprocessable Entity")); + renderWithProviders(); + + await waitFor(() => { + expect(screen.getByTestId("strategy-select")).toBeInTheDocument(); + }); + await user.click(screen.getByRole("button", { name: /save changes/i })); + + await waitFor(() => { + expect(NotificationsManager.fromBackend).toHaveBeenCalled(); + }); + expect(NotificationsManager.success).not.toHaveBeenCalled(); + }); }); diff --git a/ui/litellm-dashboard/src/components/router_settings/index.tsx b/ui/litellm-dashboard/src/components/router_settings/index.tsx index d3753529058..360c7f41138 100644 --- a/ui/litellm-dashboard/src/components/router_settings/index.tsx +++ b/ui/litellm-dashboard/src/components/router_settings/index.tsx @@ -81,7 +81,7 @@ const RouterSettings: React.FC = ({ accessToken, userRole, }); }, [accessToken, userRole, userID]); - const handleSaveChanges = () => { + const handleSaveChanges = async () => { if (!accessToken) { return; } @@ -91,9 +91,9 @@ const RouterSettings: React.FC = ({ accessToken, userRole, const numberKeys = new Set(["allowed_fails", "cooldown_time", "num_retries", "timeout", "retry_after"]); const jsonKeys = new Set(["model_group_alias"]); - // retry_policy and model_group_retry_policy are owned exclusively by the - // Model Retry Settings tab; this page must not read or write them. - const tabOwnedKeys = new Set(["retry_policy", "model_group_retry_policy"]); + // retry_policy and model_group_retry_policy are owned by the Model Retry Settings tab; + // routing_groups is owned by the Routing Groups tab. This page must not read or write them. + const tabOwnedKeys = new Set(["retry_policy", "model_group_retry_policy", "routing_groups"]); const parseInputValue = (key: string, raw: string | undefined, fallback: unknown) => { if (raw === undefined) return fallback; @@ -172,12 +172,11 @@ const RouterSettings: React.FC = ({ accessToken, userRole, }; try { - setCallbacksCall(accessToken, payload); + await setCallbacksCall(accessToken, payload); + NotificationsManager.success("router settings updated successfully"); } catch (error) { NotificationsManager.fromBackend("Failed to update router settings: " + error); } - - NotificationsManager.success("router settings updated successfully"); }; if (!accessToken) { From 30141f86f824cdc53e425a4b27fe07e34cc61c64 Mon Sep 17 00:00:00 2001 From: ryan-crabbe-berri Date: Tue, 30 Jun 2026 11:40:09 -0700 Subject: [PATCH 20/79] test(ui): make router settings save tests resilient to async timing Address Greptile P2: the routing_groups test read setCallbacksCall.mock.calls[0][1] immediately after the now-async save handler, so any latency in the mock would throw an opaque TypeError instead of a clean assertion failure. Assert through toHaveBeenCalledWith inside waitFor with expect.not.objectContaining, dropping the index access and the cast. Also drop the ticket id from the test names. --- .../src/components/router_settings/index.test.tsx | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/ui/litellm-dashboard/src/components/router_settings/index.test.tsx b/ui/litellm-dashboard/src/components/router_settings/index.test.tsx index 0df1cd81d6b..94cbb94d164 100644 --- a/ui/litellm-dashboard/src/components/router_settings/index.test.tsx +++ b/ui/litellm-dashboard/src/components/router_settings/index.test.tsx @@ -147,7 +147,7 @@ describe("RouterSettings", () => { expect(NotificationsManager.success).toHaveBeenCalledWith("router settings updated successfully"); }); - it("should not render or save routing_groups (owned by the Routing Groups tab) (LIT-4057)", async () => { + it("should not render or save routing_groups (owned by the Routing Groups tab)", async () => { const user = userEvent.setup(); vi.mocked(getCallbacksCall).mockResolvedValue({ router_settings: { @@ -165,13 +165,14 @@ describe("RouterSettings", () => { await user.click(screen.getByRole("button", { name: /save changes/i })); - const payload = vi.mocked(setCallbacksCall).mock.calls[0][1] as { - router_settings: Record; - }; - expect(payload.router_settings).not.toHaveProperty("routing_groups"); + await waitFor(() => + expect(setCallbacksCall).toHaveBeenCalledWith("test-token", { + router_settings: expect.not.objectContaining({ routing_groups: expect.anything() }), + }), + ); }); - it("should surface an error and not claim success when saving fails (LIT-4057)", async () => { + it("should surface an error and not claim success when saving fails", async () => { const user = userEvent.setup(); vi.mocked(setCallbacksCall).mockRejectedValue(new Error("422 Unprocessable Entity")); renderWithProviders(); From a126cdf5b79362aea1c76fec2c1c654ad5175fcb Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Tue, 30 Jun 2026 18:47:08 +0000 Subject: [PATCH 21/79] feat(anthropic): add Claude Sonnet 5 Register claude-sonnet-5 across the Anthropic, Bedrock (base + global/us/eu/au/jp cross-region inference profiles), Vertex AI, and Azure AI cost-map entries in both the root and bundled-backup model maps, plus BEDROCK_CONVERSE_MODELS and the setup-wizard provider list. Sonnet 5 ships with the gen-5 adaptive-thinking profile (adaptive thinking always on, no extended thinking, effort defaults to high), so the entries mirror the Fable 5 / Opus 4.8 sampling-param and prefill restrictions rather than the older Sonnet 4.6 behavior: supports_sampling_params and supports_assistant_prefill are false while supports_adaptive_thinking, supports_xhigh_reasoning_effort, and supports_max_reasoning_effort are true. Pricing follows standard Sonnet rates ($3 / $15 per MTok) with the 10% regional premium on the us/eu/au/jp profiles. Add a reasoning-effort grid entry for the Anthropic direct route and a regression test pinning pricing, capabilities, regional premiums, backup parity, and bare-name provider resolution. Co-authored-by: Mateo Wang --- litellm/constants.py | 1 + ...odel_prices_and_context_window_backup.json | 325 ++++++++++++++++++ litellm/setup_wizard.py | 1 + model_prices_and_context_window.json | 325 ++++++++++++++++++ .../reasoning_effort_grid/grid_spec.py | 7 + .../test_claude_sonnet_5_config.py | 174 ++++++++++ 6 files changed, 833 insertions(+) create mode 100644 tests/test_litellm/test_claude_sonnet_5_config.py diff --git a/litellm/constants.py b/litellm/constants.py index aeb74a65839..5cc41bd7954 100644 --- a/litellm/constants.py +++ b/litellm/constants.py @@ -1123,6 +1123,7 @@ BEDROCK_CONVERSE_MODELS = [ "anthropic.claude-haiku-4-5-20251001-v1:0", "anthropic.claude-sonnet-4-5-20250929-v1:0", "anthropic.claude-fable-5", + "anthropic.claude-sonnet-5", "anthropic.claude-opus-4-8", "anthropic.claude-opus-4-7", "anthropic.claude-opus-4-6-v1:0", diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index 21132db93cb..5bd70690d48 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -1671,6 +1671,204 @@ "supports_max_reasoning_effort": true, "supports_minimal_reasoning_effort": true }, + "anthropic.claude-sonnet-5": { + "cache_creation_input_token_cost": 3.75e-06, + "cache_creation_input_token_cost_above_1hr": 6e-06, + "cache_read_input_token_cost": 3e-07, + "input_cost_per_token": 3e-06, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 1000000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_adaptive_thinking": true, + "supports_assistant_prefill": false, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_sampling_params": false, + "supports_tool_choice": true, + "supports_vision": true, + "supports_xhigh_reasoning_effort": true, + "supports_native_structured_output": true, + "supports_max_reasoning_effort": true, + "supports_output_config": true, + "bedrock_output_config_effort_ceiling": "xhigh" + }, + "global.anthropic.claude-sonnet-5": { + "cache_creation_input_token_cost": 3.75e-06, + "cache_creation_input_token_cost_above_1hr": 6e-06, + "cache_read_input_token_cost": 3e-07, + "input_cost_per_token": 3e-06, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 1000000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_adaptive_thinking": true, + "supports_assistant_prefill": false, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_sampling_params": false, + "supports_tool_choice": true, + "supports_vision": true, + "supports_xhigh_reasoning_effort": true, + "supports_native_structured_output": true, + "supports_max_reasoning_effort": true, + "supports_output_config": true, + "bedrock_output_config_effort_ceiling": "xhigh" + }, + "us.anthropic.claude-sonnet-5": { + "cache_creation_input_token_cost": 4.125e-06, + "cache_creation_input_token_cost_above_1hr": 6.6e-06, + "cache_read_input_token_cost": 3.3e-07, + "input_cost_per_token": 3.3e-06, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 1000000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.65e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_adaptive_thinking": true, + "supports_assistant_prefill": false, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_sampling_params": false, + "supports_tool_choice": true, + "supports_vision": true, + "supports_xhigh_reasoning_effort": true, + "supports_native_structured_output": true, + "supports_max_reasoning_effort": true, + "supports_output_config": true, + "bedrock_output_config_effort_ceiling": "xhigh" + }, + "eu.anthropic.claude-sonnet-5": { + "cache_creation_input_token_cost": 4.125e-06, + "cache_creation_input_token_cost_above_1hr": 6.6e-06, + "cache_read_input_token_cost": 3.3e-07, + "input_cost_per_token": 3.3e-06, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 1000000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.65e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_adaptive_thinking": true, + "supports_assistant_prefill": false, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_sampling_params": false, + "supports_tool_choice": true, + "supports_vision": true, + "supports_xhigh_reasoning_effort": true, + "supports_native_structured_output": true, + "supports_max_reasoning_effort": true, + "supports_output_config": true, + "bedrock_output_config_effort_ceiling": "xhigh" + }, + "au.anthropic.claude-sonnet-5": { + "cache_creation_input_token_cost": 4.125e-06, + "cache_creation_input_token_cost_above_1hr": 6.6e-06, + "cache_read_input_token_cost": 3.3e-07, + "input_cost_per_token": 3.3e-06, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 1000000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.65e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_adaptive_thinking": true, + "supports_assistant_prefill": false, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_sampling_params": false, + "supports_tool_choice": true, + "supports_vision": true, + "supports_xhigh_reasoning_effort": true, + "supports_native_structured_output": true, + "supports_max_reasoning_effort": true, + "supports_output_config": true, + "bedrock_output_config_effort_ceiling": "xhigh" + }, + "jp.anthropic.claude-sonnet-5": { + "cache_creation_input_token_cost": 4.125e-06, + "cache_creation_input_token_cost_above_1hr": 6.6e-06, + "cache_read_input_token_cost": 3.3e-07, + "input_cost_per_token": 3.3e-06, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 1000000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.65e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_adaptive_thinking": true, + "supports_assistant_prefill": false, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_sampling_params": false, + "supports_tool_choice": true, + "supports_vision": true, + "supports_xhigh_reasoning_effort": true, + "supports_native_structured_output": true, + "supports_max_reasoning_effort": true, + "supports_output_config": true, + "bedrock_output_config_effort_ceiling": "xhigh" + }, "anthropic.claude-sonnet-4-6": { "supports_adaptive_thinking": true, "cache_creation_input_token_cost": 3.75e-06, @@ -2511,6 +2709,37 @@ "supports_tool_choice": true, "supports_vision": true }, + "azure_ai/claude-sonnet-5": { + "cache_creation_input_token_cost": 3.75e-06, + "cache_creation_input_token_cost_above_1hr": 6e-06, + "cache_read_input_token_cost": 3e-07, + "input_cost_per_token": 3e-06, + "litellm_provider": "azure_ai", + "max_input_tokens": 1000000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_adaptive_thinking": true, + "supports_assistant_prefill": false, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_sampling_params": false, + "supports_tool_choice": true, + "supports_vision": true, + "supports_xhigh_reasoning_effort": true, + "supports_max_reasoning_effort": true, + "supports_output_config": true + }, "azure_ai/claude-sonnet-4-6": { "supports_adaptive_thinking": true, "cache_creation_input_token_cost": 3.75e-06, @@ -10245,6 +10474,40 @@ "supports_vision": true, "supports_web_search": true }, + "claude-sonnet-5": { + "cache_creation_input_token_cost": 3.75e-06, + "cache_creation_input_token_cost_above_1hr": 6e-06, + "cache_read_input_token_cost": 3e-07, + "input_cost_per_token": 3e-06, + "litellm_provider": "anthropic", + "max_input_tokens": 1000000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_adaptive_thinking": true, + "supports_assistant_prefill": false, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_sampling_params": false, + "supports_tool_choice": true, + "supports_vision": true, + "supports_xhigh_reasoning_effort": true, + "supports_max_reasoning_effort": true, + "provider_specific_entry": { + "us": 1.1 + }, + "supports_output_config": true + }, "claude-sonnet-4-6": { "cache_creation_input_token_cost": 3.75e-06, "cache_creation_input_token_cost_above_1hr": 6e-06, @@ -34944,6 +35207,37 @@ "supports_tool_choice": true, "supports_vision": true }, + "vertex_ai/claude-sonnet-5": { + "cache_creation_input_token_cost": 3.75e-06, + "cache_creation_input_token_cost_above_1hr": 6e-06, + "cache_read_input_token_cost": 3e-07, + "input_cost_per_token": 3e-06, + "litellm_provider": "vertex_ai-anthropic_models", + "max_input_tokens": 1000000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_adaptive_thinking": true, + "supports_assistant_prefill": false, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_sampling_params": false, + "supports_tool_choice": true, + "supports_vision": true, + "supports_xhigh_reasoning_effort": true, + "supports_max_reasoning_effort": true, + "supports_output_config": true + }, "vertex_ai/claude-sonnet-4-6": { "supports_adaptive_thinking": true, "cache_creation_input_token_cost": 3.75e-06, @@ -42381,6 +42675,37 @@ "search_context_size_high": 0.035 } }, + "vertex_ai/claude-sonnet-5@default": { + "cache_creation_input_token_cost": 3.75e-06, + "cache_creation_input_token_cost_above_1hr": 6e-06, + "cache_read_input_token_cost": 3e-07, + "input_cost_per_token": 3e-06, + "litellm_provider": "vertex_ai-anthropic_models", + "max_input_tokens": 1000000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_adaptive_thinking": true, + "supports_assistant_prefill": false, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_sampling_params": false, + "supports_tool_choice": true, + "supports_vision": true, + "supports_xhigh_reasoning_effort": true, + "supports_max_reasoning_effort": true, + "supports_output_config": true + }, "vertex_ai/claude-sonnet-4-6@default": { "supports_adaptive_thinking": true, "cache_creation_input_token_cost": 3.75e-06, diff --git a/litellm/setup_wizard.py b/litellm/setup_wizard.py index b43590079fa..10b4fb30f22 100644 --- a/litellm/setup_wizard.py +++ b/litellm/setup_wizard.py @@ -58,6 +58,7 @@ PROVIDERS: List[Dict] = [ "test_model": "claude-haiku-4-5-20251001", "models": [ "claude-fable-5", + "claude-sonnet-5", "claude-opus-4-8", "claude-opus-4-7", "claude-opus-4-6", diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index 73cefeb7c77..5fc431d721b 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -1671,6 +1671,204 @@ "supports_max_reasoning_effort": true, "supports_minimal_reasoning_effort": true }, + "anthropic.claude-sonnet-5": { + "cache_creation_input_token_cost": 3.75e-06, + "cache_creation_input_token_cost_above_1hr": 6e-06, + "cache_read_input_token_cost": 3e-07, + "input_cost_per_token": 3e-06, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 1000000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_adaptive_thinking": true, + "supports_assistant_prefill": false, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_sampling_params": false, + "supports_tool_choice": true, + "supports_vision": true, + "supports_xhigh_reasoning_effort": true, + "supports_native_structured_output": true, + "supports_max_reasoning_effort": true, + "supports_output_config": true, + "bedrock_output_config_effort_ceiling": "xhigh" + }, + "global.anthropic.claude-sonnet-5": { + "cache_creation_input_token_cost": 3.75e-06, + "cache_creation_input_token_cost_above_1hr": 6e-06, + "cache_read_input_token_cost": 3e-07, + "input_cost_per_token": 3e-06, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 1000000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_adaptive_thinking": true, + "supports_assistant_prefill": false, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_sampling_params": false, + "supports_tool_choice": true, + "supports_vision": true, + "supports_xhigh_reasoning_effort": true, + "supports_native_structured_output": true, + "supports_max_reasoning_effort": true, + "supports_output_config": true, + "bedrock_output_config_effort_ceiling": "xhigh" + }, + "us.anthropic.claude-sonnet-5": { + "cache_creation_input_token_cost": 4.125e-06, + "cache_creation_input_token_cost_above_1hr": 6.6e-06, + "cache_read_input_token_cost": 3.3e-07, + "input_cost_per_token": 3.3e-06, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 1000000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.65e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_adaptive_thinking": true, + "supports_assistant_prefill": false, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_sampling_params": false, + "supports_tool_choice": true, + "supports_vision": true, + "supports_xhigh_reasoning_effort": true, + "supports_native_structured_output": true, + "supports_max_reasoning_effort": true, + "supports_output_config": true, + "bedrock_output_config_effort_ceiling": "xhigh" + }, + "eu.anthropic.claude-sonnet-5": { + "cache_creation_input_token_cost": 4.125e-06, + "cache_creation_input_token_cost_above_1hr": 6.6e-06, + "cache_read_input_token_cost": 3.3e-07, + "input_cost_per_token": 3.3e-06, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 1000000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.65e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_adaptive_thinking": true, + "supports_assistant_prefill": false, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_sampling_params": false, + "supports_tool_choice": true, + "supports_vision": true, + "supports_xhigh_reasoning_effort": true, + "supports_native_structured_output": true, + "supports_max_reasoning_effort": true, + "supports_output_config": true, + "bedrock_output_config_effort_ceiling": "xhigh" + }, + "au.anthropic.claude-sonnet-5": { + "cache_creation_input_token_cost": 4.125e-06, + "cache_creation_input_token_cost_above_1hr": 6.6e-06, + "cache_read_input_token_cost": 3.3e-07, + "input_cost_per_token": 3.3e-06, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 1000000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.65e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_adaptive_thinking": true, + "supports_assistant_prefill": false, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_sampling_params": false, + "supports_tool_choice": true, + "supports_vision": true, + "supports_xhigh_reasoning_effort": true, + "supports_native_structured_output": true, + "supports_max_reasoning_effort": true, + "supports_output_config": true, + "bedrock_output_config_effort_ceiling": "xhigh" + }, + "jp.anthropic.claude-sonnet-5": { + "cache_creation_input_token_cost": 4.125e-06, + "cache_creation_input_token_cost_above_1hr": 6.6e-06, + "cache_read_input_token_cost": 3.3e-07, + "input_cost_per_token": 3.3e-06, + "litellm_provider": "bedrock_converse", + "max_input_tokens": 1000000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.65e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_adaptive_thinking": true, + "supports_assistant_prefill": false, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_sampling_params": false, + "supports_tool_choice": true, + "supports_vision": true, + "supports_xhigh_reasoning_effort": true, + "supports_native_structured_output": true, + "supports_max_reasoning_effort": true, + "supports_output_config": true, + "bedrock_output_config_effort_ceiling": "xhigh" + }, "anthropic.claude-sonnet-4-6": { "supports_adaptive_thinking": true, "cache_creation_input_token_cost": 3.75e-06, @@ -2511,6 +2709,37 @@ "supports_tool_choice": true, "supports_vision": true }, + "azure_ai/claude-sonnet-5": { + "cache_creation_input_token_cost": 3.75e-06, + "cache_creation_input_token_cost_above_1hr": 6e-06, + "cache_read_input_token_cost": 3e-07, + "input_cost_per_token": 3e-06, + "litellm_provider": "azure_ai", + "max_input_tokens": 1000000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_adaptive_thinking": true, + "supports_assistant_prefill": false, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_sampling_params": false, + "supports_tool_choice": true, + "supports_vision": true, + "supports_xhigh_reasoning_effort": true, + "supports_max_reasoning_effort": true, + "supports_output_config": true + }, "azure_ai/claude-sonnet-4-6": { "supports_adaptive_thinking": true, "cache_creation_input_token_cost": 3.75e-06, @@ -10245,6 +10474,40 @@ "supports_vision": true, "supports_web_search": true }, + "claude-sonnet-5": { + "cache_creation_input_token_cost": 3.75e-06, + "cache_creation_input_token_cost_above_1hr": 6e-06, + "cache_read_input_token_cost": 3e-07, + "input_cost_per_token": 3e-06, + "litellm_provider": "anthropic", + "max_input_tokens": 1000000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_adaptive_thinking": true, + "supports_assistant_prefill": false, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_sampling_params": false, + "supports_tool_choice": true, + "supports_vision": true, + "supports_xhigh_reasoning_effort": true, + "supports_max_reasoning_effort": true, + "provider_specific_entry": { + "us": 1.1 + }, + "supports_output_config": true + }, "claude-sonnet-4-6": { "cache_creation_input_token_cost": 3.75e-06, "cache_creation_input_token_cost_above_1hr": 6e-06, @@ -35121,6 +35384,37 @@ "supports_tool_choice": true, "supports_vision": true }, + "vertex_ai/claude-sonnet-5": { + "cache_creation_input_token_cost": 3.75e-06, + "cache_creation_input_token_cost_above_1hr": 6e-06, + "cache_read_input_token_cost": 3e-07, + "input_cost_per_token": 3e-06, + "litellm_provider": "vertex_ai-anthropic_models", + "max_input_tokens": 1000000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_adaptive_thinking": true, + "supports_assistant_prefill": false, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_sampling_params": false, + "supports_tool_choice": true, + "supports_vision": true, + "supports_xhigh_reasoning_effort": true, + "supports_max_reasoning_effort": true, + "supports_output_config": true + }, "vertex_ai/claude-sonnet-4-6": { "supports_adaptive_thinking": true, "cache_creation_input_token_cost": 3.75e-06, @@ -42616,6 +42910,37 @@ "search_context_size_high": 0.035 } }, + "vertex_ai/claude-sonnet-5@default": { + "cache_creation_input_token_cost": 3.75e-06, + "cache_creation_input_token_cost_above_1hr": 6e-06, + "cache_read_input_token_cost": 3e-07, + "input_cost_per_token": 3e-06, + "litellm_provider": "vertex_ai-anthropic_models", + "max_input_tokens": 1000000, + "max_output_tokens": 128000, + "max_tokens": 128000, + "mode": "chat", + "output_cost_per_token": 1.5e-05, + "search_context_cost_per_query": { + "search_context_size_high": 0.01, + "search_context_size_low": 0.01, + "search_context_size_medium": 0.01 + }, + "supports_adaptive_thinking": true, + "supports_assistant_prefill": false, + "supports_computer_use": true, + "supports_function_calling": true, + "supports_pdf_input": true, + "supports_prompt_caching": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_sampling_params": false, + "supports_tool_choice": true, + "supports_vision": true, + "supports_xhigh_reasoning_effort": true, + "supports_max_reasoning_effort": true, + "supports_output_config": true + }, "vertex_ai/claude-sonnet-4-6@default": { "supports_adaptive_thinking": true, "cache_creation_input_token_cost": 3.75e-06, diff --git a/tests/llm_translation/reasoning_effort_grid/grid_spec.py b/tests/llm_translation/reasoning_effort_grid/grid_spec.py index 1bb468d15ad..762606bb3a0 100644 --- a/tests/llm_translation/reasoning_effort_grid/grid_spec.py +++ b/tests/llm_translation/reasoning_effort_grid/grid_spec.py @@ -181,6 +181,13 @@ ANTHROPIC_DIRECT_MODELS: Tuple[ModelEntry, ...] = ( required_env=_ANTHROPIC_REQ, caps=_CAPS_XHIGH_MAX, ), + ModelEntry( + alias="claude-sonnet-5", + model="anthropic/claude-sonnet-5", + mode="adaptive", + required_env=_ANTHROPIC_REQ, + caps=_CAPS_XHIGH_MAX, + ), ModelEntry( alias="claude-sonnet-4-6", model="anthropic/claude-sonnet-4-6", diff --git a/tests/test_litellm/test_claude_sonnet_5_config.py b/tests/test_litellm/test_claude_sonnet_5_config.py new file mode 100644 index 00000000000..88a06aea95f --- /dev/null +++ b/tests/test_litellm/test_claude_sonnet_5_config.py @@ -0,0 +1,174 @@ +""" +Validate Claude Sonnet 5 model configuration entries. + +Sonnet 5 ships with the gen-5 adaptive-thinking profile (adaptive thinking +always on, no extended thinking, ``effort`` defaults to ``high``), so it must +mirror the sampling-param and prefill restrictions that Fable 5 / Opus 4.8 carry +rather than the older Sonnet 4.6 behavior. The cost-map entries are also what +populate ``litellm.anthropic_models`` at import, which is what lets a bare +``claude-sonnet-5`` name resolve to the ``anthropic`` provider (and match an +``anthropic/*`` wildcard deployment). +""" + +import json +import os + +import pytest + +import litellm +from litellm.constants import BEDROCK_CONVERSE_MODELS +from litellm.litellm_core_utils.get_model_cost_map import GetModelCostMap + +REPO_ROOT = os.path.join(os.path.dirname(__file__), "../..") + +ALL_SONNET_5_VARIANTS = ( + "claude-sonnet-5", + "anthropic.claude-sonnet-5", + "global.anthropic.claude-sonnet-5", + "us.anthropic.claude-sonnet-5", + "eu.anthropic.claude-sonnet-5", + "au.anthropic.claude-sonnet-5", + "jp.anthropic.claude-sonnet-5", + "vertex_ai/claude-sonnet-5", + "vertex_ai/claude-sonnet-5@default", + "azure_ai/claude-sonnet-5", +) + + +def _load_root_cost_map() -> dict: + json_path = os.path.join(REPO_ROOT, "model_prices_and_context_window.json") + with open(json_path) as f: + return json.load(f) + + +@pytest.fixture +def local_model_cost_map(monkeypatch): + """Force the bundled backup cost map so assertions don't depend on the + network-fetched ``main`` copy (which lags this branch until merge).""" + original_model_cost = litellm.model_cost + monkeypatch.setenv("LITELLM_LOCAL_MODEL_COST_MAP", "True") + litellm.model_cost = litellm.get_model_cost_map(url="") + litellm.get_model_info.cache_clear() + try: + yield + finally: + litellm.model_cost = original_model_cost + litellm.get_model_info.cache_clear() + + +def test_sonnet_5_pricing_and_capabilities(): + model_data = _load_root_cost_map() + + expected_providers = { + "claude-sonnet-5": "anthropic", + "anthropic.claude-sonnet-5": "bedrock_converse", + "vertex_ai/claude-sonnet-5": "vertex_ai-anthropic_models", + "azure_ai/claude-sonnet-5": "azure_ai", + } + + for model_name, provider in expected_providers.items(): + assert model_name in model_data, f"Missing model entry: {model_name}" + info = model_data[model_name] + + assert info["litellm_provider"] == provider + assert info["mode"] == "chat" + assert info["max_input_tokens"] == 1000000 + assert info["max_output_tokens"] == 128000 + assert info["max_tokens"] == 128000 + + # Standard Sonnet pricing: $3 / $15 per MTok, with the 1.25x cache-write + # and 0.1x cache-read multipliers. + assert info["input_cost_per_token"] == 3e-06 + assert info["output_cost_per_token"] == 1.5e-05 + assert info["cache_creation_input_token_cost"] == 3.75e-06 + assert info["cache_read_input_token_cost"] == 3e-07 + + # gen-5 adaptive-thinking profile: effort-driven, no sampling params, no + # assistant prefill. + assert info["supports_adaptive_thinking"] is True + assert info["supports_reasoning"] is True + assert info["supports_sampling_params"] is False + assert info["supports_assistant_prefill"] is False + + assert info["supports_function_calling"] is True + assert info["supports_prompt_caching"] is True + assert info["supports_tool_choice"] is True + assert info["supports_vision"] is True + + +def test_sonnet_5_bedrock_regional_pricing(): + """Global/base endpoints use base pricing; the us./eu./au./jp. regional + cross-region inference profiles carry a 10% premium.""" + model_data = _load_root_cost_map() + + base_pricing = { + "input_cost_per_token": 3e-06, + "output_cost_per_token": 1.5e-05, + "cache_creation_input_token_cost": 3.75e-06, + "cache_read_input_token_cost": 3e-07, + } + regional_pricing = { + "input_cost_per_token": 3.3e-06, + "output_cost_per_token": 1.65e-05, + "cache_creation_input_token_cost": 4.125e-06, + "cache_read_input_token_cost": 3.3e-07, + } + + expected = { + "anthropic.claude-sonnet-5": base_pricing, + "global.anthropic.claude-sonnet-5": base_pricing, + "us.anthropic.claude-sonnet-5": regional_pricing, + "eu.anthropic.claude-sonnet-5": regional_pricing, + "au.anthropic.claude-sonnet-5": regional_pricing, + "jp.anthropic.claude-sonnet-5": regional_pricing, + } + + for model_name, pricing in expected.items(): + assert model_name in model_data, f"Missing model entry: {model_name}" + info = model_data[model_name] + assert info["litellm_provider"] == "bedrock_converse" + assert info["bedrock_output_config_effort_ceiling"] == "xhigh" + for key, value in pricing.items(): + assert info[key] == value, f"{model_name}.{key} = {info[key]}, want {value}" + + +def test_sonnet_5_present_in_bundled_backup(): + """The bundled backup is the runtime fallback (and what tests load with + ``LITELLM_LOCAL_MODEL_COST_MAP=True``); it must carry the same entries as the + root cost map, otherwise the model resolves on one path but not the other.""" + backup = GetModelCostMap.load_local_model_cost_map() + for model_name in ALL_SONNET_5_VARIANTS: + assert model_name in backup, f"Missing from backup cost map: {model_name}" + + +def test_sonnet_5_registered_for_bedrock_converse(): + assert "anthropic.claude-sonnet-5" in BEDROCK_CONVERSE_MODELS + + +def test_sonnet_5_provider_resolves_via_model_info(local_model_cost_map): + """Regression: ``claude-sonnet-5`` must resolve to provider ``anthropic``. + + Before the cost-map entry existed, the model was unknown to LiteLLM, so it + could not be tied to the ``anthropic`` provider and an ``anthropic/*`` + wildcard deployment would not match it.""" + info = litellm.get_model_info(model="claude-sonnet-5") + assert info["litellm_provider"] == "anthropic" + assert info["max_input_tokens"] == 1000000 + assert info["max_output_tokens"] == 128000 + + +@pytest.mark.parametrize( + "cost_map", + [_load_root_cost_map(), GetModelCostMap.load_local_model_cost_map()], + ids=["root", "bundled_backup"], +) +def test_sonnet_5_all_variants_carry_adaptive_thinking_flag(cost_map): + """Every Sonnet 5 entry must advertise ``supports_adaptive_thinking``. + + Adaptive-thinking detection is cost-map driven, so a single variant missing + the flag silently sends the legacy ``thinking.type='enabled'`` shape and the + provider 400s. This guards against a future variant being added without it.""" + variants = [k for k in cost_map if "claude-sonnet-5" in k] + assert variants, "no claude-sonnet-5 entries found in cost map" + missing = [k for k in variants if cost_map[k].get("supports_adaptive_thinking") is not True] + assert not missing, f"missing supports_adaptive_thinking: {missing}" From 540c860a9737838e5fa2146aa8d4cd2fab445548 Mon Sep 17 00:00:00 2001 From: ryan-crabbe-berri Date: Tue, 30 Jun 2026 11:47:35 -0700 Subject: [PATCH 22/79] test(ui): add typed e2e for Router Settings Loadbalancing save (LIT-4057) Drives the real save flow against a live proxy: seeds a present routing_groups array (the LIT-4057 trigger) via the typed /config/update contract, changes num_retries on the Loadbalancing tab, and asserts the POST returns 200 instead of 422, the success toast appears, and the value still shows after a reload (the ticket's "refresh shows old values" symptom). The round-trip is typed against the OpenAPI-generated backend schema (ConfigYAML write, RouterSettingsResponse read) through a type-only import, so a backend contract drift fails the type check. --- .../tests/settings/routerSettings.spec.ts | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/ui/litellm-dashboard/e2e_tests/tests/settings/routerSettings.spec.ts b/ui/litellm-dashboard/e2e_tests/tests/settings/routerSettings.spec.ts index 98b86ec9b11..e560500fca6 100644 --- a/ui/litellm-dashboard/e2e_tests/tests/settings/routerSettings.spec.ts +++ b/ui/litellm-dashboard/e2e_tests/tests/settings/routerSettings.spec.ts @@ -3,6 +3,10 @@ import { ADMIN_STORAGE_PATH } from "../../constants"; import { navigateToPage } from "../../helpers/navigation"; import { Page } from "../../fixtures/pages"; import { Role, users } from "../../fixtures/users"; +// Type-only import of the OpenAPI-generated backend schema; esbuild erases it at +// runtime, so the round-trip below is checked against the real /config/update and +// /router/settings contracts without bundling the 2 MB definition file. +import type { components } from "../../../src/lib/http/schema"; const PRIMARY = "fake-openai-gpt-4"; const FALLBACK = "fake-anthropic-claude"; @@ -99,3 +103,83 @@ test.describe("Router Settings - Fallbacks", () => { await expect(newRow).toHaveCount(1, { timeout: 10_000 }); }); }); + +type ConfigYAML = components["schemas"]["ConfigYAML"]; +type RouterSettingsResponse = components["schemas"]["RouterSettingsResponse"]; + +const BASE_URL = "http://localhost:4000"; +const ADMIN_AUTH = { Authorization: `Bearer ${users[Role.ProxyAdmin].password}` }; + +/** + * Merge a router_settings patch into the live config through the typed + * /config/update contract, preserving any other settings already present. + */ +async function patchRouterSettings( + request: import("@playwright/test").APIRequestContext, + patch: Partial>, +) { + const current = await request.get(`${BASE_URL}/get/config/callbacks`, { headers: ADMIN_AUTH }); + const existing = current.ok() ? (await current.json())?.router_settings ?? {} : {}; + const payload = { router_settings: { ...(existing as Record), ...patch } }; + await request.post(`${BASE_URL}/config/update`, { headers: ADMIN_AUTH, data: payload }); +} + +test.describe("Router Settings - Loadbalancing", () => { + test.use({ storageState: ADMIN_STORAGE_PATH }); + + // Seed a present routing_groups array (the LIT-4057 trigger) plus a known + // num_retries so the UI assertions are deterministic across reruns. + const ROUTING_GROUP = { group_name: "e2e-lit-4057", models: [PRIMARY], routing_strategy: "simple-shuffle" }; + + test.beforeEach(async ({ request }) => { + await patchRouterSettings(request, { num_retries: 3, routing_groups: [ROUTING_GROUP] }); + }); + + test.afterEach(async ({ request }) => { + await patchRouterSettings(request, { num_retries: 3, routing_groups: [] }); + }); + + test("saves the Loadbalancing tab without a 422 when routing_groups is present, and persists", async ({ + page, + request, + }) => { + await navigateToPage(page, Page.RouterSettings); + await page.getByRole("tab", { name: "Loadbalancing" }).click(); + + const numRetries = page.locator('input[name="num_retries"]'); + await expect(numRetries).toHaveValue("3", { timeout: 15_000 }); + // routing_groups belongs to its own tab and must not leak into this form. + await expect(page.locator('input[name="routing_groups"]')).toHaveCount(0); + + await numRetries.fill("5"); + + // LIT-4057: the tab used to serialize routing_groups as the string "[]", + // which the backend rejects with 422 while the UI still claimed success. + // Assert the save actually succeeds at the network level. + const saveResponse = page.waitForResponse( + (res) => res.url().includes("/config/update") && res.request().method() === "POST", + { timeout: 15_000 }, + ); + await page.getByRole("button", { name: /save changes/i }).click(); + expect((await saveResponse).status()).toBe(200); + + await expect(page.getByText(/router settings updated successfully/i).first()).toBeVisible({ timeout: 10_000 }); + + // The ticket's core symptom was that a refresh showed the old value. + await navigateToPage(page, Page.RouterSettings); + await page.getByRole("tab", { name: "Loadbalancing" }).click(); + await expect(page.locator('input[name="num_retries"]')).toHaveValue("5", { timeout: 15_000 }); + + // The typed backend read agrees the change persisted. + await expect + .poll( + async () => { + const res = await request.get(`${BASE_URL}/router/settings`, { headers: ADMIN_AUTH }); + const data = (await res.json()) as RouterSettingsResponse; + return data.current_values?.num_retries; + }, + { timeout: 10_000 }, + ) + .toBe(5); + }); +}); From 87de0e80a83628885aa68775e1cf07e8a140c1d7 Mon Sep 17 00:00:00 2001 From: tin-berri Date: Tue, 30 Jun 2026 11:58:47 -0700 Subject: [PATCH 23/79] fix(mcp): stop one unauthenticated server from emptying the aggregate tools/list (#31684) * fix(mcp): stop one unauthenticated server from emptying the aggregate tools/list On the aggregate MCP route (/mcp), the gateway fans out to every server the caller can access and flattens their tools. _fetch_and_filter_server_tools re-raises MCPUpstreamAuthError unconditionally (added with the OAuth passthrough feature in #28356) so it surfaces a 401 on single-server routes, but on the aggregate route that exception propagates through the asyncio.gather fan-out and the outer handler turns it into an empty list. The result: a single delegate/passthrough OAuth server the user has not authenticated (e.g. a delegate-auth server) zeroes the tools of every other server, including the ones that resolve fine, so the client connects and sees no tools. Surface the upstream auth error only when a single server was explicitly targeted (so that route still drives the upstream OAuth flow); across the aggregate, absorb it to [] for that one server so the rest still list their tools. This restores the graceful per-server degradation that predated #28356. Adds regression tests: the aggregate keeps a healthy server's tools when a sibling raises MCPUpstreamAuthError, and a single-server listing still surfaces it. * fix(mcp): decide aggregate vs single-server listing by route scope, not server count Addresses review: keying the surface-vs-absorb decision off the server count (len(allowed_mcp_servers), and even len(mcp_servers)) misclassifies an aggregate /mcp request from a key that can access exactly one server as a targeted single-server listing, so that one server's MCPUpstreamAuthError re-raises and empties the aggregate again for one-server permission sets. Use the path-derived single-server scope instead: _mcp_gateway_server_name, set by _gateway_initialize_instructions_request_scope only when the request path names exactly one upstream server (//mcp) and never from client headers, is None on the aggregate route (/mcp) regardless of how many servers the key can access. Single-server routes still surface the upstream-auth challenge; the aggregate absorbs it per server. Adds a regression test that an aggregate request with a single accessible server still absorbs, plus renames the single-server test to drive the route scope explicitly. The new test fails on the count-based logic. * fixing aggregation error * style(mcp): collapse single-line debug log to satisfy ruff format --- .../proxy/_experimental/mcp_server/server.py | 13 +- .../test_mcp_oauth_passthrough_tools.py | 128 ++++++++++++++++++ 2 files changed, 135 insertions(+), 6 deletions(-) diff --git a/litellm/proxy/_experimental/mcp_server/server.py b/litellm/proxy/_experimental/mcp_server/server.py index 158fdda6c39..607e676524e 100644 --- a/litellm/proxy/_experimental/mcp_server/server.py +++ b/litellm/proxy/_experimental/mcp_server/server.py @@ -1699,12 +1699,13 @@ if MCP_AVAILABLE: ) return filtered_tools except MCPUpstreamAuthError: - # Surface upstream 401/403 to the outer handler so the - # client receives a proper WWW-Authenticate challenge - # instead of a silently empty tool list. Without this - # re-raise the broad ``except Exception`` below would - # swallow the auth error. - raise + # Absorb so one unauthenticated server does not empty every other server's + # tools. Surfacing the upstream 401 to the client as a re-auth challenge is + # intentionally not done here: raising from this list handler cannot produce a + # 401 + WWW-Authenticate (the MCP session manager serializes it as a JSON-RPC + # error), so that belongs in a request-scope preemptive check, tracked separately. + verbose_logger.debug(f"MCP list_tools: omitting {server.name}; it needs upstream auth") + return [] except Exception as e: verbose_logger.exception(f"Error getting tools from server {server.name}: {str(e)}") return [] diff --git a/tests/test_litellm/proxy/_experimental/mcp_server/test_mcp_oauth_passthrough_tools.py b/tests/test_litellm/proxy/_experimental/mcp_server/test_mcp_oauth_passthrough_tools.py index d51cf8c5b72..b836c3aef33 100644 --- a/tests/test_litellm/proxy/_experimental/mcp_server/test_mcp_oauth_passthrough_tools.py +++ b/tests/test_litellm/proxy/_experimental/mcp_server/test_mcp_oauth_passthrough_tools.py @@ -265,3 +265,131 @@ async def test_fetch_tools_from_gateway_managed_swallows_errors(): ) assert tools == [] mock_client.list_tools.assert_awaited_with(raise_on_error=False) + + +def _http_server(server_id: str, name: str, **kwargs) -> MCPServer: + return MCPServer( + server_id=server_id, + name=name, + url=f"https://{name}/mcp", + transport=MCPTransport.http, + **kwargs, + ) + + +@pytest.mark.asyncio +async def test_aggregate_list_tools_absorbs_one_unauthenticated_server(): + """Regression: across the aggregate (/mcp), a delegate/passthrough server that raises + MCPUpstreamAuthError must not empty every other server's tools. Re-raising it on the + aggregate path (introduced with the passthrough feature) zeroed the whole list because the + fan-out gather propagated it.""" + from unittest.mock import patch + + from mcp.types import Tool as MCPTool + + from litellm.proxy._experimental.mcp_server import server as mcp_server + from litellm.proxy._types import UserAPIKeyAuth + + delegate = _http_server( + "s1", "delegate_docs", auth_type=MCPAuth.oauth2, delegate_auth_to_upstream=True + ) + working = _http_server("s2", "working_docs", auth_type=MCPAuth.none) + good_tool = MCPTool(name="working_docs-read", description="d", inputSchema={"type": "object"}) + + async def fake_get_tools(server, **kwargs): + if server.server_id == delegate.server_id: + raise MCPUpstreamAuthError(status_code=401, www_authenticate=None, server_name=server.name) + return [good_tool] + + with patch.object(mcp_server, "_get_allowed_mcp_servers", AsyncMock(return_value=[delegate, working])), patch.object( + mcp_server, "_prefetch_oauth_creds_for_user", AsyncMock(return_value={}) + ), patch.object(mcp_server, "_prepare_mcp_server_headers", MagicMock(return_value=(None, None))), patch.object( + mcp_server, "_get_user_oauth_extra_headers_from_db", AsyncMock(return_value=None) + ), patch.object( + mcp_server, "filter_tools_by_key_team_permissions", AsyncMock(side_effect=lambda tools, **k: tools) + ), patch.object( + mcp_server.global_mcp_server_manager, "_get_tools_from_server", AsyncMock(side_effect=fake_get_tools) + ): + tools = await mcp_server._get_tools_from_mcp_servers( + user_api_key_auth=UserAPIKeyAuth(token="h", user_id="u1"), + mcp_auth_header=None, + mcp_servers=None, + ) + + assert [t.name for t in tools] == ["working_docs-read"] + + +@pytest.mark.asyncio +async def test_single_server_route_also_absorbs_upstream_auth_error(): + """A single-server route (//mcp) absorbs an upstream-auth error just like the aggregate: + the failing server is omitted (empty list) rather than re-raised. Surfacing it to the client as a + 401 + WWW-Authenticate challenge cannot be done from this list handler — the MCP session manager + serializes a raise into a JSON-RPC error, not an HTTP 401 — so re-auth surfacing is handled by a + request-scope preemptive check, tracked separately.""" + from unittest.mock import patch + + from litellm.proxy._experimental.mcp_server import server as mcp_server + from litellm.proxy._experimental.mcp_server.mcp_context import _mcp_gateway_server_name + from litellm.proxy._types import UserAPIKeyAuth + + delegate = _http_server( + "s1", "delegate_docs", auth_type=MCPAuth.oauth2, delegate_auth_to_upstream=True + ) + + async def fake_get_tools(server, **kwargs): + raise MCPUpstreamAuthError(status_code=401, www_authenticate=None, server_name=server.name) + + # //mcp sets the path-derived single-server scope; absorption must hold even then. + token = _mcp_gateway_server_name.set("delegate_docs") + try: + with patch.object(mcp_server, "_get_allowed_mcp_servers", AsyncMock(return_value=[delegate])), patch.object( + mcp_server, "_prefetch_oauth_creds_for_user", AsyncMock(return_value={}) + ), patch.object(mcp_server, "_prepare_mcp_server_headers", MagicMock(return_value=(None, None))), patch.object( + mcp_server, "_get_user_oauth_extra_headers_from_db", AsyncMock(return_value=None) + ), patch.object( + mcp_server.global_mcp_server_manager, "_get_tools_from_server", AsyncMock(side_effect=fake_get_tools) + ): + tools = await mcp_server._get_tools_from_mcp_servers( + user_api_key_auth=UserAPIKeyAuth(token="h", user_id="u1"), + mcp_auth_header=None, + mcp_servers=["delegate_docs"], + ) + assert tools == [] + finally: + _mcp_gateway_server_name.reset(token) + + +@pytest.mark.asyncio +async def test_aggregate_with_single_accessible_server_still_absorbs(): + """Regression for the route-misclassification: an aggregate request (/mcp, mcp_servers=None) + from a key that can access exactly one server must still absorb that server's + MCPUpstreamAuthError, not surface it. Keying the surface decision off the allowed count rather + than the request filter would re-raise here and leave the aggregate broken for one-server + permission sets.""" + from unittest.mock import patch + + from litellm.proxy._experimental.mcp_server import server as mcp_server + from litellm.proxy._types import UserAPIKeyAuth + + delegate = _http_server( + "s1", "delegate_docs", auth_type=MCPAuth.oauth2, delegate_auth_to_upstream=True + ) + + async def fake_get_tools(server, **kwargs): + raise MCPUpstreamAuthError(status_code=401, www_authenticate=None, server_name=server.name) + + with patch.object(mcp_server, "_get_allowed_mcp_servers", AsyncMock(return_value=[delegate])), patch.object( + mcp_server, "_prefetch_oauth_creds_for_user", AsyncMock(return_value={}) + ), patch.object(mcp_server, "_prepare_mcp_server_headers", MagicMock(return_value=(None, None))), patch.object( + mcp_server, "_get_user_oauth_extra_headers_from_db", AsyncMock(return_value=None) + ), patch.object( + mcp_server.global_mcp_server_manager, "_get_tools_from_server", AsyncMock(side_effect=fake_get_tools) + ): + # Aggregate route: no explicit server filter, even though only one server is accessible. + tools = await mcp_server._get_tools_from_mcp_servers( + user_api_key_auth=UserAPIKeyAuth(token="h", user_id="u1"), + mcp_auth_header=None, + mcp_servers=None, + ) + + assert tools == [] From d6f09c4f245bcf4cfa1f5be2abab6e70b910e525 Mon Sep 17 00:00:00 2001 From: mateo-berri <277851410+mateo-berri@users.noreply.github.com> Date: Tue, 30 Jun 2026 19:04:19 +0000 Subject: [PATCH 24/79] test(reasoning-effort-grid): bump cell-count assertion for claude-sonnet-5 The Sonnet 5 grid entry raised the Anthropic direct route to 30 model combos, so test_grid_cell_count now expects 330 cells instead of 319. --- .../reasoning_effort_grid/test_reasoning_effort_grid.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/llm_translation/reasoning_effort_grid/test_reasoning_effort_grid.py b/tests/llm_translation/reasoning_effort_grid/test_reasoning_effort_grid.py index 304743b1f3c..2409067ebbe 100644 --- a/tests/llm_translation/reasoning_effort_grid/test_reasoning_effort_grid.py +++ b/tests/llm_translation/reasoning_effort_grid/test_reasoning_effort_grid.py @@ -201,8 +201,8 @@ async def test_reasoning_effort_grid( def test_grid_cell_count() -> None: - assert len(_PARAMS) == 29 * 11, ( - f"expected 319 cells (29 provider x model combos x 11 efforts), " + assert len(_PARAMS) == 30 * 11, ( + f"expected 330 cells (30 provider x model combos x 11 efforts), " f"got {len(_PARAMS)}" ) From 87f035b58f31e1d43b7e5ed49d29974bbc919191 Mon Sep 17 00:00:00 2001 From: Yassin Kortam Date: Tue, 30 Jun 2026 22:07:47 +0300 Subject: [PATCH 25/79] perf(spend): gather independent per-scope spend-counter increments (#31578) --- litellm/proxy/proxy_server.py | 187 ++++++++++-------- .../proxy/proxy_server/test_spend_counters.py | 186 +++++++++++++++++ 2 files changed, 291 insertions(+), 82 deletions(-) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 6298a5a98b1..57814de6e3f 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -470,6 +470,7 @@ from litellm.proxy.response_api_endpoints.endpoints import router as response_ro from litellm.proxy.route_llm_request import route_request from litellm.proxy.search_endpoints.endpoints import router as search_router from litellm.proxy.shutdown.graceful_shutdown_manager import GracefulShutdownManager +from litellm.proxy.spend_tracking.budget_reservation import get_budget_window_start from litellm.proxy.spend_tracking.spend_management_endpoints import ( router as spend_management_router, ) @@ -2263,111 +2264,133 @@ async def increment_spend_counters( budget_reservation["finalized"] = True return - if token is not None: - # token arrives pre-hashed from metadata["user_api_key"] (auth flow + cost: float = response_cost + + async def _key_scope(key_token: str) -> None: + # key_token arrives pre-hashed from metadata["user_api_key"] (auth flow # hashes raw "sk-..." keys before they reach the callback). The # startswith("sk-") check is a safety net matching update_cache — # if a raw key somehow arrives, hash it; otherwise use as-is to # avoid double-hashing (budget checks read valid_token.token which # is single-hashed). - hashed_token = hash_token(token=token) if isinstance(token, str) and token.startswith("sk-") else token + hashed_token = ( + hash_token(token=key_token) if isinstance(key_token, str) and key_token.startswith("sk-") else key_token + ) key_counter_key = f"spend:key:{hashed_token}" if key_counter_key not in reserved_counter_keys: await _init_and_increment_spend_counter( counter_key=key_counter_key, source_cache_key=hashed_token, - increment=response_cost, + increment=cost, ) - # Increment per-window budget counters for multi-budget keys key_obj = await user_api_key_cache.async_get_cache(key=hashed_token) - if key_obj is not None: - key_budget_limits = getattr(key_obj, "budget_limits", None) or ( - key_obj.get("budget_limits") if isinstance(key_obj, dict) else None - ) - if isinstance(key_budget_limits, str): - key_budget_limits = json.loads(key_budget_limits) - if isinstance(key_budget_limits, list): - for window in key_budget_limits: - duration = window["budget_duration"] if isinstance(window, dict) else window.budget_duration - key_window_counter = f"spend:key:{hashed_token}:window:{duration}" - if key_window_counter not in reserved_counter_keys: - from litellm.proxy.spend_tracking.budget_reservation import ( - get_budget_window_start, - ) + if key_obj is None: + return + key_budget_limits = getattr(key_obj, "budget_limits", None) or ( + key_obj.get("budget_limits") if isinstance(key_obj, dict) else None + ) + if isinstance(key_budget_limits, str): + key_budget_limits = json.loads(key_budget_limits) + if not isinstance(key_budget_limits, list): + return + for window in key_budget_limits: + duration = window["budget_duration"] if isinstance(window, dict) else window.budget_duration + key_window_counter = f"spend:key:{hashed_token}:window:{duration}" + if key_window_counter not in reserved_counter_keys: + await _init_and_increment_window_spend_counter( + counter_key=key_window_counter, + entity_type="Key", + entity_id=hashed_token, + window_start=get_budget_window_start(window), + increment=cost, + ) - await _init_and_increment_window_spend_counter( - counter_key=key_window_counter, - entity_type="Key", - entity_id=hashed_token, - window_start=get_budget_window_start(window), - increment=response_cost, - ) - - if team_id is not None: - team_counter_key = f"spend:team:{team_id}" + async def _team_scope(scope_team_id: str) -> None: + team_counter_key = f"spend:team:{scope_team_id}" if team_counter_key not in reserved_counter_keys: await _init_and_increment_spend_counter( counter_key=team_counter_key, - source_cache_key=f"team_id:{team_id}", - increment=response_cost, + source_cache_key=f"team_id:{scope_team_id}", + increment=cost, ) - # Increment per-window budget counters for multi-budget teams - team_obj = await user_api_key_cache.async_get_cache(key=f"team_id:{team_id}") - if team_obj is not None: - team_budget_limits = getattr(team_obj, "budget_limits", None) or ( - team_obj.get("budget_limits") if isinstance(team_obj, dict) else None + team_obj = await user_api_key_cache.async_get_cache(key=f"team_id:{scope_team_id}") + if team_obj is None: + return + team_budget_limits = getattr(team_obj, "budget_limits", None) or ( + team_obj.get("budget_limits") if isinstance(team_obj, dict) else None + ) + if isinstance(team_budget_limits, str): + team_budget_limits = json.loads(team_budget_limits) + if not isinstance(team_budget_limits, list): + return + for window in team_budget_limits: + duration = window["budget_duration"] if isinstance(window, dict) else window.budget_duration + team_window_counter = f"spend:team:{scope_team_id}:window:{duration}" + if team_window_counter not in reserved_counter_keys: + await _init_and_increment_window_spend_counter( + counter_key=team_window_counter, + entity_type="Team", + entity_id=scope_team_id, + window_start=get_budget_window_start(window), + increment=cost, + ) + + async def _team_member_scope(scope_user_id: str, scope_team_id: str) -> None: + team_member_counter_key = f"spend:team_member:{scope_user_id}:{scope_team_id}" + if team_member_counter_key in reserved_counter_keys: + return + await _init_and_increment_spend_counter( + counter_key=team_member_counter_key, + source_cache_key=f"team_membership:{scope_user_id}:{scope_team_id}", + increment=cost, + ) + + async def _user_scope(scope_user_id: str) -> None: + user_counter_key = f"spend:user:{scope_user_id}" + if user_counter_key in reserved_counter_keys: + return + await _init_and_increment_spend_counter( + counter_key=user_counter_key, + source_cache_key=scope_user_id, + increment=cost, + ) + + scope_coros = tuple( + coro + for coro in ( + _key_scope(token) if token is not None else None, + _team_scope(team_id) if team_id is not None else None, + _team_member_scope(user_id, team_id) if user_id is not None and team_id is not None else None, + _user_scope(user_id) if user_id is not None else None, + _increment_end_user_and_tag_spend_counters( + end_user_id=end_user_id, + tags=tags, + response_cost=cost, + reserved_counter_keys=reserved_counter_keys, ) - if isinstance(team_budget_limits, str): - team_budget_limits = json.loads(team_budget_limits) - if isinstance(team_budget_limits, list): - for window in team_budget_limits: - duration = window["budget_duration"] if isinstance(window, dict) else window.budget_duration - team_window_counter = f"spend:team:{team_id}:window:{duration}" - if team_window_counter not in reserved_counter_keys: - from litellm.proxy.spend_tracking.budget_reservation import ( - get_budget_window_start, - ) - - await _init_and_increment_window_spend_counter( - counter_key=team_window_counter, - entity_type="Team", - entity_id=team_id, - window_start=get_budget_window_start(window), - increment=response_cost, - ) - - if user_id is not None and team_id is not None: - team_member_counter_key = f"spend:team_member:{user_id}:{team_id}" - if team_member_counter_key not in reserved_counter_keys: - await _init_and_increment_spend_counter( - counter_key=team_member_counter_key, - source_cache_key=f"team_membership:{user_id}:{team_id}", - increment=response_cost, + if end_user_id is not None or tags is not None + else None, + _increment_org_spend_counter( + org_id=org_id, + response_cost=cost, + reserved_counter_keys=reserved_counter_keys, ) - - if user_id is not None: - user_counter_key = f"spend:user:{user_id}" - if user_counter_key not in reserved_counter_keys: - await _init_and_increment_spend_counter( - counter_key=user_counter_key, - source_cache_key=user_id, - increment=response_cost, - ) - - await _increment_end_user_and_tag_spend_counters( - end_user_id=end_user_id, - tags=tags, - response_cost=response_cost, - reserved_counter_keys=reserved_counter_keys, + if org_id is not None + else None, + ) + if coro is not None ) - await _increment_org_spend_counter( - org_id=org_id, - response_cost=response_cost, - reserved_counter_keys=reserved_counter_keys, - ) + # return_exceptions so a failing scope does not leave its siblings running + # as orphaned tasks that race the caller's reservation-counter invalidation; + # all scopes settle, then the first error propagates as before. + scope_results = await asyncio.gather(*scope_coros, return_exceptions=True) + scope_errors = [r for r in scope_results if isinstance(r, BaseException)] + if scope_errors: + raise scope_errors[0] + if budget_reservation is not None: budget_reservation["finalized"] = True diff --git a/tests/test_litellm/proxy/proxy_server/test_spend_counters.py b/tests/test_litellm/proxy/proxy_server/test_spend_counters.py index a839d82984c..51980342a1d 100644 --- a/tests/test_litellm/proxy/proxy_server/test_spend_counters.py +++ b/tests/test_litellm/proxy/proxy_server/test_spend_counters.py @@ -20,6 +20,7 @@ Pins covered: from __future__ import annotations +import asyncio from datetime import datetime from unittest.mock import AsyncMock, MagicMock @@ -420,6 +421,191 @@ async def test_increment_spend_counters_increments_all_buckets(monkeypatch): } +class _ConcurrencyProbe: + """Stand-in for redis_cache.async_increment that pins concurrency. + + Each call registers itself as in-flight and blocks on ``release`` until the + test lets it proceed. ``all_arrived`` fires once ``expected`` distinct scope + increments are simultaneously suspended here, which can only happen if the + per-scope increments are gathered rather than awaited one after another. + """ + + def __init__(self, expected_concurrency: int): + self.expected = expected_concurrency + self.in_flight = 0 + self.max_in_flight = 0 + self.all_arrived = asyncio.Event() + self.release = asyncio.Event() + self.values: dict[str, float] = {} + + async def async_increment(self, *, key, value, refresh_ttl=True): + self.in_flight += 1 + self.max_in_flight = max(self.max_in_flight, self.in_flight) + if self.in_flight >= self.expected: + self.all_arrived.set() + if not self.release.is_set(): + await self.release.wait() + self.in_flight -= 1 + self.values[key] = self.values.get(key, 0.0) + value + return self.values[key] + + +@pytest.mark.asyncio +async def test_increment_spend_counters_runs_scopes_concurrently(monkeypatch): + """The six independent scopes (key, team, team_member, user, end_user+tags, + org) must be incremented concurrently. The probe only fires once all six are + suspended in async_increment at the same time, which is impossible if the + awaits are chained sequentially.""" + probe = _ConcurrencyProbe(expected_concurrency=6) + fake_cache = _make_spend_counter_cache(redis_get_value=None) + fake_cache.redis_cache.async_increment = probe.async_increment + fake_user_cache = _make_user_api_key_cache(get_value=None) + monkeypatch.setattr(ps, "spend_counter_cache", fake_cache) + monkeypatch.setattr(ps, "user_api_key_cache", fake_user_cache) + monkeypatch.setattr(ps, "prisma_client", None) + monkeypatch.setattr( + ps.SpendCounterReseed, "coalesced", AsyncMock(return_value=None) + ) + + task = asyncio.create_task( + ps.increment_spend_counters( + token="hashed-tok", + team_id="t1", + user_id="u1", + org_id="org1", + end_user_id="eu1", + tags=["a", "b"], + response_cost=5.0, + ) + ) + + try: + await asyncio.wait_for(probe.all_arrived.wait(), timeout=2.0) + except asyncio.TimeoutError: + probe.release.set() + await task + pytest.fail( + "scope increments did not run concurrently; sequential awaits " + f"detected (peak in-flight was {probe.max_in_flight}, expected 6)" + ) + + assert probe.in_flight == 6 + assert probe.max_in_flight == 6 + probe.release.set() + await task + + assert probe.values == { + "spend:key:hashed-tok": 5.0, + "spend:team:t1": 5.0, + "spend:team_member:u1:t1": 5.0, + "spend:user:u1": 5.0, + "spend:end_user:eu1": 5.0, + "spend:tag:a": 5.0, + "spend:tag:b": 5.0, + "spend:org:org1": 5.0, + } + + +@pytest.mark.asyncio +async def test_increment_spend_counters_skips_reserved_counter_keys(monkeypatch): + """Counters already reserved by a budget reservation are skipped, every + other scope is still incremented exactly once, and the reservation is + finalized after the gathered work completes.""" + import litellm.proxy.spend_tracking.budget_reservation as br + + reserved = {"spend:key:hashed-tok", "spend:org:org1"} + monkeypatch.setattr( + br, "get_reserved_counter_keys", MagicMock(return_value=set(reserved)) + ) + monkeypatch.setattr(br, "reconcile_budget_reservation", AsyncMock()) + + recorded: dict[str, float] = {} + + async def _record_increment(*, key, value, refresh_ttl=True): + recorded[key] = recorded.get(key, 0.0) + value + return recorded[key] + + fake_cache = _make_spend_counter_cache(redis_get_value=None) + fake_cache.redis_cache.async_increment = _record_increment + fake_user_cache = _make_user_api_key_cache(get_value=None) + monkeypatch.setattr(ps, "spend_counter_cache", fake_cache) + monkeypatch.setattr(ps, "user_api_key_cache", fake_user_cache) + monkeypatch.setattr(ps, "prisma_client", None) + monkeypatch.setattr( + ps.SpendCounterReseed, "coalesced", AsyncMock(return_value=None) + ) + + reservation = {"finalized": False} + await ps.increment_spend_counters( + token="hashed-tok", + team_id="t1", + user_id="u1", + org_id="org1", + end_user_id="eu1", + tags=["a"], + response_cost=5.0, + budget_reservation=reservation, + ) + + assert reservation["finalized"] is True + assert recorded == { + "spend:team:t1": 5.0, + "spend:team_member:u1:t1": 5.0, + "spend:user:u1": 5.0, + "spend:end_user:eu1": 5.0, + "spend:tag:a": 5.0, + } + + +@pytest.mark.asyncio +async def test_increment_spend_counters_failing_scope_propagates_after_siblings_settle( + monkeypatch, +): + """A failure in one scope must propagate to the caller (so it can invalidate + reserved counters) while every other scope still settles rather than being + left as an orphaned background task, and the reservation is not finalized.""" + recorded: dict[str, float] = {} + + async def _increment(*, key, value, refresh_ttl=True): + if key == "spend:team:t1": + raise RuntimeError("redis increment failed") + recorded[key] = recorded.get(key, 0.0) + value + return recorded[key] + + fake_cache = _make_spend_counter_cache(redis_get_value=None) + fake_cache.redis_cache.async_increment = _increment + fake_user_cache = _make_user_api_key_cache(get_value=None) + monkeypatch.setattr(ps, "spend_counter_cache", fake_cache) + monkeypatch.setattr(ps, "user_api_key_cache", fake_user_cache) + monkeypatch.setattr(ps, "prisma_client", None) + monkeypatch.setattr( + ps.SpendCounterReseed, "coalesced", AsyncMock(return_value=None) + ) + + reservation = {"finalized": False} + with pytest.raises(RuntimeError, match="redis increment failed"): + await ps.increment_spend_counters( + token="hashed-tok", + team_id="t1", + user_id="u1", + org_id="org1", + end_user_id="eu1", + tags=["a"], + response_cost=5.0, + budget_reservation=reservation, + ) + + assert reservation["finalized"] is False + assert recorded == { + "spend:key:hashed-tok": 5.0, + "spend:team_member:u1:t1": 5.0, + "spend:user:u1": 5.0, + "spend:end_user:eu1": 5.0, + "spend:tag:a": 5.0, + "spend:org:org1": 5.0, + } + + @pytest.mark.asyncio async def test_increment_spend_counters_zero_cost_is_noop_finalizes_reservation( monkeypatch, From 3971469b71e4454bc02dc5ee1d5b9bd1618566ad Mon Sep 17 00:00:00 2001 From: ryan-crabbe-berri Date: Tue, 30 Jun 2026 12:08:15 -0700 Subject: [PATCH 26/79] test(ui): harden Router Settings e2e and make its typing a real CI gate Address an adversarial review of the Loadbalancing e2e: - The "typed against the backend schema" claim was hollow: nothing type-checked e2e_tests (the root tsconfig excludes it and no CI step runs tsc), so a contract drift would compile and run unchanged. Add e2e_tests/tsconfig.json, a typecheck:e2e script, and a CircleCI step so the schema typing actually gates. - The two describe blocks both mutate the proxy's shared router_settings, and the Loadbalancing save echoes the whole settings object, so they could clobber each other under local fullyParallel. Run the file serially. - patchRouterSettings swallowed a failed seed, which surfaced later as a misleading UI timeout. Assert the write succeeded, and rely on the server-side merge instead of echoing the whole settings object back (drops a cast and a GET). - Empty routing_groups already reproduces the bug, so drop the non-empty seed and its model coupling. --- .circleci/config.yml | 8 +++++ .../tests/settings/routerSettings.spec.ts | 36 +++++++++++-------- ui/litellm-dashboard/e2e_tests/tsconfig.json | 9 +++++ ui/litellm-dashboard/package.json | 1 + 4 files changed, 39 insertions(+), 15 deletions(-) create mode 100644 ui/litellm-dashboard/e2e_tests/tsconfig.json diff --git a/.circleci/config.yml b/.circleci/config.yml index f13e9bf66f1..009884cbfe4 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -2687,6 +2687,14 @@ jobs: paths: - ui/litellm-dashboard/node_modules - ~/.cache/ms-playwright + - run: + name: Type-check E2E specs + # The specs type their request/response round-trips against the generated + # OpenAPI schema; this step turns that typing into a real gate, so a backend + # contract drift fails here instead of silently passing at runtime. + command: | + cd ui/litellm-dashboard + npm run typecheck:e2e - run: name: Build UI from source # Prior version used `cp -r out/ ../../litellm/proxy/_experimental/out/`. diff --git a/ui/litellm-dashboard/e2e_tests/tests/settings/routerSettings.spec.ts b/ui/litellm-dashboard/e2e_tests/tests/settings/routerSettings.spec.ts index e560500fca6..64dab6d7cf6 100644 --- a/ui/litellm-dashboard/e2e_tests/tests/settings/routerSettings.spec.ts +++ b/ui/litellm-dashboard/e2e_tests/tests/settings/routerSettings.spec.ts @@ -3,11 +3,16 @@ import { ADMIN_STORAGE_PATH } from "../../constants"; import { navigateToPage } from "../../helpers/navigation"; import { Page } from "../../fixtures/pages"; import { Role, users } from "../../fixtures/users"; -// Type-only import of the OpenAPI-generated backend schema; esbuild erases it at -// runtime, so the round-trip below is checked against the real /config/update and -// /router/settings contracts without bundling the 2 MB definition file. +// Type-only import of the OpenAPI-generated backend schema. esbuild erases it at +// runtime; the round-trip below is enforced by the `typecheck:e2e` CI step (tsc over +// e2e_tests), so a drift in the /config/update or /router/settings contract fails the +// build rather than silently passing here. import type { components } from "../../../src/lib/http/schema"; +// These tests mutate the proxy's shared router_settings, and the Loadbalancing save +// echoes the whole settings object, so they must not run concurrently. +test.describe.configure({ mode: "serial" }); + const PRIMARY = "fake-openai-gpt-4"; const FALLBACK = "fake-anthropic-claude"; @@ -111,32 +116,33 @@ const BASE_URL = "http://localhost:4000"; const ADMIN_AUTH = { Authorization: `Bearer ${users[Role.ProxyAdmin].password}` }; /** - * Merge a router_settings patch into the live config through the typed - * /config/update contract, preserving any other settings already present. + * Apply a router_settings patch through the typed /config/update contract. The + * server merges it over existing settings (request wins), so only the passed keys + * change. Fails loudly if the write is rejected instead of leaving a silent bad seed. */ async function patchRouterSettings( request: import("@playwright/test").APIRequestContext, patch: Partial>, ) { - const current = await request.get(`${BASE_URL}/get/config/callbacks`, { headers: ADMIN_AUTH }); - const existing = current.ok() ? (await current.json())?.router_settings ?? {} : {}; - const payload = { router_settings: { ...(existing as Record), ...patch } }; - await request.post(`${BASE_URL}/config/update`, { headers: ADMIN_AUTH, data: payload }); + const res = await request.post(`${BASE_URL}/config/update`, { + headers: ADMIN_AUTH, + data: { router_settings: patch }, + }); + expect(res.ok(), `seed /config/update failed: ${res.status()} ${await res.text()}`).toBeTruthy(); } test.describe("Router Settings - Loadbalancing", () => { test.use({ storageState: ADMIN_STORAGE_PATH }); - // Seed a present routing_groups array (the LIT-4057 trigger) plus a known - // num_retries so the UI assertions are deterministic across reruns. - const ROUTING_GROUP = { group_name: "e2e-lit-4057", models: [PRIMARY], routing_strategy: "simple-shuffle" }; - + // Pin num_retries and an empty routing_groups so the assertions are deterministic. + // Empty already reproduces LIT-4057: the old tab serialized [] to the string "[]" + // and the save 422'd. test.beforeEach(async ({ request }) => { - await patchRouterSettings(request, { num_retries: 3, routing_groups: [ROUTING_GROUP] }); + await patchRouterSettings(request, { num_retries: 3, routing_groups: [] }); }); test.afterEach(async ({ request }) => { - await patchRouterSettings(request, { num_retries: 3, routing_groups: [] }); + await patchRouterSettings(request, { num_retries: 3 }); }); test("saves the Loadbalancing tab without a 422 when routing_groups is present, and persists", async ({ diff --git a/ui/litellm-dashboard/e2e_tests/tsconfig.json b/ui/litellm-dashboard/e2e_tests/tsconfig.json new file mode 100644 index 00000000000..abda3fdb8b6 --- /dev/null +++ b/ui/litellm-dashboard/e2e_tests/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "noEmit": true, + "types": ["node"] + }, + "include": ["**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/ui/litellm-dashboard/package.json b/ui/litellm-dashboard/package.json index a8948f4be34..1d2b505a172 100644 --- a/ui/litellm-dashboard/package.json +++ b/ui/litellm-dashboard/package.json @@ -19,6 +19,7 @@ "e2e:ui": "playwright test --ui --config e2e_tests/playwright.config.ts", "e2e:migration": "playwright test e2e_tests/tests/migration/migratedPages.spec.ts --config e2e_tests/playwright.config.ts", "e2e:migration:root": "playwright test --config e2e_tests/migration.serverRootPath.config.ts", + "typecheck:e2e": "tsc -p e2e_tests/tsconfig.json --noEmit", "knip": "knip", "knip:fix": "knip --fix", "gen:api": "node scripts/gen-api-types.mjs" From 88c34a5bad735c98804d427ce6d30a0bd5bea124 Mon Sep 17 00:00:00 2001 From: michelligabriele Date: Tue, 30 Jun 2026 21:11:50 +0200 Subject: [PATCH 27/79] fix(email): apply EMAIL_SIGNATURE to budget alert emails (#31712) --- .../send_emails/base_email.py | 4 + .../integrations/email_templates/templates.py | 9 +- .../send_emails/test_base_email.py | 130 ++++++++++++++++++ 3 files changed, 137 insertions(+), 6 deletions(-) diff --git a/enterprise/litellm_enterprise/enterprise_callbacks/send_emails/base_email.py b/enterprise/litellm_enterprise/enterprise_callbacks/send_emails/base_email.py index 89c3b854686..9d15f45079f 100644 --- a/enterprise/litellm_enterprise/enterprise_callbacks/send_emails/base_email.py +++ b/enterprise/litellm_enterprise/enterprise_callbacks/send_emails/base_email.py @@ -239,6 +239,7 @@ class BaseEmailLogger(CustomLogger): max_budget_info=max_budget_info, base_url=email_params.base_url, email_support_contact=email_params.support_contact, + email_footer=email_params.signature, ) await self.send_email( from_email=self.DEFAULT_LITELLM_EMAIL, @@ -311,6 +312,7 @@ class BaseEmailLogger(CustomLogger): max_budget_info=max_budget_info, base_url=email_params.base_url, email_support_contact=email_params.support_contact, + email_footer=email_params.signature, ) # Send email to all recipients @@ -379,6 +381,7 @@ class BaseEmailLogger(CustomLogger): alert_threshold=alert_threshold_str, base_url=email_params.base_url, email_support_contact=email_params.support_contact, + email_footer=email_params.signature, ) await self.send_email( from_email=self.DEFAULT_LITELLM_EMAIL, @@ -403,6 +406,7 @@ class BaseEmailLogger(CustomLogger): alert_threshold=alert_threshold_str, base_url=email_params.base_url, email_support_contact=email_params.support_contact, + email_footer=email_params.signature, ) await self.send_email( from_email=self.DEFAULT_LITELLM_EMAIL, diff --git a/litellm/integrations/email_templates/templates.py b/litellm/integrations/email_templates/templates.py index 8df816dfecd..b4f39074a94 100644 --- a/litellm/integrations/email_templates/templates.py +++ b/litellm/integrations/email_templates/templates.py @@ -81,8 +81,7 @@ SOFT_BUDGET_ALERT_EMAIL_TEMPLATE = """ If you have any questions, please send an email to {email_support_contact}

- Best,
- The LiteLLM team
+ {email_footer} """ TEAM_SOFT_BUDGET_ALERT_EMAIL_TEMPLATE = """ @@ -105,8 +104,7 @@ TEAM_SOFT_BUDGET_ALERT_EMAIL_TEMPLATE = """ If you have any questions, please send an email to {email_support_contact}

- Best,
- The LiteLLM team
+ {email_footer} """ MAX_BUDGET_ALERT_EMAIL_TEMPLATE = """ @@ -129,6 +127,5 @@ MAX_BUDGET_ALERT_EMAIL_TEMPLATE = """ If you have any questions, please send an email to {email_support_contact}

- Best,
- The LiteLLM team
+ {email_footer} """ diff --git a/tests/test_litellm/enterprise/enterprise_callbacks/send_emails/test_base_email.py b/tests/test_litellm/enterprise/enterprise_callbacks/send_emails/test_base_email.py index 5cabfe5fb7f..db23b712125 100644 --- a/tests/test_litellm/enterprise/enterprise_callbacks/send_emails/test_base_email.py +++ b/tests/test_litellm/enterprise/enterprise_callbacks/send_emails/test_base_email.py @@ -1112,3 +1112,133 @@ async def test_no_map_preserves_old_single_threshold( # Old path cache key has no threshold percentage cache_key = mock_cache.async_set_cache.call_args[1]["key"] assert cache_key == "email_budget_alerts:max_budget_alert:test_user" + + +CUSTOM_SIGNATURE = "
Best,
The Acme Platform Team
" + + +@pytest.mark.asyncio +async def test_send_soft_budget_alert_email_uses_custom_signature( + base_email_logger, mock_send_email, mock_lookup_user_email +): + """Soft budget alert honors EMAIL_SIGNATURE for premium users.""" + event = WebhookEvent( + user_id="test_user", + user_email="test@example.com", + event_group=Litellm_EntityType.USER, + event="soft_budget_crossed", + event_message="Soft Budget Crossed", + spend=105.0, + max_budget=200.0, + soft_budget=100.0, + ) + with mock.patch.dict( + os.environ, + {"PROXY_BASE_URL": "http://test.com", "EMAIL_SIGNATURE": CUSTOM_SIGNATURE}, + ), patch("litellm.proxy.proxy_server.premium_user", True): + await base_email_logger.send_soft_budget_alert_email(event) + + html_body = mock_send_email.call_args[1]["html_body"] + assert CUSTOM_SIGNATURE in html_body + assert "The LiteLLM team" not in html_body + + +@pytest.mark.asyncio +async def test_send_team_soft_budget_alert_email_uses_custom_signature( + base_email_logger, mock_send_email, mock_lookup_user_email +): + """Team soft budget alert honors EMAIL_SIGNATURE for premium users.""" + event = WebhookEvent( + user_id="test_user", + event_group=Litellm_EntityType.TEAM, + event="soft_budget_crossed", + event_message="Team Soft Budget Crossed", + spend=105.0, + max_budget=200.0, + soft_budget=100.0, + team_alias="Acme", + alert_emails=["teamlead@example.com"], + ) + with mock.patch.dict( + os.environ, + {"PROXY_BASE_URL": "http://test.com", "EMAIL_SIGNATURE": CUSTOM_SIGNATURE}, + ), patch("litellm.proxy.proxy_server.premium_user", True): + await base_email_logger.send_team_soft_budget_alert_email(event) + + html_body = mock_send_email.call_args[1]["html_body"] + assert CUSTOM_SIGNATURE in html_body + assert "The LiteLLM team" not in html_body + + +@pytest.mark.asyncio +async def test_send_max_budget_alert_email_single_recipient_uses_custom_signature( + base_email_logger, mock_send_email, mock_lookup_user_email +): + """Max budget alert (single-recipient path) honors EMAIL_SIGNATURE.""" + event = WebhookEvent( + user_id="test_user", + user_email="test@example.com", + event_group=Litellm_EntityType.USER, + event="max_budget_alert", + event_message="Max Budget Alert", + spend=165.0, + max_budget=200.0, + ) + with mock.patch.dict( + os.environ, + {"PROXY_BASE_URL": "http://test.com", "EMAIL_SIGNATURE": CUSTOM_SIGNATURE}, + ), patch("litellm.proxy.proxy_server.premium_user", True): + await base_email_logger.send_max_budget_alert_email(event) + + html_body = mock_send_email.call_args[1]["html_body"] + assert CUSTOM_SIGNATURE in html_body + assert "The LiteLLM team" not in html_body + + +@pytest.mark.asyncio +async def test_send_max_budget_alert_email_multi_recipient_uses_custom_signature( + base_email_logger, mock_send_email, mock_lookup_user_email +): + """Max budget alert (multi-threshold/recipient path) honors EMAIL_SIGNATURE.""" + event = WebhookEvent( + user_id="test_user", + user_email="owner@example.com", + event_group=Litellm_EntityType.USER, + event="max_budget_alert", + event_message="Max Budget Alert", + spend=165.0, + max_budget=200.0, + ) + with mock.patch.dict( + os.environ, + {"PROXY_BASE_URL": "http://test.com", "EMAIL_SIGNATURE": CUSTOM_SIGNATURE}, + ), patch("litellm.proxy.proxy_server.premium_user", True): + await base_email_logger.send_max_budget_alert_email( + event, threshold_pct=75, recipient_emails=["a@example.com", "b@example.com"] + ) + + html_body = mock_send_email.call_args[1]["html_body"] + assert CUSTOM_SIGNATURE in html_body + assert "The LiteLLM team" not in html_body + + +@pytest.mark.asyncio +async def test_send_soft_budget_alert_email_default_footer_when_no_signature( + base_email_logger, mock_send_email, mock_lookup_user_email +): + """Without EMAIL_SIGNATURE, budget alert falls back to the default EMAIL_FOOTER.""" + event = WebhookEvent( + user_id="test_user", + user_email="test@example.com", + event_group=Litellm_EntityType.USER, + event="soft_budget_crossed", + event_message="Soft Budget Crossed", + spend=105.0, + max_budget=200.0, + soft_budget=100.0, + ) + with mock.patch.dict(os.environ, {"PROXY_BASE_URL": "http://test.com"}): + await base_email_logger.send_soft_budget_alert_email(event) + + html_body = mock_send_email.call_args[1]["html_body"] + assert EMAIL_FOOTER in html_body From 6d828e5759dc76ecc5d582861fd56e27a5763c2d Mon Sep 17 00:00:00 2001 From: Mateo Wang <277851410+mateo-berri@users.noreply.github.com> Date: Tue, 30 Jun 2026 12:17:33 -0700 Subject: [PATCH 28/79] feat(messages): passthrough /v1/messages to native endpoints via supported_endpoints (#31685) * feat(messages): passthrough /v1/messages to native endpoints via supported_endpoints The unified /v1/messages proxy endpoint always translated inbound Anthropic requests down to /v1/chat/completions (or the Responses API for openai) when the deployment's provider lacked a native Anthropic-messages config, dropping Anthropic-only features like cache_control and thinking. Some customers run OpenAI-compatible servers (self-hosted vLLM, DeepSeek's Anthropic endpoint, etc.) that also natively expose /v1/messages and want the raw Anthropic payload forwarded untranslated, while keeping provider openai so /v1/chat/completions to the same deployment stays native. Opt in per deployment via model_info.supported_endpoints containing /v1/messages. When present, the gate routes to a generic, provider-agnostic OpenAILikeAnthropicMessagesConfig that POSTs the Anthropic payload to {api_base}/v1/messages with Bearer auth, instead of translating. Default behavior is unchanged. Generalizes and supersedes the hosted_vllm-only, env-var-toggled PR #28745. * fix(messages): preserve standard-cased caller headers in native passthrough The OpenAI-like Anthropic passthrough config only checked for lowercase header names before injecting Bearer auth, anthropic-version, and content-type defaults. A caller sending standard-cased Authorization, Anthropic-Version, or Content-Type was treated as missing those headers, so LiteLLM added duplicate lowercase variants and overwrote the caller's credential/version at the HTTP layer. Header presence is now checked case-insensitively and the merge no longer mutates the caller dict. Also moves the feature docs out of the main repo (docs live in litellm-docs). * fix(openai_like/messages): delegate to parent transform and inject anthropic-beta headers The passthrough config bypassed the parent transform and skipped header beta injection. Both gaps cause native /v1/messages features (context management, advisor tool, fast mode, structured outputs, reasoning_effort, advisor stripping) to silently degrade on opted-in deployments. Reuse the parent's pipeline and call _update_headers_with_anthropic_beta after merging defaults * fix: normalize anthropic-beta header key case before beta injection * style: collapse anthropic-beta header normalization to single line ruff format --check requires the comprehension on one line (it fits within the 120 char limit); fixes the lint job failure on the bugbot autofix commit * fix(messages): forward anthropic-beta to native passthrough upstream The shared anthropic_messages HTTP handler ran update_headers_with_filtered_beta with the deployment's custom_llm_provider after validate. For the native /v1/messages passthrough that provider is openai, which has no beta-header mapping, so every anthropic-beta value (caller-supplied or feature-derived for speed/context_management/etc.) was stripped to empty before the upstream request, breaking beta passthrough to the Anthropic-compatible endpoint. Beta filtering only makes sense on cross-provider translation paths where the upstream cannot understand Anthropic betas. Gate it on a new should_filter_anthropic_beta_headers() that defaults to True (bedrock, vertex_ai, native anthropic unchanged) and is overridden to False by OpenAILikeAnthropicMessagesConfig, whose upstream is a native Anthropic endpoint, so betas pass through verbatim. * chore: remove accidentally committed local QA logs and config --------- Co-authored-by: Cursor Agent --- .../messages/handler.py | 21 ++ .../anthropic_messages/transformation.py | 11 + litellm/llms/custom_httpx/llm_http_handler.py | 3 +- litellm/llms/openai_like/messages/__init__.py | 0 .../openai_like/messages/transformation.py | 69 ++++ ...erimental_pass_through_messages_handler.py | 106 ++++++ .../llms/openai_like/messages/__init__.py | 0 ..._like_anthropic_messages_transformation.py | 301 ++++++++++++++++++ 8 files changed, 510 insertions(+), 1 deletion(-) create mode 100644 litellm/llms/openai_like/messages/__init__.py create mode 100644 litellm/llms/openai_like/messages/transformation.py create mode 100644 tests/test_litellm/llms/openai_like/messages/__init__.py create mode 100644 tests/test_litellm/llms/openai_like/messages/test_openai_like_anthropic_messages_transformation.py diff --git a/litellm/llms/anthropic/experimental_pass_through/messages/handler.py b/litellm/llms/anthropic/experimental_pass_through/messages/handler.py index 9c9427c7302..547ddd9b8d3 100644 --- a/litellm/llms/anthropic/experimental_pass_through/messages/handler.py +++ b/litellm/llms/anthropic/experimental_pass_through/messages/handler.py @@ -61,6 +61,19 @@ def _should_route_to_responses_api(custom_llm_provider: Optional[str]) -> bool: return custom_llm_provider in _RESPONSES_API_PROVIDERS +def _deployment_passes_through_anthropic_messages(model_info: object) -> bool: + """Whether the deployment opted into forwarding /v1/messages untranslated. + + The opt-in is ``model_info.supported_endpoints`` containing ``"/v1/messages"``, + declared per deployment in config.yaml and plumbed here as ``kwargs["model_info"]`` + by the router. + """ + if not isinstance(model_info, dict): + return False + supported_endpoints = model_info.get("supported_endpoints") + return isinstance(supported_endpoints, (list, tuple)) and "/v1/messages" in supported_endpoints + + ####### ENVIRONMENT VARIABLES ################### # Initialize any necessary instances or variables here base_llm_http_handler = BaseLLMHTTPHandler() @@ -456,6 +469,14 @@ def anthropic_messages_handler( model=model, provider=litellm.LlmProviders(custom_llm_provider), ) + if anthropic_messages_provider_config is None and _deployment_passes_through_anthropic_messages( + kwargs.get("model_info") + ): + from litellm.llms.openai_like.messages.transformation import ( + OpenAILikeAnthropicMessagesConfig, + ) + + anthropic_messages_provider_config = OpenAILikeAnthropicMessagesConfig() if anthropic_messages_provider_config is None: # Route to Responses API for OpenAI / Azure, chat/completions for everything else. _shared_kwargs = dict( diff --git a/litellm/llms/base_llm/anthropic_messages/transformation.py b/litellm/llms/base_llm/anthropic_messages/transformation.py index 7f8403c0223..966995bc571 100644 --- a/litellm/llms/base_llm/anthropic_messages/transformation.py +++ b/litellm/llms/base_llm/anthropic_messages/transformation.py @@ -103,6 +103,17 @@ class BaseAnthropicMessagesConfig(ABC): """ return headers, None + def should_filter_anthropic_beta_headers(self) -> bool: + """ + Whether ``anthropic-beta`` header values should be filtered down to the + ones the routed provider supports before the upstream request. + + Cross-provider translation paths (bedrock, vertex_ai, ...) need this so + unsupported betas are dropped. Configs that forward natively to an + Anthropic-compatible endpoint return False to pass betas through verbatim. + """ + return True + def get_async_streaming_response_iterator( self, model: str, diff --git a/litellm/llms/custom_httpx/llm_http_handler.py b/litellm/llms/custom_httpx/llm_http_handler.py index 9f18b669124..9bb956d0808 100644 --- a/litellm/llms/custom_httpx/llm_http_handler.py +++ b/litellm/llms/custom_httpx/llm_http_handler.py @@ -1986,7 +1986,8 @@ class BaseLLMHTTPHandler: api_base=api_base, ) - headers = update_headers_with_filtered_beta(headers=headers, provider=custom_llm_provider) + if anthropic_messages_provider_config.should_filter_anthropic_beta_headers(): + headers = update_headers_with_filtered_beta(headers=headers, provider=custom_llm_provider) logging_obj.update_from_kwargs( kwargs=kwargs, diff --git a/litellm/llms/openai_like/messages/__init__.py b/litellm/llms/openai_like/messages/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/litellm/llms/openai_like/messages/transformation.py b/litellm/llms/openai_like/messages/transformation.py new file mode 100644 index 00000000000..0df8c6e830b --- /dev/null +++ b/litellm/llms/openai_like/messages/transformation.py @@ -0,0 +1,69 @@ +from typing import Any, Optional + +from litellm.llms.anthropic.experimental_pass_through.messages.transformation import ( + AnthropicMessagesConfig, +) + +DEFAULT_ANTHROPIC_API_VERSION = "2023-06-01" + + +class OpenAILikeAnthropicMessagesConfig(AnthropicMessagesConfig): + """ + Forwards Anthropic /v1/messages requests to an OpenAI-compatible server that + also natively exposes the Anthropic Messages API, with no translation. + + Opted into per deployment via ``model_info.supported_endpoints`` containing + ``"/v1/messages"``. The inbound Anthropic payload (system, cache_control, + thinking, tools, ...) is forwarded essentially unchanged to + ``{api_base}/v1/messages``, so Anthropic-only features that the + Anthropic->OpenAI translation would otherwise drop are preserved. Response + parsing and streaming are inherited from the native Anthropic config. + """ + + def validate_anthropic_messages_environment( + self, + headers: dict[str, str], + model: str, + messages: list[Any], + optional_params: dict, + litellm_params: dict, + api_key: Optional[str] = None, + api_base: Optional[str] = None, + ) -> tuple[dict[str, str], Optional[str]]: + present = {key.lower() for key in headers} + needs_auth = bool(api_key) and "authorization" not in present and "x-api-key" not in present + defaults: dict[str, str] = { + **({"authorization": f"Bearer {api_key}"} if needs_auth else {}), + **({"anthropic-version": DEFAULT_ANTHROPIC_API_VERSION} if "anthropic-version" not in present else {}), + **({"content-type": "application/json"} if "content-type" not in present else {}), + } + combined = {**headers, **defaults} + normalized = { + ("anthropic-beta" if key.lower() == "anthropic-beta" else key): value for key, value in combined.items() + } + merged = self._update_headers_with_anthropic_beta( + headers=normalized, + optional_params=optional_params, + ) + return merged, api_base + + def should_filter_anthropic_beta_headers(self) -> bool: + return False + + def get_complete_url( + self, + api_base: Optional[str], + api_key: Optional[str], + model: str, + optional_params: dict, + litellm_params: dict, + stream: Optional[bool] = None, + ) -> str: + if not api_base: + raise ValueError("api_base is required to forward Anthropic /v1/messages to a native endpoint") + base = api_base.rstrip("/") + if base.endswith("/v1/messages"): + return base + if base.endswith("/v1"): + base = base[: -len("/v1")] + return f"{base}/v1/messages" diff --git a/tests/test_litellm/llms/anthropic/experimental_pass_through/messages/test_anthropic_experimental_pass_through_messages_handler.py b/tests/test_litellm/llms/anthropic/experimental_pass_through/messages/test_anthropic_experimental_pass_through_messages_handler.py index 7bcaf07c5bb..3327fc39f73 100644 --- a/tests/test_litellm/llms/anthropic/experimental_pass_through/messages/test_anthropic_experimental_pass_through_messages_handler.py +++ b/tests/test_litellm/llms/anthropic/experimental_pass_through/messages/test_anthropic_experimental_pass_through_messages_handler.py @@ -715,3 +715,109 @@ async def test_async_wrapper_sets_presanitized_and_sanitizes_once(): assert spy.call_count == 1 assert captured["presanitized"] is True assert [b["type"] for b in captured["messages"][0]["content"]] == ["tool_use"] + + +def _gate_stubs(monkeypatch): + """Patch the gate's downstream dispatch targets so config selection can be + observed without making a network call. + + Returns ``(captured, translation_calls)`` where ``captured["config"]`` is the + provider config handed to the native passthrough path and ``translation_calls`` + counts hits on the Anthropic->OpenAI translation handlers. + """ + from litellm.llms.anthropic.experimental_pass_through.messages import handler + + captured = {} + translation_calls = {"count": 0} + + def fake_native(**kwargs): + captured["config"] = kwargs.get("anthropic_messages_provider_config") + return "native-passthrough" + + def fake_translation(**kwargs): + translation_calls["count"] += 1 + return "translated" + + monkeypatch.setattr(handler.base_llm_http_handler, "anthropic_messages_handler", fake_native) + monkeypatch.setattr( + handler.LiteLLMMessagesToResponsesAPIHandler, + "anthropic_messages_handler", + staticmethod(fake_translation), + ) + monkeypatch.setattr( + handler.LiteLLMMessagesToCompletionTransformationHandler, + "anthropic_messages_handler", + staticmethod(fake_translation), + ) + return captured, translation_calls + + +def test_gate_passthrough_when_supported_endpoints_opts_in(monkeypatch): + """provider=openai + model_info.supported_endpoints containing /v1/messages + must route to the native passthrough config, NOT the translation handlers.""" + from litellm.llms.anthropic.experimental_pass_through.messages.handler import ( + anthropic_messages_handler, + ) + from litellm.llms.openai_like.messages.transformation import ( + OpenAILikeAnthropicMessagesConfig, + ) + + captured, translation_calls = _gate_stubs(monkeypatch) + + result = anthropic_messages_handler( + max_tokens=100, + messages=[{"role": "user", "content": "Hello"}], + model="openai/some-model", + api_key="sk-test", + api_base="https://host/v1", + model_info={"supported_endpoints": ["/v1/chat/completions", "/v1/messages"]}, + ) + + assert result == "native-passthrough" + assert isinstance(captured["config"], OpenAILikeAnthropicMessagesConfig) + assert translation_calls["count"] == 0 + + +def test_gate_translates_when_supported_endpoints_absent(monkeypatch): + """Default behavior is unchanged: without the /v1/messages opt-in, an openai + deployment is translated (Responses API), never passed through natively.""" + from litellm.llms.anthropic.experimental_pass_through.messages.handler import ( + anthropic_messages_handler, + ) + + captured, translation_calls = _gate_stubs(monkeypatch) + + result = anthropic_messages_handler( + max_tokens=100, + messages=[{"role": "user", "content": "Hello"}], + model="openai/some-model", + api_key="sk-test", + api_base="https://host/v1", + ) + + assert result == "translated" + assert translation_calls["count"] == 1 + assert "config" not in captured + + +def test_gate_passthrough_skipped_when_only_chat_completions_supported(monkeypatch): + """A deployment that lists only /v1/chat/completions is still translated; + the opt-in is specifically the /v1/messages entry.""" + from litellm.llms.anthropic.experimental_pass_through.messages.handler import ( + anthropic_messages_handler, + ) + + captured, translation_calls = _gate_stubs(monkeypatch) + + result = anthropic_messages_handler( + max_tokens=100, + messages=[{"role": "user", "content": "Hello"}], + model="openai/some-model", + api_key="sk-test", + api_base="https://host/v1", + model_info={"supported_endpoints": ["/v1/chat/completions"]}, + ) + + assert result == "translated" + assert translation_calls["count"] == 1 + assert "config" not in captured diff --git a/tests/test_litellm/llms/openai_like/messages/__init__.py b/tests/test_litellm/llms/openai_like/messages/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/test_litellm/llms/openai_like/messages/test_openai_like_anthropic_messages_transformation.py b/tests/test_litellm/llms/openai_like/messages/test_openai_like_anthropic_messages_transformation.py new file mode 100644 index 00000000000..534d7aefda4 --- /dev/null +++ b/tests/test_litellm/llms/openai_like/messages/test_openai_like_anthropic_messages_transformation.py @@ -0,0 +1,301 @@ +import pytest + +from litellm.llms.anthropic.common_utils import AnthropicError +from litellm.llms.openai_like.messages.transformation import ( + OpenAILikeAnthropicMessagesConfig, +) +from litellm.types.router import GenericLiteLLMParams + + +@pytest.fixture +def config() -> OpenAILikeAnthropicMessagesConfig: + return OpenAILikeAnthropicMessagesConfig() + + +@pytest.mark.parametrize( + "api_base, expected", + [ + ("https://host/v1", "https://host/v1/messages"), + ("https://host/v1/", "https://host/v1/messages"), + ("https://host", "https://host/v1/messages"), + ("https://host/v1/messages", "https://host/v1/messages"), + ("https://api.deepseek.com/anthropic", "https://api.deepseek.com/anthropic/v1/messages"), + ("https://api.deepseek.com/anthropic/v1", "https://api.deepseek.com/anthropic/v1/messages"), + ], +) +def test_get_complete_url_handles_api_base_variants(config, api_base, expected): + url = config.get_complete_url( + api_base=api_base, + api_key="sk-test", + model="some-model", + optional_params={}, + litellm_params={}, + ) + assert url == expected + + +def test_get_complete_url_requires_api_base(config): + with pytest.raises(ValueError, match="api_base is required"): + config.get_complete_url( + api_base=None, + api_key="sk-test", + model="some-model", + optional_params={}, + litellm_params={}, + ) + + +def test_request_stays_in_anthropic_shape(config): + messages = [ + { + "role": "user", + "content": [ + { + "type": "text", + "text": "Summarize this", + "cache_control": {"type": "ephemeral"}, + } + ], + } + ] + optional_params = { + "max_tokens": 256, + "system": "You are a careful assistant", + "thinking": {"type": "enabled", "budget_tokens": 1024}, + "temperature": 0.3, + "tools": [{"name": "lookup", "input_schema": {"type": "object"}}], + "stream": False, + } + + payload = config.transform_anthropic_messages_request( + model="some-model", + messages=messages, + anthropic_messages_optional_request_params=optional_params, + litellm_params=GenericLiteLLMParams(), + headers={}, + ) + + assert payload["model"] == "some-model" + assert payload["messages"] == messages + assert payload["messages"][0]["content"][0]["cache_control"] == {"type": "ephemeral"} + assert payload["system"] == "You are a careful assistant" + assert payload["thinking"] == {"type": "enabled", "budget_tokens": 1024} + assert payload["max_tokens"] == 256 + assert payload["tools"] == optional_params["tools"] + + openai_only_keys = { + "max_completion_tokens", + "stop", + "n", + "logprobs", + "response_format", + "frequency_penalty", + } + assert openai_only_keys.isdisjoint(payload.keys()) + + +def test_request_requires_max_tokens(config): + with pytest.raises(AnthropicError, match="max_tokens is required"): + config.transform_anthropic_messages_request( + model="some-model", + messages=[{"role": "user", "content": "hi"}], + anthropic_messages_optional_request_params={"system": "s"}, + litellm_params=GenericLiteLLMParams(), + headers={}, + ) + + +def test_validate_environment_sets_bearer_and_anthropic_defaults(config): + headers, api_base = config.validate_anthropic_messages_environment( + headers={}, + model="some-model", + messages=[], + optional_params={}, + litellm_params={}, + api_key="sk-test", + api_base="https://host/v1", + ) + assert headers["authorization"] == "Bearer sk-test" + assert headers["anthropic-version"] == "2023-06-01" + assert headers["content-type"] == "application/json" + assert api_base == "https://host/v1" + + +def test_validate_environment_does_not_overwrite_caller_headers(config): + headers, _ = config.validate_anthropic_messages_environment( + headers={ + "authorization": "Bearer caller-token", + "anthropic-version": "2024-10-22", + "content-type": "application/json", + }, + model="some-model", + messages=[], + optional_params={}, + litellm_params={}, + api_key="sk-test", + api_base="https://host/v1", + ) + assert headers["authorization"] == "Bearer caller-token" + assert headers["anthropic-version"] == "2024-10-22" + + +def test_validate_environment_preserves_standard_cased_caller_headers(config): + headers, _ = config.validate_anthropic_messages_environment( + headers={ + "Authorization": "Bearer caller-token", + "Anthropic-Version": "2024-10-22", + "Content-Type": "application/json", + }, + model="some-model", + messages=[], + optional_params={}, + litellm_params={}, + api_key="sk-test", + api_base="https://host/v1", + ) + lowercased = {key.lower() for key in headers} + assert len(lowercased) == len(headers) + assert headers["Authorization"] == "Bearer caller-token" + assert headers["Anthropic-Version"] == "2024-10-22" + assert headers["Content-Type"] == "application/json" + + +def test_validate_environment_honors_x_api_key_when_present(config): + headers, _ = config.validate_anthropic_messages_environment( + headers={"X-Api-Key": "caller-key"}, + model="some-model", + messages=[], + optional_params={}, + litellm_params={}, + api_key="sk-test", + api_base="https://host/v1", + ) + assert "authorization" not in {key.lower() for key in headers} + assert headers["X-Api-Key"] == "caller-key" + + +def test_validate_environment_injects_anthropic_beta_for_context_management(config): + headers, _ = config.validate_anthropic_messages_environment( + headers={}, + model="some-model", + messages=[], + optional_params={ + "context_management": {"edits": [{"type": "clear_tool_uses_20250919"}]}, + }, + litellm_params={}, + api_key="sk-test", + api_base="https://host/v1", + ) + assert "context-management-2025-06-27" in headers["anthropic-beta"].split(",") + + +def test_validate_environment_injects_anthropic_beta_for_fast_mode(config): + headers, _ = config.validate_anthropic_messages_environment( + headers={}, + model="some-model", + messages=[], + optional_params={"speed": "fast"}, + litellm_params={}, + api_key="sk-test", + api_base="https://host/v1", + ) + assert "fast-mode-2026-02-01" in headers["anthropic-beta"].split(",") + + +def test_validate_environment_merges_existing_anthropic_beta(config): + headers, _ = config.validate_anthropic_messages_environment( + headers={"anthropic-beta": "caller-flag"}, + model="some-model", + messages=[], + optional_params={"speed": "fast"}, + litellm_params={}, + api_key="sk-test", + api_base="https://host/v1", + ) + beta_values = set(headers["anthropic-beta"].split(",")) + assert "caller-flag" in beta_values + assert "fast-mode-2026-02-01" in beta_values + + +def test_request_strips_advisor_blocks_when_advisor_tool_absent(config): + messages = [ + {"role": "user", "content": "hello"}, + { + "role": "assistant", + "content": [ + {"type": "text", "text": "thinking out loud"}, + {"type": "server_tool_use", "id": "advisor_1", "name": "advisor", "input": {}}, + {"type": "advisor_tool_result", "tool_use_id": "advisor_1", "content": "stale"}, + ], + }, + ] + + payload = config.transform_anthropic_messages_request( + model="some-model", + messages=messages, + anthropic_messages_optional_request_params={"max_tokens": 64}, + litellm_params=GenericLiteLLMParams(), + headers={}, + ) + + flattened_types = [ + block.get("type") + for message in payload["messages"] + if isinstance(message.get("content"), list) + for block in message["content"] + if isinstance(block, dict) + ] + assert "advisor_tool_result" not in flattened_types + assert "server_tool_use" not in flattened_types + + +def test_request_maps_reasoning_effort_to_thinking(config): + payload = config.transform_anthropic_messages_request( + model="claude-sonnet-4-20250514", + messages=[{"role": "user", "content": "hi"}], + anthropic_messages_optional_request_params={ + "max_tokens": 1024, + "reasoning_effort": "medium", + }, + litellm_params=GenericLiteLLMParams(), + headers={}, + ) + + assert "reasoning_effort" not in payload + assert isinstance(payload.get("thinking"), dict) + assert payload["thinking"].get("type") == "enabled" + + +def test_passthrough_disables_anthropic_beta_filtering(config): + from litellm.llms.anthropic.experimental_pass_through.messages.transformation import ( + AnthropicMessagesConfig, + ) + + assert config.should_filter_anthropic_beta_headers() is False + assert AnthropicMessagesConfig().should_filter_anthropic_beta_headers() is True + + +def test_anthropic_beta_survives_provider_filter_on_passthrough_path(config): + from litellm.anthropic_beta_headers_manager import update_headers_with_filtered_beta + + headers, _ = config.validate_anthropic_messages_environment( + headers={"Anthropic-Beta": "caller-flag"}, + model="some-model", + messages=[], + optional_params={"speed": "fast"}, + litellm_params={}, + api_key="sk-test", + api_base="https://host/v1", + ) + + # The deployment routes as provider "openai", which has no beta mapping, so an + # unconditional filter would drop every anthropic-beta value. The handler must + # skip filtering for this config so the native upstream still receives them. + if config.should_filter_anthropic_beta_headers(): + headers = update_headers_with_filtered_beta(headers=dict(headers), provider="openai") + + survived = set(headers.get("anthropic-beta", "").split(",")) + assert {"caller-flag", "fast-mode-2026-02-01"} <= survived + + stripped = update_headers_with_filtered_beta(headers=dict(headers), provider="openai") + assert "anthropic-beta" not in stripped From 6d43c21ec641baee73e486ec3f9b72c1c36a850d Mon Sep 17 00:00:00 2001 From: mateo-berri <277851410+mateo-berri@users.noreply.github.com> Date: Tue, 30 Jun 2026 19:19:48 +0000 Subject: [PATCH 29/79] fix(anthropic): drop redundant supports_output_config from Vertex/Azure Sonnet 5 The Vertex AI and Azure AI Sonnet 5 entries carried supports_output_config: true, which the gen-5 siblings (vertex_ai/claude-opus-4-8, azure_ai/claude-fable-5, etc.) do not. The flag only feeds AnthropicConfig._model_supports_effort_param, which already returns true for these entries via supports_xhigh/max_reasoning_effort, so output_config.effort still forwards on both routes. Removing it is behavior neutral and matches the existing per-platform convention for gen-5 Claude. --- litellm/model_prices_and_context_window_backup.json | 9 +++------ model_prices_and_context_window.json | 9 +++------ 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index 5bd70690d48..b16e1015255 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -2737,8 +2737,7 @@ "supports_tool_choice": true, "supports_vision": true, "supports_xhigh_reasoning_effort": true, - "supports_max_reasoning_effort": true, - "supports_output_config": true + "supports_max_reasoning_effort": true }, "azure_ai/claude-sonnet-4-6": { "supports_adaptive_thinking": true, @@ -35235,8 +35234,7 @@ "supports_tool_choice": true, "supports_vision": true, "supports_xhigh_reasoning_effort": true, - "supports_max_reasoning_effort": true, - "supports_output_config": true + "supports_max_reasoning_effort": true }, "vertex_ai/claude-sonnet-4-6": { "supports_adaptive_thinking": true, @@ -42703,8 +42701,7 @@ "supports_tool_choice": true, "supports_vision": true, "supports_xhigh_reasoning_effort": true, - "supports_max_reasoning_effort": true, - "supports_output_config": true + "supports_max_reasoning_effort": true }, "vertex_ai/claude-sonnet-4-6@default": { "supports_adaptive_thinking": true, diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index 5fc431d721b..3e4c5b947a1 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -2737,8 +2737,7 @@ "supports_tool_choice": true, "supports_vision": true, "supports_xhigh_reasoning_effort": true, - "supports_max_reasoning_effort": true, - "supports_output_config": true + "supports_max_reasoning_effort": true }, "azure_ai/claude-sonnet-4-6": { "supports_adaptive_thinking": true, @@ -35412,8 +35411,7 @@ "supports_tool_choice": true, "supports_vision": true, "supports_xhigh_reasoning_effort": true, - "supports_max_reasoning_effort": true, - "supports_output_config": true + "supports_max_reasoning_effort": true }, "vertex_ai/claude-sonnet-4-6": { "supports_adaptive_thinking": true, @@ -42938,8 +42936,7 @@ "supports_tool_choice": true, "supports_vision": true, "supports_xhigh_reasoning_effort": true, - "supports_max_reasoning_effort": true, - "supports_output_config": true + "supports_max_reasoning_effort": true }, "vertex_ai/claude-sonnet-4-6@default": { "supports_adaptive_thinking": true, From 52dc15adfefc9385e68c6a4a635f659cfb466f9e Mon Sep 17 00:00:00 2001 From: Yassin Kortam Date: Tue, 30 Jun 2026 22:21:14 +0300 Subject: [PATCH 30/79] fix(proxy): isolate poison spend-log rows so one bad record can't drop the whole batch (#31705) update_spend_logs flushes the queue with a single create_many per batch, so one row carrying bytes Postgres refuses (a residual NUL byte is the canonical case) fails the entire insert and drops every good spend log alongside it. PR #29515 strips NUL bytes from the JSON columns, but the scalar string columns (end_user, model, session_id, ...) still flow through unsanitized, so a poisoned row can still reach the write and take a batch of up to 1000 good rows down with it. On a genuine data-layer rejection the batch is now bisected so the good rows still persist and only the offending row is dropped and logged with its request_id. The classification lives in PrismaDBExceptionHandler.is_prisma_data_error (matched by exact type so systemic subclasses like a missing table are not mistaken for a single poison row), which keeps prisma an in-function import and litellm.proxy.utils importable without the proxy extra. Transport failures, including the "can't reach database server" outage that prisma mislabels as a DataError, are re-raised unchanged so the existing connection-retry path still runs and a transient outage never turns into silent per-row data loss. The bisection carries a per-batch isolation budget so an authenticated caller flooding poisoned rows cannot amplify one failed bulk insert into ~2N failed inserts and N log lines; once the budget is spent the still-failing remainder is dropped wholesale under a single log line. Resolves LIT-4103 --- litellm/proxy/db/exception_handler.py | 23 ++++ litellm/proxy/utils.py | 67 ++++++++++- .../proxy/db/test_exception_handler.py | 31 +++++ .../test_proxy_update_spend.py | 106 ++++++++++++++++++ 4 files changed, 225 insertions(+), 2 deletions(-) diff --git a/litellm/proxy/db/exception_handler.py b/litellm/proxy/db/exception_handler.py index 48066945131..3a93896a206 100644 --- a/litellm/proxy/db/exception_handler.py +++ b/litellm/proxy/db/exception_handler.py @@ -66,6 +66,29 @@ class PrismaDBExceptionHandler: return True return False + @staticmethod + def is_prisma_data_error(e: Exception) -> bool: + """True iff ``e`` is a base prisma ``DataError``: the database processed + the statement and refused the data itself (e.g. ``invalid byte sequence + for encoding "UTF8": 0x00``), as opposed to a connectivity failure. + + Matched by exact type, not ``isinstance``: the specific data-layer + subclasses (``UniqueViolationError``, ``TableNotFoundError``, + ``MissingRequiredValueError`` ...) all derive from ``DataError`` but + carry their own semantics, and a systemic one like a missing table must + not be mistaken for a single poison row and bisected away. A raw + Postgres execution error with no prisma P-code surfaces as the base + ``DataError``. + + prisma also wraps the P1001 "can't reach database server" outage as a + base ``DataError``, so a caller that must not treat an outage as a + per-row data rejection has to additionally consult + ``is_database_service_unavailable_error`` before acting on a True here. + """ + import prisma + + return type(e) is prisma.errors.DataError + @staticmethod def is_database_transport_error(e: Exception) -> bool: """ diff --git a/litellm/proxy/utils.py b/litellm/proxy/utils.py index 154a17bc4db..4433a35f5d0 100644 --- a/litellm/proxy/utils.py +++ b/litellm/proxy/utils.py @@ -23,7 +23,9 @@ from typing import ( Dict, List, Literal, + Mapping, Optional, + Sequence, Tuple, Union, cast, @@ -5194,8 +5196,10 @@ class ProxyUpdateSpend: for j in range(0, len(logs_to_process), BATCH_SIZE): batch = logs_to_process[j : j + BATCH_SIZE] batch_with_dates = [prisma_client.jsonify_object({**entry}) for entry in batch] - await SpendLogsRepository(prisma_client).table.create_many( - data=batch_with_dates, skip_duplicates=True + await _create_spend_logs_with_poison_isolation( + SpendLogsRepository(prisma_client), + batch_with_dates, + MAX_SPEND_LOG_ISOLATION_ATTEMPTS_PER_BATCH, ) verbose_proxy_logger.debug(f"Flushed {len(batch)} logs to the DB.") # Explicitly clear batch memory @@ -5462,6 +5466,65 @@ async def _monitor_spend_logs_queue( await asyncio.sleep(current_interval) +MAX_SPEND_LOG_ISOLATION_ATTEMPTS_PER_BATCH = 256 + + +async def _create_spend_logs_with_poison_isolation( + repo: SpendLogsRepository, + rows: Sequence[Mapping[str, object]], + attempts_left: int, +) -> int: + """Write spend-log rows, isolating any row Postgres rejects on its data. + + ``create_many`` writes the whole batch in a single statement, so one row + carrying bytes Postgres refuses (a residual NUL byte is the canonical case) + fails the entire insert and drops every good row alongside it. On a genuine + data-layer rejection the batch is bisected so the good rows still persist + and only the offending row is dropped and logged. Transport failures, + including the "can't reach database server" outage that prisma mislabels as + a ``DataError``, are re-raised unchanged so the caller's connection-retry + path still runs. + + ``attempts_left`` is a hard ceiling on the number of ``create_many`` calls + the isolation may issue for this batch, so an authenticated caller flooding + poisoned rows cannot amplify one failed bulk insert into unbounded failed + inserts and log lines. It is checked before any insert (so an exhausted + budget never even attempts a write), decremented once per ``create_many`` + call, and threaded through the recursion so the whole bisection shares one + allowance; total inserts are therefore bounded by the initial value + regardless of how many rows are poisoned. When it runs out the still-failing + remainder is dropped wholesale (the pre-existing drop-the-batch behavior) + under one log line. Returns the budget left after this subtree. + """ + if attempts_left <= 0: + spend_log_error( + "Spend tracking - dropping %d spend log rows without per-row isolation; " + "isolation attempt budget exhausted for this flush", + len(rows), + ) + return 0 + try: + await repo.table.create_many(data=rows, skip_duplicates=True) + return attempts_left - 1 + except Exception as e: + if not PrismaDBExceptionHandler.is_prisma_data_error(e): + raise + if PrismaDBExceptionHandler.is_database_service_unavailable_error(e): + raise + if len(rows) == 1: + request_id = rows[0].get("request_id") + spend_log_error( + "Spend tracking - dropping spend log row Postgres rejected. request_id=%s error=%s", + request_id, + str(e), + exc=e, + ) + return attempts_left - 1 + mid = len(rows) // 2 + remaining = await _create_spend_logs_with_poison_isolation(repo, rows[:mid], attempts_left - 1) + return await _create_spend_logs_with_poison_isolation(repo, rows[mid:], remaining) + + def _raise_failed_update_spend_exception(e: Exception, start_time: float, proxy_logging_obj: ProxyLogging): """ Raise an exception for failed update spend logs diff --git a/tests/test_litellm/proxy/db/test_exception_handler.py b/tests/test_litellm/proxy/db/test_exception_handler.py index 6021c221426..0634a01326c 100644 --- a/tests/test_litellm/proxy/db/test_exception_handler.py +++ b/tests/test_litellm/proxy/db/test_exception_handler.py @@ -148,6 +148,37 @@ def test_is_database_service_unavailable_error_prisma_p1001_masquerades_as_datae ) +def test_is_prisma_data_error_only_true_for_dataerror(): + """The spend-log poison-row isolation gates on this: only a prisma + ``DataError`` (the DB refused the data, e.g. a NUL byte) may be bisected + into a per-row drop. A connectivity failure or any non-prisma exception + must not be treated as a data rejection, so the whole batch surfaces.""" + import httpx + + data_error = DataError(data={"user_facing_error": {"message": "invalid byte sequence for encoding UTF8: 0x00"}}) + assert PrismaDBExceptionHandler.is_prisma_data_error(data_error) is True + + for non_data in ( + httpx.ConnectError("conn refused"), + PrismaError("can't reach database server"), + UniqueViolationError(data={"user_facing_error": {"meta": {"table": "t"}}}), + RuntimeError("boom"), + ): + assert PrismaDBExceptionHandler.is_prisma_data_error(non_data) is False + + +def test_is_prisma_data_error_true_for_connection_masquerade_dataerror(): + """The P1001 outage prisma mislabels as a ``DataError`` is still a + ``DataError`` by type, so this returns True; the spend-log helper relies on + ``is_database_service_unavailable_error`` (not this check) to keep that + outage on the retry path instead of dropping rows.""" + p1001_as_dataerror = DataError( + data={"user_facing_error": {"message": "Can't reach database server at `127.0.0.1`:`5499`"}} + ) + assert PrismaDBExceptionHandler.is_prisma_data_error(p1001_as_dataerror) is True + assert PrismaDBExceptionHandler.is_database_service_unavailable_error(p1001_as_dataerror) is True + + def test_is_database_service_unavailable_error_cached_plan_escapes_as_503(): """Composes with the cached-plan retry: when that recovery fails and the Postgres "cached plan must not change result type" error escapes (raised by diff --git a/tests/test_litellm/proxy/utils/prisma_and_spend/test_proxy_update_spend.py b/tests/test_litellm/proxy/utils/prisma_and_spend/test_proxy_update_spend.py index 6a4fd516c9b..d5d4de7f2cf 100644 --- a/tests/test_litellm/proxy/utils/prisma_and_spend/test_proxy_update_spend.py +++ b/tests/test_litellm/proxy/utils/prisma_and_spend/test_proxy_update_spend.py @@ -231,6 +231,112 @@ async def test_update_spend_logs_failure_raises_after_retries( ) +def _data_error(message: str) -> Any: + from prisma.errors import DataError + + return DataError({"user_facing_error": {"message": message}}) + + +@pytest.mark.asyncio +async def test_update_spend_logs_isolates_poison_row_and_persists_good_rows( + mock_prisma_client: Any, make_spend_log_row: Any +) -> None: + """One row Postgres rejects (22P05) must not drop the whole batch. + + The good rows still persist and only the offending row is dropped, with no + exception bubbling up. On the unfixed single-shot ``create_many`` the first + write raises and the entire batch is lost. + """ + poison_id = "r1" + written: List[str] = [] + + async def _create_many(*, data: Any, skip_duplicates: bool) -> None: + ids = [row["request_id"] for row in data] + if poison_id in ids: + raise _data_error( + "Inconsistent column data: 22P05 invalid byte sequence for encoding UTF8: 0x00" + ) + written.extend(ids) + + mock_prisma_client.db.litellm_spendlogs.create_many = AsyncMock(side_effect=_create_many) + proxy_logging = MagicMock() + proxy_logging.failure_handler = AsyncMock() + + logs = [make_spend_log_row(request_id=f"r{i}") for i in range(4)] + await ProxyUpdateSpend.update_spend_logs( + n_retry_times=0, + prisma_client=mock_prisma_client, + db_writer_client=None, + proxy_logging_obj=proxy_logging, + logs_to_process=logs, + ) + assert sorted(written) == ["r0", "r2", "r3"] + + +@pytest.mark.asyncio +async def test_update_spend_logs_reraises_connection_masquerade_dataerror( + mock_prisma_client: Any, make_spend_log_row: Any +) -> None: + """A P1001 "can't reach database server" outage that prisma mislabels as a + ``DataError`` is transient, not a poison row: it must propagate so the batch + is surfaced/retried rather than bisected into silent per-row drops. + """ + err = _data_error("Can't reach database server at db-host:5432") + mock_prisma_client.db.litellm_spendlogs.create_many = AsyncMock(side_effect=err) + proxy_logging = MagicMock() + proxy_logging.failure_handler = AsyncMock() + + with pytest.raises(type(err)): + await ProxyUpdateSpend.update_spend_logs( + n_retry_times=0, + prisma_client=mock_prisma_client, + db_writer_client=None, + proxy_logging_obj=proxy_logging, + logs_to_process=[ + make_spend_log_row(request_id="a"), + make_spend_log_row(request_id="b"), + ], + ) + + +@pytest.mark.asyncio +async def test_update_spend_logs_caps_isolation_attempts_under_poison_flood( + mock_prisma_client: Any, make_spend_log_row: Any +) -> None: + """A flood of poisoned rows must not amplify one failed bulk insert into + unbounded failed inserts. The per-batch attempt budget hard-caps the number + of ``create_many`` calls regardless of how many rows are poisoned, so the DB + work stays bounded and well below the input row count, and the helper still + completes without raising. + """ + import litellm.proxy.utils as utils_mod + + attempt_cap = utils_mod.MAX_SPEND_LOG_ISOLATION_ATTEMPTS_PER_BATCH + # single create_many batch (< BATCH_SIZE) whose row count exceeds the attempt + # cap, so the bound bites and attempts stay below the input row count + n_rows = attempt_cap * 3 + + async def _always_poison(*, data: Any, skip_duplicates: bool) -> None: + raise _data_error("invalid byte sequence for encoding UTF8: 0x00") + + mock_prisma_client.db.litellm_spendlogs.create_many = AsyncMock(side_effect=_always_poison) + proxy_logging = MagicMock() + proxy_logging.failure_handler = AsyncMock() + logs = [make_spend_log_row(request_id=f"r{i}") for i in range(n_rows)] + + await ProxyUpdateSpend.update_spend_logs( + n_retry_times=0, + prisma_client=mock_prisma_client, + db_writer_client=None, + proxy_logging_obj=proxy_logging, + logs_to_process=logs, + ) + + attempts = mock_prisma_client.db.litellm_spendlogs.create_many.await_count + assert attempts <= attempt_cap + assert attempts < n_rows + + def test_disable_spend_updates_reflects_general_settings( monkeypatch: pytest.MonkeyPatch, ) -> None: From be4d0d8439ad6bea5b7a310824c74f2df0c73884 Mon Sep 17 00:00:00 2001 From: Yassin Kortam Date: Tue, 30 Jun 2026 22:25:15 +0300 Subject: [PATCH 31/79] fix(redis): re-establish async cluster connections after a node restart (#31577) When redis_startup_nodes is set the async cluster client was built with no health check and no TCP keepalive, so a connection silently dropped by a cluster restart (e.g. ElastiCache Serverless maintenance) stayed in the pool and got reused while dead; the first command after the restart stalled in re-initialization until the LoggingWorker timeout cancelled it, surfacing as CancelledError then TimeoutError on the spend-counter path Build the async cluster client with a 25s health_check_interval and socket_keepalive so an idle connection is PING-validated and reconnected before reuse, and expose both through the cluster kwarg allow-list so an explicit value from config still wins Resolves LIT-4083 --- litellm/_redis.py | 15 +++++++++++- litellm/constants.py | 4 ++++ tests/test_litellm/test_redis.py | 41 ++++++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+), 1 deletion(-) diff --git a/litellm/_redis.py b/litellm/_redis.py index 2bcce0e1083..bb3a0974241 100644 --- a/litellm/_redis.py +++ b/litellm/_redis.py @@ -23,7 +23,11 @@ from litellm._redis_credential_provider import ( GCPIAMCredentialProvider, _generate_gcp_iam_access_token, ) -from litellm.constants import REDIS_CONNECTION_POOL_TIMEOUT, REDIS_SOCKET_TIMEOUT +from litellm.constants import ( + REDIS_CLUSTER_HEALTH_CHECK_INTERVAL, + REDIS_CONNECTION_POOL_TIMEOUT, + REDIS_SOCKET_TIMEOUT, +) from litellm.litellm_core_utils.sensitive_data_masker import SensitiveDataMasker from ._logging import verbose_logger @@ -102,6 +106,8 @@ def _get_redis_cluster_kwargs(client=None): "max_connections", "socket_timeout", "socket_connect_timeout", + "health_check_interval", + "socket_keepalive", } return available_args @@ -579,6 +585,13 @@ def get_redis_async_client( new_startup_nodes.append(ClusterNode(**item)) cluster_kwargs.pop("startup_nodes", None) + # Default to a periodic health check + TCP keepalive so a connection silently dropped + # by a cluster restart (e.g. ElastiCache Serverless maintenance) is revalidated and + # reconnected before reuse instead of stalling in re-initialization; an explicit value + # from config still wins. + cluster_kwargs.setdefault("health_check_interval", REDIS_CLUSTER_HEALTH_CHECK_INTERVAL) + cluster_kwargs.setdefault("socket_keepalive", True) + # Create async RedisCluster with IAM token as password if available cluster_client = async_redis.RedisCluster( startup_nodes=new_startup_nodes, diff --git a/litellm/constants.py b/litellm/constants.py index aeb74a65839..f6add8da3ea 100644 --- a/litellm/constants.py +++ b/litellm/constants.py @@ -332,6 +332,10 @@ REDIS_CONNECTION_POOL_TIMEOUT = int(os.getenv("REDIS_CONNECTION_POOL_TIMEOUT", 5 REDIS_CIRCUIT_BREAKER_FAILURE_THRESHOLD = int(os.getenv("REDIS_CIRCUIT_BREAKER_FAILURE_THRESHOLD", 5)) REDIS_CIRCUIT_BREAKER_RECOVERY_TIMEOUT = int(os.getenv("REDIS_CIRCUIT_BREAKER_RECOVERY_TIMEOUT", 60)) REDIS_CIRCUIT_BREAKER_ENABLED = os.getenv("REDIS_CIRCUIT_BREAKER_ENABLED", "true").lower() == "true" +# Seconds of idle before a Redis cluster connection is validated with a PING and +# reconnected if dead, so a connection silently dropped by a cluster restart +# (e.g. ElastiCache Serverless maintenance) is not reused while broken +REDIS_CLUSTER_HEALTH_CHECK_INTERVAL = 25 # Default Redis major version to assume when version cannot be determined # Using 7 as it's the modern version that supports LPOP with count parameter DEFAULT_REDIS_MAJOR_VERSION = int(os.getenv("DEFAULT_REDIS_MAJOR_VERSION", 7)) diff --git a/tests/test_litellm/test_redis.py b/tests/test_litellm/test_redis.py index a89e30a0e06..0081e1c819f 100644 --- a/tests/test_litellm/test_redis.py +++ b/tests/test_litellm/test_redis.py @@ -12,6 +12,7 @@ from litellm._redis import ( get_redis_connection_pool, get_redis_url_from_environment, ) +from litellm.constants import REDIS_CLUSTER_HEALTH_CHECK_INTERVAL from litellm._redis_credential_provider import ( GCPIAMCredentialProvider, _token_cache, @@ -171,6 +172,46 @@ def test_socket_timeouts_in_cluster_kwargs(): assert "socket_connect_timeout" in kwargs +def test_reconnect_kwargs_in_cluster_kwargs(): + """Health check and keepalive must survive the cluster kwarg allow-list so + operators can tune Redis cluster reconnection behavior via config.""" + kwargs = _get_redis_cluster_kwargs() + assert "health_check_interval" in kwargs + assert "socket_keepalive" in kwargs + + +@patch("litellm._redis.async_redis.RedisCluster") +def test_async_cluster_sets_reconnect_defaults(mock_cluster_cls): + """ + The async RedisCluster client must be built with a periodic health check and + TCP keepalive so a connection silently dropped by a cluster restart (e.g. + ElastiCache Serverless maintenance) is revalidated and reconnected before + reuse instead of stalling in re-initialization. Regression for LIT-4083. + """ + get_redis_async_client(startup_nodes=[{"host": "cluster-node", "port": 6379}]) + + mock_cluster_cls.assert_called_once() + call_kwargs = mock_cluster_cls.call_args[1] + assert call_kwargs["health_check_interval"] == REDIS_CLUSTER_HEALTH_CHECK_INTERVAL + assert call_kwargs["health_check_interval"] > 0 + assert call_kwargs["socket_keepalive"] is True + + +@patch("litellm._redis.async_redis.RedisCluster") +def test_async_cluster_reconnect_defaults_are_overridable(mock_cluster_cls): + """An explicit health_check_interval / socket_keepalive from config must win + over the built-in reconnect defaults.""" + get_redis_async_client( + startup_nodes=[{"host": "cluster-node", "port": 6379}], + health_check_interval=7, + socket_keepalive=False, + ) + + call_kwargs = mock_cluster_cls.call_args[1] + assert call_kwargs["health_check_interval"] == 7 + assert call_kwargs["socket_keepalive"] is False + + def test_get_redis_async_client_with_connection_pool(): """Test that connection_pool parameter is properly passed to Redis client""" # Create a mock connection pool From 4f41a9e140ebcf12ec56bfc8d24b4dd5ba78ed4f Mon Sep 17 00:00:00 2001 From: ryan-crabbe-berri Date: Tue, 30 Jun 2026 12:49:46 -0700 Subject: [PATCH 32/79] test(ui): drop the e2e typecheck CI gate, keep the typed import for the editor The e2e runs against the real proxy, so a contract drift already fails the test at runtime; tsc only checks the spec against schema.d.ts, a generated snapshot, so a backend change with a stale snapshot would pass tsc while the live test still catches it. The dedicated tsconfig + script + CI step were circular ceremony for that. Keep the zero-runtime-cost type-only import, which still catches mistakes in the editor, and make its comment honest about what enforces the contract. --- .circleci/config.yml | 8 -------- .../e2e_tests/tests/settings/routerSettings.spec.ts | 7 +++---- ui/litellm-dashboard/e2e_tests/tsconfig.json | 9 --------- ui/litellm-dashboard/package.json | 1 - 4 files changed, 3 insertions(+), 22 deletions(-) delete mode 100644 ui/litellm-dashboard/e2e_tests/tsconfig.json diff --git a/.circleci/config.yml b/.circleci/config.yml index 009884cbfe4..f13e9bf66f1 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -2687,14 +2687,6 @@ jobs: paths: - ui/litellm-dashboard/node_modules - ~/.cache/ms-playwright - - run: - name: Type-check E2E specs - # The specs type their request/response round-trips against the generated - # OpenAPI schema; this step turns that typing into a real gate, so a backend - # contract drift fails here instead of silently passing at runtime. - command: | - cd ui/litellm-dashboard - npm run typecheck:e2e - run: name: Build UI from source # Prior version used `cp -r out/ ../../litellm/proxy/_experimental/out/`. diff --git a/ui/litellm-dashboard/e2e_tests/tests/settings/routerSettings.spec.ts b/ui/litellm-dashboard/e2e_tests/tests/settings/routerSettings.spec.ts index 64dab6d7cf6..3e140b9ab56 100644 --- a/ui/litellm-dashboard/e2e_tests/tests/settings/routerSettings.spec.ts +++ b/ui/litellm-dashboard/e2e_tests/tests/settings/routerSettings.spec.ts @@ -3,10 +3,9 @@ import { ADMIN_STORAGE_PATH } from "../../constants"; import { navigateToPage } from "../../helpers/navigation"; import { Page } from "../../fixtures/pages"; import { Role, users } from "../../fixtures/users"; -// Type-only import of the OpenAPI-generated backend schema. esbuild erases it at -// runtime; the round-trip below is enforced by the `typecheck:e2e` CI step (tsc over -// e2e_tests), so a drift in the /config/update or /router/settings contract fails the -// build rather than silently passing here. +// Type-only import of the OpenAPI-generated backend schema, erased at runtime by +// esbuild. It types the round-trips below so mistakes surface in the editor; the live +// test against the real proxy is what actually enforces the contract. import type { components } from "../../../src/lib/http/schema"; // These tests mutate the proxy's shared router_settings, and the Loadbalancing save diff --git a/ui/litellm-dashboard/e2e_tests/tsconfig.json b/ui/litellm-dashboard/e2e_tests/tsconfig.json deleted file mode 100644 index abda3fdb8b6..00000000000 --- a/ui/litellm-dashboard/e2e_tests/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "noEmit": true, - "types": ["node"] - }, - "include": ["**/*.ts"], - "exclude": ["node_modules"] -} diff --git a/ui/litellm-dashboard/package.json b/ui/litellm-dashboard/package.json index 1d2b505a172..a8948f4be34 100644 --- a/ui/litellm-dashboard/package.json +++ b/ui/litellm-dashboard/package.json @@ -19,7 +19,6 @@ "e2e:ui": "playwright test --ui --config e2e_tests/playwright.config.ts", "e2e:migration": "playwright test e2e_tests/tests/migration/migratedPages.spec.ts --config e2e_tests/playwright.config.ts", "e2e:migration:root": "playwright test --config e2e_tests/migration.serverRootPath.config.ts", - "typecheck:e2e": "tsc -p e2e_tests/tsconfig.json --noEmit", "knip": "knip", "knip:fix": "knip --fix", "gen:api": "node scripts/gen-api-types.mjs" From d4c33b2b5922cdc780c7dac31c73a2a21f342540 Mon Sep 17 00:00:00 2001 From: mubashir1osmani Date: Tue, 30 Jun 2026 12:54:47 -0700 Subject: [PATCH 33/79] fix(logging): route realtime success logging through the bounded worker (#31733) RealTimeStreaming.log_messages dispatched the success handler with a bare asyncio.create_task, bypassing GLOBAL_LOGGING_WORKER (which gives a per-coroutine timeout and a concurrency cap). On a long-lived realtime websocket a slow logging callback left one suspended task per logged turn, each pinning that turn's assembled response, accumulating without bound (~12-15k in-flight under load in a repro) until OOM. Route realtime success logging through the bounded worker so in-flight logging is capped and a hung callback is cancelled at the worker timeout. The chat and responses streaming success-logging paths are intentionally left unchanged: their success callbacks must complete within the call's event-loop run (the non-streaming path pairs the worker with a synchronous callback; the streaming path has no such companion), so deferring them through the worker would drop logs for one-shot SDK calls and breaks test_async_custom_handler_stream. Bounding those paths needs a load-shedding approach and is left to a follow-up. --- .../litellm_core_utils/realtime_streaming.py | 7 ++++-- .../test_realtime_streaming.py | 23 +++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/litellm/litellm_core_utils/realtime_streaming.py b/litellm/litellm_core_utils/realtime_streaming.py index bd6406c6241..a1a070eb5b7 100644 --- a/litellm/litellm_core_utils/realtime_streaming.py +++ b/litellm/litellm_core_utils/realtime_streaming.py @@ -5,6 +5,7 @@ from typing import TYPE_CHECKING, Any, Dict, List, Optional, Protocol, Union, ca import litellm from litellm._logging import verbose_logger +from litellm.litellm_core_utils.logging_worker import GLOBAL_LOGGING_WORKER from litellm.llms.base_llm.realtime.transformation import BaseRealtimeConfig from litellm.types.llms.openai import ( OpenAIRealtimeEvents, @@ -315,8 +316,10 @@ class RealTimeStreaming: self.logging_obj.model_call_details["realtime_tools"] = self.session_tools self.logging_obj.model_call_details["realtime_tool_calls"] = self.tool_calls ## ASYNC LOGGING - # Create an event loop for the new thread - asyncio.create_task(self.logging_obj.async_success_handler(self.messages)) + # Route through the bounded logging worker (per-coroutine timeout + + # concurrency cap) instead of a bare create_task, so a slow callback + # can't leave suspended tasks pinning each call's response in memory. + GLOBAL_LOGGING_WORKER.ensure_initialized_and_enqueue(self.logging_obj.async_success_handler(self.messages)) ## SYNC LOGGING executor.submit(self.logging_obj.success_handler(self.messages)) diff --git a/tests/test_litellm/litellm_core_utils/test_realtime_streaming.py b/tests/test_litellm/litellm_core_utils/test_realtime_streaming.py index 2ad9b919a1f..766befd1a99 100644 --- a/tests/test_litellm/litellm_core_utils/test_realtime_streaming.py +++ b/tests/test_litellm/litellm_core_utils/test_realtime_streaming.py @@ -2945,3 +2945,26 @@ def test_non_bidi_setup_left_untouched_for_followup_capable_providers(): assert streaming._maybe_inject_guardrail_auto_response_disable(msg) == msg finally: litellm.callbacks = [] + + +@pytest.mark.asyncio +async def test_log_messages_routes_async_logging_through_bounded_worker(): + """Realtime success logging must go through GLOBAL_LOGGING_WORKER (bounded + queue + per-coroutine timeout), not a bare asyncio.create_task. A bare task + has no timeout/concurrency cap, so when a logging callback is slow every + realtime turn leaves a suspended task pinning its response in memory -> an + unbounded leak. Regression for that fix.""" + logging_obj = MagicMock() + streaming = RealTimeStreaming(MagicMock(), MagicMock(), logging_obj) + streaming.messages = [{"type": "session.created"}] + + with ( + patch("litellm.litellm_core_utils.realtime_streaming.GLOBAL_LOGGING_WORKER") as mock_worker, + patch("litellm.litellm_core_utils.realtime_streaming.asyncio.create_task") as mock_create_task, + patch("litellm.litellm_core_utils.realtime_streaming.executor.submit"), + ): + await streaming.log_messages() + + mock_worker.ensure_initialized_and_enqueue.assert_called_once() + # the bare create_task path must no longer be used for success logging + mock_create_task.assert_not_called() From 94936a3922aeb8aa9a4d5928e63ea6f15be6f098 Mon Sep 17 00:00:00 2001 From: Yassin Kortam Date: Tue, 30 Jun 2026 22:59:18 +0300 Subject: [PATCH 34/79] fix(presidio): stream SSE output incrementally instead of buffering the whole response (#31503) The Presidio streaming post-call hooks (_stream_apply_output_masking for apply_to_output and _stream_pii_unmasking for output_parse_pii) collected every upstream chunk, reassembled the full completion with stream_chunk_builder at end-of-stream, ran Presidio over it, then emitted one reconstructed SSE chunk. Time-to-first-token collapsed to the total generation time and token-by-token streaming was lost whenever Presidio output handling was enabled. With the default presidio_filter_scope both, an apply_to_output masking instance is always created, so even the unmask configuration buffered the stream. Both paths now transform and forward chunks as they arrive. The unmask path replaces placeholder tokens per chunk, holding back only the trailing run that could still grow into a token so a placeholder split across SSE chunks () is still rewritten atomically. The mask path emits a prefix only when masking it in isolation matches the corresponding prefix of masking the whole buffer, with a lookahead margin still buffered past the cut, so an entity straddling the cut is detected and held until complete; past _PRESIDIO_STREAM_MAX_BUFFER the run is bounded without splitting an entity. Tool-call and legacy function-call argument fragments are accumulated per choice and transformed once the choice closes, content is buffered independently per choice index for correct n>1 streaming, raw Anthropic SSE bytes and /v1/responses events pass through with any held content flushed first so events never reorder, and a masking error redacts only the affected chunk (fail closed, keeping finish_reason) while the stream continues. Resolves LIT-3222 --- .../guardrails/guardrail_hooks/presidio.py | 529 +++++++++---- .../guardrail_hooks/test_presidio.py | 712 +++++++++++++++++- 2 files changed, 1086 insertions(+), 155 deletions(-) diff --git a/litellm/proxy/guardrails/guardrail_hooks/presidio.py b/litellm/proxy/guardrails/guardrail_hooks/presidio.py index 95876a55eab..e60b6233038 100644 --- a/litellm/proxy/guardrails/guardrail_hooks/presidio.py +++ b/litellm/proxy/guardrails/guardrail_hooks/presidio.py @@ -17,6 +17,8 @@ from typing import ( TYPE_CHECKING, Any, AsyncGenerator, + Awaitable, + Callable, Dict, List, Literal, @@ -54,7 +56,14 @@ from litellm.types.proxy.guardrails.guardrail_hooks.presidio import ( PresidioAnalyzeRequest, PresidioAnalyzeResponseItem, ) -from litellm.types.utils import GuardrailStatus, StreamingChoices +from litellm.types.utils import ( + ChatCompletionDeltaToolCall, + Delta, + Function, + FunctionCall, + GuardrailStatus, + StreamingChoices, +) from litellm.utils import ( EmbeddingResponse, ImageResponse, @@ -62,6 +71,17 @@ from litellm.utils import ( ModelResponseStream, ) +# Trailing context (chars) the streaming output-masking path keeps buffered past +# a sentence boundary before emitting, so a PII entity that straddles the +# boundary is seen in full by Presidio and is never split across two analyze +# calls. It bounds the largest single entity the incremental path can mask +# without leaking; an entity longer than this could still be split. +_PRESIDIO_STREAM_MARGIN = 96 +# Hard cap on buffered un-emitted output. Past this with no sentence boundary, +# stable prefixes are flushed; if stability cannot be proven, the ambiguous +# prefix is dropped while retaining the trailing margin. +_PRESIDIO_STREAM_MAX_BUFFER = 2000 + class _OPTIONAL_PresidioPIIMasking(CustomGuardrail): user_api_key_cache = None @@ -93,6 +113,10 @@ class _OPTIONAL_PresidioPIIMasking(CustomGuardrail): self.mock_redacted_text = mock_redacted_text self.output_parse_pii = output_parse_pii or False self.apply_to_output = apply_to_output + # Streaming output-masking safety window; instance attributes so tests can + # exercise incremental flushing with short content (see _mask_emit_decision). + self._stream_mask_margin = _PRESIDIO_STREAM_MARGIN + self._stream_mask_max_buffer = _PRESIDIO_STREAM_MAX_BUFFER # When output_parse_pii or apply_to_output is enabled, the guardrail must # also run on post_call to unmask/mask the response. Expand the event_hook @@ -1048,81 +1072,353 @@ class _OPTIONAL_PresidioPIIMasking(CustomGuardrail): ) return response + @staticmethod + def _unmask_hold_len(text: str, token_keys: Any) -> int: + """Length of the trailing run of ``text`` that could still grow into a + PII placeholder token, so the unmask path holds it until the next chunk + completes (or aborts) the token instead of emitting a half-written + ````.""" + keys = tuple(token_keys) + if not text or not keys: + return 0 + longest = max(len(key) for key in keys) + for start in range(max(0, len(text) - (longest - 1)), len(text)): + suffix = text[start:] + if any(key.startswith(suffix) for key in keys if len(suffix) < len(key)): + return len(text) - start + return 0 + + @staticmethod + def _mask_boundaries(text: str) -> tuple[int, ...]: + """Candidate flush points: a newline, or a sentence terminator already + followed by whitespace. A terminator at the very end of the buffer is + excluded because the next chunk may continue the token (``jane.`` + + ``doe@example.com``); it becomes a boundary once the whitespace arrives. + A boundary is only a *candidate* here; ``_mask_emit_decision`` still + confirms via a stability check that no entity straddles it.""" + return tuple( + i + 1 + for i in range(len(text)) + if text[i] == "\n" or (text[i] in ".!?" and i + 1 < len(text) and text[i + 1].isspace()) + ) + + async def _mask_emit_decision( + self, + buffer: str, + terminal: bool, + transform: "Callable[[str], Awaitable[str]]", + ) -> "tuple[str, str]": + """Decide how much of ``buffer`` is safe to mask and emit now, returning + ``(masked_emit, hold_raw)``. + + A sentence boundary is not trusted blindly (it can fall inside a name + with an initial or an address spanning a newline). Instead a prefix is + emitted only when masking it in isolation matches the corresponding + prefix of masking the whole buffer, with at least ``_PRESIDIO_STREAM_MARGIN`` + characters of lookahead still buffered past the cut. That guarantees any + entity overlapping the cut is present in full when the buffer is analyzed, + so a straddling entity makes the prefixes differ and the cut is held. + Past ``_PRESIDIO_STREAM_MAX_BUFFER`` with no sentence boundary the buffer + first tries stable forced cuts and then drops the ambiguous prefix while + retaining the trailing margin, so a failed stability check cannot grow + the held buffer without bound.""" + if terminal: + return (await transform(buffer) if buffer else ""), "" + margin = self._stream_mask_margin + forced_cut = ( + len(buffer) - margin if len(buffer) > self._stream_mask_max_buffer and len(buffer) > margin else None + ) + cuts = [index for index in self._mask_boundaries(buffer) if len(buffer) - index >= margin] + if forced_cut is not None: + verbose_proxy_logger.warning( + "Presidio apply_to_output: buffered %d streamed chars with no " + "sentence boundary; bounding held stream state.", + len(buffer), + ) + cuts.append(forced_cut) + cuts.extend(index for index in range(forced_cut, len(buffer)) if buffer[index].isspace()) + if cuts: + masked_full = await transform(buffer) + for index in sorted(set(cuts), reverse=True): + masked_prefix = await transform(buffer[:index]) + if masked_full.startswith(masked_prefix): + return masked_prefix, buffer[index:] + if forced_cut is not None: + return "", buffer[forced_cut:] + return "", buffer + + @staticmethod + def _accumulate_tool_calls( + tool_acc: dict[int, dict[int, dict[str, Optional[str]]]], + choice_index: int, + tool_calls: list[Any], + ) -> None: + choice_acc = tool_acc.setdefault(choice_index, {}) # mutable-ok: streaming tool-call accumulator + for tool_call in tool_calls: + entry = choice_acc.setdefault( # mutable-ok: streaming tool-call accumulator + getattr(tool_call, "index", 0) or 0, + {"id": None, "type": None, "name": None, "args": ""}, + ) + if getattr(tool_call, "id", None): + entry["id"] = tool_call.id + if getattr(tool_call, "type", None): + entry["type"] = tool_call.type + function = getattr(tool_call, "function", None) + if function is not None: + if getattr(function, "name", None): + entry["name"] = function.name + arguments = getattr(function, "arguments", None) + if isinstance(arguments, str): + entry["args"] = (entry["args"] or "") + arguments + + @staticmethod + def _accumulate_function_call( + func_acc: dict[int, dict[str, Optional[str]]], + choice_index: int, + function_call: Any, + ) -> None: + entry = func_acc.setdefault( # mutable-ok: streaming function-call accumulator + choice_index, {"name": None, "args": ""} + ) + if getattr(function_call, "name", None): + entry["name"] = function_call.name + arguments = getattr(function_call, "arguments", None) + if isinstance(arguments, str): + entry["args"] = (entry["args"] or "") + arguments + + @staticmethod + async def _build_tool_calls( + choice_acc: dict[int, dict[str, Optional[str]]], + transform: "Callable[[str], Awaitable[str]]", + ) -> list[ChatCompletionDeltaToolCall]: + return [ + ChatCompletionDeltaToolCall( + index=tool_index, + id=entry["id"], + type=entry["type"], + function=Function( + name=entry["name"], + arguments=(await transform(entry["args"]) if entry["args"] else ""), + ), + ) + for tool_index, entry in sorted(choice_acc.items()) + ] + + @staticmethod + async def _build_function_call( + entry: Optional[dict[str, Optional[str]]], + transform: "Callable[[str], Awaitable[str]]", + ) -> Optional[FunctionCall]: + if entry is None: + return None + return FunctionCall( + name=entry["name"], + arguments=await transform(entry["args"]) if entry["args"] else "", + ) + + async def _rewrite_chat_chunk( + self, + chunk: ModelResponseStream, + content_buffers: dict[int, str], + tool_acc: dict[int, dict[int, dict[str, Optional[str]]]], + func_acc: dict[int, dict[str, Optional[str]]], + transform: "Callable[[str], Awaitable[str]]", + emit_content: "Callable[[str, bool], Awaitable[tuple[str, str]]]", + ) -> None: + """Transform one streaming chat chunk in place: text content is masked / + unmasked and emitted as soon as ``emit_content`` deems a prefix safe (it + returns the already-transformed text to emit plus the raw remainder to + hold), while tool-call and function-call argument fragments are + accumulated and emitted, fully transformed, on the chunk that closes the + choice.""" + for choice in chunk.choices: + index = getattr(choice, "index", 0) + delta = getattr(choice, "delta", None) + if delta is None: + continue + terminal = bool(getattr(choice, "finish_reason", None)) + + tool_calls = getattr(delta, "tool_calls", None) + if tool_calls: + self._accumulate_tool_calls(tool_acc, index, tool_calls) + delta.tool_calls = None + function_call = getattr(delta, "function_call", None) + if function_call is not None: + self._accumulate_function_call(func_acc, index, function_call) + delta.function_call = None + + raw_content = getattr(delta, "content", None) + content = raw_content if isinstance(raw_content, str) else None + if content is not None or terminal: + emitted, hold = await emit_content(content_buffers.pop(index, "") + (content or ""), terminal) + if hold: + content_buffers[index] = hold + if emitted: + delta.content = emitted + else: + delta.content = None if content is None else "" + + if terminal: + built_tool_calls = await self._build_tool_calls(tool_acc.get(index, {}), transform) + built_function_call = await self._build_function_call(func_acc.get(index), transform) + if built_tool_calls: + delta.tool_calls = built_tool_calls + if built_function_call is not None: + delta.function_call = built_function_call + tool_acc.pop(index, None) + func_acc.pop(index, None) + + @staticmethod + async def _build_tail_chunk( + template: Optional[ModelResponseStream], + content_buffers: dict[int, str], + tool_acc: dict[int, dict[int, dict[str, Optional[str]]]], + func_acc: dict[int, dict[str, Optional[str]]], + transform: "Callable[[str], Awaitable[str]]", + ) -> Optional[ModelResponseStream]: + """Flush any content / tool-call state still held when a stream ends + without a finish-reason chunk to attach it to.""" + if template is None: + return None + cls = _OPTIONAL_PresidioPIIMasking + choices: list[StreamingChoices] = [] + for index in sorted(set(content_buffers) | set(tool_acc) | set(func_acc)): + held = content_buffers.get(index, "") + masked_content = await transform(held) if held else None + built_tool_calls = await cls._build_tool_calls(tool_acc.get(index, {}), transform) + built_function_call = await cls._build_function_call(func_acc.get(index), transform) + if masked_content is None and not built_tool_calls and built_function_call is None: + continue + choices.append( + StreamingChoices( + index=index, + delta=Delta( + content=masked_content, + tool_calls=built_tool_calls or None, + function_call=built_function_call, + ), + ) + ) + if not choices: + return None + return ModelResponseStream( + id=getattr(template, "id", None), + created=getattr(template, "created", None), + model=getattr(template, "model", None), + object="chat.completion.chunk", + choices=choices, + ) + + @staticmethod + def _redacted_chunk(chunk: ModelResponseStream) -> ModelResponseStream: + """Fail closed when masking a chunk raises: rebuild it with empty content + but its original ``finish_reason`` and choice indices preserved, so + possibly-unmasked PII never reaches the client yet a terminal chunk still + carries the completion signal instead of being dropped.""" + return ModelResponseStream( + id=chunk.id, + created=chunk.created, + model=chunk.model, + object="chat.completion.chunk", + choices=[ + StreamingChoices( + index=choice.index, + delta=Delta(content=None), + finish_reason=choice.finish_reason, + ) + for choice in chunk.choices + ], + ) + async def _stream_apply_output_masking( self, response: Any, request_data: dict, ) -> AsyncGenerator[Union[ModelResponseStream, bytes], None]: """Apply Presidio masking to streaming output (apply_to_output=True path).""" - from litellm.llms.base_llm.base_model_iterator import ( - convert_model_response_to_streaming, - ) - from litellm.main import stream_chunk_builder - from litellm.types.utils import ModelResponse + presidio_config = self.get_presidio_settings_from_request_data(request_data or {}) - all_chunks: List[ModelResponseStream] = [] - passthrough_due_to_unknown_stream_shape = False - try: - async for chunk in response: - if isinstance(chunk, ModelResponseStream): - if passthrough_due_to_unknown_stream_shape: - yield chunk - else: - all_chunks.append(chunk) - elif isinstance(chunk, bytes): - yield chunk # type: ignore[misc] - continue - else: - if all_chunks: - # Flush buffered chunks and switch to transparent passthrough for this stream shape. - # NOTE: these buffered chunks are emitted unmasked because this - # stream mixed chunk types and cannot be safely reconstructed. - verbose_proxy_logger.warning( - "Presidio apply_to_output: mixed stream detected (ModelResponseStream + unknown event). " - "Flushing %d buffered chunks without PII masking and switching to transparent passthrough.", - len(all_chunks), - ) - for buffered_chunk in all_chunks: - yield buffered_chunk - all_chunks = [] - passthrough_due_to_unknown_stream_shape = True - yield chunk - if passthrough_due_to_unknown_stream_shape: - verbose_proxy_logger.warning( - "Presidio apply_to_output: streaming response contained unknown event objects " - "(e.g. /v1/responses events). Output PII masking was skipped for this response." - ) - return - if not all_chunks: - verbose_proxy_logger.warning( - "Presidio apply_to_output: streaming response contained no " - "ModelResponseStream chunks (e.g. raw SSE bytes or an empty " - "upstream stream). Output PII masking was skipped for this " - "response." - ) - return - - assembled_model_response = stream_chunk_builder(chunks=all_chunks, messages=request_data.get("messages")) - - if not isinstance(assembled_model_response, ModelResponse): - for chunk in all_chunks: - yield chunk - return - - await self._process_response_for_pii( - response=assembled_model_response, + async def transform(text: str) -> str: + return await self.check_pii( + text=text, + output_parse_pii=False, + presidio_config=presidio_config, request_data=request_data, - mode="mask", ) - mock_response_stream = convert_model_response_to_streaming(assembled_model_response) - yield mock_response_stream + async def emit_content(text: str, terminal: bool) -> tuple[str, str]: + return await self._mask_emit_decision(text, terminal, transform) - except Exception as e: - verbose_proxy_logger.error(f"Error masking streaming PII output: {str(e)}") - for chunk in all_chunks: + async def flush_held() -> Optional[ModelResponseStream]: + """Build the held-content tail, failing closed (drop held content) + on a masking error instead of letting it abort the whole stream.""" + try: + return await self._build_tail_chunk(last_chunk, content_buffers, tool_acc, func_acc, transform) + except Exception as e: + if self._is_guardrail_intervention(e): + raise + verbose_proxy_logger.error(f"Error masking streaming PII tail: {str(e)}") + return None + + content_buffers: dict[int, str] = {} + tool_acc: dict[int, dict[int, dict[str, Optional[str]]]] = {} + func_acc: dict[int, dict[str, Optional[str]]] = {} + last_chunk: Optional[ModelResponseStream] = None + masked_any_content = False + saw_unmaskable_shape = False + try: + async for chunk in response: + if not isinstance(chunk, ModelResponseStream): + # Flush buffered masked content before forwarding a non-chat + # shape (raw bytes / a /v1/responses event) so the client + # never sees a later event ahead of earlier masked text. + tail = await flush_held() + if tail is not None: + yield tail + content_buffers.clear() + tool_acc.clear() + func_acc.clear() + saw_unmaskable_shape = True + yield chunk + continue + masked_any_content = True + last_chunk = chunk + try: + await self._rewrite_chat_chunk( + chunk, + content_buffers, + tool_acc, + func_acc, + transform, + emit_content, + ) + except Exception as e: + if self._is_guardrail_intervention(e): + raise + # Fail closed: a transient masking error redacts this chunk's + # content (so possibly-unmasked PII never reaches the client) + # but keeps its finish_reason and keeps the stream flowing, + # rather than truncating the response or dropping a terminal + # chunk's completion signal. + verbose_proxy_logger.error(f"Error masking streaming PII chunk: {str(e)}") + yield self._redacted_chunk(chunk) + continue yield chunk + tail = await flush_held() + if tail is not None: + yield tail + if not masked_any_content and saw_unmaskable_shape: + verbose_proxy_logger.warning( + "Presidio apply_to_output: streaming response contained no " + "maskable chat content (e.g. raw SSE bytes or /v1/responses " + "events). Output PII masking was skipped for this response." + ) + except Exception as e: + if self._is_guardrail_intervention(e): + raise + verbose_proxy_logger.error(f"Error masking streaming PII output: {str(e)}") + @staticmethod def _unmask_sse_bytes_chunk(chunk: bytes, pii_tokens: Dict[str, str]) -> bytes: try: @@ -1183,74 +1479,56 @@ class _OPTIONAL_PresidioPIIMasking(CustomGuardrail): request_data: dict, ) -> AsyncGenerator[Union[ModelResponseStream, bytes], None]: """Apply PII unmasking to streaming output (output_parse_pii=True path).""" - from litellm.llms.base_llm.base_model_iterator import ( - convert_model_response_to_streaming, - ) - from litellm.main import stream_chunk_builder - from litellm.types.utils import ModelResponse - metadata = (request_data.get("metadata") or {}) if request_data else {} pii_tokens: Dict[str, str] = metadata.get("pii_tokens", {}) - remaining_chunks: List[ModelResponseStream] = [] - saw_non_chat_chunk = False + async def transform(text: str) -> str: + return self._unmask_pii_text(text, pii_tokens) + + async def emit_content(text: str, terminal: bool) -> tuple[str, str]: + if terminal: + return (await transform(text) if text else ""), "" + hold = self._unmask_hold_len(text, pii_tokens.keys()) + emit_raw, held = text[: len(text) - hold], text[len(text) - hold :] + return (await transform(emit_raw) if emit_raw else ""), held + + content_buffers: dict[int, str] = {} + tool_acc: dict[int, dict[int, dict[str, Optional[str]]]] = {} + func_acc: dict[int, dict[str, Optional[str]]] = {} + last_chunk: Optional[ModelResponseStream] = None try: async for chunk in response: - if isinstance(chunk, ModelResponseStream): - if saw_non_chat_chunk: - yield chunk - else: - remaining_chunks.append(chunk) - elif isinstance(chunk, bytes): - if pii_tokens: - yield self._unmask_sse_bytes_chunk(chunk, pii_tokens) # type: ignore[misc] - else: - yield chunk # type: ignore[misc] + if isinstance(chunk, bytes): + tail = await self._build_tail_chunk(last_chunk, content_buffers, tool_acc, func_acc, transform) + if tail is not None: + yield tail + content_buffers.clear() + tool_acc.clear() + func_acc.clear() + yield ( # type: ignore[misc] + self._unmask_sse_bytes_chunk(chunk, pii_tokens) if pii_tokens else chunk + ) continue - else: - # /v1/responses events: unmask response.completed text in-place. - # A mixed stream can't be reassembled, so flush buffered chat - # chunks in order before passthrough instead of dropping them. - if remaining_chunks and not saw_non_chat_chunk: - for buffered_chunk in remaining_chunks: - yield buffered_chunk - remaining_chunks = [] - chunk_type = getattr(chunk, "type", None) - if chunk_type == "response.completed" and pii_tokens: + if not isinstance(chunk, ModelResponseStream): + tail = await self._build_tail_chunk(last_chunk, content_buffers, tool_acc, func_acc, transform) + if tail is not None: + yield tail + content_buffers.clear() + tool_acc.clear() + func_acc.clear() + if getattr(chunk, "type", None) == "response.completed" and pii_tokens: self._unmask_responses_api_completed_chunk(chunk, pii_tokens) - saw_non_chat_chunk = True yield chunk + continue + last_chunk = chunk + await self._rewrite_chat_chunk(chunk, content_buffers, tool_acc, func_acc, transform, emit_content) + yield chunk - if saw_non_chat_chunk: - return - - if not remaining_chunks: - return - - assembled_model_response = stream_chunk_builder( - chunks=remaining_chunks, messages=request_data.get("messages") - ) - - if not isinstance(assembled_model_response, ModelResponse): - for chunk in remaining_chunks: - yield chunk - return - - self._preserve_usage_from_last_chunk(assembled_model_response, remaining_chunks) - - await self._process_response_for_pii( - response=assembled_model_response, - request_data=request_data, - mode="unmask", - ) - - mock_response_stream = convert_model_response_to_streaming(assembled_model_response) - yield mock_response_stream - + tail = await self._build_tail_chunk(last_chunk, content_buffers, tool_acc, func_acc, transform) + if tail is not None: + yield tail except Exception as e: verbose_proxy_logger.error(f"Error in PII streaming processing: {str(e)}") - for chunk in remaining_chunks: - yield chunk async def async_post_call_streaming_iterator_hook( # type: ignore[override] self, @@ -1282,17 +1560,6 @@ class _OPTIONAL_PresidioPIIMasking(CustomGuardrail): async for chunk in self._stream_pii_unmasking(response, request_data): yield chunk - @staticmethod - def _preserve_usage_from_last_chunk( - assembled_model_response: Any, - chunks: List[Any], - ) -> None: - """Copy usage metadata from the last chunk when stream_chunk_builder misses it.""" - if not getattr(assembled_model_response, "usage", None) and chunks: - last_chunk_usage = getattr(chunks[-1], "usage", None) - if last_chunk_usage: - setattr(assembled_model_response, "usage", last_chunk_usage) - def get_presidio_settings_from_request_data(self, data: dict) -> Optional[PresidioPerRequestConfig]: if "metadata" in data: _metadata = data.get("metadata", None) diff --git a/tests/test_litellm/proxy/guardrails/guardrail_hooks/test_presidio.py b/tests/test_litellm/proxy/guardrails/guardrail_hooks/test_presidio.py index 253d989f203..ce4d6d4a8b0 100644 --- a/tests/test_litellm/proxy/guardrails/guardrail_hooks/test_presidio.py +++ b/tests/test_litellm/proxy/guardrails/guardrail_hooks/test_presidio.py @@ -19,7 +19,7 @@ from litellm.proxy._types import UserAPIKeyAuth from litellm.proxy.guardrails.guardrail_hooks.presidio import ( _OPTIONAL_PresidioPIIMasking, ) -from litellm.exceptions import GuardrailRaisedException +from litellm.exceptions import BlockedPiiEntityError, GuardrailRaisedException from litellm.types.guardrails import LitellmParams, PiiAction, PiiEntityType from litellm.types.utils import Choices, Message, ModelResponse @@ -2207,11 +2207,12 @@ async def test_apply_to_output_streaming_unknown_events_passthrough(): @pytest.mark.asyncio -async def test_apply_to_output_streaming_mixed_chunks_flushes_and_warns(): +async def test_apply_to_output_streaming_mixed_chunks_preserve_order(): """ - Regression test for mixed stream shape: - a buffered ModelResponseStream chunk followed by unknown responses-style - events should be preserved, and masking skip should be visible via warnings. + Regression test for mixed stream shape: a ModelResponseStream chat chunk + followed by an unknown responses-style event must be forwarded in order. + Incremental masking forwards chat chunks as they arrive, so a responses + event after them does not buffer or drop anything. """ guardrail = _OPTIONAL_PresidioPIIMasking( mock_testing=True, @@ -2238,26 +2239,14 @@ async def test_apply_to_output_streaming_mixed_chunks_flushes_and_warns(): mock_user_api_key = UserAPIKeyAuth(api_key="test-key") received = [] - with patch( - "litellm.proxy.guardrails.guardrail_hooks.presidio.verbose_proxy_logger" - ) as mock_logger: - async for chunk in guardrail.async_post_call_streaming_iterator_hook( - user_api_key_dict=mock_user_api_key, - response=mock_stream(), - request_data={}, - ): - received.append(chunk) + async for chunk in guardrail.async_post_call_streaming_iterator_hook( + user_api_key_dict=mock_user_api_key, + response=mock_stream(), + request_data={}, + ): + received.append(chunk) - # Preserve original ordering across mixed stream types. - assert received == [model_chunk, response_completed] - - # Two warnings are expected: - # 1) mixed stream detected + unmasked flush - # 2) passthrough mode skipped output masking - assert mock_logger.warning.call_count == 2 - warning_messages = [call.args[0] for call in mock_logger.warning.call_args_list] - assert any("mixed stream detected" in msg for msg in warning_messages) - assert any("unknown event objects" in msg for msg in warning_messages) + assert received == [model_chunk, response_completed] # --------------------------------------------------------------------------- @@ -2849,3 +2838,678 @@ async def test_stream_pii_unmasking_passthrough_when_no_tokens(mock_user_api_key chunks.append(chunk) assert chunks == [raw_chunk] + + +# --------------------------------------------------------------------------- +# LIT-3222: incremental SSE streaming for Presidio output masking / unmasking +# --------------------------------------------------------------------------- + +from litellm.types.utils import ( + ChatCompletionDeltaToolCall, + Delta, + Function, + StreamingChoices, +) + + +def _content_chunk(text, index=0, finish_reason=None): + return ModelResponseStream( + id="chatcmpl-lit3222", + created=1, + model="gpt-4o-mini", + object="chat.completion.chunk", + choices=[ + StreamingChoices( + index=index, delta=Delta(content=text), finish_reason=finish_reason + ) + ], + ) + + +def _non_empty_content(chunks): + out = [] + for chunk in chunks: + for choice in chunk.choices: + piece = getattr(choice.delta, "content", None) + if piece: + out.append(piece) + return out + + +async def _drive(guardrail, stream, request_data): + collected = [] + async for chunk in guardrail.async_post_call_streaming_iterator_hook( + user_api_key_dict=UserAPIKeyAuth(api_key="test-key"), + response=stream, + request_data=request_data, + ): + collected.append(chunk) + return collected + + +@pytest.mark.asyncio +async def test_unmask_streaming_is_incremental_not_buffered(): + """ + output_parse_pii streaming must forward each content chunk as it arrives + (unmasked), not collapse the whole completion into a single end-of-stream + chunk. The buffering implementation yielded exactly one content chunk. + """ + guardrail = _OPTIONAL_PresidioPIIMasking(mock_testing=True, output_parse_pii=True) + request_data = {"metadata": {"pii_tokens": {"": "John Smith"}}} + + pieces = ["Hello ", "", " is here."] + + async def stream(): + for i, piece in enumerate(pieces): + yield _content_chunk(piece) + yield _content_chunk("", finish_reason="stop") + + collected = await _drive(guardrail, stream(), request_data) + content = _non_empty_content(collected) + + assert len(content) >= 3, f"expected progressive chunks, got {content}" + assert "".join(content) == "Hello John Smith is here." + assert all("" not in piece for piece in content) + + +@pytest.mark.asyncio +async def test_unmask_streaming_token_split_across_chunks(): + """ + A placeholder token split across SSE chunks (````) must + still be unmasked atomically via the cross-chunk carry buffer. + """ + guardrail = _OPTIONAL_PresidioPIIMasking(mock_testing=True, output_parse_pii=True) + request_data = {"metadata": {"pii_tokens": {"": "John Smith"}}} + + pieces = ["Hi ", "", "!"] + + async def stream(): + for piece in pieces: + yield _content_chunk(piece) + yield _content_chunk("", finish_reason="stop") + + collected = await _drive(guardrail, stream(), request_data) + reassembled = "".join(_non_empty_content(collected)) + + assert reassembled == "Hi John Smith!" + assert "" not in reassembled + + +@pytest.mark.asyncio +async def test_unmask_streaming_independent_per_choice_buffers(): + """ + With n>1 each choice keeps its own carry buffer, so a token split across + chunks on choice 1 does not corrupt choice 0 and vice versa. + """ + guardrail = _OPTIONAL_PresidioPIIMasking(mock_testing=True, output_parse_pii=True) + request_data = { + "metadata": { + "pii_tokens": {"": "John", "": "Jane"} + } + } + + def two_choice_chunk(c0, c1): + return ModelResponseStream( + id="chatcmpl-lit3222", + created=1, + model="gpt-4o-mini", + object="chat.completion.chunk", + choices=[ + StreamingChoices(index=0, delta=Delta(content=c0)), + StreamingChoices(index=1, delta=Delta(content=c1)), + ], + ) + + async def stream(): + yield two_choice_chunk(" ok", "SON_2>!") + yield two_choice_chunk("", "") + + collected = [] + async for chunk in guardrail.async_post_call_streaming_iterator_hook( + user_api_key_dict=UserAPIKeyAuth(api_key="test-key"), + response=stream(), + request_data=request_data, + ): + collected.append(chunk) + + per_choice = {0: "", 1: ""} + for chunk in collected: + for choice in chunk.choices: + if choice.delta.content: + per_choice[choice.index] += choice.delta.content + + assert per_choice[0] == "John ok" + assert per_choice[1] == "Jane!" + + +@pytest.mark.asyncio +async def test_unmask_streaming_tool_call_arguments_unmasked_at_finish(): + """ + Tool-call argument fragments carrying a placeholder token must be + reassembled and unmasked (the tool would otherwise receive ````). + """ + guardrail = _OPTIONAL_PresidioPIIMasking(mock_testing=True, output_parse_pii=True) + request_data = { + "metadata": {"pii_tokens": {"": "real@example.com"}} + } + + def tool_chunk(*, id=None, name=None, args, finish_reason=None): + return ModelResponseStream( + id="chatcmpl-lit3222", + created=1, + model="gpt-4o-mini", + object="chat.completion.chunk", + choices=[ + StreamingChoices( + index=0, + delta=Delta( + tool_calls=[ + ChatCompletionDeltaToolCall( + index=0, + id=id, + type="function" if id else None, + function=Function(name=name, arguments=args), + ) + ] + ), + finish_reason=finish_reason, + ) + ], + ) + + async def stream(): + yield tool_chunk(id="call_1", name="send_email", args="") + yield tool_chunk(args='{"to": "") + + guardrail.check_pii = mock_check_pii + + pieces = ["My email is ", "secret@example.com. ", "Call me later."] + + async def stream(): + for piece in pieces: + yield _content_chunk(piece) + yield _content_chunk("", finish_reason="stop") + + collected = await _drive(guardrail, stream(), {"metadata": {}}) + content = _non_empty_content(collected) + + assert len(content) >= 2, f"expected per-sentence chunks, got {content}" + reassembled = "".join(content) + assert reassembled == "My email is . Call me later." + assert "secret@example.com" not in reassembled + + +@pytest.mark.asyncio +async def test_mask_streaming_tool_call_arguments_masked_at_finish(): + """ + Model-generated PII inside streamed tool-call arguments must be masked + before reaching the client, not passed through unmasked. + """ + guardrail = _OPTIONAL_PresidioPIIMasking(mock_testing=True, apply_to_output=True) + + async def mock_check_pii(text, output_parse_pii, presidio_config, request_data): + return text.replace("secret@example.com", "") + + guardrail.check_pii = mock_check_pii + + def tool_chunk(*, id=None, name=None, args, finish_reason=None): + return ModelResponseStream( + id="chatcmpl-lit3222", + created=1, + model="gpt-4o-mini", + object="chat.completion.chunk", + choices=[ + StreamingChoices( + index=0, + delta=Delta( + tool_calls=[ + ChatCompletionDeltaToolCall( + index=0, + id=id, + type="function" if id else None, + function=Function(name=name, arguments=args), + ) + ] + ), + finish_reason=finish_reason, + ) + ], + ) + + async def stream(): + yield tool_chunk(id="call_1", name="save", args='{"email": "sec') + yield tool_chunk(args='ret@example.com"}') + yield ModelResponseStream( + id="chatcmpl-lit3222", + created=1, + model="gpt-4o-mini", + object="chat.completion.chunk", + choices=[ + StreamingChoices(index=0, delta=Delta(), finish_reason="tool_calls") + ], + ) + + collected = await _drive(guardrail, stream(), {"metadata": {}}) + + all_args = [ + tc.function.arguments + for chunk in collected + for choice in chunk.choices + for tc in (getattr(choice.delta, "tool_calls", None) or []) + ] + assert all_args == ['{"email": ""}'] + assert all("secret@example.com" not in args for args in all_args) + + +@pytest.mark.asyncio +async def test_mask_streaming_flushes_buffered_content_before_passthrough_event(): + """ + Regression test (Greptile 4/5 finding): in the apply_to_output path, masked + content held in the buffer (no sentence boundary yet) must be flushed BEFORE + a non-chat passthrough event (e.g. a /v1/responses completion) is forwarded, + so the client never observes stream completion ahead of the final text. + """ + guardrail = _OPTIONAL_PresidioPIIMasking(mock_testing=True, apply_to_output=True) + + async def mock_check_pii(text, output_parse_pii, presidio_config, request_data): + return text.replace("secret@example.com", "") + + guardrail.check_pii = mock_check_pii + + class FakeResponsesEvent: + def __init__(self, event_type: str): + self.type = event_type + + completed = FakeResponsesEvent("response.completed") + + async def stream(): + # No sentence terminator -> held in the mask buffer, not yet emitted. + yield _content_chunk("My email is secret@example.com") + yield completed + + collected = await _drive(guardrail, stream(), {"metadata": {}}) + + event_index = collected.index(completed) + masked_indexes = [ + i + for i, chunk in enumerate(collected) + if not isinstance(chunk, FakeResponsesEvent) + and any(getattr(c.delta, "content", None) for c in chunk.choices) + ] + assert masked_indexes, "buffered masked content was never emitted" + assert max(masked_indexes) < event_index, "masked content must precede the event" + + masked_text = "".join( + c.delta.content + for chunk in collected + if not isinstance(chunk, FakeResponsesEvent) + for c in chunk.choices + if getattr(c.delta, "content", None) + ) + assert masked_text == "My email is " + assert "secret@example.com" not in masked_text + + +@pytest.mark.asyncio +async def test_mask_streaming_does_not_split_entity_on_long_unpunctuated_run(): + """ + A long punctuation-free run must never force-flush mid-entity. The old + fixed-window fallback emitted at the last whitespace once the buffer grew + past a cap, so a space-bearing entity (SSN, phone) straddling that cut was + analyzed in two halves and leaked unmasked. Content past the last sentence + boundary is now held until a boundary or end-of-stream so each analyze call + sees the whole entity. + """ + guardrail = _OPTIONAL_PresidioPIIMasking(mock_testing=True, apply_to_output=True) + + async def mock_check_pii(text, output_parse_pii, presidio_config, request_data): + return text.replace("123 45 6789", "") + + guardrail.check_pii = mock_check_pii + + filler = "data " * 90 # >400 chars, spaces only, no .!?\n boundary + async def stream(): + yield _content_chunk(filler + "my ssn is 123 45 6789") + yield _content_chunk("", finish_reason="stop") + + collected = await _drive(guardrail, stream(), {"metadata": {}}) + reassembled = "".join(_non_empty_content(collected)) + + assert "" in reassembled + assert "123 45 6789" not in reassembled + assert "456789" not in reassembled + + +@pytest.mark.asyncio +async def test_mask_streaming_preserves_stream_on_check_pii_error(): + """ + A transient Presidio failure mid-stream must not truncate the response. The + failing run is dropped (fail closed, never leaking the PII it could not mask) + while content that already flushed safely, later chunks, and the finish chunk + still reach the client. + """ + guardrail = _OPTIONAL_PresidioPIIMasking(mock_testing=True, apply_to_output=True) + guardrail._stream_mask_margin = 4 + + async def mock_check_pii(text, output_parse_pii, presidio_config, request_data): + if "boom@example.com" in text: + raise RuntimeError("presidio down") + return text.replace("ok@example.com", "") + + guardrail.check_pii = mock_check_pii + + pieces = [ + "First ok@example.com. ", + "filler text here. ", + "Second boom@example.com. ", + "Third part here.", + ] + + async def stream(): + for piece in pieces: + yield _content_chunk(piece) + yield _content_chunk("", finish_reason="stop") + + collected = await _drive(guardrail, stream(), {"metadata": {}}) + reassembled = "".join(_non_empty_content(collected)) + + assert "" in reassembled + assert "boom@example.com" not in reassembled + assert "Third part" in reassembled, "stream truncated after a masking error" + assert any( + getattr(choice, "finish_reason", None) + for chunk in collected + for choice in getattr(chunk, "choices", []) + ), "finish chunk dropped after a masking error" + + +@pytest.mark.asyncio +async def test_mask_streaming_error_preserves_tool_call_accumulators(): + guardrail = _OPTIONAL_PresidioPIIMasking(mock_testing=True, apply_to_output=True) + + async def mock_check_pii(text, output_parse_pii, presidio_config, request_data): + if "bad@example.com" in text: + raise RuntimeError("presidio down") + return text.replace("secret@example.com", "") + + guardrail.check_pii = mock_check_pii + + def tool_chunk(*, id=None, name=None, args=None, finish_reason=None): + return ModelResponseStream( + id="chatcmpl-lit3222", + created=1, + model="gpt-4o-mini", + object="chat.completion.chunk", + choices=[ + StreamingChoices( + index=1, + delta=( + Delta( + tool_calls=[ + ChatCompletionDeltaToolCall( + index=0, + id=id, + type="function" if id else None, + function=Function(name=name, arguments=args), + ) + ] + ) + if args is not None + else Delta() + ), + finish_reason=finish_reason, + ) + ], + ) + + async def stream(): + yield tool_chunk( + id="call_1", + name="save", + args='{"email": "secret@example.com"}', + ) + yield _content_chunk("bad@example.com", index=0, finish_reason="stop") + yield tool_chunk(finish_reason="tool_calls") + + collected = await _drive(guardrail, stream(), {"metadata": {}}) + tool_args = [ + tc.function.arguments + for chunk in collected + for choice in chunk.choices + for tc in (getattr(choice.delta, "tool_calls", None) or []) + ] + + assert tool_args == ['{"email": ""}'] + + +@pytest.mark.asyncio +async def test_mask_emit_decision_caps_buffer_when_stability_fails(): + guardrail = _OPTIONAL_PresidioPIIMasking(mock_testing=True, apply_to_output=True) + guardrail._stream_mask_margin = 3 + guardrail._stream_mask_max_buffer = 6 + + async def unstable_transform(text): + return text[::-1] + + emitted, held = await guardrail._mask_emit_decision( + "abcdefghij", False, unstable_transform + ) + + assert emitted == "" + assert held == "hij" + + +@pytest.mark.parametrize( + "exception", + [ + BlockedPiiEntityError(entity_type="EMAIL_ADDRESS", guardrail_name="presidio"), + GuardrailRaisedException(guardrail_name="presidio", message="invalid response"), + ], +) +@pytest.mark.asyncio +async def test_mask_streaming_propagates_guardrail_interventions(exception): + guardrail = _OPTIONAL_PresidioPIIMasking(mock_testing=True, apply_to_output=True) + + async def mock_check_pii(text, output_parse_pii, presidio_config, request_data): + raise exception + + guardrail.check_pii = mock_check_pii + + async def stream(): + yield _content_chunk("blocked", finish_reason="stop") + + with pytest.raises(type(exception)): + await _drive(guardrail, stream(), {"metadata": {}}) + + +@pytest.mark.asyncio +async def test_mask_streaming_holds_terminator_at_chunk_end_until_whitespace(): + """ + A sentence terminator at the very end of a chunk is not a safe boundary: the + next chunk may continue the token. "Contact jane." followed by + "doe@example.com" must mask the whole email rather than flushing "jane." and + analyzing the two halves separately, which would leak the address. + """ + guardrail = _OPTIONAL_PresidioPIIMasking(mock_testing=True, apply_to_output=True) + + async def mock_check_pii(text, output_parse_pii, presidio_config, request_data): + return text.replace("jane.doe@example.com", "") + + guardrail.check_pii = mock_check_pii + + async def stream(): + yield _content_chunk("Contact jane.") + yield _content_chunk("doe@example.com") + yield _content_chunk("", finish_reason="stop") + + collected = await _drive(guardrail, stream(), {"metadata": {}}) + reassembled = "".join(_non_empty_content(collected)) + + assert "" in reassembled + assert "jane.doe@example.com" not in reassembled + assert "jane." not in reassembled + + +@pytest.mark.asyncio +async def test_mask_streaming_does_not_split_entity_across_sentence_boundary(): + """ + An entity that straddles a sentence boundary (a name with a middle initial, + an address across a newline) must not be flushed in halves. The stability + check holds the prefix until masking it alone matches masking the whole + buffer, so the straddling entity is analyzed and masked as one unit instead + of leaking the part before the boundary. + """ + guardrail = _OPTIONAL_PresidioPIIMasking(mock_testing=True, apply_to_output=True) + guardrail._stream_mask_margin = 8 + + async def mock_check_pii(text, output_parse_pii, presidio_config, request_data): + return text.replace("John Q. Public", "") + + guardrail.check_pii = mock_check_pii + + async def stream(): + yield _content_chunk("Please greet John Q. Public warmly when they arrive.") + yield _content_chunk("", finish_reason="stop") + + collected = await _drive(guardrail, stream(), {"metadata": {}}) + reassembled = "".join(_non_empty_content(collected)) + + assert "" in reassembled + assert "John Q. Public" not in reassembled + assert "John Q." not in reassembled + + +@pytest.mark.asyncio +async def test_mask_streaming_caps_runaway_buffer_without_splitting_entity(): + """ + A punctuation-free run past the buffer cap must be flushed to bound memory, + but the forced flush still cuts a margin back from the end so a PII value + split exactly at the cap (``secret@`` in one chunk, ``example.com`` in the + next) stays buffered and is masked whole instead of leaking its raw halves. + The early flush plus the terminal flush yields more than one content chunk. + """ + guardrail = _OPTIONAL_PresidioPIIMasking(mock_testing=True, apply_to_output=True) + guardrail._stream_mask_margin = 8 + guardrail._stream_mask_max_buffer = 20 + + async def mock_check_pii(text, output_parse_pii, presidio_config, request_data): + return text.replace("secret@example.com", "") + + guardrail.check_pii = mock_check_pii + + async def stream(): + yield _content_chunk("please email me at secret@") # 26 > cap, email cut + yield _content_chunk("example.com now") + yield _content_chunk("", finish_reason="stop") + + collected = await _drive(guardrail, stream(), {"metadata": {}}) + content = _non_empty_content(collected) + reassembled = "".join(content) + + assert "" in reassembled + assert "secret@example.com" not in reassembled + assert "secret@" not in reassembled + assert len(content) >= 2, f"cap did not flush before end of stream, got {content}" + + +@pytest.mark.asyncio +async def test_mask_streaming_preserves_finish_reason_when_terminal_chunk_fails(): + """ + When the masking call fails on the terminal chunk itself, that chunk must be + redacted in place (content dropped, fail closed) but keep its finish_reason, + so the client still receives the completion signal instead of a stream that + ends without one. + """ + guardrail = _OPTIONAL_PresidioPIIMasking(mock_testing=True, apply_to_output=True) + guardrail._stream_mask_margin = 4 + + async def mock_check_pii(text, output_parse_pii, presidio_config, request_data): + if "boom@example.com" in text: + raise RuntimeError("presidio down") + return text + + guardrail.check_pii = mock_check_pii + + async def stream(): + yield _content_chunk("Hello world. ") + yield _content_chunk("more text here. ") + yield _content_chunk("boom@example.com", finish_reason="stop") + + collected = await _drive(guardrail, stream(), {"metadata": {}}) + reassembled = "".join(_non_empty_content(collected)) + + assert "boom@example.com" not in reassembled + assert "Hello world" in reassembled + finish_reasons = [ + choice.finish_reason + for chunk in collected + for choice in getattr(chunk, "choices", []) + if getattr(choice, "finish_reason", None) + ] + assert "stop" in finish_reasons, "finish_reason dropped when terminal chunk failed" + + +@pytest.mark.asyncio +async def test_unmask_streaming_flushes_held_content_before_bytes(): + """ + When a held placeholder prefix is buffered and the next upstream item is a + raw SSE byte chunk, the held chat text must be flushed before the bytes so + the client never sees the byte chunk ahead of earlier content. + """ + guardrail = _OPTIONAL_PresidioPIIMasking(mock_testing=True, output_parse_pii=True) + request_data = {"metadata": {"pii_tokens": {"": "Jane"}}} + + async def stream(): + yield _content_chunk("Hi Date: Tue, 30 Jun 2026 13:20:57 -0700 Subject: [PATCH 35/79] =?UTF-8?q?bump:=20version=201.91.0=20=E2=86=92=201.?= =?UTF-8?q?92.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 2ad96c4936b..63afd87f455 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "litellm" -version = "1.91.0" +version = "1.92.0" description = "Library to easily interface with LLM API providers" readme = "README.md" requires-python = ">=3.10, <3.14" @@ -274,7 +274,7 @@ source-exclude = [ profile = "black" [tool.commitizen] -version = "1.91.0" +version = "1.92.0" version_files = [ "pyproject.toml:^version", ] From c736ec52859f650c1b20a6f7772a78a02ce842d5 Mon Sep 17 00:00:00 2001 From: Yuneng Jiang Date: Tue, 30 Jun 2026 13:21:13 -0700 Subject: [PATCH 36/79] =?UTF-8?q?bump:=20version=200.1.44=20=E2=86=92=200.?= =?UTF-8?q?1.45?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- enterprise/pyproject.toml | 4 ++-- pyproject.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/enterprise/pyproject.toml b/enterprise/pyproject.toml index 66f6aeb7abc..f2ad04510a8 100644 --- a/enterprise/pyproject.toml +++ b/enterprise/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "litellm-enterprise" -version = "0.1.44" +version = "0.1.45" description = "Package for LiteLLM Enterprise features" readme = "README.md" requires-python = ">=3.9" @@ -26,7 +26,7 @@ required-version = ">=0.10.9" module-root = "" [tool.commitizen] -version = "0.1.44" +version = "0.1.45" version_files = [ "pyproject.toml:^version", "../pyproject.toml:litellm-enterprise==", diff --git a/pyproject.toml b/pyproject.toml index 63afd87f455..5165859b1b6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -63,7 +63,7 @@ proxy = [ "azure-storage-blob>=12.28.0,<13.0", "mcp>=1.26.0,<2.0", "litellm-proxy-extras==0.4.74", - "litellm-enterprise==0.1.44", + "litellm-enterprise==0.1.45", "RestrictedPython>=8.1,<9.0", "rich>=13.9.4,<14.0", "polars>=1.38.1,<2.0", From aaa58a72f763b5ce1462418013d14b9b24528d52 Mon Sep 17 00:00:00 2001 From: Yuneng Jiang Date: Tue, 30 Jun 2026 13:21:49 -0700 Subject: [PATCH 37/79] chore: rebuild uv lock for version bumps --- uv.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/uv.lock b/uv.lock index f76be69505f..768a2176d53 100644 --- a/uv.lock +++ b/uv.lock @@ -9,7 +9,7 @@ resolution-markers = [ ] [options] -exclude-newer = "2026-06-23T00:31:52.495979Z" +exclude-newer = "2026-06-27T20:21:25.609736Z" exclude-newer-span = "P3D" [manifest] @@ -3274,7 +3274,7 @@ wheels = [ [[package]] name = "litellm" -version = "1.91.0" +version = "1.92.0" source = { editable = "." } dependencies = [ { name = "aiohttp" }, @@ -3639,7 +3639,7 @@ proxy-dev = [ [[package]] name = "litellm-enterprise" -version = "0.1.44" +version = "0.1.45" source = { editable = "enterprise" } [[package]] From 5d4bb7548fa25a3d240b446e393d64dc788841fb Mon Sep 17 00:00:00 2001 From: yucheng-berri Date: Tue, 30 Jun 2026 14:23:09 -0700 Subject: [PATCH 38/79] fix(token_counter): count legacy function_call.arguments (VERIA-492) (#31741) * fix(token_counter): count legacy function_call.arguments (VERIA-492) token_counter handled the modern assistant tool_calls field but had no branch for the legacy OpenAI function_call payload. The value is a dict, so it skipped every special-cased branch in _count_messages and fell through to the unsupported-key continue, letting arbitrary text in function_call.arguments slip past the count. Resolves VERIA-492 * refactor(token_counter): raise on unexpected key in _count_function_call_tokens Address Greptile P2: the helper's fallback branch previously applied function_call logic to any key that wasn't tool_calls. Make the contract explicit so a future caller can't silently miscount. --- litellm/litellm_core_utils/token_counter.py | 43 +++++++++++++----- .../litellm_core_utils/test_token_counter.py | 44 +++++++++++++++++++ 2 files changed, 77 insertions(+), 10 deletions(-) diff --git a/litellm/litellm_core_utils/token_counter.py b/litellm/litellm_core_utils/token_counter.py index 56b9d42092c..071b16c8378 100644 --- a/litellm/litellm_core_utils/token_counter.py +++ b/litellm/litellm_core_utils/token_counter.py @@ -407,6 +407,37 @@ def token_counter( return num_tokens +def _count_function_call_tokens( + key: str, + value: Any, + message: Mapping[str, Any], + count_function: TokenCounterFunction, +) -> int: + """ + Count tokens contributed by an assistant message's tool/function call payload. + + Handles both the modern `tool_calls` list and the legacy OpenAI + `function_call` dict. Only the `arguments` string is counted (matching the + existing tool_calls behavior); names are accounted for elsewhere via the + tool/function definitions and `tool_choice`. + """ + if key == "tool_calls": + if not isinstance(value, List): + raise ValueError(f"Unsupported type {type(value)} for key tool_calls in message {message}") + total = 0 + for tool_call in value: + if "function" not in tool_call: + raise ValueError(f"Unsupported tool call {tool_call} must contain a function key") + function_arguments = tool_call["function"].get("arguments", "") + total += count_function(str(function_arguments)) + return total + if key == "function_call": + if not isinstance(value, Mapping): + raise ValueError(f"Unsupported type {type(value)} for key function_call in message {message}") + return count_function(str(value.get("arguments", ""))) + raise ValueError(f"Unexpected key {key!r}; expected 'tool_calls' or 'function_call'") + + def _count_messages( params: _MessageCountParams, messages: List[AllMessageValues], @@ -430,16 +461,8 @@ def _count_messages( for key, value in message.items(): if value is None: pass - elif key == "tool_calls": - if isinstance(value, List): - for tool_call in value: - if "function" in tool_call: - function_arguments = tool_call["function"].get("arguments", []) - num_tokens += params.count_function(str(function_arguments)) - else: - raise ValueError(f"Unsupported tool call {tool_call} must contain a function key") - else: - raise ValueError(f"Unsupported type {type(value)} for key tool_calls in message {message}") + elif key in ("tool_calls", "function_call"): + num_tokens += _count_function_call_tokens(key, value, message, params.count_function) elif isinstance(value, str): num_tokens += params.count_function(value) if key == "name": diff --git a/tests/test_litellm/litellm_core_utils/test_token_counter.py b/tests/test_litellm/litellm_core_utils/test_token_counter.py index 60e5a797627..71e686563a5 100644 --- a/tests/test_litellm/litellm_core_utils/test_token_counter.py +++ b/tests/test_litellm/litellm_core_utils/test_token_counter.py @@ -97,6 +97,50 @@ def test_token_counter_normal_plus_function_calling(): # test_token_counter_normal_plus_function_calling() +def test_token_counter_legacy_function_call_counts_arguments(): + """ + Regression for VERIA-492 (Token-counter function_call bypass). + + The legacy OpenAI assistant `function_call` field carries arbitrary text in + `arguments`. Before the fix, `_count_messages` had no branch for + `function_call` and fell through to the unsupported-key `continue`, so an + assistant turn could smuggle unlimited text past `token_counter` and the + proxy `/utils/token_counter` endpoint (and downstream pre-call budget / + `get_modified_max_tokens` math). After the fix it must be counted the + same as the equivalent `tool_calls` payload. + """ + long_arg = "A" * 4000 + fc_messages = [ + {"role": "user", "content": "hi"}, + { + "role": "assistant", + "content": None, + "function_call": {"name": "search", "arguments": long_arg}, + }, + ] + tc_messages = [ + {"role": "user", "content": "hi"}, + { + "role": "assistant", + "content": None, + "tool_calls": [ + { + "id": "call_1", + "type": "function", + "function": {"name": "search", "arguments": long_arg}, + } + ], + }, + ] + fc_tokens = token_counter(model="gpt-3.5-turbo", messages=fc_messages) + tc_tokens = token_counter(model="gpt-3.5-turbo", messages=tc_messages) + assert fc_tokens == tc_tokens, ( + f"function_call arguments must count like tool_calls arguments; " + f"got function_call={fc_tokens}, tool_calls={tc_tokens}" + ) + assert fc_tokens > 500, f"4000-char arguments payload must contribute real tokens, got {fc_tokens}" + + @pytest.mark.parametrize( "message_count_pair", MESSAGES_TEXT, From a0b26d2c3c498f6c11ec4548aa986183eec18f20 Mon Sep 17 00:00:00 2001 From: tin-berri Date: Tue, 30 Jun 2026 14:37:11 -0700 Subject: [PATCH 39/79] =?UTF-8?q?Revert=20"fix(presidio):=20stream=20SSE?= =?UTF-8?q?=20output=20incrementally=20instead=20of=20buffering=20t?= =?UTF-8?q?=E2=80=A6"=20(#31764)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 94936a3922aeb8aa9a4d5928e63ea6f15be6f098. --- .../guardrails/guardrail_hooks/presidio.py | 523 ++++--------- .../guardrail_hooks/test_presidio.py | 712 +----------------- 2 files changed, 152 insertions(+), 1083 deletions(-) diff --git a/litellm/proxy/guardrails/guardrail_hooks/presidio.py b/litellm/proxy/guardrails/guardrail_hooks/presidio.py index e60b6233038..95876a55eab 100644 --- a/litellm/proxy/guardrails/guardrail_hooks/presidio.py +++ b/litellm/proxy/guardrails/guardrail_hooks/presidio.py @@ -17,8 +17,6 @@ from typing import ( TYPE_CHECKING, Any, AsyncGenerator, - Awaitable, - Callable, Dict, List, Literal, @@ -56,14 +54,7 @@ from litellm.types.proxy.guardrails.guardrail_hooks.presidio import ( PresidioAnalyzeRequest, PresidioAnalyzeResponseItem, ) -from litellm.types.utils import ( - ChatCompletionDeltaToolCall, - Delta, - Function, - FunctionCall, - GuardrailStatus, - StreamingChoices, -) +from litellm.types.utils import GuardrailStatus, StreamingChoices from litellm.utils import ( EmbeddingResponse, ImageResponse, @@ -71,17 +62,6 @@ from litellm.utils import ( ModelResponseStream, ) -# Trailing context (chars) the streaming output-masking path keeps buffered past -# a sentence boundary before emitting, so a PII entity that straddles the -# boundary is seen in full by Presidio and is never split across two analyze -# calls. It bounds the largest single entity the incremental path can mask -# without leaking; an entity longer than this could still be split. -_PRESIDIO_STREAM_MARGIN = 96 -# Hard cap on buffered un-emitted output. Past this with no sentence boundary, -# stable prefixes are flushed; if stability cannot be proven, the ambiguous -# prefix is dropped while retaining the trailing margin. -_PRESIDIO_STREAM_MAX_BUFFER = 2000 - class _OPTIONAL_PresidioPIIMasking(CustomGuardrail): user_api_key_cache = None @@ -113,10 +93,6 @@ class _OPTIONAL_PresidioPIIMasking(CustomGuardrail): self.mock_redacted_text = mock_redacted_text self.output_parse_pii = output_parse_pii or False self.apply_to_output = apply_to_output - # Streaming output-masking safety window; instance attributes so tests can - # exercise incremental flushing with short content (see _mask_emit_decision). - self._stream_mask_margin = _PRESIDIO_STREAM_MARGIN - self._stream_mask_max_buffer = _PRESIDIO_STREAM_MAX_BUFFER # When output_parse_pii or apply_to_output is enabled, the guardrail must # also run on post_call to unmask/mask the response. Expand the event_hook @@ -1072,352 +1048,80 @@ class _OPTIONAL_PresidioPIIMasking(CustomGuardrail): ) return response - @staticmethod - def _unmask_hold_len(text: str, token_keys: Any) -> int: - """Length of the trailing run of ``text`` that could still grow into a - PII placeholder token, so the unmask path holds it until the next chunk - completes (or aborts) the token instead of emitting a half-written - ````.""" - keys = tuple(token_keys) - if not text or not keys: - return 0 - longest = max(len(key) for key in keys) - for start in range(max(0, len(text) - (longest - 1)), len(text)): - suffix = text[start:] - if any(key.startswith(suffix) for key in keys if len(suffix) < len(key)): - return len(text) - start - return 0 - - @staticmethod - def _mask_boundaries(text: str) -> tuple[int, ...]: - """Candidate flush points: a newline, or a sentence terminator already - followed by whitespace. A terminator at the very end of the buffer is - excluded because the next chunk may continue the token (``jane.`` + - ``doe@example.com``); it becomes a boundary once the whitespace arrives. - A boundary is only a *candidate* here; ``_mask_emit_decision`` still - confirms via a stability check that no entity straddles it.""" - return tuple( - i + 1 - for i in range(len(text)) - if text[i] == "\n" or (text[i] in ".!?" and i + 1 < len(text) and text[i + 1].isspace()) - ) - - async def _mask_emit_decision( - self, - buffer: str, - terminal: bool, - transform: "Callable[[str], Awaitable[str]]", - ) -> "tuple[str, str]": - """Decide how much of ``buffer`` is safe to mask and emit now, returning - ``(masked_emit, hold_raw)``. - - A sentence boundary is not trusted blindly (it can fall inside a name - with an initial or an address spanning a newline). Instead a prefix is - emitted only when masking it in isolation matches the corresponding - prefix of masking the whole buffer, with at least ``_PRESIDIO_STREAM_MARGIN`` - characters of lookahead still buffered past the cut. That guarantees any - entity overlapping the cut is present in full when the buffer is analyzed, - so a straddling entity makes the prefixes differ and the cut is held. - Past ``_PRESIDIO_STREAM_MAX_BUFFER`` with no sentence boundary the buffer - first tries stable forced cuts and then drops the ambiguous prefix while - retaining the trailing margin, so a failed stability check cannot grow - the held buffer without bound.""" - if terminal: - return (await transform(buffer) if buffer else ""), "" - margin = self._stream_mask_margin - forced_cut = ( - len(buffer) - margin if len(buffer) > self._stream_mask_max_buffer and len(buffer) > margin else None - ) - cuts = [index for index in self._mask_boundaries(buffer) if len(buffer) - index >= margin] - if forced_cut is not None: - verbose_proxy_logger.warning( - "Presidio apply_to_output: buffered %d streamed chars with no " - "sentence boundary; bounding held stream state.", - len(buffer), - ) - cuts.append(forced_cut) - cuts.extend(index for index in range(forced_cut, len(buffer)) if buffer[index].isspace()) - if cuts: - masked_full = await transform(buffer) - for index in sorted(set(cuts), reverse=True): - masked_prefix = await transform(buffer[:index]) - if masked_full.startswith(masked_prefix): - return masked_prefix, buffer[index:] - if forced_cut is not None: - return "", buffer[forced_cut:] - return "", buffer - - @staticmethod - def _accumulate_tool_calls( - tool_acc: dict[int, dict[int, dict[str, Optional[str]]]], - choice_index: int, - tool_calls: list[Any], - ) -> None: - choice_acc = tool_acc.setdefault(choice_index, {}) # mutable-ok: streaming tool-call accumulator - for tool_call in tool_calls: - entry = choice_acc.setdefault( # mutable-ok: streaming tool-call accumulator - getattr(tool_call, "index", 0) or 0, - {"id": None, "type": None, "name": None, "args": ""}, - ) - if getattr(tool_call, "id", None): - entry["id"] = tool_call.id - if getattr(tool_call, "type", None): - entry["type"] = tool_call.type - function = getattr(tool_call, "function", None) - if function is not None: - if getattr(function, "name", None): - entry["name"] = function.name - arguments = getattr(function, "arguments", None) - if isinstance(arguments, str): - entry["args"] = (entry["args"] or "") + arguments - - @staticmethod - def _accumulate_function_call( - func_acc: dict[int, dict[str, Optional[str]]], - choice_index: int, - function_call: Any, - ) -> None: - entry = func_acc.setdefault( # mutable-ok: streaming function-call accumulator - choice_index, {"name": None, "args": ""} - ) - if getattr(function_call, "name", None): - entry["name"] = function_call.name - arguments = getattr(function_call, "arguments", None) - if isinstance(arguments, str): - entry["args"] = (entry["args"] or "") + arguments - - @staticmethod - async def _build_tool_calls( - choice_acc: dict[int, dict[str, Optional[str]]], - transform: "Callable[[str], Awaitable[str]]", - ) -> list[ChatCompletionDeltaToolCall]: - return [ - ChatCompletionDeltaToolCall( - index=tool_index, - id=entry["id"], - type=entry["type"], - function=Function( - name=entry["name"], - arguments=(await transform(entry["args"]) if entry["args"] else ""), - ), - ) - for tool_index, entry in sorted(choice_acc.items()) - ] - - @staticmethod - async def _build_function_call( - entry: Optional[dict[str, Optional[str]]], - transform: "Callable[[str], Awaitable[str]]", - ) -> Optional[FunctionCall]: - if entry is None: - return None - return FunctionCall( - name=entry["name"], - arguments=await transform(entry["args"]) if entry["args"] else "", - ) - - async def _rewrite_chat_chunk( - self, - chunk: ModelResponseStream, - content_buffers: dict[int, str], - tool_acc: dict[int, dict[int, dict[str, Optional[str]]]], - func_acc: dict[int, dict[str, Optional[str]]], - transform: "Callable[[str], Awaitable[str]]", - emit_content: "Callable[[str, bool], Awaitable[tuple[str, str]]]", - ) -> None: - """Transform one streaming chat chunk in place: text content is masked / - unmasked and emitted as soon as ``emit_content`` deems a prefix safe (it - returns the already-transformed text to emit plus the raw remainder to - hold), while tool-call and function-call argument fragments are - accumulated and emitted, fully transformed, on the chunk that closes the - choice.""" - for choice in chunk.choices: - index = getattr(choice, "index", 0) - delta = getattr(choice, "delta", None) - if delta is None: - continue - terminal = bool(getattr(choice, "finish_reason", None)) - - tool_calls = getattr(delta, "tool_calls", None) - if tool_calls: - self._accumulate_tool_calls(tool_acc, index, tool_calls) - delta.tool_calls = None - function_call = getattr(delta, "function_call", None) - if function_call is not None: - self._accumulate_function_call(func_acc, index, function_call) - delta.function_call = None - - raw_content = getattr(delta, "content", None) - content = raw_content if isinstance(raw_content, str) else None - if content is not None or terminal: - emitted, hold = await emit_content(content_buffers.pop(index, "") + (content or ""), terminal) - if hold: - content_buffers[index] = hold - if emitted: - delta.content = emitted - else: - delta.content = None if content is None else "" - - if terminal: - built_tool_calls = await self._build_tool_calls(tool_acc.get(index, {}), transform) - built_function_call = await self._build_function_call(func_acc.get(index), transform) - if built_tool_calls: - delta.tool_calls = built_tool_calls - if built_function_call is not None: - delta.function_call = built_function_call - tool_acc.pop(index, None) - func_acc.pop(index, None) - - @staticmethod - async def _build_tail_chunk( - template: Optional[ModelResponseStream], - content_buffers: dict[int, str], - tool_acc: dict[int, dict[int, dict[str, Optional[str]]]], - func_acc: dict[int, dict[str, Optional[str]]], - transform: "Callable[[str], Awaitable[str]]", - ) -> Optional[ModelResponseStream]: - """Flush any content / tool-call state still held when a stream ends - without a finish-reason chunk to attach it to.""" - if template is None: - return None - cls = _OPTIONAL_PresidioPIIMasking - choices: list[StreamingChoices] = [] - for index in sorted(set(content_buffers) | set(tool_acc) | set(func_acc)): - held = content_buffers.get(index, "") - masked_content = await transform(held) if held else None - built_tool_calls = await cls._build_tool_calls(tool_acc.get(index, {}), transform) - built_function_call = await cls._build_function_call(func_acc.get(index), transform) - if masked_content is None and not built_tool_calls and built_function_call is None: - continue - choices.append( - StreamingChoices( - index=index, - delta=Delta( - content=masked_content, - tool_calls=built_tool_calls or None, - function_call=built_function_call, - ), - ) - ) - if not choices: - return None - return ModelResponseStream( - id=getattr(template, "id", None), - created=getattr(template, "created", None), - model=getattr(template, "model", None), - object="chat.completion.chunk", - choices=choices, - ) - - @staticmethod - def _redacted_chunk(chunk: ModelResponseStream) -> ModelResponseStream: - """Fail closed when masking a chunk raises: rebuild it with empty content - but its original ``finish_reason`` and choice indices preserved, so - possibly-unmasked PII never reaches the client yet a terminal chunk still - carries the completion signal instead of being dropped.""" - return ModelResponseStream( - id=chunk.id, - created=chunk.created, - model=chunk.model, - object="chat.completion.chunk", - choices=[ - StreamingChoices( - index=choice.index, - delta=Delta(content=None), - finish_reason=choice.finish_reason, - ) - for choice in chunk.choices - ], - ) - async def _stream_apply_output_masking( self, response: Any, request_data: dict, ) -> AsyncGenerator[Union[ModelResponseStream, bytes], None]: """Apply Presidio masking to streaming output (apply_to_output=True path).""" - presidio_config = self.get_presidio_settings_from_request_data(request_data or {}) + from litellm.llms.base_llm.base_model_iterator import ( + convert_model_response_to_streaming, + ) + from litellm.main import stream_chunk_builder + from litellm.types.utils import ModelResponse - async def transform(text: str) -> str: - return await self.check_pii( - text=text, - output_parse_pii=False, - presidio_config=presidio_config, - request_data=request_data, - ) - - async def emit_content(text: str, terminal: bool) -> tuple[str, str]: - return await self._mask_emit_decision(text, terminal, transform) - - async def flush_held() -> Optional[ModelResponseStream]: - """Build the held-content tail, failing closed (drop held content) - on a masking error instead of letting it abort the whole stream.""" - try: - return await self._build_tail_chunk(last_chunk, content_buffers, tool_acc, func_acc, transform) - except Exception as e: - if self._is_guardrail_intervention(e): - raise - verbose_proxy_logger.error(f"Error masking streaming PII tail: {str(e)}") - return None - - content_buffers: dict[int, str] = {} - tool_acc: dict[int, dict[int, dict[str, Optional[str]]]] = {} - func_acc: dict[int, dict[str, Optional[str]]] = {} - last_chunk: Optional[ModelResponseStream] = None - masked_any_content = False - saw_unmaskable_shape = False + all_chunks: List[ModelResponseStream] = [] + passthrough_due_to_unknown_stream_shape = False try: async for chunk in response: - if not isinstance(chunk, ModelResponseStream): - # Flush buffered masked content before forwarding a non-chat - # shape (raw bytes / a /v1/responses event) so the client - # never sees a later event ahead of earlier masked text. - tail = await flush_held() - if tail is not None: - yield tail - content_buffers.clear() - tool_acc.clear() - func_acc.clear() - saw_unmaskable_shape = True + if isinstance(chunk, ModelResponseStream): + if passthrough_due_to_unknown_stream_shape: + yield chunk + else: + all_chunks.append(chunk) + elif isinstance(chunk, bytes): + yield chunk # type: ignore[misc] + continue + else: + if all_chunks: + # Flush buffered chunks and switch to transparent passthrough for this stream shape. + # NOTE: these buffered chunks are emitted unmasked because this + # stream mixed chunk types and cannot be safely reconstructed. + verbose_proxy_logger.warning( + "Presidio apply_to_output: mixed stream detected (ModelResponseStream + unknown event). " + "Flushing %d buffered chunks without PII masking and switching to transparent passthrough.", + len(all_chunks), + ) + for buffered_chunk in all_chunks: + yield buffered_chunk + all_chunks = [] + passthrough_due_to_unknown_stream_shape = True yield chunk - continue - masked_any_content = True - last_chunk = chunk - try: - await self._rewrite_chat_chunk( - chunk, - content_buffers, - tool_acc, - func_acc, - transform, - emit_content, - ) - except Exception as e: - if self._is_guardrail_intervention(e): - raise - # Fail closed: a transient masking error redacts this chunk's - # content (so possibly-unmasked PII never reaches the client) - # but keeps its finish_reason and keeps the stream flowing, - # rather than truncating the response or dropping a terminal - # chunk's completion signal. - verbose_proxy_logger.error(f"Error masking streaming PII chunk: {str(e)}") - yield self._redacted_chunk(chunk) - continue - yield chunk - - tail = await flush_held() - if tail is not None: - yield tail - if not masked_any_content and saw_unmaskable_shape: + if passthrough_due_to_unknown_stream_shape: + verbose_proxy_logger.warning( + "Presidio apply_to_output: streaming response contained unknown event objects " + "(e.g. /v1/responses events). Output PII masking was skipped for this response." + ) + return + if not all_chunks: verbose_proxy_logger.warning( "Presidio apply_to_output: streaming response contained no " - "maskable chat content (e.g. raw SSE bytes or /v1/responses " - "events). Output PII masking was skipped for this response." + "ModelResponseStream chunks (e.g. raw SSE bytes or an empty " + "upstream stream). Output PII masking was skipped for this " + "response." ) + return + + assembled_model_response = stream_chunk_builder(chunks=all_chunks, messages=request_data.get("messages")) + + if not isinstance(assembled_model_response, ModelResponse): + for chunk in all_chunks: + yield chunk + return + + await self._process_response_for_pii( + response=assembled_model_response, + request_data=request_data, + mode="mask", + ) + + mock_response_stream = convert_model_response_to_streaming(assembled_model_response) + yield mock_response_stream + except Exception as e: - if self._is_guardrail_intervention(e): - raise verbose_proxy_logger.error(f"Error masking streaming PII output: {str(e)}") + for chunk in all_chunks: + yield chunk @staticmethod def _unmask_sse_bytes_chunk(chunk: bytes, pii_tokens: Dict[str, str]) -> bytes: @@ -1479,56 +1183,74 @@ class _OPTIONAL_PresidioPIIMasking(CustomGuardrail): request_data: dict, ) -> AsyncGenerator[Union[ModelResponseStream, bytes], None]: """Apply PII unmasking to streaming output (output_parse_pii=True path).""" + from litellm.llms.base_llm.base_model_iterator import ( + convert_model_response_to_streaming, + ) + from litellm.main import stream_chunk_builder + from litellm.types.utils import ModelResponse + metadata = (request_data.get("metadata") or {}) if request_data else {} pii_tokens: Dict[str, str] = metadata.get("pii_tokens", {}) - async def transform(text: str) -> str: - return self._unmask_pii_text(text, pii_tokens) - - async def emit_content(text: str, terminal: bool) -> tuple[str, str]: - if terminal: - return (await transform(text) if text else ""), "" - hold = self._unmask_hold_len(text, pii_tokens.keys()) - emit_raw, held = text[: len(text) - hold], text[len(text) - hold :] - return (await transform(emit_raw) if emit_raw else ""), held - - content_buffers: dict[int, str] = {} - tool_acc: dict[int, dict[int, dict[str, Optional[str]]]] = {} - func_acc: dict[int, dict[str, Optional[str]]] = {} - last_chunk: Optional[ModelResponseStream] = None + remaining_chunks: List[ModelResponseStream] = [] + saw_non_chat_chunk = False try: async for chunk in response: - if isinstance(chunk, bytes): - tail = await self._build_tail_chunk(last_chunk, content_buffers, tool_acc, func_acc, transform) - if tail is not None: - yield tail - content_buffers.clear() - tool_acc.clear() - func_acc.clear() - yield ( # type: ignore[misc] - self._unmask_sse_bytes_chunk(chunk, pii_tokens) if pii_tokens else chunk - ) + if isinstance(chunk, ModelResponseStream): + if saw_non_chat_chunk: + yield chunk + else: + remaining_chunks.append(chunk) + elif isinstance(chunk, bytes): + if pii_tokens: + yield self._unmask_sse_bytes_chunk(chunk, pii_tokens) # type: ignore[misc] + else: + yield chunk # type: ignore[misc] continue - if not isinstance(chunk, ModelResponseStream): - tail = await self._build_tail_chunk(last_chunk, content_buffers, tool_acc, func_acc, transform) - if tail is not None: - yield tail - content_buffers.clear() - tool_acc.clear() - func_acc.clear() - if getattr(chunk, "type", None) == "response.completed" and pii_tokens: + else: + # /v1/responses events: unmask response.completed text in-place. + # A mixed stream can't be reassembled, so flush buffered chat + # chunks in order before passthrough instead of dropping them. + if remaining_chunks and not saw_non_chat_chunk: + for buffered_chunk in remaining_chunks: + yield buffered_chunk + remaining_chunks = [] + chunk_type = getattr(chunk, "type", None) + if chunk_type == "response.completed" and pii_tokens: self._unmask_responses_api_completed_chunk(chunk, pii_tokens) + saw_non_chat_chunk = True yield chunk - continue - last_chunk = chunk - await self._rewrite_chat_chunk(chunk, content_buffers, tool_acc, func_acc, transform, emit_content) - yield chunk - tail = await self._build_tail_chunk(last_chunk, content_buffers, tool_acc, func_acc, transform) - if tail is not None: - yield tail + if saw_non_chat_chunk: + return + + if not remaining_chunks: + return + + assembled_model_response = stream_chunk_builder( + chunks=remaining_chunks, messages=request_data.get("messages") + ) + + if not isinstance(assembled_model_response, ModelResponse): + for chunk in remaining_chunks: + yield chunk + return + + self._preserve_usage_from_last_chunk(assembled_model_response, remaining_chunks) + + await self._process_response_for_pii( + response=assembled_model_response, + request_data=request_data, + mode="unmask", + ) + + mock_response_stream = convert_model_response_to_streaming(assembled_model_response) + yield mock_response_stream + except Exception as e: verbose_proxy_logger.error(f"Error in PII streaming processing: {str(e)}") + for chunk in remaining_chunks: + yield chunk async def async_post_call_streaming_iterator_hook( # type: ignore[override] self, @@ -1560,6 +1282,17 @@ class _OPTIONAL_PresidioPIIMasking(CustomGuardrail): async for chunk in self._stream_pii_unmasking(response, request_data): yield chunk + @staticmethod + def _preserve_usage_from_last_chunk( + assembled_model_response: Any, + chunks: List[Any], + ) -> None: + """Copy usage metadata from the last chunk when stream_chunk_builder misses it.""" + if not getattr(assembled_model_response, "usage", None) and chunks: + last_chunk_usage = getattr(chunks[-1], "usage", None) + if last_chunk_usage: + setattr(assembled_model_response, "usage", last_chunk_usage) + def get_presidio_settings_from_request_data(self, data: dict) -> Optional[PresidioPerRequestConfig]: if "metadata" in data: _metadata = data.get("metadata", None) diff --git a/tests/test_litellm/proxy/guardrails/guardrail_hooks/test_presidio.py b/tests/test_litellm/proxy/guardrails/guardrail_hooks/test_presidio.py index ce4d6d4a8b0..253d989f203 100644 --- a/tests/test_litellm/proxy/guardrails/guardrail_hooks/test_presidio.py +++ b/tests/test_litellm/proxy/guardrails/guardrail_hooks/test_presidio.py @@ -19,7 +19,7 @@ from litellm.proxy._types import UserAPIKeyAuth from litellm.proxy.guardrails.guardrail_hooks.presidio import ( _OPTIONAL_PresidioPIIMasking, ) -from litellm.exceptions import BlockedPiiEntityError, GuardrailRaisedException +from litellm.exceptions import GuardrailRaisedException from litellm.types.guardrails import LitellmParams, PiiAction, PiiEntityType from litellm.types.utils import Choices, Message, ModelResponse @@ -2207,12 +2207,11 @@ async def test_apply_to_output_streaming_unknown_events_passthrough(): @pytest.mark.asyncio -async def test_apply_to_output_streaming_mixed_chunks_preserve_order(): +async def test_apply_to_output_streaming_mixed_chunks_flushes_and_warns(): """ - Regression test for mixed stream shape: a ModelResponseStream chat chunk - followed by an unknown responses-style event must be forwarded in order. - Incremental masking forwards chat chunks as they arrive, so a responses - event after them does not buffer or drop anything. + Regression test for mixed stream shape: + a buffered ModelResponseStream chunk followed by unknown responses-style + events should be preserved, and masking skip should be visible via warnings. """ guardrail = _OPTIONAL_PresidioPIIMasking( mock_testing=True, @@ -2239,14 +2238,26 @@ async def test_apply_to_output_streaming_mixed_chunks_preserve_order(): mock_user_api_key = UserAPIKeyAuth(api_key="test-key") received = [] - async for chunk in guardrail.async_post_call_streaming_iterator_hook( - user_api_key_dict=mock_user_api_key, - response=mock_stream(), - request_data={}, - ): - received.append(chunk) + with patch( + "litellm.proxy.guardrails.guardrail_hooks.presidio.verbose_proxy_logger" + ) as mock_logger: + async for chunk in guardrail.async_post_call_streaming_iterator_hook( + user_api_key_dict=mock_user_api_key, + response=mock_stream(), + request_data={}, + ): + received.append(chunk) - assert received == [model_chunk, response_completed] + # Preserve original ordering across mixed stream types. + assert received == [model_chunk, response_completed] + + # Two warnings are expected: + # 1) mixed stream detected + unmasked flush + # 2) passthrough mode skipped output masking + assert mock_logger.warning.call_count == 2 + warning_messages = [call.args[0] for call in mock_logger.warning.call_args_list] + assert any("mixed stream detected" in msg for msg in warning_messages) + assert any("unknown event objects" in msg for msg in warning_messages) # --------------------------------------------------------------------------- @@ -2838,678 +2849,3 @@ async def test_stream_pii_unmasking_passthrough_when_no_tokens(mock_user_api_key chunks.append(chunk) assert chunks == [raw_chunk] - - -# --------------------------------------------------------------------------- -# LIT-3222: incremental SSE streaming for Presidio output masking / unmasking -# --------------------------------------------------------------------------- - -from litellm.types.utils import ( - ChatCompletionDeltaToolCall, - Delta, - Function, - StreamingChoices, -) - - -def _content_chunk(text, index=0, finish_reason=None): - return ModelResponseStream( - id="chatcmpl-lit3222", - created=1, - model="gpt-4o-mini", - object="chat.completion.chunk", - choices=[ - StreamingChoices( - index=index, delta=Delta(content=text), finish_reason=finish_reason - ) - ], - ) - - -def _non_empty_content(chunks): - out = [] - for chunk in chunks: - for choice in chunk.choices: - piece = getattr(choice.delta, "content", None) - if piece: - out.append(piece) - return out - - -async def _drive(guardrail, stream, request_data): - collected = [] - async for chunk in guardrail.async_post_call_streaming_iterator_hook( - user_api_key_dict=UserAPIKeyAuth(api_key="test-key"), - response=stream, - request_data=request_data, - ): - collected.append(chunk) - return collected - - -@pytest.mark.asyncio -async def test_unmask_streaming_is_incremental_not_buffered(): - """ - output_parse_pii streaming must forward each content chunk as it arrives - (unmasked), not collapse the whole completion into a single end-of-stream - chunk. The buffering implementation yielded exactly one content chunk. - """ - guardrail = _OPTIONAL_PresidioPIIMasking(mock_testing=True, output_parse_pii=True) - request_data = {"metadata": {"pii_tokens": {"": "John Smith"}}} - - pieces = ["Hello ", "", " is here."] - - async def stream(): - for i, piece in enumerate(pieces): - yield _content_chunk(piece) - yield _content_chunk("", finish_reason="stop") - - collected = await _drive(guardrail, stream(), request_data) - content = _non_empty_content(collected) - - assert len(content) >= 3, f"expected progressive chunks, got {content}" - assert "".join(content) == "Hello John Smith is here." - assert all("" not in piece for piece in content) - - -@pytest.mark.asyncio -async def test_unmask_streaming_token_split_across_chunks(): - """ - A placeholder token split across SSE chunks (````) must - still be unmasked atomically via the cross-chunk carry buffer. - """ - guardrail = _OPTIONAL_PresidioPIIMasking(mock_testing=True, output_parse_pii=True) - request_data = {"metadata": {"pii_tokens": {"": "John Smith"}}} - - pieces = ["Hi ", "", "!"] - - async def stream(): - for piece in pieces: - yield _content_chunk(piece) - yield _content_chunk("", finish_reason="stop") - - collected = await _drive(guardrail, stream(), request_data) - reassembled = "".join(_non_empty_content(collected)) - - assert reassembled == "Hi John Smith!" - assert "" not in reassembled - - -@pytest.mark.asyncio -async def test_unmask_streaming_independent_per_choice_buffers(): - """ - With n>1 each choice keeps its own carry buffer, so a token split across - chunks on choice 1 does not corrupt choice 0 and vice versa. - """ - guardrail = _OPTIONAL_PresidioPIIMasking(mock_testing=True, output_parse_pii=True) - request_data = { - "metadata": { - "pii_tokens": {"": "John", "": "Jane"} - } - } - - def two_choice_chunk(c0, c1): - return ModelResponseStream( - id="chatcmpl-lit3222", - created=1, - model="gpt-4o-mini", - object="chat.completion.chunk", - choices=[ - StreamingChoices(index=0, delta=Delta(content=c0)), - StreamingChoices(index=1, delta=Delta(content=c1)), - ], - ) - - async def stream(): - yield two_choice_chunk(" ok", "SON_2>!") - yield two_choice_chunk("", "") - - collected = [] - async for chunk in guardrail.async_post_call_streaming_iterator_hook( - user_api_key_dict=UserAPIKeyAuth(api_key="test-key"), - response=stream(), - request_data=request_data, - ): - collected.append(chunk) - - per_choice = {0: "", 1: ""} - for chunk in collected: - for choice in chunk.choices: - if choice.delta.content: - per_choice[choice.index] += choice.delta.content - - assert per_choice[0] == "John ok" - assert per_choice[1] == "Jane!" - - -@pytest.mark.asyncio -async def test_unmask_streaming_tool_call_arguments_unmasked_at_finish(): - """ - Tool-call argument fragments carrying a placeholder token must be - reassembled and unmasked (the tool would otherwise receive ````). - """ - guardrail = _OPTIONAL_PresidioPIIMasking(mock_testing=True, output_parse_pii=True) - request_data = { - "metadata": {"pii_tokens": {"": "real@example.com"}} - } - - def tool_chunk(*, id=None, name=None, args, finish_reason=None): - return ModelResponseStream( - id="chatcmpl-lit3222", - created=1, - model="gpt-4o-mini", - object="chat.completion.chunk", - choices=[ - StreamingChoices( - index=0, - delta=Delta( - tool_calls=[ - ChatCompletionDeltaToolCall( - index=0, - id=id, - type="function" if id else None, - function=Function(name=name, arguments=args), - ) - ] - ), - finish_reason=finish_reason, - ) - ], - ) - - async def stream(): - yield tool_chunk(id="call_1", name="send_email", args="") - yield tool_chunk(args='{"to": "") - - guardrail.check_pii = mock_check_pii - - pieces = ["My email is ", "secret@example.com. ", "Call me later."] - - async def stream(): - for piece in pieces: - yield _content_chunk(piece) - yield _content_chunk("", finish_reason="stop") - - collected = await _drive(guardrail, stream(), {"metadata": {}}) - content = _non_empty_content(collected) - - assert len(content) >= 2, f"expected per-sentence chunks, got {content}" - reassembled = "".join(content) - assert reassembled == "My email is . Call me later." - assert "secret@example.com" not in reassembled - - -@pytest.mark.asyncio -async def test_mask_streaming_tool_call_arguments_masked_at_finish(): - """ - Model-generated PII inside streamed tool-call arguments must be masked - before reaching the client, not passed through unmasked. - """ - guardrail = _OPTIONAL_PresidioPIIMasking(mock_testing=True, apply_to_output=True) - - async def mock_check_pii(text, output_parse_pii, presidio_config, request_data): - return text.replace("secret@example.com", "") - - guardrail.check_pii = mock_check_pii - - def tool_chunk(*, id=None, name=None, args, finish_reason=None): - return ModelResponseStream( - id="chatcmpl-lit3222", - created=1, - model="gpt-4o-mini", - object="chat.completion.chunk", - choices=[ - StreamingChoices( - index=0, - delta=Delta( - tool_calls=[ - ChatCompletionDeltaToolCall( - index=0, - id=id, - type="function" if id else None, - function=Function(name=name, arguments=args), - ) - ] - ), - finish_reason=finish_reason, - ) - ], - ) - - async def stream(): - yield tool_chunk(id="call_1", name="save", args='{"email": "sec') - yield tool_chunk(args='ret@example.com"}') - yield ModelResponseStream( - id="chatcmpl-lit3222", - created=1, - model="gpt-4o-mini", - object="chat.completion.chunk", - choices=[ - StreamingChoices(index=0, delta=Delta(), finish_reason="tool_calls") - ], - ) - - collected = await _drive(guardrail, stream(), {"metadata": {}}) - - all_args = [ - tc.function.arguments - for chunk in collected - for choice in chunk.choices - for tc in (getattr(choice.delta, "tool_calls", None) or []) - ] - assert all_args == ['{"email": ""}'] - assert all("secret@example.com" not in args for args in all_args) - - -@pytest.mark.asyncio -async def test_mask_streaming_flushes_buffered_content_before_passthrough_event(): - """ - Regression test (Greptile 4/5 finding): in the apply_to_output path, masked - content held in the buffer (no sentence boundary yet) must be flushed BEFORE - a non-chat passthrough event (e.g. a /v1/responses completion) is forwarded, - so the client never observes stream completion ahead of the final text. - """ - guardrail = _OPTIONAL_PresidioPIIMasking(mock_testing=True, apply_to_output=True) - - async def mock_check_pii(text, output_parse_pii, presidio_config, request_data): - return text.replace("secret@example.com", "") - - guardrail.check_pii = mock_check_pii - - class FakeResponsesEvent: - def __init__(self, event_type: str): - self.type = event_type - - completed = FakeResponsesEvent("response.completed") - - async def stream(): - # No sentence terminator -> held in the mask buffer, not yet emitted. - yield _content_chunk("My email is secret@example.com") - yield completed - - collected = await _drive(guardrail, stream(), {"metadata": {}}) - - event_index = collected.index(completed) - masked_indexes = [ - i - for i, chunk in enumerate(collected) - if not isinstance(chunk, FakeResponsesEvent) - and any(getattr(c.delta, "content", None) for c in chunk.choices) - ] - assert masked_indexes, "buffered masked content was never emitted" - assert max(masked_indexes) < event_index, "masked content must precede the event" - - masked_text = "".join( - c.delta.content - for chunk in collected - if not isinstance(chunk, FakeResponsesEvent) - for c in chunk.choices - if getattr(c.delta, "content", None) - ) - assert masked_text == "My email is " - assert "secret@example.com" not in masked_text - - -@pytest.mark.asyncio -async def test_mask_streaming_does_not_split_entity_on_long_unpunctuated_run(): - """ - A long punctuation-free run must never force-flush mid-entity. The old - fixed-window fallback emitted at the last whitespace once the buffer grew - past a cap, so a space-bearing entity (SSN, phone) straddling that cut was - analyzed in two halves and leaked unmasked. Content past the last sentence - boundary is now held until a boundary or end-of-stream so each analyze call - sees the whole entity. - """ - guardrail = _OPTIONAL_PresidioPIIMasking(mock_testing=True, apply_to_output=True) - - async def mock_check_pii(text, output_parse_pii, presidio_config, request_data): - return text.replace("123 45 6789", "") - - guardrail.check_pii = mock_check_pii - - filler = "data " * 90 # >400 chars, spaces only, no .!?\n boundary - async def stream(): - yield _content_chunk(filler + "my ssn is 123 45 6789") - yield _content_chunk("", finish_reason="stop") - - collected = await _drive(guardrail, stream(), {"metadata": {}}) - reassembled = "".join(_non_empty_content(collected)) - - assert "" in reassembled - assert "123 45 6789" not in reassembled - assert "456789" not in reassembled - - -@pytest.mark.asyncio -async def test_mask_streaming_preserves_stream_on_check_pii_error(): - """ - A transient Presidio failure mid-stream must not truncate the response. The - failing run is dropped (fail closed, never leaking the PII it could not mask) - while content that already flushed safely, later chunks, and the finish chunk - still reach the client. - """ - guardrail = _OPTIONAL_PresidioPIIMasking(mock_testing=True, apply_to_output=True) - guardrail._stream_mask_margin = 4 - - async def mock_check_pii(text, output_parse_pii, presidio_config, request_data): - if "boom@example.com" in text: - raise RuntimeError("presidio down") - return text.replace("ok@example.com", "") - - guardrail.check_pii = mock_check_pii - - pieces = [ - "First ok@example.com. ", - "filler text here. ", - "Second boom@example.com. ", - "Third part here.", - ] - - async def stream(): - for piece in pieces: - yield _content_chunk(piece) - yield _content_chunk("", finish_reason="stop") - - collected = await _drive(guardrail, stream(), {"metadata": {}}) - reassembled = "".join(_non_empty_content(collected)) - - assert "" in reassembled - assert "boom@example.com" not in reassembled - assert "Third part" in reassembled, "stream truncated after a masking error" - assert any( - getattr(choice, "finish_reason", None) - for chunk in collected - for choice in getattr(chunk, "choices", []) - ), "finish chunk dropped after a masking error" - - -@pytest.mark.asyncio -async def test_mask_streaming_error_preserves_tool_call_accumulators(): - guardrail = _OPTIONAL_PresidioPIIMasking(mock_testing=True, apply_to_output=True) - - async def mock_check_pii(text, output_parse_pii, presidio_config, request_data): - if "bad@example.com" in text: - raise RuntimeError("presidio down") - return text.replace("secret@example.com", "") - - guardrail.check_pii = mock_check_pii - - def tool_chunk(*, id=None, name=None, args=None, finish_reason=None): - return ModelResponseStream( - id="chatcmpl-lit3222", - created=1, - model="gpt-4o-mini", - object="chat.completion.chunk", - choices=[ - StreamingChoices( - index=1, - delta=( - Delta( - tool_calls=[ - ChatCompletionDeltaToolCall( - index=0, - id=id, - type="function" if id else None, - function=Function(name=name, arguments=args), - ) - ] - ) - if args is not None - else Delta() - ), - finish_reason=finish_reason, - ) - ], - ) - - async def stream(): - yield tool_chunk( - id="call_1", - name="save", - args='{"email": "secret@example.com"}', - ) - yield _content_chunk("bad@example.com", index=0, finish_reason="stop") - yield tool_chunk(finish_reason="tool_calls") - - collected = await _drive(guardrail, stream(), {"metadata": {}}) - tool_args = [ - tc.function.arguments - for chunk in collected - for choice in chunk.choices - for tc in (getattr(choice.delta, "tool_calls", None) or []) - ] - - assert tool_args == ['{"email": ""}'] - - -@pytest.mark.asyncio -async def test_mask_emit_decision_caps_buffer_when_stability_fails(): - guardrail = _OPTIONAL_PresidioPIIMasking(mock_testing=True, apply_to_output=True) - guardrail._stream_mask_margin = 3 - guardrail._stream_mask_max_buffer = 6 - - async def unstable_transform(text): - return text[::-1] - - emitted, held = await guardrail._mask_emit_decision( - "abcdefghij", False, unstable_transform - ) - - assert emitted == "" - assert held == "hij" - - -@pytest.mark.parametrize( - "exception", - [ - BlockedPiiEntityError(entity_type="EMAIL_ADDRESS", guardrail_name="presidio"), - GuardrailRaisedException(guardrail_name="presidio", message="invalid response"), - ], -) -@pytest.mark.asyncio -async def test_mask_streaming_propagates_guardrail_interventions(exception): - guardrail = _OPTIONAL_PresidioPIIMasking(mock_testing=True, apply_to_output=True) - - async def mock_check_pii(text, output_parse_pii, presidio_config, request_data): - raise exception - - guardrail.check_pii = mock_check_pii - - async def stream(): - yield _content_chunk("blocked", finish_reason="stop") - - with pytest.raises(type(exception)): - await _drive(guardrail, stream(), {"metadata": {}}) - - -@pytest.mark.asyncio -async def test_mask_streaming_holds_terminator_at_chunk_end_until_whitespace(): - """ - A sentence terminator at the very end of a chunk is not a safe boundary: the - next chunk may continue the token. "Contact jane." followed by - "doe@example.com" must mask the whole email rather than flushing "jane." and - analyzing the two halves separately, which would leak the address. - """ - guardrail = _OPTIONAL_PresidioPIIMasking(mock_testing=True, apply_to_output=True) - - async def mock_check_pii(text, output_parse_pii, presidio_config, request_data): - return text.replace("jane.doe@example.com", "") - - guardrail.check_pii = mock_check_pii - - async def stream(): - yield _content_chunk("Contact jane.") - yield _content_chunk("doe@example.com") - yield _content_chunk("", finish_reason="stop") - - collected = await _drive(guardrail, stream(), {"metadata": {}}) - reassembled = "".join(_non_empty_content(collected)) - - assert "" in reassembled - assert "jane.doe@example.com" not in reassembled - assert "jane." not in reassembled - - -@pytest.mark.asyncio -async def test_mask_streaming_does_not_split_entity_across_sentence_boundary(): - """ - An entity that straddles a sentence boundary (a name with a middle initial, - an address across a newline) must not be flushed in halves. The stability - check holds the prefix until masking it alone matches masking the whole - buffer, so the straddling entity is analyzed and masked as one unit instead - of leaking the part before the boundary. - """ - guardrail = _OPTIONAL_PresidioPIIMasking(mock_testing=True, apply_to_output=True) - guardrail._stream_mask_margin = 8 - - async def mock_check_pii(text, output_parse_pii, presidio_config, request_data): - return text.replace("John Q. Public", "") - - guardrail.check_pii = mock_check_pii - - async def stream(): - yield _content_chunk("Please greet John Q. Public warmly when they arrive.") - yield _content_chunk("", finish_reason="stop") - - collected = await _drive(guardrail, stream(), {"metadata": {}}) - reassembled = "".join(_non_empty_content(collected)) - - assert "" in reassembled - assert "John Q. Public" not in reassembled - assert "John Q." not in reassembled - - -@pytest.mark.asyncio -async def test_mask_streaming_caps_runaway_buffer_without_splitting_entity(): - """ - A punctuation-free run past the buffer cap must be flushed to bound memory, - but the forced flush still cuts a margin back from the end so a PII value - split exactly at the cap (``secret@`` in one chunk, ``example.com`` in the - next) stays buffered and is masked whole instead of leaking its raw halves. - The early flush plus the terminal flush yields more than one content chunk. - """ - guardrail = _OPTIONAL_PresidioPIIMasking(mock_testing=True, apply_to_output=True) - guardrail._stream_mask_margin = 8 - guardrail._stream_mask_max_buffer = 20 - - async def mock_check_pii(text, output_parse_pii, presidio_config, request_data): - return text.replace("secret@example.com", "") - - guardrail.check_pii = mock_check_pii - - async def stream(): - yield _content_chunk("please email me at secret@") # 26 > cap, email cut - yield _content_chunk("example.com now") - yield _content_chunk("", finish_reason="stop") - - collected = await _drive(guardrail, stream(), {"metadata": {}}) - content = _non_empty_content(collected) - reassembled = "".join(content) - - assert "" in reassembled - assert "secret@example.com" not in reassembled - assert "secret@" not in reassembled - assert len(content) >= 2, f"cap did not flush before end of stream, got {content}" - - -@pytest.mark.asyncio -async def test_mask_streaming_preserves_finish_reason_when_terminal_chunk_fails(): - """ - When the masking call fails on the terminal chunk itself, that chunk must be - redacted in place (content dropped, fail closed) but keep its finish_reason, - so the client still receives the completion signal instead of a stream that - ends without one. - """ - guardrail = _OPTIONAL_PresidioPIIMasking(mock_testing=True, apply_to_output=True) - guardrail._stream_mask_margin = 4 - - async def mock_check_pii(text, output_parse_pii, presidio_config, request_data): - if "boom@example.com" in text: - raise RuntimeError("presidio down") - return text - - guardrail.check_pii = mock_check_pii - - async def stream(): - yield _content_chunk("Hello world. ") - yield _content_chunk("more text here. ") - yield _content_chunk("boom@example.com", finish_reason="stop") - - collected = await _drive(guardrail, stream(), {"metadata": {}}) - reassembled = "".join(_non_empty_content(collected)) - - assert "boom@example.com" not in reassembled - assert "Hello world" in reassembled - finish_reasons = [ - choice.finish_reason - for chunk in collected - for choice in getattr(chunk, "choices", []) - if getattr(choice, "finish_reason", None) - ] - assert "stop" in finish_reasons, "finish_reason dropped when terminal chunk failed" - - -@pytest.mark.asyncio -async def test_unmask_streaming_flushes_held_content_before_bytes(): - """ - When a held placeholder prefix is buffered and the next upstream item is a - raw SSE byte chunk, the held chat text must be flushed before the bytes so - the client never sees the byte chunk ahead of earlier content. - """ - guardrail = _OPTIONAL_PresidioPIIMasking(mock_testing=True, output_parse_pii=True) - request_data = {"metadata": {"pii_tokens": {"": "Jane"}}} - - async def stream(): - yield _content_chunk("Hi Date: Tue, 30 Jun 2026 15:25:55 -0700 Subject: [PATCH 40/79] ci(codspeed): pin benchmark runner to ubuntu-24.04 (#31746) * ci(codspeed): pin benchmark runner to ubuntu-24.04 ubuntu-latest resolves to different runner images between the BASE (main/staging) and HEAD (PR) runs, so CodSpeed reports 'Different runtime environments detected' and emits false-positive regressions (e.g. a -25.2% swing on test_completion_multi_turn in #31684, an MCP auth fix with no LLM code changes). Pinning the runner to a fixed image keeps BASE and HEAD on the same hardware so 1 ms swings on a ~3 ms benchmark stop blocking unrelated PRs. Fixes #31738 * ci(codspeed): stop running benchmarks on litellm_internal_staging The CodSpeed check flip-flops on internal staging and on PRs targeting it (e.g. "+11.75% improvement" on one run, "-25.36% regression" on the next) because the comparison flags "different runtime environments" and the benchmarks are only 3-4 ms, so sub-millisecond runner noise swings the result by 25-30%. Pinning the runner to ubuntu-24.04 in this PR helps the head side, but the internal_staging base is still recorded on the old unpinned runner, so comparisons keep flapping until the pin merges and the base is re-baselined. Until that settles, the red X's on internal staging make the OSS project look unhealthy and confuse contributors, so drop the litellm_internal_staging push and pull_request triggers and keep CodSpeed running on main only. --------- Co-authored-by: mateo-berri <277851410+mateo-berri@users.noreply.github.com> --- .github/workflows/codspeed.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/codspeed.yml b/.github/workflows/codspeed.yml index 1fad82827ff..49f1d906069 100644 --- a/.github/workflows/codspeed.yml +++ b/.github/workflows/codspeed.yml @@ -4,11 +4,9 @@ on: push: branches: - main - - litellm_internal_staging pull_request: branches: - main - - litellm_internal_staging # Allow CodSpeed to trigger backtest performance analysis # in order to generate initial data workflow_dispatch: @@ -23,7 +21,7 @@ concurrency: jobs: benchmarks: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 timeout-minutes: 15 steps: From a7d8c6f46760eae1051d92129507b17e50642234 Mon Sep 17 00:00:00 2001 From: Mateo Wang <277851410+mateo-berri@users.noreply.github.com> Date: Tue, 30 Jun 2026 15:27:48 -0700 Subject: [PATCH 41/79] test(pass-through): de-flake vertex spend-log test by routing through the proxy (#31689) * test(pass-through): de-flake vertex spend-log assertion by re-billing The vertex pass-through spend-log test asserted that a single billed generateContent call moved the global spend aggregate within a fixed wait. CI failures show the call returning a valid response with real usage, yet spend never increasing over a 240s poll. Pass-through spend logging is best-effort: the success handler is enqueued on a background worker that can drop or time out an individual event under load and never retries it, so one billed call occasionally never reaches LiteLLM_SpendLogs. Waiting longer cannot recover a dropped event; only re-issuing the call can. Re-bill the call up to a few times and require at least one to be tracked, mirroring the sibling jest test that already retries. The test still fails hard if cost tracking is actually broken, since then every call records nothing. Also sum spend across all returned days instead of matching the runner's local 'today', removing a separate UTC-rollover flake. * test(pass-through): route vertex spend-log test through proxy via direct HTTP The vertexai SDK, configured with location="global" and an http api_endpoint override, intermittently sends generateContent to the public Vertex endpoint instead of the proxy. Proxy logs from a failing run show all 46 of the test's own spend-log polls reaching the proxy while zero generateContent calls did, so LiteLLM never saw the billed call and no spend was ever recorded; re-billing through the SDK could not help because every retry bypassed the proxy too. Issue the pass-through request directly over HTTP so it always hits the proxy, minting a Google token from the same service-account credentials, then assert that the specific call's own spend log lands with spend > 0, a gemini model, and custom_llm_provider vertex_ai. A small best-effort retry covers the rare case where the background logging worker drops a single event; failing every attempt still fails hard so the test keeps its teeth if cost tracking breaks. * test(pass-through): reuse LITE_LLM_ENDPOINT and drop needless async in get_tracked_spend --- tests/pass_through_tests/test_vertex_ai.py | 175 +++++++++++---------- 1 file changed, 96 insertions(+), 79 deletions(-) diff --git a/tests/pass_through_tests/test_vertex_ai.py b/tests/pass_through_tests/test_vertex_ai.py index e8223f2219c..35cb5f49c56 100644 --- a/tests/pass_through_tests/test_vertex_ai.py +++ b/tests/pass_through_tests/test_vertex_ai.py @@ -11,6 +11,7 @@ import json import os import pytest import asyncio +import requests # Path to your service account JSON file SERVICE_ACCOUNT_FILE = "path/to/your/service-account.json" @@ -57,98 +58,114 @@ def load_vertex_ai_credentials(): os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = os.path.abspath(temp_file.name) -async def call_spend_logs_endpoint(): - """ - Call this - curl -X GET "http://0.0.0.0:4000/spend/logs" -H "Authorization: Bearer sk-1234" - """ - import datetime - import requests - - todays_date = datetime.datetime.now().strftime("%Y-%m-%d") - url = f"http://0.0.0.0:4000/global/spend/logs?api_key=best-api-key-ever" - headers = {"Authorization": f"Bearer sk-1234"} - response = requests.get(url, headers=headers) - print("response from call_spend_logs_endpoint", response) - - if response.status_code != 200: - print(f"spend logs endpoint returned {response.status_code}: {response.text}") - return None - - json_response = response.json() - - # get spend for today - """ - json response looks like this - - [{'date': '2024-08-30', 'spend': 0.00016600000000000002, 'api_key': 'best-api-key-ever'}] - """ - print("json_response", json_response) - - todays_date = datetime.datetime.now().strftime("%Y-%m-%d") - for spend_log in json_response: - if spend_log["date"] == todays_date: - return spend_log["spend"] - - LITE_LLM_ENDPOINT = "http://localhost:4000" +SPEND_LOG_API_KEY = "best-api-key-ever" -def _is_vertex_quota_error(exc: Exception) -> bool: - message = str(exc) - return ( - "429" in message - or "Too Many Requests" in message - or "RESOURCE_EXHAUSTED" in message + +def get_tracked_spend() -> float: + """ + Total spend recorded under the pass-through key in the global spend view. + + Sums every day the endpoint returns instead of matching the runner's local + "today" so a UTC date rollover mid-test can't hide a freshly billed call, and + treats an unreachable endpoint as "nothing recorded yet" (0.0). + """ + url = f"{LITE_LLM_ENDPOINT}/global/spend/logs?api_key={SPEND_LOG_API_KEY}" + response = requests.get(url, headers={"Authorization": "Bearer sk-1234"}) + if response.status_code != 200: + print(f"global spend logs endpoint returned {response.status_code}: {response.text}") + return 0.0 + + rows = response.json() + print("global spend logs rows", rows) + return sum(float(row.get("spend") or 0.0) for row in rows) + + +VERTEX_PROJECT = "litellm-ci-cd" +VERTEX_MODEL = "gemini-3.1-flash-lite" +VERTEX_GENERATE_CONTENT_URL = ( + f"{LITE_LLM_ENDPOINT}/vertex_ai/v1/projects/{VERTEX_PROJECT}" + f"/locations/global/publishers/google/models/{VERTEX_MODEL}:generateContent" +) + + +def _vertex_access_token() -> str: + import google.auth + import google.auth.transport.requests + + credentials, _ = google.auth.default( + scopes=["https://www.googleapis.com/auth/cloud-platform"] ) + credentials.refresh(google.auth.transport.requests.Request()) + return credentials.token + + +def _spend_log_for_request(call_id: str) -> dict | None: + response = requests.get( + f"{LITE_LLM_ENDPOINT}/spend/logs?request_id={call_id}", + headers={"Authorization": "Bearer sk-1234"}, + timeout=30, + ) + if response.status_code != 200: + return None + rows = response.json() + return rows[0] if rows else None + + +def _is_vertex_quota_error(response: requests.Response) -> bool: + return response.status_code == 429 or "RESOURCE_EXHAUSTED" in response.text @pytest.mark.asyncio() async def test_basic_vertex_ai_pass_through_with_spendlog(): - - spend_before = await call_spend_logs_endpoint() or 0.0 load_vertex_ai_credentials() + access_token = _vertex_access_token() - vertexai.init( - project="litellm-ci-cd", - location="global", - api_endpoint=f"{LITE_LLM_ENDPOINT}/vertex_ai", - api_transport="rest", - ) + # Drive the pass-through over HTTP instead of the vertexai SDK: the SDK intermittently + # routes generateContent to the public Vertex endpoint rather than the proxy override, + # so the call never reaches LiteLLM and no spend is logged. A direct request always + # hits the proxy. Spend logging then runs on a best-effort background worker that can + # drop a single event, so retry a few billed calls and assert that one specific call's + # spend log lands. Failing every attempt still fails hard, which is the signal we want + # if cost tracking is broken. + max_attempts = 3 + poll_seconds = 60 + poll_interval = 5 - model = GenerativeModel(model_name="gemini-3.1-flash-lite") - try: - response = model.generate_content("hi") - except Exception as exc: - if _is_vertex_quota_error(exc): + for attempt in range(1, max_attempts + 1): + response = requests.post( + VERTEX_GENERATE_CONTENT_URL, + headers={ + "Authorization": f"Bearer {access_token}", + "Content-Type": "application/json", + }, + json={"contents": [{"role": "user", "parts": [{"text": "hi"}]}]}, + timeout=60, + ) + if _is_vertex_quota_error(response): pytest.skip("Vertex AI quota exhausted") - raise + assert ( + response.status_code == 200 + ), f"vertex pass-through call failed: {response.status_code} {response.text}" - print("response", response) + call_id = response.headers.get("x-litellm-call-id") + assert call_id, "proxy response missing x-litellm-call-id header" - # Spend logging is async/batched and can lag under CI load, so poll instead of - # sleeping a fixed amount. A transient empty read is skipped, not counted as 0.0 - # spend, which would spuriously fail the assertion on an otherwise-billed call. - max_wait = 240 # total seconds to wait - poll_interval = 10 # seconds between checks - elapsed = 0 - spend_after = spend_before - while elapsed < max_wait: - await asyncio.sleep(poll_interval) - elapsed += poll_interval - latest_spend = await call_spend_logs_endpoint() - if latest_spend is None: - print(f"spend logs unavailable (elapsed={elapsed}s), retrying") - continue - spend_after = latest_spend - print(f"spend_after (elapsed={elapsed}s)", spend_after) - if spend_after > spend_before: - break + for _ in range(poll_seconds // poll_interval): + await asyncio.sleep(poll_interval) + row = _spend_log_for_request(call_id) + if row is not None and float(row.get("spend") or 0) > 0: + assert "gemini" in row["model"], f"unexpected model in spend log: {row}" + assert ( + row["custom_llm_provider"] == "vertex_ai" + ), f"unexpected provider in spend log: {row}" + return - assert ( - spend_after > spend_before - ), "Spend should be greater than before after {}s. spend_before: {}, spend_after: {}".format( - elapsed, spend_before, spend_after + print(f"attempt {attempt}: spend log for call {call_id} not found yet, re-billing") + + pytest.fail( + f"Vertex pass-through spend never recorded after {max_attempts} billed calls" ) @@ -156,7 +173,7 @@ async def test_basic_vertex_ai_pass_through_with_spendlog(): @pytest.mark.skip(reason="skip flaky test - vertex pass through streaming is flaky") async def test_basic_vertex_ai_pass_through_streaming_with_spendlog(): - spend_before = await call_spend_logs_endpoint() or 0.0 + spend_before = get_tracked_spend() print("spend_before", spend_before) load_vertex_ai_credentials() @@ -176,7 +193,7 @@ async def test_basic_vertex_ai_pass_through_streaming_with_spendlog(): print("response", response) await asyncio.sleep(20) - spend_after = await call_spend_logs_endpoint() + spend_after = get_tracked_spend() print("spend_after", spend_after) assert ( spend_after > spend_before From 41f9d8de7b16516808bbad3b5be5da9dd736e698 Mon Sep 17 00:00:00 2001 From: yucheng-berri Date: Tue, 30 Jun 2026 15:30:08 -0700 Subject: [PATCH 42/79] fix(proxy): extend banned-params + admin-clear lists for NVIDIA Riva (VERIA-493) (#31742) Two NVIDIA-Riva-specific fields consumed by the audio-transcription handler via the provider's `optional_params` passthrough were not covered by the proxy's existing banned-request-body list or the admin-config clearing list applied on `api_base` BYOK override: * `nvcf_function_id` * `use_ssl` Add both to `_BANNED_REQUEST_BODY_PARAMS` in `litellm/proxy/auth/auth_utils.py` and to the kwargs-only list in `_admin_config_fields_to_clear_on_base_override()` in `litellm/router_utils/clientside_credential_handler.py`, next to the analogous provider-specific entries already there (`aws_bedrock_*`, OCI provider fields, etc.). Same admin opt-ins as every other entry on those lists (`general_settings.allow_client_side_credentials` proxy-wide, or `configurable_clientside_auth_params` per deployment). Regression tests in `tests/test_litellm/proxy/auth/test_auth_utils.py` cover root-level rejection, the historical `api_key` bypass, both admin opt-in paths (proxy-wide and per-deployment), nested-container smuggling via the existing recursive walk, and clearing on `api_base` override. Mutation check verified. Resolves VERIA-493 --- litellm/proxy/auth/auth_utils.py | 6 + .../clientside_credential_handler.py | 7 + .../proxy/auth/test_auth_utils.py | 173 ++++++++++++++++++ 3 files changed, 186 insertions(+) diff --git a/litellm/proxy/auth/auth_utils.py b/litellm/proxy/auth/auth_utils.py index b1bce352784..2bf0acc7232 100644 --- a/litellm/proxy/auth/auth_utils.py +++ b/litellm/proxy/auth/auth_utils.py @@ -278,6 +278,12 @@ _BANNED_REQUEST_BODY_PARAMS: Tuple[str, ...] = ( "s3_endpoint_url", "sagemaker_base_url", "deployment_url", + # NVIDIA Riva fields consumed by the audio-transcription handler + # via ``optional_params``. Banned for the same reason as the + # provider-specific entries above: a caller-supplied value retargets + # the request away from the admin's pinned configuration. + "nvcf_function_id", + "use_ssl", # SDK-only field; also rejected outright in is_request_body_safe. "model_list", # Observability credentials, hosts, and project identifiers: derived diff --git a/litellm/router_utils/clientside_credential_handler.py b/litellm/router_utils/clientside_credential_handler.py index e992ef63658..8234d89e248 100644 --- a/litellm/router_utils/clientside_credential_handler.py +++ b/litellm/router_utils/clientside_credential_handler.py @@ -52,6 +52,13 @@ def _admin_config_fields_to_clear_on_base_override() -> List[str]: "oci_tenancy", "oci_key", "oci_key_file", + # NVIDIA Riva fields — consumed by + # ``litellm/llms/nvidia_riva/audio_transcription/handler.py`` via + # optional_params and not declared on CredentialLiteLLMParams. + # Admin-pinned values must not flow through on a caller-redirected + # ``api_base`` for the same reason as the OCI entries above. + "nvcf_function_id", + "use_ssl", ] return typed_fields + kwargs_only_fields diff --git a/tests/test_litellm/proxy/auth/test_auth_utils.py b/tests/test_litellm/proxy/auth/test_auth_utils.py index cd8cf10d037..d5d2d27cb7e 100644 --- a/tests/test_litellm/proxy/auth/test_auth_utils.py +++ b/tests/test_litellm/proxy/auth/test_auth_utils.py @@ -1520,6 +1520,42 @@ class TestGetDynamicLitellmParamsClearsAdminConfigOnBaseOverride: assert "vertex_credentials" not in out assert "vertex_project" not in out + def test_clears_nvcf_function_id_on_base_override(self): + from litellm.router_utils.clientside_credential_handler import ( + get_dynamic_litellm_params, + ) + + admin_params = { + "model": "nvidia_riva/parakeet", + "api_base": "grpc.nvcf.nvidia.com:443", + "api_key": "nvapi-admin", + "nvcf_function_id": "admin-pinned-function", + } + out = get_dynamic_litellm_params( + litellm_params=dict(admin_params), + request_kwargs={"api_base": "self-hosted.example.com:50051"}, + ) + assert out["api_base"] == "self-hosted.example.com:50051" + assert "nvcf_function_id" not in out + + def test_clears_use_ssl_on_base_override(self): + from litellm.router_utils.clientside_credential_handler import ( + get_dynamic_litellm_params, + ) + + admin_params = { + "model": "nvidia_riva/parakeet", + "api_base": "grpc.nvcf.nvidia.com:443", + "api_key": "nvapi-admin", + "use_ssl": True, + } + out = get_dynamic_litellm_params( + litellm_params=dict(admin_params), + request_kwargs={"api_base": "self-hosted.example.com:50051"}, + ) + assert out["api_base"] == "self-hosted.example.com:50051" + assert "use_ssl" not in out + def test_caller_resupplied_value_overrides_admin_value_on_base_override(self): # When the caller redirects ``api_base`` and *also* supplies their # own value for one of the admin fields (e.g. ``organization``), @@ -1712,6 +1748,127 @@ class TestIsRequestBodySafeBlocksBedrockProjectOverride: ) +class TestIsRequestBodySafeBlocksNVCFFunctionOverride: + """``nvcf_function_id`` is rejected as a request-body param unless the + admin opted in proxy-wide or per-deployment.""" + + def test_nvcf_function_id_in_request_body_is_rejected(self): + with pytest.raises(ValueError, match="nvcf_function_id"): + is_request_body_safe( + request_body={ + "model": "nvidia_riva/parakeet", + "nvcf_function_id": "caller-supplied", + }, + general_settings={}, + llm_router=None, + model="nvidia_riva/parakeet", + ) + + def test_nvcf_function_id_with_api_key_still_rejected(self): + with pytest.raises(ValueError, match="nvcf_function_id"): + is_request_body_safe( + request_body={ + "model": "nvidia_riva/parakeet", + "api_key": "sk-anything", + "nvcf_function_id": "caller-supplied", + }, + general_settings={}, + llm_router=None, + model="nvidia_riva/parakeet", + ) + + def test_admin_opt_in_proxy_wide_allows_nvcf_function_id(self): + assert ( + is_request_body_safe( + request_body={ + "model": "nvidia_riva/parakeet", + "nvcf_function_id": "byok-function-id", + }, + general_settings={"allow_client_side_credentials": True}, + llm_router=None, + model="nvidia_riva/parakeet", + ) + is True + ) + + def test_admin_opt_in_per_deployment_allows_nvcf_function_id(self, monkeypatch): + """The error message lists per-deployment ``configurable_clientside_auth_params`` + as a second opt-in. Cover that path too so it can't silently regress.""" + from litellm.proxy.auth import auth_utils + + monkeypatch.setattr( + auth_utils, + "_allow_model_level_clientside_configurable_parameters", + lambda model, param, request_body_value, llm_router: param == "nvcf_function_id", + ) + + assert ( + is_request_body_safe( + request_body={ + "model": "nvidia_riva/parakeet", + "nvcf_function_id": "byok-function-id", + }, + general_settings={}, + llm_router=None, + model="nvidia_riva/parakeet", + ) + is True + ) + + +class TestIsRequestBodySafeBlocksRivaUseSsl: + """``use_ssl`` is rejected as a request-body param unless the admin + opted in proxy-wide or per-deployment.""" + + def test_use_ssl_in_request_body_is_rejected(self): + with pytest.raises(ValueError, match="use_ssl"): + is_request_body_safe( + request_body={ + "model": "nvidia_riva/parakeet", + "use_ssl": False, + }, + general_settings={}, + llm_router=None, + model="nvidia_riva/parakeet", + ) + + def test_admin_opt_in_proxy_wide_allows_use_ssl(self): + assert ( + is_request_body_safe( + request_body={ + "model": "nvidia_riva/parakeet", + "use_ssl": True, + }, + general_settings={"allow_client_side_credentials": True}, + llm_router=None, + model="nvidia_riva/parakeet", + ) + is True + ) + + def test_admin_opt_in_per_deployment_allows_use_ssl(self, monkeypatch): + from litellm.proxy.auth import auth_utils + + monkeypatch.setattr( + auth_utils, + "_allow_model_level_clientside_configurable_parameters", + lambda model, param, request_body_value, llm_router: param == "use_ssl", + ) + + assert ( + is_request_body_safe( + request_body={ + "model": "nvidia_riva/parakeet", + "use_ssl": True, + }, + general_settings={}, + llm_router=None, + model="nvidia_riva/parakeet", + ) + is True + ) + + # ── is_request_body_safe nested-config recursion (VERIA-6) ──────────────────── @@ -1748,6 +1905,22 @@ class TestIsRequestBodySafeNestedConfig: model="milvus-store", ) + def test_nested_nvcf_function_id_in_metadata_blocked(self): + """Smuggling ``nvcf_function_id`` via ``metadata`` / ``extra_body`` + is the same shape as the VERIA-6 ``api_base`` bypass — must be + rejected by the recursive walk so the NVCF override gate cannot + be sidestepped with nesting.""" + with pytest.raises(ValueError, match="nvcf_function_id"): + is_request_body_safe( + request_body={ + "model": "nvidia_riva/parakeet", + "litellm_metadata": {"nvcf_function_id": "attacker-via-metadata"}, + }, + general_settings={}, + llm_router=None, + model="nvidia_riva/parakeet", + ) + def test_nested_langfuse_host_in_embedding_config_blocked(self): """The recursion uses the *full* banned-param list, not a special subset — so any flag that's banned at the root is also banned From 833406a711111e8e1347eead3aac5a831de39ea8 Mon Sep 17 00:00:00 2001 From: ryan-crabbe-berri Date: Tue, 30 Jun 2026 17:20:24 -0700 Subject: [PATCH 43/79] fix(ui): rotate model credentials in a dedicated modal so a normal save can't overwrite secrets (#28089) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(ui): add provider auth editing to the model edit view Provider API keys / auth could previously only be changed by hand-editing the raw litellm_params JSON, so there was no first-class way to rotate a model's key. Adds an Authentication section that renders the correct provider-specific fields (reusing ProviderSpecificFields) keyed off the model's custom_llm_provider; fields are blank ("leave blank to keep current") so untouched secrets are preserved and only entered values are PATCHed and encrypted at rest. Resolves LIT-3169 * refactor(ui): simplify model auth editing; fix stale credential branch Drop the onFieldsResolved/authFieldKeys round trip: the parent now resolves provider auth field keys itself via the new useProviderAuthFieldKeys hook (same metadata ProviderSpecificFields renders), removing the report-up effect and its stable-reference footgun. ProviderSpecificFields keeps only excludeKeys (real need: suppress duplicate visible inputs). Fix the stale Authentication branch: derive it from the live litellm_credential_name form value (Form.useWatch) instead of the server snapshot, so clearing/adding a credential mid-edit shows the right UI. Also skip inline auth updates entirely when a named credential is selected, so we never submit a credential name and raw inline auth together. * fix(ui): don't leak freshly-entered model auth secrets to display/console The auth values a user types are still sent in the PATCH request, but: - strip them from the locally-stored litellm_params after save so the read-only LiteLLM Params JSON doesn't render the plaintext key - remove the debug console.log in modelPatchUpdateCall that dumped the full update payload (incl. api_key / vertex_credentials) to the browser console on every model update Backend stores these encrypted and returns them masked on refetch. * fix(ui): don't require blank auth fields in model edit context Auth fields render blank ('leave blank to keep'), but required metadata (e.g. OpenAI api_key) added a required validation rule that blocked onFinish entirely — making it impossible to save any unrelated edit without re-entering the secret. Add a disableRequired prop to ProviderSpecificFields and set it in the model edit Authentication section. * fix(ui): rotate model credentials in a dedicated modal so a normal save can't overwrite secrets The model edit form seeded the read-only LiteLLM Params textarea with the whole litellm_params blob and re-sent all of it on every save. Because /model/info redacts secrets by masking them ("azur****BBCC") rather than removing them, any save re-encrypted the asterisk mask over the real value and silently destroyed credentials such as azure_ad_token, aws_session_token, watsonx token/zen_api_key and the OCI key fields. api_key, client_secret, vertex_credentials and the AWS access/secret keys were safe only because the backend strips those entirely Credential rotation now lives in a dedicated UpdateModelCredentialsModal that PATCHes only the fields the user types, decoupled from the params blob; the backend already merges partial litellm_params, so the rest of the deployment is left untouched. The general edit form drops masked values from both the textarea seed and the outbound payload, so a normal save can never carry a redacted secret Also removes the now-unused inline auth section and its excludeKeys and useProviderAuthFieldKeys plumbing, strips secret-leaking console.logs from the provider upload handler and the model-update response, and fixes a react-hooks/use-memo error that was failing the frontend-lint CI job * chore(ui): ratchet no-explicit-any lint metric to 2013 Removing the credential-echoing console.log (and its info: any param) from the provider upload handler dropped the tracked count by one; update the committed baseline so the Check lint budgets CI step is not stale * refactor(ui): scope the model credential modal to api-key rotation only Narrows UpdateModelCredentialsModal to a single API Key field. On submit it PATCHes only { api_key }, so the backend merge leaves every other deployment param untouched; a model authed via azure_ad_token, AWS keys, or a Vertex JSON won't have anything to rotate here yet, which is the intended scope for now. Drops the multi-field provider rendering this added earlier, which also removes the now-unused disableRequired prop from ProviderSpecificFields and reverts that shared component to its prior shape. The "Update API Key" trigger button is now an antd Button rather than a TremorButton, so the feature introduces no tremor. * refactor(ui): convert the model detail toolbar buttons from tremor to antd Switches Test Connection, Re-use Credentials and Delete Model to antd Button so the toolbar matches the Update API Key button and no longer mixes libraries; Delete Model uses antd's danger styling instead of hand-rolled red classes * style(ui): make the api-key modal submit button primary and drop the Need Help link --- ui/litellm-dashboard/eslint-metrics.json | 2 +- .../add_model/provider_specific_fields.tsx | 17 ---- .../src/components/model_info_view.test.tsx | 45 ++++++++++ .../src/components/model_info_view.tsx | 74 +++++++++++++---- .../src/components/networking.tsx | 5 +- .../update_model_credentials_modal.test.tsx | 83 +++++++++++++++++++ .../update_model_credentials_modal.tsx | 76 +++++++++++++++++ 7 files changed, 265 insertions(+), 37 deletions(-) create mode 100644 ui/litellm-dashboard/src/components/update_model_credentials_modal.test.tsx create mode 100644 ui/litellm-dashboard/src/components/update_model_credentials_modal.tsx diff --git a/ui/litellm-dashboard/eslint-metrics.json b/ui/litellm-dashboard/eslint-metrics.json index 09ad247391b..92c5a991eb6 100644 --- a/ui/litellm-dashboard/eslint-metrics.json +++ b/ui/litellm-dashboard/eslint-metrics.json @@ -1,5 +1,5 @@ { - "@typescript-eslint/no-explicit-any": 2014, + "@typescript-eslint/no-explicit-any": 2013, "complexity": 126, "max-depth": 61 } diff --git a/ui/litellm-dashboard/src/components/add_model/provider_specific_fields.tsx b/ui/litellm-dashboard/src/components/add_model/provider_specific_fields.tsx index 045a9b0c1b6..205292edfb4 100644 --- a/ui/litellm-dashboard/src/components/add_model/provider_specific_fields.tsx +++ b/ui/litellm-dashboard/src/components/add_model/provider_specific_fields.tsx @@ -212,9 +212,7 @@ const ProviderSpecificFields: React.FC = ({ selecte reader.onload = (e) => { if (e.target) { const jsonStr = e.target.result as string; - console.log(`Setting field value from JSON, length: ${jsonStr.length}`); form.setFieldsValue({ vertex_credentials: jsonStr }); - console.log("Form values after setting:", form.getFieldsValue()); } }; reader.readAsText(file); @@ -222,14 +220,6 @@ const ProviderSpecificFields: React.FC = ({ selecte // Prevent upload return false; }, - onChange(info: any) { - console.log("Upload onChange triggered in ProviderSpecificFields"); - console.log("Current form values:", form.getFieldsValue()); - - if (info.file.status !== "uploading") { - console.log(info.file, info.fileList); - } - }, }; return ( @@ -271,16 +261,9 @@ const ProviderSpecificFields: React.FC = ({ selecte { - // First call the original onChange if (uploadProps?.onChange) { uploadProps.onChange(info); } - - // Check the field value after a short delay - setTimeout(() => { - const value = form.getFieldValue(field.key); - console.log(`${field.key} value after upload:`, JSON.stringify(value)); - }, 500); }} > }>Click to Upload diff --git a/ui/litellm-dashboard/src/components/model_info_view.test.tsx b/ui/litellm-dashboard/src/components/model_info_view.test.tsx index d91d5ec307e..2546601b4db 100644 --- a/ui/litellm-dashboard/src/components/model_info_view.test.tsx +++ b/ui/litellm-dashboard/src/components/model_info_view.test.tsx @@ -633,6 +633,51 @@ describe("ModelInfoView", () => { expect(updatePayload.litellm_params).not.toHaveProperty("output_cost_per_token"); }); + it("never re-sends a masked secret on save (regression: masked auth value must not overwrite the real secret)", async () => { + // /model/info redacts secrets by masking (e.g. "azur****BBCC"), not removing them. + // A plain save re-PATCHes the whole litellm_params blob; if the masked value were + // sent, the backend would encrypt the asterisks over the real azure_ad_token and + // silently destroy the credential. The edit form must strip masked values entirely. + const maskedSecret = "azur********************************************BBCC"; + const maskedModelData = { + ...defaultModelData, + litellm_params: { + model: "azure/gpt-4o", + api_base: "https://example-az.openai.azure.com", + custom_llm_provider: "azure", + azure_ad_token: maskedSecret, + }, + }; + mockUseModelsInfo.mockReturnValue({ + data: { data: [maskedModelData] }, + isLoading: false, + error: null, + }); + mockModelInfoV1Call.mockResolvedValue({ data: [maskedModelData] }); + + const user = userEvent.setup(); + render(, { wrapper }); + + await waitFor(() => { + expect(screen.getByRole("button", { name: /edit settings/i })).toBeInTheDocument(); + }); + await user.click(screen.getByRole("button", { name: /edit settings/i })); + + await waitFor(() => { + expect(screen.getByRole("button", { name: /save changes/i })).toBeInTheDocument(); + }); + await user.click(screen.getByRole("button", { name: /save changes/i })); + + await waitFor(() => { + expect(mockModelPatchUpdateCall).toHaveBeenCalled(); + }); + + const updatePayload = mockModelPatchUpdateCall.mock.calls[0][1]; + expect(updatePayload.litellm_params.azure_ad_token).not.toBe(maskedSecret); + // No masked value may appear anywhere in the outbound params. + expect(JSON.stringify(updatePayload.litellm_params)).not.toContain("**"); + }); + it("should display health check model field for wildcard models", async () => { const wildcardModelData = { ...defaultModelData, diff --git a/ui/litellm-dashboard/src/components/model_info_view.tsx b/ui/litellm-dashboard/src/components/model_info_view.tsx index 66a00b9bbe3..45c5b0fd9b6 100644 --- a/ui/litellm-dashboard/src/components/model_info_view.tsx +++ b/ui/litellm-dashboard/src/components/model_info_view.tsx @@ -1,5 +1,6 @@ import { useModelCostMap } from "@/app/(dashboard)/hooks/models/useModelCostMap"; import { useModelHub, useModelsInfo } from "@/app/(dashboard)/hooks/models/useModels"; +import { useQueryClient } from "@tanstack/react-query"; import { transformModelData } from "@/app/(dashboard)/models-and-endpoints/utils/modelDataTransformer"; import { InfoCircleOutlined } from "@ant-design/icons"; import { ArrowLeftIcon, KeyIcon, RefreshIcon, TrashIcon } from "@heroicons/react/outline"; @@ -40,6 +41,7 @@ import { testConnectionRequest, } from "./networking"; import { getProviderLogoAndName } from "./provider_info_helpers"; +import UpdateModelCredentialsModal from "./update_model_credentials_modal"; import NumericalInput from "./shared/numerical_input"; import { Tag } from "./tag_management/types"; import { getDisplayModelName } from "./view_model/model_name_display"; @@ -54,6 +56,18 @@ interface ModelInfoViewProps { modelAccessGroups: string[] | null; } +// The /model/info response redacts secrets by masking them (e.g. "sk-1****2345"), +// not by removing them. The edit form must never echo a masked value back on save: +// the backend would encrypt the asterisks and overwrite the real secret. A run of +// 2+ mask chars only appears in masker output (real config — incl. wildcard model +// names like "openai/*" — carries at most a single "*"), so this reliably detects a +// redacted value without a provider-metadata lookup. API-key rotation goes through +// UpdateModelCredentialsModal instead, which sends only the new key. +const isMaskedSecret = (value: unknown): boolean => typeof value === "string" && /\*{2,}/.test(value); + +const stripMaskedSecrets = (params: Record): Record => + Object.fromEntries(Object.entries(params).filter(([, value]) => !isMaskedSecret(value))); + export default function ModelInfoView({ modelId, onClose, @@ -64,10 +78,12 @@ export default function ModelInfoView({ modelAccessGroups, }: ModelInfoViewProps) { const [form] = Form.useForm(); + const queryClient = useQueryClient(); const [localModelData, setLocalModelData] = useState(null); const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false); const [deleteLoading, setDeleteLoading] = useState(false); const [isCredentialModalOpen, setIsCredentialModalOpen] = useState(false); + const [isUpdateCredentialsModalOpen, setIsUpdateCredentialsModalOpen] = useState(false); const [isDirty, setIsDirty] = useState(false); const [isSaving, setIsSaving] = useState(false); const [isEditing, setIsEditing] = useState(false); @@ -351,9 +367,15 @@ export default function ModelInfoView({ return; } + // Final guard: never PATCH a redacted secret. The /model/info snapshot that + // seeds this form masks secrets, and any save re-sends the whole params blob; + // without this strip a masked value would be re-encrypted over the real secret. + // Credential rotation has its own dedicated path (UpdateModelCredentialsModal). + const safeLitellmParams = stripMaskedSecrets(updatedLitellmParams); + const updateData = { model_name: values.model_name, - litellm_params: updatedLitellmParams, + litellm_params: safeLitellmParams, model_info: updatedModelInfo, }; @@ -363,7 +385,7 @@ export default function ModelInfoView({ ...localModelData, model_name: values.model_name, litellm_model_name: values.litellm_model_name, - litellm_params: updatedLitellmParams, + litellm_params: safeLitellmParams, model_info: updatedModelInfo, }; @@ -511,36 +533,44 @@ export default function ModelInfoView({
- } onClick={handleTestConnection} className="flex items-center gap-2" data-testid="test-connection-button" > Test Connection - + - } + onClick={() => setIsUpdateCredentialsModalOpen(true)} + className="flex items-center" + disabled={!canEditModel} + data-testid="update-api-key-button" + > + Update API Key + + +
@@ -715,7 +745,7 @@ export default function ModelInfoView({ litellm_extra_params: JSON.stringify( Object.fromEntries( Object.entries(localModelData.litellm_params || {}).filter( - ([key]) => key !== "litellm_credential_name", + ([key, value]) => key !== "litellm_credential_name" && !isMaskedSecret(value), ), ), null, @@ -1375,6 +1405,18 @@ export default function ModelInfoView({ )} + {isUpdateCredentialsModalOpen && accessToken && ( + setIsUpdateCredentialsModalOpen(false)} + accessToken={accessToken} + modelId={modelId} + onUpdated={() => { + queryClient.invalidateQueries({ queryKey: ["models", "list"] }); + }} + /> + )} + {/* Edit Auto Router Modal */} { try { - console.log("Form Values in modelUpateCall:", formValues); // Log the form values before making the API call - + // Intentionally not logging the payload: it can contain freshly-entered + // provider secrets (api_key, vertex_credentials, AWS creds). const url = proxyBaseUrl ? `${proxyBaseUrl}/model/${modelId}/update` : `/model/${modelId}/update`; const response = await fetch(url, { method: "PATCH", @@ -2802,7 +2802,6 @@ export const modelPatchUpdateCall = async ( throw new Error("Network response was not ok"); } const data = await response.json(); - console.log("Update model Response:", data); return data; // Handle success - you might want to update some state or UI based on the created key } catch (error) { diff --git a/ui/litellm-dashboard/src/components/update_model_credentials_modal.test.tsx b/ui/litellm-dashboard/src/components/update_model_credentials_modal.test.tsx new file mode 100644 index 00000000000..ab18ae71203 --- /dev/null +++ b/ui/litellm-dashboard/src/components/update_model_credentials_modal.test.tsx @@ -0,0 +1,83 @@ +import { render, screen, waitFor } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import UpdateModelCredentialsModal from "./update_model_credentials_modal"; +import * as networking from "./networking"; + +vi.mock("./networking", async () => { + const actual = await vi.importActual("./networking"); + return { + ...actual, + modelPatchUpdateCall: vi.fn().mockResolvedValue({}), + }; +}); + +vi.mock("./molecules/notifications_manager", () => ({ + default: { success: vi.fn(), error: vi.fn(), info: vi.fn(), fromBackend: vi.fn() }, +})); + +const mockModelPatchUpdateCall = vi.mocked(networking.modelPatchUpdateCall); + +beforeAll(() => { + Object.defineProperty(window, "matchMedia", { + writable: true, + value: (query: string) => ({ + matches: false, + media: query, + onchange: null, + addListener: () => {}, + removeListener: () => {}, + addEventListener: () => {}, + removeEventListener: () => {}, + dispatchEvent: () => false, + }), + }); +}); + +const renderModal = (overrides: Partial[0]> = {}) => + render( + , + ); + +describe("UpdateModelCredentialsModal", () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + + it("sends a minimal PATCH with only the new api_key", async () => { + const user = userEvent.setup(); + const onUpdated = vi.fn(); + const onCancel = vi.fn(); + renderModal({ onUpdated, onCancel }); + + await user.type(screen.getByLabelText(/new api key/i), "sk-rotated-9988"); + await user.click(screen.getByRole("button", { name: /update api key/i })); + + await waitFor(() => expect(mockModelPatchUpdateCall).toHaveBeenCalledTimes(1)); + const [token, payload, modelId] = mockModelPatchUpdateCall.mock.calls[0]; + expect(token).toBe("test-token"); + expect(modelId).toBe("model-123"); + // Exactly the new key plus the id — nothing else from the deployment. + expect(payload).toEqual({ litellm_params: { api_key: "sk-rotated-9988" }, model_info: { id: "model-123" } }); + expect(onUpdated).toHaveBeenCalledTimes(1); + expect(onCancel).toHaveBeenCalledTimes(1); + }); + + it("does not call the update API when the field is left blank", async () => { + const user = userEvent.setup(); + renderModal(); + + await user.click(screen.getByRole("button", { name: /update api key/i })); + + // Required-field validation blocks submit; give it a tick then assert no call. + await new Promise((resolve) => setTimeout(resolve, 50)); + expect(mockModelPatchUpdateCall).not.toHaveBeenCalled(); + }); +}); diff --git a/ui/litellm-dashboard/src/components/update_model_credentials_modal.tsx b/ui/litellm-dashboard/src/components/update_model_credentials_modal.tsx new file mode 100644 index 00000000000..238207a4aa8 --- /dev/null +++ b/ui/litellm-dashboard/src/components/update_model_credentials_modal.tsx @@ -0,0 +1,76 @@ +import { Button, Form, Input, Modal, Typography } from "antd"; +import { useState } from "react"; +import { modelPatchUpdateCall } from "./networking"; +import NotificationsManager from "./molecules/notifications_manager"; + +const { Text } = Typography; + +interface UpdateModelCredentialsModalProps { + open: boolean; + onCancel: () => void; + accessToken: string; + modelId: string; + onUpdated: () => void; +} + +export default function UpdateModelCredentialsModal({ + open, + onCancel, + accessToken, + modelId, + onUpdated, +}: UpdateModelCredentialsModalProps) { + const [form] = Form.useForm(); + const [isSaving, setIsSaving] = useState(false); + + const close = () => { + form.resetFields(); + onCancel(); + }; + + const handleSubmit = async (values: { api_key?: string }) => { + const apiKey = values.api_key?.trim(); + if (!apiKey) { + NotificationsManager.fromBackend("Enter a new API key"); + return; + } + setIsSaving(true); + try { + await modelPatchUpdateCall( + accessToken, + { litellm_params: { api_key: apiKey }, model_info: { id: modelId } }, + modelId, + ); + NotificationsManager.success("API key updated"); + form.resetFields(); + onUpdated(); + onCancel(); + } catch (error) { + console.error("Error updating API key:", error); + NotificationsManager.fromBackend("Failed to update API key"); + } finally { + setIsSaving(false); + } + }; + + return ( + + + Rotate this model's API key. Only the new key is sent; the rest of the deployment is left untouched. + + + + + +
+ + +
+ +
+ ); +} From 2860dad5145772070c6607883989454dbb2943d4 Mon Sep 17 00:00:00 2001 From: yucheng-berri Date: Tue, 30 Jun 2026 18:17:56 -0700 Subject: [PATCH 44/79] feat(proxy): audit default user settings updates (#31753) * feat(proxy): audit default user settings updates Adds audit logging for the customer-impacting path: PATCH /update/internal_user_settings, which is what the admin dashboard hits when an admin changes Default User Settings and which today leaves no record of who changed what. Introduces the small framework that future system-wide settings audits will share: a CONFIG_TABLE_NAME enum value, a create_config_audit_log helper that reuses the existing create_object_audit_log path (so the enterprise gate and store_audit_logs flag still apply), and a _dump_redacted_config helper that strips secret leaves before the row is written using the same matcher /config/field/info applies for non-admins. The helper handles environment_variables as a special case where every value is redacted, since that section carries credentials under non-secret-looking uppercase keys (e.g. DATABASE_URL). Only update_internal_user_settings is wired up in this change. Coverage for the other LiteLLM_Config writers (/config/update sections, /config/field/update, /config/field/delete, /config/callback/delete, default_team_settings, mcp_semantic_filter, allowed_ip, sso_settings, ui_theme, ui_settings) is intentionally a follow-up so each can be verified live against the credential-bearing fields it actually carries. The audit-actor parameter on _update_litellm_setting is optional today so non-audited callers keep working unchanged; the follow-up will make it required once every caller is wired up. * fix(proxy): make audit-log call non-blocking and serializer defensive Greptile review of #31753 surfaced three robustness issues with the audit-log call path. The settings change always commits; these fixes prevent post-commit audit failures from surfacing as 500 responses. Switch the audit-log call in _update_litellm_setting from a blocking await to asyncio.create_task, matching the create_object_audit_log pattern every other call site uses (model_management_endpoints etc.). A transient prisma blip or a JSON serialization error in the audit row no longer turns a successful save_config into a 500 the caller sees. Add default=str to both json.dumps calls in _dump_redacted_config so a YAML-loaded value with a non-JSON-native leaf (datetime, custom object) serializes cleanly. The sibling audit-log serializers in team_endpoints.py already pass default=str for the same reason. Tighten the redact_all_values branch to redact wholesale for non-dict inputs rather than silently falling through to the key-name matcher; defensive against a future change that stores a section as a list or scalar. Each fix has a regression test mutation-checked against reverting the fix. * refactor(proxy): drop unreachable non-dict redact_all_values branch The defensive non-dict fallback in _dump_redacted_config emitted json.dumps("REDACTED") which, if ever hit, would crash LiteLLM_AuditLogs construction (mask_api_keys validator calls json.loads on the already- parsed bare string). Reachability is zero: redact_all_values is True only for param_name=="environment_variables", which is always a dict. Delete the dead branch and its test rather than ship provably-wrong defensive code with a test that green-lights it. --- litellm/proxy/_types.py | 1 + litellm/proxy/proxy_server.py | 46 +++++++- .../proxy_setting_endpoints.py | 28 ++++- tests/test_litellm/proxy/test_proxy_server.py | 106 ++++++++++++++++++ .../test_proxy_setting_endpoints.py | 91 +++++++++++++++ 5 files changed, 270 insertions(+), 2 deletions(-) diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index 5fe17d79ab5..a6ef7de07ae 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -189,6 +189,7 @@ class LitellmTableNames(str, enum.Enum): TOOL_TABLE_NAME = "LiteLLM_ToolTable" CACHE_CONFIG_TABLE_NAME = "LiteLLM_CacheConfig" CONFIG_OVERRIDES_TABLE_NAME = "LiteLLM_ConfigOverrides" + CONFIG_TABLE_NAME = "LiteLLM_Config" class Litellm_EntityType(enum.Enum): diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 57814de6e3f..0158f601d32 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -425,7 +425,10 @@ from litellm.proxy.management_endpoints.user_agent_analytics_endpoints import ( from litellm.proxy.management_endpoints.workflow_management_endpoints import ( router as workflow_management_router, ) -from litellm.proxy.management_helpers.audit_logs import create_audit_log_for_update +from litellm.proxy.management_helpers.audit_logs import ( + create_audit_log_for_update, + create_object_audit_log, +) from litellm.proxy.memory.memory_endpoints import router as memory_router from litellm.proxy.plugin_routes import ( router as plugin_router, @@ -14228,6 +14231,47 @@ def _redact_general_setting_value(field_name: str, value: JsonValue, is_full_adm return value +def _dump_redacted_config(value: Optional[JsonValue], *, redact_all_values: bool = False) -> Optional[str]: + # `default=str` matches the sibling audit-log serializers in + # team_endpoints.py and the LiteLLM_AuditLogs validator, so a YAML-loaded + # value with a non-JSON-native leaf (datetime, custom object) cannot turn + # an audit write into a 500. + if value is None: + return None + if redact_all_values and isinstance(value, dict): + return json.dumps({key: "REDACTED" for key in value}, default=str) + return json.dumps(_redact_secret_values_in_obj(value), default=str) + + +async def create_config_audit_log( + param_name: str, + action: AUDIT_ACTIONS, + before_value: Optional[JsonValue], + after_value: Optional[JsonValue], + user_api_key_dict: UserAPIKeyAuth, + table_name: LitellmTableNames = LitellmTableNames.CONFIG_TABLE_NAME, +) -> None: + """Record a system-wide settings change in LiteLLM_AuditLog. + + Secret leaves are redacted before the row is written. environment_variables + hold arbitrary credentials under non-secret-looking uppercase keys (e.g. + DATABASE_URL), so every value in that section is redacted rather than + relying on key-name matching; other sections reuse the same matcher + /config/field/info applies for non-admins. + """ + redact_all_values = param_name == "environment_variables" + await create_object_audit_log( + object_id=param_name, + action=action, + table_name=table_name, + before_value=_dump_redacted_config(before_value, redact_all_values=redact_all_values), + after_value=_dump_redacted_config(after_value, redact_all_values=redact_all_values), + user_api_key_dict=user_api_key_dict, + litellm_changed_by=None, + litellm_proxy_admin_name=LITELLM_PROXY_ADMIN_NAME, + ) + + @router.get( "/config/field/info", tags=["config.yaml"], diff --git a/litellm/proxy/ui_crud_endpoints/proxy_setting_endpoints.py b/litellm/proxy/ui_crud_endpoints/proxy_setting_endpoints.py index e4f68a1e9db..1be17c86123 100644 --- a/litellm/proxy/ui_crud_endpoints/proxy_setting_endpoints.py +++ b/litellm/proxy/ui_crud_endpoints/proxy_setting_endpoints.py @@ -1,4 +1,5 @@ #### CRUD ENDPOINTS for UI Settings ##### +import asyncio import json from typing import Any, Dict, List, Optional, Set, Tuple, Type, Union from urllib.parse import urlparse @@ -553,6 +554,7 @@ async def _update_litellm_setting( settings: Union[DefaultInternalUserParams, DefaultTeamSSOParams, MCPSemanticFilterSettings], settings_key: str, success_message: str, + user_api_key_dict: Optional[UserAPIKeyAuth] = None, ): """ Common utility function to update `litellm_settings` in both memory and config. @@ -561,8 +563,15 @@ async def _update_litellm_setting( settings: The settings object to update settings_key: The key in litellm_settings to update success_message: Message to return on success + user_api_key_dict: The acting admin, recorded as the audit-log actor. + Optional today so callers that have not been wired for auditing + keep working; the audit row is only written when an actor is passed. """ - from litellm.proxy.proxy_server import proxy_config, store_model_in_db + from litellm.proxy.proxy_server import ( + create_config_audit_log, + proxy_config, + store_model_in_db, + ) if store_model_in_db is not True: raise HTTPException( @@ -576,6 +585,7 @@ async def _update_litellm_setting( # because get_config() may overwrite litellm. with stale DB values # via LITELLM_SETTINGS_SAFE_DB_OVERRIDES. config = await proxy_config.get_config() + before_value = config.get("litellm_settings", {}).get(settings_key) # Update the in-memory settings (after get_config to avoid stale override) setattr(litellm, settings_key, in_memory_var) @@ -589,6 +599,21 @@ async def _update_litellm_setting( # Save the updated config await proxy_config.save_config(new_config=config) + if user_api_key_dict is not None: + # Fire-and-forget so an audit-log failure (transient DB blip, etc.) + # never surfaces as a 500 after save_config has already committed, + # matching the create_object_audit_log pattern used elsewhere + # (e.g. model_management_endpoints). + asyncio.create_task( + create_config_audit_log( + param_name=settings_key, + action="updated", + before_value=before_value, + after_value=in_memory_var, + user_api_key_dict=user_api_key_dict, + ) + ) + return { "message": success_message, "status": "success", @@ -619,6 +644,7 @@ async def update_internal_user_settings( settings=settings, settings_key="default_internal_user_params", success_message="Internal user settings updated successfully", + user_api_key_dict=user_api_key_dict, ) diff --git a/tests/test_litellm/proxy/test_proxy_server.py b/tests/test_litellm/proxy/test_proxy_server.py index 019a7dc90d2..dc35d71ccbd 100644 --- a/tests/test_litellm/proxy/test_proxy_server.py +++ b/tests/test_litellm/proxy/test_proxy_server.py @@ -8658,3 +8658,109 @@ def test_config_field_info_returns_raw_secrets_for_full_admin(monkeypatch): ) finally: app.dependency_overrides.clear() + + +def _fake_prisma_with_config(existing_param_value): + """MagicMock prisma whose litellm_config row returns existing_param_value and + whose litellm_auditlog.create records the written audit row.""" + fake = MagicMock() + config_row = MagicMock() + config_row.param_value = existing_param_value + fake.db.litellm_config.find_first = AsyncMock(return_value=config_row) + fake.db.litellm_config.upsert = AsyncMock(return_value=config_row) + fake.db.litellm_auditlog.create = AsyncMock() + return fake + + +def test_dump_redacted_config_redacts_secret_leaves(): + from litellm.proxy.proxy_server import _dump_redacted_config + + assert _dump_redacted_config(None) is None + + restored = json.loads( + _dump_redacted_config( + { + "api_key": "sk-leak", + "model": "gpt-4", + "nested": {"aws_secret_access_key": "abc", "region": "us-east-1"}, + } + ) + ) + assert restored["api_key"] == "REDACTED" + assert restored["model"] == "gpt-4" + assert restored["nested"]["aws_secret_access_key"] == "REDACTED" + assert restored["nested"]["region"] == "us-east-1" + + +@pytest.mark.asyncio +async def test_create_config_audit_log_writes_redacted_entry(monkeypatch): + import litellm.proxy.proxy_server as proxy_server_module + from litellm.proxy._types import LitellmTableNames + from litellm.proxy.proxy_server import create_config_audit_log + + fake = _fake_prisma_with_config({}) + monkeypatch.setattr(proxy_server_module, "prisma_client", fake) + monkeypatch.setattr(proxy_server_module, "premium_user", True) + monkeypatch.setattr(litellm, "store_audit_logs", True) + + caller = UserAPIKeyAuth(api_key="hashed-key-abc", user_id="admin-7") + await create_config_audit_log( + "router_settings", + "updated", + {"routing_strategy": "simple-shuffle", "api_key": "sk-old"}, + {"routing_strategy": "latency-based", "api_key": "sk-new"}, + caller, + ) + + fake.db.litellm_auditlog.create.assert_awaited_once() + written = fake.db.litellm_auditlog.create.call_args.kwargs["data"] + assert written["table_name"] == LitellmTableNames.CONFIG_TABLE_NAME.value + assert written["object_id"] == "router_settings" + assert written["action"] == "updated" + assert written["changed_by"] == "admin-7" + assert written["changed_by_api_key"] == "hashed-key-abc" + + before = json.loads(written["before_value"]) + after = json.loads(written["updated_values"]) + assert before["routing_strategy"] == "simple-shuffle" + assert after["routing_strategy"] == "latency-based" + assert "sk-old" not in written["before_value"] + assert "sk-new" not in written["updated_values"] + assert before["api_key"] != "sk-old" + assert after["api_key"] != "sk-new" + + +@pytest.mark.asyncio +async def test_create_config_audit_log_noop_when_store_audit_logs_disabled(monkeypatch): + import litellm.proxy.proxy_server as proxy_server_module + from litellm.proxy.proxy_server import create_config_audit_log + + fake = _fake_prisma_with_config({}) + monkeypatch.setattr(proxy_server_module, "prisma_client", fake) + monkeypatch.setattr(proxy_server_module, "premium_user", True) + monkeypatch.setattr(litellm, "store_audit_logs", False) + + await create_config_audit_log( + "router_settings", + "updated", + {}, + {"a": 1}, + UserAPIKeyAuth(api_key="k", user_id="u"), + ) + fake.db.litellm_auditlog.create.assert_not_called() + + +def test_dump_redacted_config_serializes_non_json_native_values(): + """YAML-loaded config can contain datetime/date/custom values that plain + json.dumps refuses. Without default=str the audit write turns into a 500 + after the config change has already committed; the sibling audit-log + serializers in team_endpoints.py use default=str for the same reason.""" + from datetime import datetime, timezone + + from litellm.proxy.proxy_server import _dump_redacted_config + + out = _dump_redacted_config({"updated_at": datetime(2026, 6, 30, tzinfo=timezone.utc)}) + assert out is not None + restored = json.loads(out) + assert "2026-06-30" in restored["updated_at"] + diff --git a/tests/test_litellm/proxy/ui_crud_endpoints/test_proxy_setting_endpoints.py b/tests/test_litellm/proxy/ui_crud_endpoints/test_proxy_setting_endpoints.py index ae217aca16e..7a586f758f4 100644 --- a/tests/test_litellm/proxy/ui_crud_endpoints/test_proxy_setting_endpoints.py +++ b/tests/test_litellm/proxy/ui_crud_endpoints/test_proxy_setting_endpoints.py @@ -1869,3 +1869,94 @@ class TestProxySettingEndpoints: assert "field_schema" in data assert "properties" in data["field_schema"] assert "role_mappings" in data["field_schema"]["properties"] + + +def test_update_internal_user_settings_writes_audit_log(mock_proxy_config, monkeypatch): + """Regression for the reported scenario: an admin changes Default User + Settings from the dashboard, which issues PATCH /update/internal_user_settings + (NOT /config/update). An audit row must record who changed it and what + changed.""" + from unittest.mock import AsyncMock, MagicMock + + import litellm + import litellm.proxy.proxy_server as proxy_server_module + from litellm.proxy._types import UserAPIKeyAuth + from litellm.proxy.auth.user_api_key_auth import user_api_key_auth + + audit_create = AsyncMock() + fake_prisma = MagicMock() + fake_prisma.db.litellm_auditlog.create = audit_create + + monkeypatch.setattr(proxy_server_module, "prisma_client", fake_prisma) + monkeypatch.setattr(proxy_server_module, "premium_user", True) + monkeypatch.setattr("litellm.proxy.proxy_server.store_model_in_db", True) + monkeypatch.setattr(litellm, "store_audit_logs", True) + monkeypatch.setattr(litellm, "default_internal_user_params", {}) + + async def _admin_auth(): + return UserAPIKeyAuth( + user_id="audit-admin", + api_key="hashed-admin-key", + user_role=LitellmUserRoles.PROXY_ADMIN, + ) + + app.dependency_overrides[user_api_key_auth] = _admin_auth + try: + resp = client.patch( + "/update/internal_user_settings", + json={"max_budget": 999.0, "models": ["gpt-4"]}, + ) + assert resp.status_code == 200, resp.text + + audit_create.assert_awaited_once() + written = audit_create.await_args.kwargs["data"] + assert written["object_id"] == "default_internal_user_params" + assert written["action"] == "updated" + assert written["table_name"] == "LiteLLM_Config" + assert written["changed_by"] == "audit-admin" + assert written["changed_by_api_key"] == "hashed-admin-key" + + before = json.loads(written["before_value"]) + after = json.loads(written["updated_values"]) + assert before["max_budget"] == 100.0 + assert after["max_budget"] == 999.0 + finally: + app.dependency_overrides.pop(user_api_key_auth, None) + + +def test_update_internal_user_settings_returns_200_when_audit_write_raises( + mock_proxy_config, monkeypatch +): + """The settings change is already committed by save_config, so an + audit-log failure must never surface as a 500. Scheduling via + asyncio.create_task keeps the audit call off the request path; this + test asserts that contract by making the audit helper raise.""" + import litellm + import litellm.proxy.proxy_server as proxy_server_module + from litellm.proxy._types import UserAPIKeyAuth + from litellm.proxy.auth.user_api_key_auth import user_api_key_auth + + monkeypatch.setattr("litellm.proxy.proxy_server.store_model_in_db", True) + monkeypatch.setattr(litellm, "default_internal_user_params", {}) + + async def _raise(**_kwargs): + raise RuntimeError("audit prisma blip") + + monkeypatch.setattr(proxy_server_module, "create_config_audit_log", _raise) + + async def _admin_auth(): + return UserAPIKeyAuth( + user_id="audit-admin", + api_key="hashed-admin-key", + user_role=LitellmUserRoles.PROXY_ADMIN, + ) + + app.dependency_overrides[user_api_key_auth] = _admin_auth + try: + resp = client.patch( + "/update/internal_user_settings", json={"max_budget": 42.0} + ) + assert resp.status_code == 200, resp.text + assert resp.json()["status"] == "success" + finally: + app.dependency_overrides.pop(user_api_key_auth, None) From ada9ef88ac1a18d7c3073bad951cea9be4a3f981 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 30 Jun 2026 18:36:40 -0700 Subject: [PATCH 45/79] fix(websearch): websearch_interception agentic loop fixes for chat completions and anthropic messages (#31669) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(websearch): wire chat completion agentic loop to correct hooks maybe_run_chat_completion_agentic_loop was calling async_should_run_agentic_loop (Anthropic format) and async_run_agentic_loop (Anthropic path) instead of the chat-completion variants. This meant WebSearchInterceptionLogger never intercepted chat completion requests — the LLM returned a litellm_web_search tool_call but the agentic loop never executed, so the raw tool_calls response was returned to the caller. Fix: gate on async_should_run_chat_completion_agentic_loop override, call that hook and async_build_chat_completion_agentic_loop_plan / async_run_chat_completion_agentic_loop in the execution path. Regression test added. * fix(websearch): strip tool_choice from follow-up request When the original request forces tool_choice to litellm_web_search, the follow-up request after search execution inherited that tool_choice, causing the model to call the search tool again instead of synthesizing an answer from the results. * fix(websearch): inject api_key into agentic hook kwargs for anthropic messages Follow-up calls inside async_run_agentic_loop (e.g. websearch interception's synthesis call after executing Exa/Perplexity searches) were missing api_key because the named api_key param in async_anthropic_messages_handler was never merged into the kwargs dict forwarded downstream. Result: every /v1/messages websearch follow-up failed with "x-api-key header is required" and the caller received the raw tool_use response instead of the synthesized answer. * ci: trigger CI run * fix(websearch): support unified agentic hooks alongside chat-completion-specific hooks CodeInterpreterInterceptionLogger uses async_should_run_agentic_loop with _agentic_loop_api_surface to handle both surfaces from one hook. The chat completion loop must also check _gate_overridden so callbacks using the unified hook pattern still fire for chat completions. * fix(websearch): strip tool_choice from legacy chat completion follow-up call The _execute_chat_completion_agentic_loop path merged original optional_params (which includes forced tool_choice) into follow-up params without explicit removal. _build_chat_completion_request_patch already excluded tool_choice from its optional_params output, but dict.update() with a missing key leaves the original value intact. Explicit pop after the merge removes it. * fix(websearch): always strip tool_choice from plan-path follow-up params The tool_choice removal was gated on patch.tools is not None. WebSearch sets tools via patch.optional_params not patch.tools, so the gate was False and forced tool_choice from the original request survived into the synthesis call. Move the pop outside the patch.tools branch so it applies unconditionally. --- .../websearch_interception/handler.py | 31 +- .../chat_completion_agentic_loop.py | 18 +- litellm/llms/custom_httpx/llm_http_handler.py | 8 +- .../test_websearch_chat_completion.py | 281 ++++++++++++++---- .../test_chat_completion_agentic_loop.py | 18 +- .../custom_httpx/test_llm_http_handler.py | 67 +++++ 6 files changed, 325 insertions(+), 98 deletions(-) diff --git a/litellm/integrations/websearch_interception/handler.py b/litellm/integrations/websearch_interception/handler.py index 2e11405af3f..bfae6d5b7b0 100644 --- a/litellm/integrations/websearch_interception/handler.py +++ b/litellm/integrations/websearch_interception/handler.py @@ -31,6 +31,7 @@ from litellm.types.integrations.websearch_interception import ( WebSearchInterceptionConfig, ) from litellm.types.integrations.custom_logger import ( + CHAT_COMPLETION_AGENTIC_SURFACE, AgenticLoopPlan, AgenticLoopRequestPatch, ) @@ -440,12 +441,16 @@ class WebSearchInterceptionLogger(CustomLogger): custom_llm_provider: str, kwargs: Dict, ) -> Tuple[bool, Dict]: - """ - Check if WebSearch tool interception is needed for Anthropic Messages API. - - This is the legacy method for Anthropic-style responses. - For chat completions, use async_should_run_chat_completion_agentic_loop instead. - """ + if kwargs.get("_agentic_loop_api_surface") == CHAT_COMPLETION_AGENTIC_SURFACE: + return await self.async_should_run_chat_completion_agentic_loop( + response=response, + model=model, + messages=messages, + tools=tools, + stream=stream, + custom_llm_provider=custom_llm_provider, + kwargs=kwargs, + ) verbose_logger.debug(f"WebSearchInterception: Hook called! provider={custom_llm_provider}, stream={stream}") verbose_logger.debug(f"WebSearchInterception: Response type: {type(response)}") @@ -629,6 +634,18 @@ class WebSearchInterceptionLogger(CustomLogger): stream: bool, kwargs: Dict, ) -> AgenticLoopPlan: + if kwargs.get("_agentic_loop_api_surface") == CHAT_COMPLETION_AGENTIC_SURFACE: + return await self.async_build_chat_completion_agentic_loop_plan( + tools=tools, + model=model, + messages=messages, + response=response, + optional_params=anthropic_messages_optional_request_params, + logging_obj=logging_obj, + stream=stream, + kwargs=kwargs, + ) + tool_calls = tools["tool_calls"] thinking_blocks = tools.get("thinking_blocks", []) request_patch, structured_results = await self._build_anthropic_request_patch( @@ -1088,6 +1105,7 @@ class WebSearchInterceptionLogger(CustomLogger): raise ValueError("WebSearchInterception: missing follow-up messages") params = dict(optional_params) params.update(request_patch.optional_params) + params.pop("tool_choice", None) return await litellm.acompletion( model=request_patch.model or model, messages=request_patch.messages, @@ -1203,6 +1221,7 @@ class WebSearchInterceptionLogger(CustomLogger): if k not in { "tools", + "tool_choice", "extra_body", "model_alias_map", "stream_response", diff --git a/litellm/litellm_core_utils/chat_completion_agentic_loop.py b/litellm/litellm_core_utils/chat_completion_agentic_loop.py index 828605d5ef8..b7262a42324 100644 --- a/litellm/litellm_core_utils/chat_completion_agentic_loop.py +++ b/litellm/litellm_core_utils/chat_completion_agentic_loop.py @@ -137,8 +137,8 @@ async def _execute_chat_completion_agentic_plan( optional_params_for_followup = {**optional_params, **patch.optional_params} if patch.tools is not None: optional_params_for_followup["tools"] = patch.tools - if "tool_choice" not in patch.optional_params: - optional_params_for_followup.pop("tool_choice", None) + if "tool_choice" not in patch.optional_params: + optional_params_for_followup.pop("tool_choice", None) kwargs_for_followup = _filter_followup_kwargs(kwargs) kwargs_for_followup.update( @@ -206,10 +206,11 @@ async def maybe_run_chat_completion_agentic_loop( for callback in callbacks: if not isinstance(callback, CustomLogger): continue + if not _gate_overridden(callback): continue - gate_kwargs = { + hook_kwargs = { **kwargs, "_agentic_loop_api_surface": CHAT_COMPLETION_AGENTIC_SURFACE, "custom_llm_provider": custom_llm_provider, @@ -222,7 +223,7 @@ async def maybe_run_chat_completion_agentic_loop( tools=tools, stream=stream, custom_llm_provider=custom_llm_provider, - kwargs=gate_kwargs, + kwargs=hook_kwargs, ) except Exception as e: verbose_logger.exception( @@ -243,11 +244,6 @@ async def maybe_run_chat_completion_agentic_loop( ) try: - plan_kwargs = { - **kwargs, - "_agentic_loop_api_surface": CHAT_COMPLETION_AGENTIC_SURFACE, - "custom_llm_provider": custom_llm_provider, - } if not _build_plan_overridden(callback): return await callback.async_run_agentic_loop( tools=tool_calls, @@ -258,7 +254,7 @@ async def maybe_run_chat_completion_agentic_loop( anthropic_messages_optional_request_params=optional_params, logging_obj=logging_obj, stream=stream, - kwargs=plan_kwargs, + kwargs=hook_kwargs, ) plan = await callback.async_build_agentic_loop_plan( @@ -270,7 +266,7 @@ async def maybe_run_chat_completion_agentic_loop( anthropic_messages_optional_request_params=optional_params, logging_obj=logging_obj, stream=stream, - kwargs=plan_kwargs, + kwargs=hook_kwargs, ) if plan.response_override is not None: diff --git a/litellm/llms/custom_httpx/llm_http_handler.py b/litellm/llms/custom_httpx/llm_http_handler.py index 9bb956d0808..3c10239f868 100644 --- a/litellm/llms/custom_httpx/llm_http_handler.py +++ b/litellm/llms/custom_httpx/llm_http_handler.py @@ -2112,7 +2112,7 @@ class BaseLLMHTTPHandler: anthropic_messages_optional_request_params=anthropic_messages_optional_request_params, logging_obj=logging_obj, custom_llm_provider=custom_llm_provider, - kwargs=kwargs, + kwargs={**kwargs, "api_key": api_key} if api_key else kwargs, ) return initial_response else: @@ -2122,6 +2122,10 @@ class BaseLLMHTTPHandler: logging_obj=logging_obj, ) + # Inject api_key into kwargs so follow-up calls in agentic hooks can + # authenticate. api_key is a named param here (not in kwargs), so + # _prepare_followup_kwargs would miss it otherwise. + kwargs_for_agentic = {**kwargs, "api_key": api_key} if api_key else kwargs # Call agentic completion hooks (non-streaming path only) final_response = await self._call_agentic_completion_hooks( response=initial_response, @@ -2132,7 +2136,7 @@ class BaseLLMHTTPHandler: logging_obj=logging_obj, stream=False, custom_llm_provider=custom_llm_provider, - kwargs=kwargs, + kwargs=kwargs_for_agentic, ) return self._maybe_wrap_in_fake_stream( diff --git a/tests/test_litellm/integrations/websearch_interception/test_websearch_chat_completion.py b/tests/test_litellm/integrations/websearch_interception/test_websearch_chat_completion.py index 34555d76554..7ef43e2eadf 100644 --- a/tests/test_litellm/integrations/websearch_interception/test_websearch_chat_completion.py +++ b/tests/test_litellm/integrations/websearch_interception/test_websearch_chat_completion.py @@ -6,7 +6,7 @@ litellm.acompletion() for transparent server-side web search execution. """ import os -from unittest.mock import AsyncMock, MagicMock, patch +from unittest.mock import MagicMock import pytest @@ -34,9 +34,7 @@ def mock_search_response(): @pytest.fixture def websearch_logger(): """Create a WebSearchInterceptionLogger instance""" - return WebSearchInterceptionLogger( - enabled_providers=[LlmProviders.OPENAI, LlmProviders.MINIMAX] - ) + return WebSearchInterceptionLogger(enabled_providers=[LlmProviders.OPENAI, LlmProviders.MINIMAX]) @pytest.mark.asyncio @@ -55,9 +53,7 @@ async def test_websearch_chat_completion_with_openai(): """ # Configure WebSearch interception original_callbacks = litellm.callbacks.copy() if litellm.callbacks else [] - websearch_logger = WebSearchInterceptionLogger( - enabled_providers=[LlmProviders.OPENAI] - ) + websearch_logger = WebSearchInterceptionLogger(enabled_providers=[LlmProviders.OPENAI]) litellm.callbacks = [websearch_logger] try: @@ -100,9 +96,7 @@ async def test_websearch_chat_completion_with_openai(): if hasattr(response.choices[0].message, "tool_calls"): # If tool_calls exist, it means agentic loop didn't run # This could happen if search tool is not configured - pytest.skip( - "Agentic loop did not execute - search tool may not be configured" - ) + pytest.skip("Agentic loop did not execute - search tool may not be configured") # Verify we got a meaningful response assert response.choices[0].finish_reason in ["stop", "end_turn"] @@ -122,9 +116,7 @@ async def test_websearch_chat_completion_hook_detection(): Message, ) - websearch_logger = WebSearchInterceptionLogger( - enabled_providers=[LlmProviders.OPENAI] - ) + websearch_logger = WebSearchInterceptionLogger(enabled_providers=[LlmProviders.OPENAI]) # Mock response with litellm_web_search tool call mock_response = ModelResponse( @@ -155,21 +147,19 @@ async def test_websearch_chat_completion_hook_detection(): ) # Test should_run_chat_completion_agentic_loop - should_run, tools_dict = ( - await websearch_logger.async_should_run_chat_completion_agentic_loop( - response=mock_response, - model="gpt-4o", - messages=[{"role": "user", "content": "What's the weather?"}], - tools=[ - { - "type": "function", - "function": {"name": "litellm_web_search"}, - } - ], - stream=False, - custom_llm_provider="openai", - kwargs={}, - ) + should_run, tools_dict = await websearch_logger.async_should_run_chat_completion_agentic_loop( + response=mock_response, + model="gpt-4o", + messages=[{"role": "user", "content": "What's the weather?"}], + tools=[ + { + "type": "function", + "function": {"name": "litellm_web_search"}, + } + ], + stream=False, + custom_llm_provider="openai", + kwargs={}, ) # Verify hook detected the tool call @@ -185,9 +175,7 @@ async def test_websearch_not_triggered_without_tool(): """Test that websearch hook is NOT triggered when no web search tool in request.""" from litellm.types.utils import Choices, Message - websearch_logger = WebSearchInterceptionLogger( - enabled_providers=[LlmProviders.OPENAI] - ) + websearch_logger = WebSearchInterceptionLogger(enabled_providers=[LlmProviders.OPENAI]) mock_response = ModelResponse( id="test-123", @@ -208,21 +196,19 @@ async def test_websearch_not_triggered_without_tool(): ) # Test without web search tool - should_run, tools_dict = ( - await websearch_logger.async_should_run_chat_completion_agentic_loop( - response=mock_response, - model="gpt-4o", - messages=[{"role": "user", "content": "Hello"}], - tools=[ - { - "type": "function", - "function": {"name": "some_other_tool"}, - } - ], - stream=False, - custom_llm_provider="openai", - kwargs={}, - ) + should_run, tools_dict = await websearch_logger.async_should_run_chat_completion_agentic_loop( + response=mock_response, + model="gpt-4o", + messages=[{"role": "user", "content": "Hello"}], + tools=[ + { + "type": "function", + "function": {"name": "some_other_tool"}, + } + ], + stream=False, + custom_llm_provider="openai", + kwargs={}, ) # Verify hook did NOT trigger @@ -241,9 +227,7 @@ async def test_websearch_not_triggered_for_disabled_provider(): ) # Only enable bedrock - websearch_logger = WebSearchInterceptionLogger( - enabled_providers=[LlmProviders.BEDROCK] - ) + websearch_logger = WebSearchInterceptionLogger(enabled_providers=[LlmProviders.BEDROCK]) mock_response = ModelResponse( id="test-123", @@ -273,21 +257,19 @@ async def test_websearch_not_triggered_for_disabled_provider(): ) # Test with OpenAI provider (not enabled) - should_run, tools_dict = ( - await websearch_logger.async_should_run_chat_completion_agentic_loop( - response=mock_response, - model="gpt-4o", - messages=[{"role": "user", "content": "test"}], - tools=[ - { - "type": "function", - "function": {"name": "litellm_web_search"}, - } - ], - stream=False, - custom_llm_provider="openai", # Not in enabled_providers - kwargs={}, - ) + should_run, tools_dict = await websearch_logger.async_should_run_chat_completion_agentic_loop( + response=mock_response, + model="gpt-4o", + messages=[{"role": "user", "content": "test"}], + tools=[ + { + "type": "function", + "function": {"name": "litellm_web_search"}, + } + ], + stream=False, + custom_llm_provider="openai", # Not in enabled_providers + kwargs={}, ) # Verify hook did NOT trigger @@ -341,8 +323,7 @@ async def test_websearch_json_serialization_fix(): @pytest.mark.asyncio @pytest.mark.skipif( - os.environ.get("OPENAI_API_KEY") is None - or os.environ.get("PERPLEXITY_API_KEY") is None, + os.environ.get("OPENAI_API_KEY") is None or os.environ.get("PERPLEXITY_API_KEY") is None, reason="OPENAI_API_KEY or PERPLEXITY_API_KEY not set", ) async def test_websearch_streaming_conversion(): @@ -395,6 +376,174 @@ async def test_websearch_streaming_conversion(): litellm.callbacks = [] +@pytest.mark.asyncio +async def test_maybe_run_chat_completion_agentic_loop_calls_chat_completion_hook(): + """Regression test: maybe_run_chat_completion_agentic_loop must call + async_should_run_chat_completion_agentic_loop, not async_should_run_agentic_loop. + + Before the fix, the function used the wrong gate check and wrong hook, + causing WebSearchInterceptionLogger to never intercept chat completion requests + even when the LLM returned a litellm_web_search tool call. + """ + from litellm.litellm_core_utils.chat_completion_agentic_loop import ( + maybe_run_chat_completion_agentic_loop, + ) + from litellm.types.utils import ( + ChatCompletionMessageToolCall, + Choices, + Function, + Message, + ) + + mock_response = ModelResponse( + id="test-regression-123", + choices=[ + Choices( + finish_reason="tool_calls", + index=0, + message=Message( + role="assistant", + content=None, + tool_calls=[ + ChatCompletionMessageToolCall( + id="call_abc", + type="function", + function=Function( + name="litellm_web_search", + arguments='{"query": "latest news"}', + ), + ) + ], + ), + ) + ], + model="gpt-4o", + object="chat.completion", + created=1234567890, + ) + + sentinel = ModelResponse( + id="sentinel-final", + choices=[ + Choices( + finish_reason="stop", + index=0, + message=Message(role="assistant", content="Here is the news."), + ) + ], + model="gpt-4o", + object="chat.completion", + created=1234567890, + ) + + websearch_logger = WebSearchInterceptionLogger(enabled_providers=[LlmProviders.OPENAI]) + + chat_completion_hook_called = False + + async def fake_should_run_chat_completion(response, model, messages, tools, stream, custom_llm_provider, kwargs): + nonlocal chat_completion_hook_called + chat_completion_hook_called = True + return True, { + "tool_calls": [{"id": "call_abc", "name": "litellm_web_search", "input": {"query": "latest news"}}], + "tool_type": "websearch", + "provider": "openai", + "response_format": "openai", + } + + async def fake_build_plan(tools, model, messages, response, optional_params, logging_obj, stream, kwargs): + from litellm.types.integrations.custom_logger import AgenticLoopPlan + + return AgenticLoopPlan(run_agentic_loop=False, response_override=sentinel) + + websearch_logger.async_should_run_chat_completion_agentic_loop = fake_should_run_chat_completion + websearch_logger.async_build_chat_completion_agentic_loop_plan = fake_build_plan + + import litellm as _litellm + + original_callbacks = _litellm.callbacks[:] + _litellm.callbacks = [websearch_logger] + + mock_logging_obj = MagicMock() + mock_logging_obj.dynamic_success_callbacks = None + + try: + result = await maybe_run_chat_completion_agentic_loop( + response=mock_response, + model="gpt-4o", + messages=[{"role": "user", "content": "Latest news?"}], + optional_params={ + "tools": [ + { + "type": "function", + "function": {"name": "litellm_web_search"}, + } + ] + }, + kwargs={}, + logging_obj=mock_logging_obj, + custom_llm_provider="openai", + stream=False, + ) + finally: + _litellm.callbacks = original_callbacks + + assert chat_completion_hook_called, ( + "async_should_run_chat_completion_agentic_loop was never called; " + "maybe_run_chat_completion_agentic_loop used the wrong hook" + ) + assert result is sentinel, "Expected agentic loop to return sentinel final response" + + +@pytest.mark.asyncio +async def test_execute_chat_completion_agentic_loop_strips_tool_choice(): + """Regression: _execute_chat_completion_agentic_loop must not forward tool_choice + from the original request into the follow-up synthesis call. + + When the original request forces tool_choice to litellm_web_search, merging + optional_params into the follow-up params without explicit removal causes the + model to call the search tool again instead of synthesizing an answer. + """ + from unittest.mock import patch + + websearch_logger = WebSearchInterceptionLogger(enabled_providers=[LlmProviders.OPENAI]) + + captured_kwargs: dict = {} + + async def fake_acompletion(**kwargs): + captured_kwargs.update(kwargs) + return ModelResponse(id="followup", model="gpt-4o", object="chat.completion") + + async def fake_search(query): + return ("Bitcoin price is $60,000", None) + + with patch.object(websearch_logger, "_execute_search", side_effect=fake_search): + with patch("litellm.acompletion", side_effect=fake_acompletion): + await websearch_logger._execute_chat_completion_agentic_loop( + model="gpt-4o", + messages=[{"role": "user", "content": "What is Bitcoin price?"}], + tool_calls=[ + { + "id": "call_1", + "name": "litellm_web_search", + "input": {"query": "bitcoin price"}, + } + ], + optional_params={ + "tools": [{"type": "function", "function": {"name": "litellm_web_search"}}], + "tool_choice": {"type": "function", "function": {"name": "litellm_web_search"}}, + "max_tokens": 512, + }, + logging_obj=MagicMock(), + stream=False, + kwargs={}, + ) + + assert "tool_choice" not in captured_kwargs, ( + "tool_choice must not appear in follow-up acompletion kwargs; " + "it would force the model to call the search tool again instead of synthesizing" + ) + + if __name__ == "__main__": # Run with: pytest test_websearch_chat_completion.py -v -s pytest.main([__file__, "-v", "-s"]) diff --git a/tests/test_litellm/litellm_core_utils/test_chat_completion_agentic_loop.py b/tests/test_litellm/litellm_core_utils/test_chat_completion_agentic_loop.py index f1196ab4692..cc16ad558e4 100644 --- a/tests/test_litellm/litellm_core_utils/test_chat_completion_agentic_loop.py +++ b/tests/test_litellm/litellm_core_utils/test_chat_completion_agentic_loop.py @@ -181,8 +181,7 @@ async def test_internal_control_fields_never_leak_into_provider_body(restore_cal # The loop must have actually fired (sanity: two provider calls). assert create.await_count == 2, ( - "expected the agentic loop to issue a follow-up provider call; " - f"got {create.await_count} call(s)" + f"expected the agentic loop to issue a follow-up provider call; got {create.await_count} call(s)" ) for idx, call in enumerate(create.await_args_list): @@ -194,8 +193,7 @@ async def test_internal_control_fields_never_leak_into_provider_body(restore_cal f"top-level request body: {sorted(body.keys())}" ) assert field not in extra_body, ( - f"provider call #{idx}: internal field {field!r} leaked into " - f"extra_body: {sorted(extra_body.keys())}" + f"provider call #{idx}: internal field {field!r} leaked into extra_body: {sorted(extra_body.keys())}" ) # The native code_interpreter tool must have been swapped for the # function tool, never sent raw to OpenAI as a chat-completions request. @@ -254,9 +252,7 @@ class _GateOnlyLogger(CustomLogger): ) -> AgenticLoopPlan: return self._plan - async def async_agentic_loop_cleanup_hook( - self, plan: AgenticLoopPlan, kwargs: Dict[str, Any] - ) -> None: + async def async_agentic_loop_cleanup_hook(self, plan: AgenticLoopPlan, kwargs: Dict[str, Any]) -> None: self.cleanup_calls += 1 @@ -343,9 +339,7 @@ async def test_dispatcher_runs_followup_with_incremented_depth_and_patched_messa assert call_kwargs["max_agentic_loops"] >= 1 assert "_agentic_loop_fingerprints" in call_kwargs # Interception markers are mirrored into litellm_metadata for the follow-up. - assert ( - call_kwargs["litellm_metadata"]["_code_interpreter_interception_active"] is True - ) + assert call_kwargs["litellm_metadata"]["_code_interpreter_interception_active"] is True # The transient surface marker is NOT forwarded to the follow-up call. assert "_agentic_loop_api_surface" not in call_kwargs # Cleanup hook always runs. @@ -390,9 +384,7 @@ async def test_dispatcher_raises_on_repeated_tool_call_fingerprint(restore_callb # The dispatcher fingerprints the whole value the gate returns as its second # tuple element, so the seeded fingerprint must mirror that dict exactly. - gate_tool_calls = { - "tool_calls": [{"id": "call_abc", "name": "litellm_code_execution"}] - } + gate_tool_calls = {"tool_calls": [{"id": "call_abc", "name": "litellm_code_execution"}]} fingerprint = json.dumps(gate_tool_calls, sort_keys=True, default=str) logger = _GateOnlyLogger( diff --git a/tests/test_litellm/llms/custom_httpx/test_llm_http_handler.py b/tests/test_litellm/llms/custom_httpx/test_llm_http_handler.py index 8c934f9c21e..b18af060a20 100644 --- a/tests/test_litellm/llms/custom_httpx/test_llm_http_handler.py +++ b/tests/test_litellm/llms/custom_httpx/test_llm_http_handler.py @@ -1212,6 +1212,73 @@ def test_async_compact_handler_sends_json_when_not_signed(): assert "data" not in kwargs +@pytest.mark.asyncio +async def test_async_anthropic_messages_handler_passes_api_key_to_agentic_hooks(): + """ + Regression: async_anthropic_messages_handler must inject api_key into the + kwargs dict forwarded to _call_agentic_completion_hooks. + + Without this, follow-up calls made by agentic hooks (e.g. websearch + interception's second LLM call after executing searches) have no api_key + and fail with "x-api-key header is required". + """ + handler = BaseLLMHTTPHandler() + + mock_config = Mock() + mock_config.validate_anthropic_messages_environment = Mock( + return_value=({"x-api-key": "sk-test"}, "https://api.anthropic.com") + ) + mock_config.transform_anthropic_messages_request = Mock( + return_value={"model": "claude-haiku", "messages": [], "max_tokens": 16} + ) + mock_config.sign_request = Mock(return_value=({}, None)) + + fake_raw_response = {"id": "msg_1", "type": "message", "role": "assistant", "content": [], "stop_reason": "end_turn"} + mock_config.transform_anthropic_messages_response = Mock(return_value=fake_raw_response) + + mock_logging_obj = Mock() + mock_logging_obj.update_environment_variables = Mock() + mock_logging_obj.model_call_details = {} + mock_logging_obj.stream = False + mock_logging_obj.dynamic_success_callbacks = None + + captured_kwargs: dict = {} + sentinel_response = object() + + async def fake_agentic_hooks(**call_kwargs): + captured_kwargs.update(call_kwargs) + return sentinel_response + + mock_httpx_response = Mock() + mock_httpx_response.status_code = 200 + + with ( + patch.object(handler, "_async_post_anthropic_messages_with_http_error_retry", new=AsyncMock(return_value=mock_httpx_response)), + patch.object(handler, "_call_agentic_completion_hooks", side_effect=fake_agentic_hooks), + patch("litellm.llms.custom_httpx.llm_http_handler.get_async_httpx_client"), + patch("litellm.litellm_core_utils.get_provider_specific_headers.ProviderSpecificHeaderUtils.get_provider_specific_headers", return_value=None), + ): + result = await handler.async_anthropic_messages_handler( + model="claude-haiku", + messages=[{"role": "user", "content": "hi"}], + anthropic_messages_provider_config=mock_config, + anthropic_messages_optional_request_params={"stream": False}, + custom_llm_provider="anthropic", + litellm_params=GenericLiteLLMParams(api_key="sk-real-anthropic-key"), + logging_obj=mock_logging_obj, + api_key="sk-real-anthropic-key", + stream=False, + ) + + assert result is sentinel_response + assert "kwargs" in captured_kwargs, "_call_agentic_completion_hooks not called" + forwarded = captured_kwargs["kwargs"] + assert forwarded.get("api_key") == "sk-real-anthropic-key", ( + "api_key must be injected into kwargs passed to _call_agentic_completion_hooks " + "so follow-up calls in agentic hooks (e.g. websearch) can authenticate" + ) + + class _FakeWSExceptions: class WebSocketException(Exception): pass From 6c21029cb7e8fe827ea9f8d108f1ff18ae3b9e4b Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 30 Jun 2026 18:58:09 -0700 Subject: [PATCH 46/79] feat(sandbox): reuse e2b container across requests when metadata.session_id is set (#31688) * feat(sandbox): reuse e2b container across requests when metadata.session_id is set When a client passes `metadata.session_id` in a /chat/completions request alongside a code_interpreter tool, the proxy now routes all requests sharing that session_id to the same sandbox container. State (variables, imports, installed packages) persists across requests within the session. Without a session_id the existing ephemeral behavior is unchanged: one container per agentic loop, deleted immediately after. The sandbox key is derived from session_id rather than a per-request UUID. The cleanup and post-loop hooks skip deletion for session-scoped containers. TTL-based pruning (15 min idle) still applies and refreshes on every use, so an active session never expires mid-use. The session_id-scoped key is registered in all_litellm_params and the proxy strip-list so it never leaks to the upstream LLM provider. * fix(sandbox): scope session sandbox key to API key identity; add per-identity LRU cap Two security issues addressed: 1. Cross-user sandbox isolation: the session_id supplied by the client is now combined with the server-minted user_api_key_hash to form the cache key (format: "{hash}:{session_id}" when authenticated, bare session_id for non-proxy use). Two tenants sharing the same session_id no longer share a sandbox. 2. Bounded session allocation: each API key identity is capped at _SESSION_SCOPED_PER_IDENTITY_CAP (10) live session-scoped containers. When a new session is opened beyond the cap, the least-recently-used entry for that identity is evicted and its sandbox deleted, preventing unbounded accumulation via rotating session IDs. The container cache tuple gains a fourth element (identity: str | None) so eviction can filter by identity without parsing key formats. Tests added for both properties. --- .../code_interpreter_interception/handler.py | 71 +++- litellm/proxy/dev_config.yaml | 15 + litellm/proxy/litellm_pre_call_utils.py | 1 + litellm/types/utils.py | 1 + qa_sticky_session.sh | 59 +++ .../test_handler.py | 369 ++++++++++++++---- 6 files changed, 421 insertions(+), 95 deletions(-) create mode 100755 qa_sticky_session.sh diff --git a/litellm/integrations/code_interpreter_interception/handler.py b/litellm/integrations/code_interpreter_interception/handler.py index cd7b211f1a5..759b2be3a84 100644 --- a/litellm/integrations/code_interpreter_interception/handler.py +++ b/litellm/integrations/code_interpreter_interception/handler.py @@ -40,9 +40,11 @@ from litellm.types.utils import ( LITELLM_CODE_EXECUTION_TOOL_NAME = "litellm_code_execution" _INTERCEPTION_ACTIVE_KEY = "_code_interpreter_interception_active" _SANDBOX_KEY = "_code_interpreter_interception_sandbox_key" +_SESSION_SCOPED_KEY = "_code_interpreter_interception_session_scoped" _CONVERTED_STREAM_KEY = "_code_interpreter_interception_converted_stream" _LITELLM_METADATA_KEY = "litellm_metadata" _CACHE_TTL_SECONDS = 15 * 60 +_SESSION_SCOPED_PER_IDENTITY_CAP = 10 class CodeExecutionToolCall(TypedDict, total=False): @@ -107,6 +109,20 @@ class ChatCompletionFunctionToolChoice(TypedDict): CodeExecutionFunctionToolChoice = ResponsesFunctionToolChoice | ChatCompletionFunctionToolChoice +def _extract_session_id(kwargs: dict[str, Any]) -> str | None: + for meta_key in ("metadata", "litellm_metadata"): + meta = kwargs.get(meta_key) + if isinstance(meta, dict): + sid = meta.get("session_id") + if sid and isinstance(sid, str): + return sid + return None + + +def _extract_identity(kwargs: dict[str, Any]) -> str: + return kwargs.get("user_api_key_hash") or "" + + def _resolve_sandbox_tool(sandbox_tool_name: str | None) -> dict[str, Any] | None: try: from litellm.sandbox.sandbox_tools import resolve_sandbox_tool @@ -140,7 +156,7 @@ class CodeInterpreterInterceptionLogger(CustomLogger): self.enabled_providers = enabled_providers self.sandbox_tool_name = sandbox_tool_name self.sandbox_config = sandbox_config - self._container_cache: dict[str, tuple[Any, dict[str, Any] | None, float]] = {} + self._container_cache: dict[str, tuple[Any, dict[str, Any] | None, float, str | None]] = {} @classmethod def from_config_yaml(cls, config: CodeInterpreterInterceptionConfig) -> "CodeInterpreterInterceptionLogger": @@ -191,7 +207,13 @@ class CodeInterpreterInterceptionLogger(CustomLogger): return None kwargs[_INTERCEPTION_ACTIVE_KEY] = True - kwargs[_SANDBOX_KEY] = uuid.uuid4().hex + session_id = _extract_session_id(kwargs) + if session_id: + identity = _extract_identity(kwargs) + kwargs[_SANDBOX_KEY] = f"{identity}:{session_id}" if identity else session_id + kwargs[_SESSION_SCOPED_KEY] = True + else: + kwargs[_SANDBOX_KEY] = uuid.uuid4().hex if kwargs.get("stream"): kwargs["stream"] = False kwargs[_CONVERTED_STREAM_KEY] = True @@ -217,6 +239,7 @@ class CodeInterpreterInterceptionLogger(CustomLogger): if not is_interception_internal_key(key) and not key.startswith("_agentic_loop") and key != "max_agentic_loops" + and key != _SESSION_SCOPED_KEY } if filtered_metadata: kwargs[_LITELLM_METADATA_KEY] = filtered_metadata @@ -227,7 +250,7 @@ class CodeInterpreterInterceptionLogger(CustomLogger): def _write_interception_metadata(kwargs: dict[str, Any]) -> None: metadata = kwargs.get(_LITELLM_METADATA_KEY) metadata = dict(metadata) if isinstance(metadata, dict) else {} - for key in (_INTERCEPTION_ACTIVE_KEY, _SANDBOX_KEY, _CONVERTED_STREAM_KEY): + for key in (_INTERCEPTION_ACTIVE_KEY, _SANDBOX_KEY, _SESSION_SCOPED_KEY, _CONVERTED_STREAM_KEY): if key in kwargs: metadata[key] = kwargs[key] kwargs[_LITELLM_METADATA_KEY] = metadata @@ -347,7 +370,9 @@ class CodeInterpreterInterceptionLogger(CustomLogger): await self._prune_expired_cache() tool_calls = cast(list[CodeExecutionToolCall], tools.get("tool_calls", [])) sandbox_key = kwargs.get(_SANDBOX_KEY) - container, params = await self._get_or_create_container(cache_key=sandbox_key) + is_session = bool(kwargs.get(_SESSION_SCOPED_KEY)) + identity = _extract_identity(kwargs) if is_session else None + container, params = await self._get_or_create_container(cache_key=sandbox_key, identity=identity) try: container_id = cast(str | None, getattr(container, "id", None)) @@ -404,6 +429,7 @@ class CodeInterpreterInterceptionLogger(CustomLogger): metadata={ "tool_type": "code_interpreter", "sandbox_key": sandbox_key or "", + "is_session_scoped": bool(kwargs.get(_SESSION_SCOPED_KEY)), "code_interpreter_calls": code_interpreter_calls, }, ) @@ -419,7 +445,9 @@ class CodeInterpreterInterceptionLogger(CustomLogger): await self._prune_expired_cache() tool_calls = cast(list[CodeExecutionToolCall], tools.get("tool_calls", [])) sandbox_key = cast(str | None, kwargs.get(_SANDBOX_KEY)) - container, params = await self._get_or_create_container(cache_key=sandbox_key) + is_session = bool(kwargs.get(_SESSION_SCOPED_KEY)) + identity = _extract_identity(cast(dict[str, Any], kwargs)) if is_session else None + container, params = await self._get_or_create_container(cache_key=sandbox_key, identity=identity) try: container_id = cast(str | None, getattr(container, "id", None)) @@ -455,6 +483,7 @@ class CodeInterpreterInterceptionLogger(CustomLogger): metadata={ "tool_type": "code_interpreter", "sandbox_key": sandbox_key or "", + "is_session_scoped": bool(kwargs.get(_SESSION_SCOPED_KEY)), "code_interpreter_calls": code_interpreter_calls, "response_format": "openai", }, @@ -489,6 +518,8 @@ class CodeInterpreterInterceptionLogger(CustomLogger): async def async_agentic_loop_cleanup_hook(self, plan: AgenticLoopPlan, kwargs: dict) -> None: metadata = plan.metadata or {} if plan else {} + if metadata.get("is_session_scoped"): + return await self._delete_container_for_cache_key(metadata.get("sandbox_key")) @staticmethod @@ -520,7 +551,8 @@ class CodeInterpreterInterceptionLogger(CustomLogger): async def async_post_agentic_loop_response_hook(self, response: Any, plan: AgenticLoopPlan, kwargs: dict) -> Any: metadata = plan.metadata or {} if plan else {} - await self._delete_container_for_cache_key(metadata.get("sandbox_key")) + if not metadata.get("is_session_scoped"): + await self._delete_container_for_cache_key(metadata.get("sandbox_key")) calls = metadata.get("code_interpreter_calls") if not calls: @@ -565,17 +597,32 @@ class CodeInterpreterInterceptionLogger(CustomLogger): return f"[execution error] {message}" return getattr(result, "stdout", "") or "" - async def _get_or_create_container(self, cache_key: str | None) -> tuple[Any, dict[str, Any] | None]: + async def _get_or_create_container( + self, + cache_key: str | None, + identity: str | None = None, + ) -> tuple[Any, dict[str, Any] | None]: if cache_key: cached = self._container_cache.get(cache_key) if cached is not None: + self._container_cache[cache_key] = (cached[0], cached[1], time.time(), cached[3]) return cached[0], cached[1] container, params = await self._create_container() if cache_key: - self._container_cache[cache_key] = (container, params, time.time()) + if identity is not None: + await self._evict_lru_session_if_over_cap(identity) + self._container_cache[cache_key] = (container, params, time.time(), identity) return container, params + async def _evict_lru_session_if_over_cap(self, identity: str) -> None: + identity_entries = [(k, v) for k, v in self._container_cache.items() if v[3] == identity] + if len(identity_entries) < _SESSION_SCOPED_PER_IDENTITY_CAP: + return + lru_key, lru_entry = min(identity_entries, key=lambda item: item[1][2]) + self._container_cache.pop(lru_key, None) + await self._delete_container(container=lru_entry[0], params=lru_entry[1]) + async def _create_container(self) -> tuple[Any, dict[str, Any] | None]: if self.sandbox_config is not None: return await self.sandbox_config.acreate_sandbox(), None @@ -739,12 +786,8 @@ class CodeInterpreterInterceptionLogger(CustomLogger): now = time.time() expired = [ (cache_key, container, params) - for cache_key, ( - container, - params, - created_at, - ) in self._container_cache.items() - if now - created_at > _CACHE_TTL_SECONDS + for cache_key, (container, params, last_accessed, *_) in self._container_cache.items() + if now - last_accessed > _CACHE_TTL_SECONDS ] for cache_key, container, params in expired: self._container_cache.pop(cache_key, None) diff --git a/litellm/proxy/dev_config.yaml b/litellm/proxy/dev_config.yaml index e437ed7a118..6078161c780 100644 --- a/litellm/proxy/dev_config.yaml +++ b/litellm/proxy/dev_config.yaml @@ -182,10 +182,25 @@ model_list: litellm_params: model: openai/gpt-5.5 api_key: os.environ/OPENAI_API_KEY + - model_name: gpt-4o-mini + litellm_params: + model: openai/gpt-4o-mini + api_key: os.environ/OPENAI_API_KEY general_settings: master_key: sk-1234 +sandbox_tools: + - sandbox_tool_name: e2b_sandbox + litellm_params: + sandbox_provider: e2b + api_key: os.environ/E2B_API_KEY + litellm_settings: drop_params: True telemetry: False + code_interpreter_interception_params: + enabled: true + sandbox_tool_name: e2b_sandbox + callbacks: + - code_interpreter_interception diff --git a/litellm/proxy/litellm_pre_call_utils.py b/litellm/proxy/litellm_pre_call_utils.py index 0ffb0337545..6f5c82530e3 100644 --- a/litellm/proxy/litellm_pre_call_utils.py +++ b/litellm/proxy/litellm_pre_call_utils.py @@ -153,6 +153,7 @@ _UNTRUSTED_ROOT_CONTROL_FIELDS = ( "_code_interpreter_interception_active", "_code_interpreter_interception_converted_stream", "_code_interpreter_interception_sandbox_key", + "_code_interpreter_interception_session_scoped", "max_agentic_loops", ) diff --git a/litellm/types/utils.py b/litellm/types/utils.py index dff4e4af89e..4f0c0c21bce 100644 --- a/litellm/types/utils.py +++ b/litellm/types/utils.py @@ -3062,6 +3062,7 @@ agentic_loop_internal_litellm_params = [ "max_agentic_loops", "_code_interpreter_interception_active", "_code_interpreter_interception_sandbox_key", + "_code_interpreter_interception_session_scoped", "_code_interpreter_interception_converted_stream", ] diff --git a/qa_sticky_session.sh b/qa_sticky_session.sh new file mode 100755 index 00000000000..326bb8117c7 --- /dev/null +++ b/qa_sticky_session.sh @@ -0,0 +1,59 @@ +#!/usr/bin/env bash +# QA: code interpreter sandbox stickiness via metadata.session_id +# bash qa_sticky_session.sh +# LITELLM_BASE_URL=http://localhost:4000 LITELLM_KEY=sk-1234 bash qa_sticky_session.sh + +set -euo pipefail + +BASE="${LITELLM_BASE_URL:-http://localhost:4000}" +KEY="${LITELLM_KEY:-sk-1234}" +MODEL="${LITELLM_MODEL:-gpt-4o-mini}" +# proxy running at http://localhost:4000 (master key: sk-1234) +SESSION_A="qa-session-$(date +%s)-A" +SESSION_B="qa-session-$(date +%s)-B" + +content() { + echo "$1" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('choices',[{}])[0].get('message',{}).get('content',''))" +} + +call() { + local session="${1:-}" code="$2" meta="" + [[ -n "$session" ]] && meta=", \"metadata\": {\"session_id\": \"$session\"}" + curl -s -X POST "$BASE/chat/completions" \ + -H "Content-Type: application/json" \ + -H "Authorization: Bearer $KEY" \ + -d "{\"model\":\"$MODEL\"$meta,\"tools\":[{\"type\":\"code_interpreter\"}],\"messages\":[{\"role\":\"user\",\"content\":\"Run this Python code and tell me the result: $code\"}]}" +} + +assert_match() { + local label="$1" body="$2" pattern="$3" + if echo "$body" | grep -qiE "$pattern"; then + echo "PASS $label" + else + echo "FAIL $label (expected /$pattern/)" + echo " $(content "$body")" + exit 1 + fi +} + +echo "=== Sticky Session Sandbox QA ===" +echo "base: $BASE session A: $SESSION_A session B: $SESSION_B" +echo + +R=$(call "$SESSION_A" "x = 42; print(x)") +assert_match "same session_id reuses sandbox (set x=42)" "$R" "42" + +R=$(call "$SESSION_A" "print(x)") +assert_match "same session_id keeps state (x still 42)" "$R" "42" + +R=$(call "$SESSION_B" "print(x)") +assert_match "different session_id is isolated" "$R" "not defined|NameError|undefined|error" + +R=$(call "" "y = 99; print(y)") +assert_match "no session_id runs code" "$R" "99" + +R=$(call "" "print(y)") +assert_match "no session_id gets fresh sandbox each request" "$R" "not defined|NameError|undefined|error" + +echo +echo "All checks passed." diff --git a/tests/test_litellm/integrations/code_interpreter_interception/test_handler.py b/tests/test_litellm/integrations/code_interpreter_interception/test_handler.py index 7ff58ba6324..9d308ac1989 100644 --- a/tests/test_litellm/integrations/code_interpreter_interception/test_handler.py +++ b/tests/test_litellm/integrations/code_interpreter_interception/test_handler.py @@ -14,6 +14,7 @@ from litellm.integrations.code_interpreter_interception.handler import ( LITELLM_CODE_EXECUTION_TOOL_NAME, _INTERCEPTION_ACTIVE_KEY as _ACTIVE_KEY, _SANDBOX_KEY, + _SESSION_SCOPED_KEY, ) from litellm.types.integrations.custom_logger import ( CHAT_COMPLETION_AGENTIC_SURFACE, @@ -138,11 +139,7 @@ async def test_build_plan_runs_code_and_feeds_output_back(): assert sandbox.run_calls[0]["code"] == "print(40 + 2)" messages = _iter_messages(plan) - outputs = [ - m - for m in messages - if isinstance(m, dict) and m.get("type") == "function_call_output" - ] + outputs = [m for m in messages if isinstance(m, dict) and m.get("type") == "function_call_output"] assert outputs, "expected a function_call_output item appended" output_item = next(m for m in outputs if m.get("call_id") == "c1") assert "42" in str(output_item["output"]) @@ -160,9 +157,7 @@ async def test_pre_call_converts_code_interpreter_tool(): assert result is not None tools = result["tools"] - assert not any( - t.get("type") == "code_interpreter" for t in tools - ), "code_interpreter tool must be removed" + assert not any(t.get("type") == "code_interpreter" for t in tools), "code_interpreter tool must be removed" names = [t.get("name") or (t.get("function") or {}).get("name") for t in tools] assert LITELLM_CODE_EXECUTION_TOOL_NAME in names @@ -267,9 +262,7 @@ async def test_should_run_detects_only_matching_function_call(): logger = CodeInterpreterInterceptionLogger(sandbox_config=FakeSandbox()) active_kwargs = {"_code_interpreter_interception_active": True} - match = FakeResponse( - output=[_function_call_item(name=LITELLM_CODE_EXECUTION_TOOL_NAME)] - ) + match = FakeResponse(output=[_function_call_item(name=LITELLM_CODE_EXECUTION_TOOL_NAME)]) should_run, payload = await logger.async_should_run_agentic_loop( response=match, model="gpt-5", @@ -331,9 +324,7 @@ async def test_container_reused_within_request_via_server_sandbox_key(): **common, ) - assert ( - len(sandbox.create_calls) == 1 - ), "the sandbox is reused across loop iterations sharing one server sandbox key" + assert len(sandbox.create_calls) == 1, "the sandbox is reused across loop iterations sharing one server sandbox key" @pytest.mark.asyncio @@ -372,9 +363,9 @@ async def test_colliding_caller_call_id_does_not_share_sandbox(): **common, ) - assert ( - len(sandbox.create_calls) == 2 - ), "distinct server sandbox keys must isolate sandboxes despite a colliding call id" + assert len(sandbox.create_calls) == 2, ( + "distinct server sandbox keys must isolate sandboxes despite a colliding call id" + ) @pytest.mark.asyncio @@ -479,14 +470,11 @@ async def test_post_hook_injects_code_interpreter_call_matching_openai_shape(): ) response = FakeResponse(output=[{"type": "message", "content": []}]) - out = await logger.async_post_agentic_loop_response_hook( - response=response, plan=plan, kwargs={} - ) + out = await logger.async_post_agentic_loop_response_hook(response=response, plan=plan, kwargs={}) types = [item.get("type") for item in out.output] assert types == ["code_interpreter_call", "message"], ( - "code_interpreter_call must be re-injected before the message, matching " - "OpenAI's native output ordering" + "code_interpreter_call must be re-injected before the message, matching OpenAI's native output ordering" ) assert set(out.output[0].keys()) == { "id", @@ -524,8 +512,7 @@ async def test_pre_call_forces_non_stream_for_loop(): assert out is not None assert out["stream"] is False, "loop requires a non-streaming upstream call" assert out["_code_interpreter_interception_converted_stream"] is True, ( - "the converted-stream flag must be set so the final response is wrapped " - "back into a stream for the caller" + "the converted-stream flag must be set so the final response is wrapped back into a stream for the caller" ) @@ -556,9 +543,7 @@ async def test_gate_refuses_without_server_active_marker(): """A forged litellm_code_execution call must not trigger the loop unless the pre-call hook actually converted a native code_interpreter tool.""" logger = CodeInterpreterInterceptionLogger(sandbox_config=FakeSandbox()) - forged = FakeResponse( - output=[_function_call_item(name=LITELLM_CODE_EXECUTION_TOOL_NAME)] - ) + forged = FakeResponse(output=[_function_call_item(name=LITELLM_CODE_EXECUTION_TOOL_NAME)]) should_run, payload = await logger.async_should_run_agentic_loop( response=forged, @@ -577,12 +562,8 @@ async def test_gate_refuses_without_server_active_marker(): @pytest.mark.asyncio async def test_gate_rechecks_provider_scope(): """enabled_providers must be re-enforced at the gate, not only in pre-call.""" - logger = CodeInterpreterInterceptionLogger( - sandbox_config=FakeSandbox(), enabled_providers=["openai"] - ) - response = FakeResponse( - output=[_function_call_item(name=LITELLM_CODE_EXECUTION_TOOL_NAME)] - ) + logger = CodeInterpreterInterceptionLogger(sandbox_config=FakeSandbox(), enabled_providers=["openai"]) + response = FakeResponse(output=[_function_call_item(name=LITELLM_CODE_EXECUTION_TOOL_NAME)]) should_run, _ = await logger.async_should_run_agentic_loop( response=response, @@ -600,11 +581,7 @@ async def test_gate_rechecks_provider_scope(): @pytest.mark.asyncio async def test_chat_completion_gate_detects_code_execution_tool_call(): logger = CodeInterpreterInterceptionLogger(sandbox_config=FakeSandbox()) - response = { - "choices": [ - {"message": {"tool_calls": [_chat_function_call_item(call_id="call_123")]}} - ] - } + response = {"choices": [{"message": {"tool_calls": [_chat_function_call_item(call_id="call_123")]}}]} should_run, payload = await logger.async_should_run_agentic_loop( response=response, @@ -661,9 +638,7 @@ async def test_chat_completion_build_plan_runs_code_and_appends_tool_message(): }, model="gpt-5", messages=[{"role": "user", "content": "x"}], - response={ - "choices": [{"message": {"tool_calls": [_chat_function_call_item()]}}] - }, + response={"choices": [{"message": {"tool_calls": [_chat_function_call_item()]}}]}, anthropic_messages_provider_config=None, anthropic_messages_optional_request_params={ "tools": [native_chat_tool], @@ -738,8 +713,7 @@ async def test_pre_call_strips_client_forged_marker_on_initial_request(): await logger.async_pre_call_deployment_hook(kwargs, CallTypes.aresponses) assert _ACTIVE_KEY not in kwargs, ( - "no native code_interpreter tool was present, so a client-supplied " - "active marker must be cleared" + "no native code_interpreter tool was present, so a client-supplied active marker must be cleared" ) assert kwargs["litellm_metadata"] == {"safe_user_value": "kept"} @@ -774,8 +748,7 @@ async def test_pre_call_strips_forged_loop_controls_then_mints_own_markers(): assert metadata[_ACTIVE_KEY] is True assert metadata[_SANDBOX_KEY] == result[_SANDBOX_KEY] assert metadata[_SANDBOX_KEY] != "client-forged", ( - "the surviving sandbox key must be the server-minted one, not the forged " - "value the client supplied" + "the surviving sandbox key must be the server-minted one, not the forged value the client supplied" ) @@ -793,8 +766,7 @@ async def test_pre_call_preserves_marker_on_server_followup(): await logger.async_pre_call_deployment_hook(kwargs, CallTypes.aresponses) assert kwargs.get(_ACTIVE_KEY) is True, ( - "the server-set marker must survive followup requests so multi-round " - "code execution keeps working" + "the server-set marker must survive followup requests so multi-round code execution keeps working" ) @@ -805,9 +777,7 @@ async def test_sandbox_deleted_after_loop_completes(): plan = await _build_plan(logger, sandbox, call_id="k1") assert sandbox.create_calls, "sandbox must be created during the loop" - assert ( - not sandbox.delete_calls - ), "sandbox must outlive the loop until the final hook" + assert not sandbox.delete_calls, "sandbox must outlive the loop until the final hook" await logger.async_post_agentic_loop_response_hook( response=FakeResponse(output=[{"type": "message", "content": []}]), @@ -816,8 +786,7 @@ async def test_sandbox_deleted_after_loop_completes(): ) assert len(sandbox.delete_calls) == 1, ( - "the sandbox must be deleted once the final response is assembled, " - "otherwise it keeps running and billing" + "the sandbox must be deleted once the final response is assembled, otherwise it keeps running and billing" ) assert "sbxkey1" not in logger._container_cache @@ -829,16 +798,11 @@ async def test_post_hook_delete_is_idempotent_across_loop_levels(): plan = await _build_plan(logger, sandbox, call_id="k1") response = FakeResponse(output=[{"type": "message", "content": []}]) - await logger.async_post_agentic_loop_response_hook( - response=response, plan=plan, kwargs={} - ) - await logger.async_post_agentic_loop_response_hook( - response=response, plan=plan, kwargs={} - ) + await logger.async_post_agentic_loop_response_hook(response=response, plan=plan, kwargs={}) + await logger.async_post_agentic_loop_response_hook(response=response, plan=plan, kwargs={}) assert len(sandbox.delete_calls) == 1, ( - "deleting an already-removed container must be a no-op so unwinding " - "loop levels do not double-delete" + "deleting an already-removed container must be a no-op so unwinding loop levels do not double-delete" ) @@ -860,8 +824,7 @@ async def test_build_plan_deletes_sandbox_when_execution_raises(): assert len(sandbox.create_calls) == 1, "the sandbox must have been created" assert len(sandbox.delete_calls) == 1, ( - "a build failure must delete the cached sandbox so it does not keep " - "running and billing" + "a build failure must delete the cached sandbox so it does not keep running and billing" ) assert "sbxkey1" not in logger._container_cache @@ -875,8 +838,7 @@ async def test_cleanup_hook_deletes_sandbox(): await logger.async_agentic_loop_cleanup_hook(plan=plan, kwargs={}) assert len(sandbox.delete_calls) == 1, ( - "the cleanup hook must delete the sandbox so a rerun failure cannot " - "leak a running container" + "the cleanup hook must delete the sandbox so a rerun failure cannot leak a running container" ) assert "sbxkey1" not in logger._container_cache @@ -895,8 +857,7 @@ async def test_cleanup_hook_is_idempotent_with_post_hook(): await logger.async_agentic_loop_cleanup_hook(plan=plan, kwargs={}) assert len(sandbox.delete_calls) == 1, ( - "cleanup running in finally after the success-path post hook already " - "deleted the sandbox must not double-delete" + "cleanup running in finally after the success-path post hook already deleted the sandbox must not double-delete" ) @@ -923,9 +884,7 @@ async def test_responses_plan_cleans_up_sandbox_when_followup_raises(): plan = AgenticLoopPlan( run_agentic_loop=True, - request_patch=AgenticLoopRequestPatch( - model="gpt-5", messages=[{"role": "user", "content": "x"}] - ), + request_patch=AgenticLoopRequestPatch(model="gpt-5", messages=[{"role": "user", "content": "x"}]), metadata={"sandbox_key": "sbxkey1"}, ) @@ -995,9 +954,7 @@ async def test_run_code_does_not_re_resolve_registry(monkeypatch): sandbox_tools.clear_sandbox_tools() - stdout = await logger._run_tool_call( - container=container, params=params, arguments='{"code":"print(1)"}' - ) + stdout = await logger._run_tool_call(container=container, params=params, arguments='{"code":"print(1)"}') finally: sandbox_tools.clear_sandbox_tools() @@ -1013,9 +970,7 @@ async def test_run_tool_call_surfaces_execution_error(): class ErroringSandbox(FakeSandbox): async def arun_code(self, *, container, code, **kwargs): self.run_calls.append({"container": container, "code": code}) - return CodeExecutionResult( - stdout="", error={"name": "ValueError", "value": "boom"} - ) + return CodeExecutionResult(stdout="", error={"name": "ValueError", "value": "boom"}) sandbox = ErroringSandbox() logger = CodeInterpreterInterceptionLogger(sandbox_config=sandbox) @@ -1036,9 +991,7 @@ async def test_run_tool_call_reports_unparseable_arguments(): logger = CodeInterpreterInterceptionLogger(sandbox_config=sandbox) container = await logger._create_container() - stdout = await logger._run_tool_call( - container=container[0], params=None, arguments="not-json" - ) + stdout = await logger._run_tool_call(container=container[0], params=None, arguments="not-json") assert stdout == "[invalid tool arguments: could not parse code]" assert not sandbox.run_calls, "code must not run when arguments cannot be parsed" @@ -1048,9 +1001,7 @@ async def test_run_tool_call_reports_unparseable_arguments(): async def test_pre_call_skips_provider_outside_scope(): """enabled_providers must filter the pre-call conversion so a request to an out-of-scope provider is left untouched.""" - logger = CodeInterpreterInterceptionLogger( - sandbox_config=FakeSandbox(), enabled_providers=["openai"] - ) + logger = CodeInterpreterInterceptionLogger(sandbox_config=FakeSandbox(), enabled_providers=["openai"]) kwargs = { "tools": [{"type": "code_interpreter", "container": {"type": "auto"}}], "custom_llm_provider": "anthropic", @@ -1119,6 +1070,7 @@ async def test_prune_expired_cache_deletes_underlying_container(): container, params, time.time() - handler_mod._CACHE_TTL_SECONDS - 1, + None, ) await logger._prune_expired_cache() @@ -1217,3 +1169,258 @@ async def test_extract_tool_calls_reads_object_attributes(): assert len(calls) == 1 assert calls[0]["call_id"] == "c9" assert calls[0]["arguments"] == '{"code":"print(1)"}' + + +# --------------------------------------------------------------------------- +# Sticky session tests +# --------------------------------------------------------------------------- + + +@pytest.mark.asyncio +async def test_pre_call_uses_session_id_from_metadata_as_sandbox_key(): + """When session_id is in request metadata, it becomes the sandbox key so the + container is shared across requests in the same session.""" + logger = CodeInterpreterInterceptionLogger(sandbox_config=FakeSandbox()) + session_id = "conv-abc-123" + kwargs = { + "tools": [{"type": "code_interpreter", "container": {"type": "auto"}}], + "custom_llm_provider": "openai", + "metadata": {"session_id": session_id}, + } + + result = await logger.async_pre_call_deployment_hook(kwargs, CallTypes.acompletion) + + assert result is not None + assert result[_SANDBOX_KEY] == session_id + assert result[_SESSION_SCOPED_KEY] is True + assert result["litellm_metadata"][_SANDBOX_KEY] == session_id + assert result["litellm_metadata"][_SESSION_SCOPED_KEY] is True + + +@pytest.mark.asyncio +async def test_pre_call_uses_session_id_from_litellm_metadata(): + """session_id in litellm_metadata also works as the sticky key.""" + logger = CodeInterpreterInterceptionLogger(sandbox_config=FakeSandbox()) + session_id = "sess-xyz-789" + kwargs = { + "tools": [{"type": "code_interpreter", "container": {"type": "auto"}}], + "custom_llm_provider": "openai", + "litellm_metadata": {"session_id": session_id}, + } + + result = await logger.async_pre_call_deployment_hook(kwargs, CallTypes.acompletion) + + assert result is not None + assert result[_SANDBOX_KEY] == session_id + assert result[_SESSION_SCOPED_KEY] is True + + +@pytest.mark.asyncio +async def test_pre_call_without_session_id_still_mints_random_key(): + """Requests without a session_id still get a server-minted random sandbox key.""" + logger = CodeInterpreterInterceptionLogger(sandbox_config=FakeSandbox()) + kwargs = { + "tools": [{"type": "code_interpreter", "container": {"type": "auto"}}], + "custom_llm_provider": "openai", + } + + result = await logger.async_pre_call_deployment_hook(kwargs, CallTypes.acompletion) + + assert result is not None + assert _SESSION_SCOPED_KEY not in result or result[_SESSION_SCOPED_KEY] is False + assert len(result[_SANDBOX_KEY]) >= 16 + + +@pytest.mark.asyncio +async def test_session_scoped_sandbox_survives_agentic_loop_cleanup(): + """A session-scoped sandbox must NOT be deleted by the cleanup or post hooks; + it needs to persist across requests within the same session.""" + sandbox = FakeSandbox(stdout="42") + logger = CodeInterpreterInterceptionLogger(sandbox_config=sandbox) + session_id = "conv-persist-me" + + plan = await logger.async_build_agentic_loop_plan( + tools={ + "tool_calls": [ + { + "call_id": "c1", + "name": LITELLM_CODE_EXECUTION_TOOL_NAME, + "arguments": '{"code":"x = 10"}', + } + ] + }, + model="gpt-4o-mini", + messages=[{"role": "user", "content": "set x"}], + response=FakeResponse(output=[_function_call_item()]), + anthropic_messages_provider_config=None, + anthropic_messages_optional_request_params={"tools": []}, + logging_obj=FakeLogging(litellm_call_id="k1"), + stream=False, + kwargs={ + "litellm_call_id": "k1", + _SANDBOX_KEY: session_id, + _SESSION_SCOPED_KEY: True, + }, + ) + + assert plan.metadata["is_session_scoped"] is True + + await logger.async_post_agentic_loop_response_hook( + response=FakeResponse(output=[{"type": "message", "content": []}]), + plan=plan, + kwargs={}, + ) + await logger.async_agentic_loop_cleanup_hook(plan=plan, kwargs={}) + + assert not sandbox.delete_calls, ( + "session-scoped sandbox must not be deleted after a single agentic loop; " + "it must persist for the next request in the session" + ) + assert session_id in logger._container_cache, "session-scoped container must remain in cache after loop ends" + + +@pytest.mark.asyncio +async def test_session_scoped_sandbox_reused_across_sequential_requests(): + """Two sequential requests with the same session_id must share one container, + confirming state (e.g. assigned variables) can persist across HTTP requests.""" + sandbox = FakeSandbox(stdout="42") + logger = CodeInterpreterInterceptionLogger(sandbox_config=sandbox) + session_id = "conv-reuse-me" + + common_plan_args = dict( + tools={ + "tool_calls": [ + { + "call_id": "c1", + "name": LITELLM_CODE_EXECUTION_TOOL_NAME, + "arguments": '{"code":"print(1)"}', + } + ] + }, + model="gpt-4o-mini", + messages=[{"role": "user", "content": "x"}], + response=FakeResponse(output=[_function_call_item()]), + anthropic_messages_provider_config=None, + anthropic_messages_optional_request_params={"tools": []}, + stream=False, + ) + session_kwargs = {_SANDBOX_KEY: session_id, _SESSION_SCOPED_KEY: True} + + plan1 = await logger.async_build_agentic_loop_plan( + logging_obj=FakeLogging(litellm_call_id="req1"), + kwargs={"litellm_call_id": "req1", **session_kwargs}, + **common_plan_args, + ) + await logger.async_post_agentic_loop_response_hook( + response=FakeResponse(output=[{"type": "message", "content": []}]), + plan=plan1, + kwargs={}, + ) + + plan2 = await logger.async_build_agentic_loop_plan( + logging_obj=FakeLogging(litellm_call_id="req2"), + kwargs={"litellm_call_id": "req2", **session_kwargs}, + **common_plan_args, + ) + await logger.async_post_agentic_loop_response_hook( + response=FakeResponse(output=[{"type": "message", "content": []}]), + plan=plan2, + kwargs={}, + ) + + assert len(sandbox.create_calls) == 1, ( + "a single container must serve both requests in the same session; " + "two creates means state cannot persist between requests" + ) + assert len(sandbox.delete_calls) == 0, "the session container must still be alive after both requests complete" + + +@pytest.mark.asyncio +async def test_non_session_sandbox_still_deleted_after_loop(): + """Without a session_id, the existing per-request ephemeral behavior is unchanged.""" + sandbox = FakeSandbox(stdout="42") + logger = CodeInterpreterInterceptionLogger(sandbox_config=sandbox) + + plan = await _build_plan(logger, sandbox, call_id="k1") + await logger.async_post_agentic_loop_response_hook( + response=FakeResponse(output=[{"type": "message", "content": []}]), + plan=plan, + kwargs={}, + ) + + assert len(sandbox.delete_calls) == 1, "non-session sandbox must still be cleaned up after each request" + + +@pytest.mark.asyncio +async def test_sandbox_key_scoped_to_api_key_hash_isolates_users(): + """Two callers supplying the same session_id but different API key hashes must + each get their own sandbox; sharing across tenants would let one read or mutate + the other's interpreter state.""" + logger = CodeInterpreterInterceptionLogger(sandbox_config=FakeSandbox()) + session_id = "same-session-id" + + result_a = await logger.async_pre_call_deployment_hook( + { + "tools": [{"type": "code_interpreter"}], + "custom_llm_provider": "openai", + "metadata": {"session_id": session_id}, + "user_api_key_hash": "hash-for-tenant-a", + }, + CallTypes.acompletion, + ) + result_b = await logger.async_pre_call_deployment_hook( + { + "tools": [{"type": "code_interpreter"}], + "custom_llm_provider": "openai", + "metadata": {"session_id": session_id}, + "user_api_key_hash": "hash-for-tenant-b", + }, + CallTypes.acompletion, + ) + + assert result_a is not None and result_b is not None + assert result_a[_SANDBOX_KEY] != result_b[_SANDBOX_KEY], ( + "same session_id from different API keys must yield different sandbox keys; " + "otherwise tenant A can read tenant B's sandbox state" + ) + assert "hash-for-tenant-a" in result_a[_SANDBOX_KEY] + assert "hash-for-tenant-b" in result_b[_SANDBOX_KEY] + + +@pytest.mark.asyncio +async def test_per_identity_cap_evicts_lru_session(): + """When a single identity holds the cap limit of session sandboxes and opens a + new one, the least-recently-used session is evicted so the allocation stays + bounded. Without this, rotating session IDs is an unbounded sandbox leak.""" + from litellm.integrations.code_interpreter_interception.handler import _SESSION_SCOPED_PER_IDENTITY_CAP + + sandbox = FakeSandbox(stdout="ok") + logger = CodeInterpreterInterceptionLogger(sandbox_config=sandbox) + identity = "hash-for-identity-x" + + for i in range(_SESSION_SCOPED_PER_IDENTITY_CAP): + await logger._get_or_create_container( + cache_key=f"{identity}:session-{i}", + identity=identity, + ) + logger._container_cache[f"{identity}:session-{i}"] = ( + logger._container_cache[f"{identity}:session-{i}"][0], + logger._container_cache[f"{identity}:session-{i}"][1], + float(i), + identity, + ) + + assert len(logger._container_cache) == _SESSION_SCOPED_PER_IDENTITY_CAP + + await logger._get_or_create_container( + cache_key=f"{identity}:session-new", + identity=identity, + ) + + assert len(logger._container_cache) == _SESSION_SCOPED_PER_IDENTITY_CAP, ( + "adding a new session beyond the cap must evict one entry so total stays bounded" + ) + assert f"{identity}:session-0" not in logger._container_cache, ( + "the entry with the oldest last_accessed timestamp must be evicted first (LRU)" + ) + assert len(sandbox.delete_calls) == 1, "evicted sandbox must be deleted, not just removed from cache" From 846dbecbf2bcf3e11c60f56971c16c21f13f40fd Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 30 Jun 2026 19:02:00 -0700 Subject: [PATCH 47/79] feat(proxy): support object_permission in default_key_generate_params (#31776) * feat(proxy): support object_permission in default_key_generate_params default_key_generate_params filled in a fixed whitelist of scalar fields plus a full-replace for models/metadata, but never touched object_permission, so admins had no way to set a default (e.g. mcp_tool_search_enabled, vector_stores) applied to every new key. Merge object_permission field-by-field instead of replacing it wholesale, so a caller-supplied field (e.g. mcp_servers) is preserved alongside defaulted fields the caller left unset. * ci: retrigger proxy_pass_through_endpoint_tests (suspected flake, unrelated to this PR's diff) * fix(proxy): apply default object_permission after team-scope validation Injecting the default before validate_key_vector_stores_against_team / validate_key_search_tools_against_team ran meant a default containing a team-scoped field (e.g. vector_stores) looked like a caller-requested permission, turning ordinary non-admin personal key creation into a 403. Merge the default into data_json after those checks instead, and guard against a non-dict default value. --- .../key_management_endpoints.py | 17 ++ .../test_key_management_endpoints.py | 258 ++++++++++++++++++ 2 files changed, 275 insertions(+) diff --git a/litellm/proxy/management_endpoints/key_management_endpoints.py b/litellm/proxy/management_endpoints/key_management_endpoints.py index 4106eae606c..523cb9b74e5 100644 --- a/litellm/proxy/management_endpoints/key_management_endpoints.py +++ b/litellm/proxy/management_endpoints/key_management_endpoints.py @@ -965,6 +965,23 @@ async def _common_key_generation_helper( is_proxy_admin=_is_proxy_admin_caller, ) + # Merge default_key_generate_params.object_permission in *after* the team-scope + # checks above, so an admin-configured default (e.g. vector_stores, search_tools) + # is never mistaken for a caller-requested permission and rejected by those + # non-admin/no-team checks. Only fields the caller left unset are filled in. + _default_object_permission = ( + litellm.default_key_generate_params.get("object_permission") + if litellm.default_key_generate_params is not None + else None + ) + if isinstance(_default_object_permission, dict): + _caller_object_permission = data_json.get("object_permission") + if _caller_object_permission is None: + data_json["object_permission"] = dict(_default_object_permission) + elif isinstance(_caller_object_permission, dict): + for _op_field, _op_default_value in _default_object_permission.items(): + _caller_object_permission.setdefault(_op_field, _op_default_value) + data_json = await _set_object_permission( data_json=data_json, prisma_client=prisma_client, diff --git a/tests/test_litellm/proxy/management_endpoints/test_key_management_endpoints.py b/tests/test_litellm/proxy/management_endpoints/test_key_management_endpoints.py index 04048020e18..ae62be8799f 100644 --- a/tests/test_litellm/proxy/management_endpoints/test_key_management_endpoints.py +++ b/tests/test_litellm/proxy/management_endpoints/test_key_management_endpoints.py @@ -7781,6 +7781,264 @@ async def test_default_key_generate_params_duration(monkeypatch): litellm.default_key_generate_params = original_value +async def test_default_key_generate_params_object_permission_applied_when_absent( + monkeypatch, +): + """ + default_key_generate_params.object_permission is applied to a key that + doesn't specify object_permission at all. + """ + import litellm + + mock_prisma_client = AsyncMock() + mock_insert_data = AsyncMock( + return_value=MagicMock( + token="hashed_token_123", litellm_budget_table=None, object_permission=None + ) + ) + mock_prisma_client.insert_data = mock_insert_data + mock_prisma_client.db = MagicMock() + mock_prisma_client.db.litellm_verificationtoken = MagicMock() + mock_prisma_client.db.litellm_verificationtoken.find_unique = AsyncMock( + return_value=None + ) + mock_prisma_client.db.litellm_verificationtoken.find_many = AsyncMock( + return_value=[] + ) + mock_prisma_client.db.litellm_verificationtoken.count = AsyncMock(return_value=0) + mock_prisma_client.db.litellm_verificationtoken.update = AsyncMock( + return_value=MagicMock( + token="hashed_token_123", litellm_budget_table=None, object_permission=None + ) + ) + mock_prisma_client.db.litellm_objectpermissiontable = MagicMock() + mock_prisma_client.db.litellm_objectpermissiontable.create = AsyncMock( + return_value=MagicMock(object_permission_id="objperm-1") + ) + + monkeypatch.setattr("litellm.proxy.proxy_server.prisma_client", mock_prisma_client) + + original_value = litellm.default_key_generate_params + litellm.default_key_generate_params = { + "object_permission": {"vector_stores": ["default-vs"]} + } + + try: + request = GenerateKeyRequest() # No object_permission specified + await _common_key_generation_helper( + data=request, + user_api_key_dict=UserAPIKeyAuth( + user_role=LitellmUserRoles.PROXY_ADMIN, + api_key="sk-1234", + user_id="1234", + ), + litellm_changed_by=None, + team_table=None, + ) + + created_data = mock_prisma_client.db.litellm_objectpermissiontable.create.call_args.kwargs["data"] + assert created_data["vector_stores"] == ["default-vs"] + finally: + litellm.default_key_generate_params = original_value + + +async def test_default_key_generate_params_object_permission_merges_partial( + monkeypatch, +): + """ + default_key_generate_params.object_permission fills only the fields the + caller left unset - an explicitly supplied field (agents here) is + preserved alongside the defaulted field (vector_stores). + """ + import litellm + from litellm.proxy._types import LiteLLM_ObjectPermissionBase + + mock_prisma_client = AsyncMock() + mock_insert_data = AsyncMock( + return_value=MagicMock( + token="hashed_token_123", litellm_budget_table=None, object_permission=None + ) + ) + mock_prisma_client.insert_data = mock_insert_data + mock_prisma_client.db = MagicMock() + mock_prisma_client.db.litellm_verificationtoken = MagicMock() + mock_prisma_client.db.litellm_verificationtoken.find_unique = AsyncMock( + return_value=None + ) + mock_prisma_client.db.litellm_verificationtoken.find_many = AsyncMock( + return_value=[] + ) + mock_prisma_client.db.litellm_verificationtoken.count = AsyncMock(return_value=0) + mock_prisma_client.db.litellm_verificationtoken.update = AsyncMock( + return_value=MagicMock( + token="hashed_token_123", litellm_budget_table=None, object_permission=None + ) + ) + mock_prisma_client.db.litellm_objectpermissiontable = MagicMock() + mock_prisma_client.db.litellm_objectpermissiontable.create = AsyncMock( + return_value=MagicMock(object_permission_id="objperm-2") + ) + + monkeypatch.setattr("litellm.proxy.proxy_server.prisma_client", mock_prisma_client) + + original_value = litellm.default_key_generate_params + litellm.default_key_generate_params = { + "object_permission": {"vector_stores": ["default-vs"]} + } + + try: + request = GenerateKeyRequest( + object_permission=LiteLLM_ObjectPermissionBase(agents=["agent-1"]) + ) + await _common_key_generation_helper( + data=request, + user_api_key_dict=UserAPIKeyAuth( + user_role=LitellmUserRoles.PROXY_ADMIN, + api_key="sk-1234", + user_id="1234", + ), + litellm_changed_by=None, + team_table=None, + ) + + created_data = mock_prisma_client.db.litellm_objectpermissiontable.create.call_args.kwargs["data"] + assert created_data["agents"] == ["agent-1"] + assert created_data["vector_stores"] == ["default-vs"] + finally: + litellm.default_key_generate_params = original_value + + +async def test_default_key_generate_params_object_permission_does_not_override_explicit( + monkeypatch, +): + """ + A field the caller explicitly set on object_permission must win over the + same field in default_key_generate_params. + """ + import litellm + from litellm.proxy._types import LiteLLM_ObjectPermissionBase + + mock_prisma_client = AsyncMock() + mock_insert_data = AsyncMock( + return_value=MagicMock( + token="hashed_token_123", litellm_budget_table=None, object_permission=None + ) + ) + mock_prisma_client.insert_data = mock_insert_data + mock_prisma_client.db = MagicMock() + mock_prisma_client.db.litellm_verificationtoken = MagicMock() + mock_prisma_client.db.litellm_verificationtoken.find_unique = AsyncMock( + return_value=None + ) + mock_prisma_client.db.litellm_verificationtoken.find_many = AsyncMock( + return_value=[] + ) + mock_prisma_client.db.litellm_verificationtoken.count = AsyncMock(return_value=0) + mock_prisma_client.db.litellm_verificationtoken.update = AsyncMock( + return_value=MagicMock( + token="hashed_token_123", litellm_budget_table=None, object_permission=None + ) + ) + mock_prisma_client.db.litellm_objectpermissiontable = MagicMock() + mock_prisma_client.db.litellm_objectpermissiontable.create = AsyncMock( + return_value=MagicMock(object_permission_id="objperm-3") + ) + + monkeypatch.setattr("litellm.proxy.proxy_server.prisma_client", mock_prisma_client) + + original_value = litellm.default_key_generate_params + litellm.default_key_generate_params = { + "object_permission": {"vector_stores": ["default-vs"]} + } + + try: + request = GenerateKeyRequest( + object_permission=LiteLLM_ObjectPermissionBase( + vector_stores=["explicit-vs"] + ) + ) + await _common_key_generation_helper( + data=request, + user_api_key_dict=UserAPIKeyAuth( + user_role=LitellmUserRoles.PROXY_ADMIN, + api_key="sk-1234", + user_id="1234", + ), + litellm_changed_by=None, + team_table=None, + ) + + created_data = mock_prisma_client.db.litellm_objectpermissiontable.create.call_args.kwargs["data"] + assert created_data["vector_stores"] == ["explicit-vs"] + finally: + litellm.default_key_generate_params = original_value + + +async def test_default_key_generate_params_object_permission_not_rejected_for_non_admin_personal_key( + monkeypatch, +): + """ + Regression test: a default_key_generate_params.object_permission containing + a team-scoped field (vector_stores) must not turn ordinary non-admin + personal key creation into a 403. The default is merged in *after* the + caller-scope validation, so it is never mistaken for a caller-requested + permission. + """ + import litellm + + mock_prisma_client = AsyncMock() + mock_insert_data = AsyncMock( + return_value=MagicMock( + token="hashed_token_123", litellm_budget_table=None, object_permission=None + ) + ) + mock_prisma_client.insert_data = mock_insert_data + mock_prisma_client.db = MagicMock() + mock_prisma_client.db.litellm_verificationtoken = MagicMock() + mock_prisma_client.db.litellm_verificationtoken.find_unique = AsyncMock( + return_value=None + ) + mock_prisma_client.db.litellm_verificationtoken.find_many = AsyncMock( + return_value=[] + ) + mock_prisma_client.db.litellm_verificationtoken.count = AsyncMock(return_value=0) + mock_prisma_client.db.litellm_verificationtoken.update = AsyncMock( + return_value=MagicMock( + token="hashed_token_123", litellm_budget_table=None, object_permission=None + ) + ) + mock_prisma_client.db.litellm_objectpermissiontable = MagicMock() + mock_prisma_client.db.litellm_objectpermissiontable.create = AsyncMock( + return_value=MagicMock(object_permission_id="objperm-4") + ) + + monkeypatch.setattr("litellm.proxy.proxy_server.prisma_client", mock_prisma_client) + + original_value = litellm.default_key_generate_params + litellm.default_key_generate_params = { + "object_permission": {"vector_stores": ["default-vs"]} + } + + try: + request = GenerateKeyRequest(user_id="alice") # No object_permission specified + response = await _common_key_generation_helper( + data=request, + user_api_key_dict=UserAPIKeyAuth( + user_role=LitellmUserRoles.INTERNAL_USER, + api_key="sk-alice", + user_id="alice", + ), + litellm_changed_by=None, + team_table=None, + ) + + assert response is not None + created_data = mock_prisma_client.db.litellm_objectpermissiontable.create.call_args.kwargs["data"] + assert created_data["vector_stores"] == ["default-vs"] + finally: + litellm.default_key_generate_params = original_value + + @pytest.mark.asyncio async def test_build_key_filter_member_team_service_accounts(): """ From 50b936c75e8d7066968b8b6e31b73969d95790ae Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 30 Jun 2026 19:19:34 -0700 Subject: [PATCH 48/79] feat(guardrails/headroom): add CCR (compress-cache-retrieve) via agentic loop (#31681) * feat(guardrails/headroom): add CCR (compress-cache-retrieve) support via agentic loop When Headroom's /v1/compress returns messages containing hash markers (hash=[a-f0-9]{24}), inject a headroom_retrieve tool into the request. When the LLM calls that tool, intercept via async_should_run_agentic_loop and async_build_agentic_loop_plan, call GET /v1/retrieve/{hash} on the Headroom sidecar, and replay the LLM with the original content as a tool result -- all transparent to the caller. * style: run ruff format on headroom guardrail and tests * fix(guardrails/headroom): detect headroom_retrieve calls in both OpenAI and Anthropic response formats * test(guardrails/headroom): add test for Anthropic content block format detection in CCR loop * ci: trigger CI checks * fix(guardrails/headroom): replace List/Dict with list/dict to fix UP006 ruff violations * fix(guardrails/headroom): replace except Exception with except ValueError to fix BLE001 * fix(guardrails/headroom): add Responses API output format detection for CCR tool calls * refactor(guardrails/headroom): extract format-specific helpers to fix C901 complexity * fix(guardrails/headroom): scope CCR retrieval to hashes produced by current request Previously any LLM-supplied hash in a headroom_retrieve tool call was forwarded to the Headroom retrieve API, letting a crafted tool call fetch arbitrary cached content. Validate the hash against the set produced by compressing the current request's messages before calling retrieve. * fix(guardrails/headroom): track issued hashes server-side, fix Responses API replay shape Hash validation now also checks an in-memory cache of hashes actually returned by /v1/compress, not just whether the hash text appears somewhere in the request's messages. The message-text check alone is forgeable: an attacker can plant a hash-shaped string in their own prompt and have it treated as valid. Responses API follow-up now emits function_call/function_call_output items keyed by call_id instead of chat-style assistant/tool messages, since the Responses API does not accept the latter as input. Also fixes call_id/id field priority when extracting tool calls from Responses API output, since call_id (not id) is what must match between the function_call and its output. * fix(guardrails/headroom): drop redundant quoted type annotations UP037 flags quotes on annotations that are already lazily evaluated via `from __future__ import annotations`. * test(guardrails/headroom): add missing pytest.mark.asyncio decorators Functional under asyncio_mode=auto, but every other async test in the file has the decorator for consistency. * fix(guardrails/headroom): scope CCR hashes per call_id, fix Anthropic replay shape Two real gaps found in review: 1. The instance-wide issued-hash cache combined with a message-text check did not actually scope retrieval to the request that produced the hash. A hash issued for request A stays in the shared cache until TTL expiry, and the message-text check is satisfied by any request whose own messages happen to echo that hash string. Request B could plant A's hash in its own prompt and retrieve A's content. Fixed by keying the issued-hash cache by litellm_call_id, matching the pattern already used in compression_interception: a hash is only honored when it was issued under the exact call_id resolving for the current request. 2. The Anthropic Messages replay path fell through to the chat-style assistant/tool-message builder, which Anthropic does not accept. Anthropic requires the tool_use block echoed in an assistant message paired with a tool_result block in a user message, keyed by tool_use_id. Added a dedicated branch for this shape. * docs: note proactive API-fragmentation helper convention Add a bullet to the coding-conventions list: look for or add a shared helper when logic branches on API surface (chat completions vs Anthropic Messages vs Responses API), instead of duplicating format-detection per module. * fix(guardrails/headroom): fix Anthropic tool-shape detection, extract shared cross-API tool util Live e2e testing against the real Anthropic API surfaced two bugs the mocked unit tests couldn't catch because they used MagicMock responses instead of realistic response shapes: 1. has_headroom_retrieve_tool only recognized OpenAI-shaped function tools. By the time an Anthropic Messages response reaches the agentic-loop gate, the tool this guardrail injected has already been transformed into Anthropic's native shape (type: "custom", top-level "name"), so the gate never fired for real Anthropic requests. 2. AnthropicMessagesResponse is a TypedDict, so real responses are plain dicts at runtime, not objects with attribute access. The extractors and format detectors used bare getattr(), which silently returns nothing for dict responses instead of reading the actual key. Extracted the cross-API-surface tool-call extraction and tool-presence check into litellm/litellm_core_utils/prompt_templates/factory.py (get_tool_calls_from_response, has_tool_with_name) so this format fragmentation is handled in one place instead of being duplicated per-guardrail, and reused the existing repair-aware parse_tool_call_arguments from common_utils instead of a naive json.loads. headroom.py now delegates to these shared helpers. Confirmed live against the real Anthropic API: the retrieve loop now fires and successfully retrieves the correct hash's content through the full compress -> tool-call -> retrieve -> replay round-trip. * fix(guardrails/headroom): fix ruff-strict UP006/I001 budget violations Use lowercase list/dict generics in the new factory.py tool-call helpers instead of typing.List/Dict, drop the now-unused Tuple import in headroom.py, and reorder the new factory import ahead of the llms.custom_httpx import to satisfy import sorting. * fix(guardrails/headroom): match Anthropic tools without a type field Anthropic's documented client tool format is just name + input_schema; type: "custom" is only one possible value, not a requirement. Match any non-OpenAI-shaped tool on its top-level name instead of requiring type == "custom". --- CLAUDE.md | 1 + .../prompt_templates/factory.py | 145 +++- .../guardrail_hooks/headroom/headroom.py | 355 ++++++++- tests/llm_translation/test_prompt_factory.py | 99 +++ .../guardrail_hooks/test_headroom.py | 741 +++++++++++++++++- 5 files changed, 1319 insertions(+), 22 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 0cd1605b1b2..83bf3e22d27 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -69,6 +69,7 @@ Follow these coding conventions for new/updated code (a three-line fix in a lega - No monster files or god objects - No file sprawl: deliberate file and folder structure - Standard over hand-rolled: use the official SDK or a library where one exists; where none does, follow industry standards instead of inventing local conventions +- API-fragmentation-aware: when logic must branch on which API surface produced or consumes data (e.g. chat completions vs Anthropic Messages vs Responses API shapes), proactively look for an existing shared helper (e.g. `litellm_core_utils/prompt_templates/factory.py`) before writing per-surface parsing in the new module; if none exists, add one there instead of duplicating the same format-detection logic in every new guardrail/integration Follow conventional commits for commit names and PR titles diff --git a/litellm/litellm_core_utils/prompt_templates/factory.py b/litellm/litellm_core_utils/prompt_templates/factory.py index 1f0df51d7de..c2448430387 100644 --- a/litellm/litellm_core_utils/prompt_templates/factory.py +++ b/litellm/litellm_core_utils/prompt_templates/factory.py @@ -6,7 +6,7 @@ import mimetypes import re import xml.etree.ElementTree as ET from enum import Enum -from typing import Any, Dict, List, Optional, Set, Tuple, Union, cast, overload +from typing import Any, Dict, List, Optional, Set, Tuple, TypedDict, Union, cast, overload from jinja2.sandbox import ImmutableSandboxedEnvironment @@ -5322,3 +5322,146 @@ def get_attribute_or_key(tool_or_function, attribute, default=None): if hasattr(tool_or_function, attribute): return getattr(tool_or_function, attribute) return tool_or_function.get(attribute, default) + + +class NormalizedToolCall(TypedDict): + id: Optional[str] + name: Optional[str] + arguments: dict[str, Any] + + +def _parse_tool_call_arguments(raw: Any, tool_name: Optional[str], context: str) -> dict[str, Any]: + # Anthropic's tool_use blocks already carry a parsed dict in "input"; + # chat completions and the Responses API carry a JSON string that may be + # truncated by the model, so route those through the repair-aware parser. + if isinstance(raw, dict): + return raw + if not isinstance(raw, str): + return {} + from litellm.litellm_core_utils.prompt_templates.common_utils import ( + parse_tool_call_arguments, + ) + + try: + parsed = parse_tool_call_arguments(raw, tool_name=tool_name, context=context) + except ValueError as e: + verbose_logger.warning("Failed to parse tool call arguments: %s", e) + return {} + return parsed if isinstance(parsed, dict) else {} + + +def _tool_calls_from_chat_completion_response(response: Any) -> list[NormalizedToolCall]: + choices = get_attribute_or_key(response, "choices", None) + if not (isinstance(choices, list) and choices): + return [] + message = get_attribute_or_key(choices[0], "message", None) + tool_calls = get_attribute_or_key(message, "tool_calls", None) if message else None + if not isinstance(tool_calls, list): + return [] + result: list[NormalizedToolCall] = [] + for tc in tool_calls: + fn = get_attribute_or_key(tc, "function", None) + if fn is None: + continue + name = get_attribute_or_key(fn, "name") + result.append( + NormalizedToolCall( + id=get_attribute_or_key(tc, "id"), + name=name, + arguments=_parse_tool_call_arguments( + get_attribute_or_key(fn, "arguments", "{}"), + tool_name=name, + context="chat completions", + ), + ) + ) + return result + + +def _tool_calls_from_responses_api_response(response: Any) -> list[NormalizedToolCall]: + output = get_attribute_or_key(response, "output", None) + if not isinstance(output, list): + return [] + result: list[NormalizedToolCall] = [] + for item in output: + if get_attribute_or_key(item, "type") != "function_call": + continue + name = get_attribute_or_key(item, "name") + result.append( + NormalizedToolCall( + id=get_attribute_or_key(item, "call_id") or get_attribute_or_key(item, "id"), + name=name, + arguments=_parse_tool_call_arguments( + get_attribute_or_key(item, "arguments", "{}"), + tool_name=name, + context="responses API", + ), + ) + ) + return result + + +def _tool_calls_from_anthropic_messages_response(response: Any) -> list[NormalizedToolCall]: + content = get_attribute_or_key(response, "content", None) + if not isinstance(content, list): + return [] + result: list[NormalizedToolCall] = [] + for block in content: + if get_attribute_or_key(block, "type") != "tool_use": + continue + raw_input = get_attribute_or_key(block, "input", {}) + result.append( + NormalizedToolCall( + id=get_attribute_or_key(block, "id"), + name=get_attribute_or_key(block, "name"), + arguments=raw_input if isinstance(raw_input, dict) else {}, + ) + ) + return result + + +def get_tool_calls_from_response(response: Any) -> list[NormalizedToolCall]: + """ + Extract tool/function calls from a response object into a normalized + ``{"id", "name", "arguments"}`` shape, regardless of which API surface + produced it: chat completions (``choices[].message.tool_calls``), + the Responses API (``output`` items of type ``function_call``), or the + Anthropic Messages API (``content`` blocks of type ``tool_use``). + + Callers that only care about a specific tool should filter the result by + ``name`` themselves -- this returns every tool call found. + """ + for extractor in ( + _tool_calls_from_chat_completion_response, + _tool_calls_from_responses_api_response, + _tool_calls_from_anthropic_messages_response, + ): + tool_calls = extractor(response) + if tool_calls: + return tool_calls + return [] + + +def has_tool_with_name(tools: Any, tool_name: str) -> bool: + """ + Check whether a tools list (as sent to an LLM) includes a tool with the + given name, regardless of shape: OpenAI-style function tools + (``{"type": "function", "function": {"name": ...}}``) or Anthropic's + native tool shape (a top-level ``"name"``, e.g. + ``{"name": ..., "input_schema": ...}``). Anthropic's documented client + tool format doesn't require a ``"type"`` key at all -- ``"custom"`` is + only one of several possible values -- so any non-OpenAI-shaped tool is + matched on its top-level ``"name"``. + """ + if not isinstance(tools, list): + return False + for tool in tools: + if not isinstance(tool, dict): + continue + function = tool.get("function") + if tool.get("type") == "function" and isinstance(function, dict): + if function.get("name") == tool_name: + return True + elif tool.get("name") == tool_name: + return True + return False diff --git a/litellm/proxy/guardrails/guardrail_hooks/headroom/headroom.py b/litellm/proxy/guardrails/guardrail_hooks/headroom/headroom.py index 2228ccf3997..4badb48e2eb 100644 --- a/litellm/proxy/guardrails/guardrail_hooks/headroom/headroom.py +++ b/litellm/proxy/guardrails/guardrail_hooks/headroom/headroom.py @@ -1,6 +1,10 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Literal +import json +import re +import time +import uuid +from typing import TYPE_CHECKING, Any, Literal, Optional import httpx from fastapi import HTTPException @@ -12,12 +16,18 @@ from litellm.integrations.custom_guardrail import ( CustomGuardrail, log_guardrail_information, ) +from litellm.litellm_core_utils.prompt_templates.factory import ( + get_attribute_or_key, + get_tool_calls_from_response, + has_tool_with_name, +) from litellm.llms.custom_httpx.http_handler import ( get_async_httpx_client, # pyright: ignore[reportUnknownVariableType] httpxSpecialProvider, ) from litellm.secret_managers.main import get_secret_str from litellm.types.guardrails import GuardrailEventHooks, Mode +from litellm.types.integrations.custom_logger import AgenticLoopPlan, AgenticLoopRequestPatch from litellm.types.utils import GenericGuardrailAPIInputs if TYPE_CHECKING: @@ -25,6 +35,9 @@ if TYPE_CHECKING: from litellm.types.proxy.guardrails.guardrail_hooks.base import GuardrailConfigModel BYPASS_HEADER = "x-headroom-bypass" +HEADROOM_RETRIEVE_TOOL_NAME = "headroom_retrieve" +_HASH_PATTERN = re.compile(r"hash=([a-f0-9]{24})") +_HASH_CACHE_TTL_SECONDS = 15 * 60 def _is_str_object_dict(value: object) -> TypeGuard[dict[str, object]]: # guard-ok: isinstance narrows correctly; predicate is trivially correct # fmt: skip @@ -35,6 +48,163 @@ def _is_object_list(value: object) -> TypeGuard[list[object]]: # guard-ok: isin return isinstance(value, list) +def extract_hashes_from_messages(messages: list[dict[str, object]]) -> list[str]: + hashes: list[str] = [] + for msg in messages: + content = msg.get("content") + if isinstance(content, str): + hashes.extend(_HASH_PATTERN.findall(content)) + elif isinstance(content, list): + for block in content: + if isinstance(block, dict): + text = block.get("text") + if isinstance(text, str): + hashes.extend(_HASH_PATTERN.findall(text)) + return hashes + + +def _build_headroom_retrieve_tool() -> dict[str, object]: + return { + "type": "function", + "function": { + "name": HEADROOM_RETRIEVE_TOOL_NAME, + "description": ( + "Retrieve original content that was compressed by Headroom. " + "Call this when you encounter a compression marker containing a hash." + ), + "parameters": { + "type": "object", + "properties": { + "hash": { + "type": "string", + "description": "The 24-character hex hash from the compression marker.", + }, + "query": { + "type": "string", + "description": "Optional search query for BM25-ranked retrieval.", + }, + }, + "required": ["hash"], + }, + }, + } + + +def _resolve_call_id(logging_obj: object, request_state: dict[str, object]) -> Optional[str]: + """Resolve the litellm_call_id shared by a request's pre-call hook and its + agentic-loop hooks, so CCR hash validation can be scoped per call instead + of trusting any hash-shaped string that shows up in message text.""" + logging_call_id = getattr(logging_obj, "litellm_call_id", None) + if isinstance(logging_call_id, str) and logging_call_id: + return logging_call_id + kwargs_call_id = request_state.get("litellm_call_id") + return kwargs_call_id if isinstance(kwargs_call_id, str) else None + + +def has_headroom_retrieve_tool(tools: object) -> bool: + return has_tool_with_name(tools, HEADROOM_RETRIEVE_TOOL_NAME) + + +def _extract_headroom_tool_calls(response: object) -> list[dict[str, object]]: + return [ + {"id": tc["id"], "type": "function", "name": tc["name"], "arguments": tc["arguments"]} + for tc in get_tool_calls_from_response(response) + if tc["name"] == HEADROOM_RETRIEVE_TOOL_NAME + ] + + +def _build_assistant_message_from_response(response: object) -> dict[str, object]: + choices = getattr(response, "choices", None) + if not isinstance(choices, list) or not choices: + return {"role": "assistant", "content": None, "tool_calls": []} + message = getattr(choices[0], "message", None) + if message is None: + return {"role": "assistant", "content": None, "tool_calls": []} + content = getattr(message, "content", None) + tool_calls = getattr(message, "tool_calls", None) + raw_tool_calls: list[dict[str, object]] = [] + if isinstance(tool_calls, list): + for tc in tool_calls: + fn = getattr(tc, "function", None) + raw_tool_calls.append( + { + "id": getattr(tc, "id", None), + "type": "function", + "function": { + "name": getattr(fn, "name", None) if fn else None, + "arguments": getattr(fn, "arguments", "{}") if fn else "{}", + }, + } + ) + return {"role": "assistant", "content": content, "tool_calls": raw_tool_calls} + + +def _is_responses_api_response(response: object) -> bool: + # Real response objects can be plain dicts at runtime (e.g. TypedDict-based + # response types), so getattr alone would silently miss the key -- use the + # same dict-or-object accessor as the tool-call extractors. + return isinstance(get_attribute_or_key(response, "output", None), list) + + +def _is_anthropic_messages_response(response: object) -> bool: + return isinstance(get_attribute_or_key(response, "content", None), list) + + +def _build_anthropic_followup_messages( + retrieved: list[tuple[dict[str, object], str]], +) -> list[dict[str, object]]: + """Build Anthropic Messages API follow-up messages for a tool round-trip. + + Anthropic requires the tool_use block to be echoed back in an assistant + message, paired with a tool_result block in a user message keyed by the + same tool_use_id -- it does not accept chat-style tool-role messages. + """ + assistant_message: dict[str, object] = { + "role": "assistant", + "content": [ + { + "type": "tool_use", + "id": tool_call.get("id"), + "name": tool_call.get("name"), + "input": tool_call.get("arguments", {}), + } + for tool_call, _ in retrieved + ], + } + user_message: dict[str, object] = { + "role": "user", + "content": [ + {"type": "tool_result", "tool_use_id": tool_call.get("id"), "content": content} + for tool_call, content in retrieved + ], + } + return [assistant_message, user_message] + + +def _build_responses_followup_items( + retrieved: list[tuple[dict[str, object], str]], +) -> list[dict[str, object]]: + """Build Responses API input items for a tool round-trip. + + The Responses API does not accept chat-style assistant/tool messages as + follow-up input; it requires the model's function_call to be echoed back + paired with a function_call_output keyed by the same call_id. + """ + items: list[dict[str, object]] = [] + for tool_call, content in retrieved: + call_id = tool_call.get("id") + items.append( + { + "type": "function_call", + "call_id": call_id, + "name": tool_call.get("name"), + "arguments": json.dumps(tool_call.get("arguments", {})), + } + ) + items.append({"type": "function_call_output", "call_id": call_id, "output": content}) + return items + + class HeadroomGuardrail(CustomGuardrail): def __init__( self, @@ -56,6 +226,7 @@ class HeadroomGuardrail(CustomGuardrail): self.async_handler = get_async_httpx_client( llm_provider=httpxSpecialProvider.GuardrailCallback, ) + self._issued_hashes_by_call_id: dict[str, tuple[frozenset[str], float]] = {} super().__init__( # pyright: ignore[reportUnknownMemberType] guardrail_name=guardrail_name, event_hook=event_hook, @@ -72,6 +243,20 @@ class HeadroomGuardrail(CustomGuardrail): value = headers.get(BYPASS_HEADER) return str(value).lower() == "true" + def _request_headers(self) -> dict[str, str]: + headers: dict[str, str] = {"Content-Type": "application/json"} + if self.headroom_api_key: + headers["Authorization"] = f"Bearer {self.headroom_api_key}" + return headers + + def _prune_expired_hashes(self) -> None: + now = time.monotonic() + self._issued_hashes_by_call_id = { + call_id: (hashes, expiry) + for call_id, (hashes, expiry) in self._issued_hashes_by_call_id.items() + if expiry > now + } + async def _call_compress( self, messages: list[dict[str, object]], @@ -81,15 +266,11 @@ class HeadroomGuardrail(CustomGuardrail): if model: payload["model"] = model - request_headers: dict[str, str] = {"Content-Type": "application/json"} - if self.headroom_api_key: - request_headers["Authorization"] = f"Bearer {self.headroom_api_key}" - try: raw_response: HttpxResponse | None = await self.async_handler.post( # pyright: ignore[reportUnknownMemberType] url=f"{self.headroom_api_base}/v1/compress", json=payload, - headers=request_headers, + headers=self._request_headers(), ) except (httpx.ConnectError, httpx.TimeoutException, httpx.TransportError) as e: raise HTTPException( @@ -118,7 +299,7 @@ class HeadroomGuardrail(CustomGuardrail): try: body: object = response.json() - except Exception: + except ValueError: raise HTTPException( status_code=502, detail={ @@ -163,6 +344,44 @@ class HeadroomGuardrail(CustomGuardrail): ) return filtered + async def _call_retrieve(self, hash_value: str, query: str | None = None) -> str: + params: dict[str, str] = {} + if query: + params["query"] = query + + try: + raw_response: HttpxResponse | None = await self.async_handler.get( # pyright: ignore[reportUnknownMemberType] + url=f"{self.headroom_api_base}/v1/retrieve/{hash_value}", + params=params, + headers=self._request_headers(), + ) + except (httpx.ConnectError, httpx.TimeoutException, httpx.TransportError) as e: + verbose_proxy_logger.warning("Headroom: retrieve failed for hash=%s: %s", hash_value, e) + return f"[Headroom: retrieval failed for hash={hash_value}]" + + if raw_response is None or raw_response.status_code == 404: + return f"[Headroom: hash={hash_value} not found or expired]" + + if raw_response.status_code != 200: + verbose_proxy_logger.warning( + "Headroom: retrieve returned %s for hash=%s", + raw_response.status_code, + hash_value, + ) + return f"[Headroom: retrieval error {raw_response.status_code} for hash={hash_value}]" + + try: + body: object = raw_response.json() + except ValueError: + return raw_response.text + + if _is_str_object_dict(body): + original_content = body.get("original_content") + if isinstance(original_content, str): + return original_content + + return str(body) + @log_guardrail_information async def apply_guardrail( self, @@ -192,7 +411,127 @@ class HeadroomGuardrail(CustomGuardrail): model=model if isinstance(model, str) else None, ) - return {**inputs, "structured_messages": compressed} # pyright: ignore[reportReturnType] + hashes = extract_hashes_from_messages(compressed) + if not hashes: + return {**inputs, "structured_messages": compressed} # pyright: ignore[reportReturnType] + + self._prune_expired_hashes() + call_id = _resolve_call_id(logging_obj, request_data) + if not call_id: + call_id = str(uuid.uuid4()) + request_data["litellm_call_id"] = call_id + self._issued_hashes_by_call_id[call_id] = (frozenset(hashes), time.monotonic() + _HASH_CACHE_TTL_SECONDS) + + existing_tools = inputs.get("tools") + retrieve_tool = _build_headroom_retrieve_tool() + if isinstance(existing_tools, list) and not has_headroom_retrieve_tool(existing_tools): + merged_tools: list[object] = list(existing_tools) + [retrieve_tool] + elif existing_tools is None: + merged_tools = [retrieve_tool] + else: + merged_tools = list(existing_tools) if isinstance(existing_tools, list) else [retrieve_tool] + + return {**inputs, "structured_messages": compressed, "tools": merged_tools} # pyright: ignore[reportReturnType] + + async def async_should_run_agentic_loop( + self, + response: Any, + model: str, + messages: list[dict], + tools: Optional[list[dict]], + stream: bool, + custom_llm_provider: str, + kwargs: dict, + ) -> tuple[bool, dict]: + if not has_headroom_retrieve_tool(tools): + return False, {} + + tool_calls = _extract_headroom_tool_calls(response) + if not tool_calls: + return False, {} + + return True, {"tool_calls": tool_calls} + + async def async_build_agentic_loop_plan( + self, + tools: dict, + model: str, + messages: list[dict], + response: Any, + anthropic_messages_provider_config: Any, + anthropic_messages_optional_request_params: dict, + logging_obj: Any, + stream: bool, + kwargs: dict, + ) -> AgenticLoopPlan: + tool_calls: list[dict[str, object]] = tools.get("tool_calls", []) # type: ignore[assignment] + + self._prune_expired_hashes() + call_id = _resolve_call_id(logging_obj, kwargs) + valid_hashes = self._issued_hashes_by_call_id.get(call_id, (frozenset(), 0.0))[0] if call_id else frozenset() + + retrieved: list[tuple[dict[str, object], str]] = [] + for tc in tool_calls: + arguments = tc.get("arguments", {}) + hash_value = arguments.get("hash", "") if isinstance(arguments, dict) else "" + query = arguments.get("query") if isinstance(arguments, dict) else None + # A hash is only honored if it was issued by *this request's own* + # Headroom /v1/compress call, scoped by litellm_call_id. Scoping by + # message text alone is forgeable -- an attacker can plant a + # hash-shaped string in their own prompt, and a hash issued for one + # request would validate for any other request that echoes it back. + if str(hash_value) not in valid_hashes: + verbose_proxy_logger.warning( + "Headroom CCR: rejecting hash=%s not produced by current request compression", + hash_value, + ) + content = f"[Headroom: hash={hash_value} was not produced by the current request]" + else: + content = await self._call_retrieve( + hash_value=str(hash_value), + query=str(query) if query else None, + ) + verbose_proxy_logger.debug("Headroom CCR: retrieved hash=%s (%d chars)", hash_value, len(content)) + retrieved.append((tc, content)) + + if _is_responses_api_response(response): + follow_up_messages = list(messages) + _build_responses_followup_items(retrieved) + elif _is_anthropic_messages_response(response): + follow_up_messages = list(messages) + _build_anthropic_followup_messages(retrieved) + else: + assistant_message = _build_assistant_message_from_response(response) + tool_results = [ + {"role": "tool", "tool_call_id": tc.get("id"), "content": content} for tc, content in retrieved + ] + follow_up_messages = list(messages) + [assistant_message] + tool_results + + max_tokens: Optional[int] = anthropic_messages_optional_request_params.get("max_tokens") or kwargs.get( + "max_tokens" + ) + optional_params_without_max_tokens = { + k: v for k, v in anthropic_messages_optional_request_params.items() if k != "max_tokens" + } + + full_model_name = model + if logging_obj is not None: + agentic_params = getattr(logging_obj, "model_call_details", {}).get("agentic_loop_params", {}) + candidate = agentic_params.get("model", model) + if isinstance(candidate, str) and candidate: + full_model_name = candidate + + return AgenticLoopPlan( + run_agentic_loop=True, + request_patch=AgenticLoopRequestPatch( + model=full_model_name, + messages=follow_up_messages, + max_tokens=max_tokens, + optional_params=optional_params_without_max_tokens, + kwargs={ + k: v for k, v in kwargs.items() if not k.startswith("_headroom") and k != "litellm_logging_obj" + }, + ), + metadata={"tool_type": "headroom_ccr"}, + ) @staticmethod def get_config_model() -> type[GuardrailConfigModel[object]] | None: diff --git a/tests/llm_translation/test_prompt_factory.py b/tests/llm_translation/test_prompt_factory.py index 05a58a135d2..ae215602e31 100644 --- a/tests/llm_translation/test_prompt_factory.py +++ b/tests/llm_translation/test_prompt_factory.py @@ -20,6 +20,8 @@ from litellm.litellm_core_utils.prompt_templates.factory import ( convert_to_anthropic_tool_invoke, convert_url_to_base64, create_anthropic_image_param, + get_tool_calls_from_response, + has_tool_with_name, llama_2_chat_pt, prompt_factory, ) @@ -2385,3 +2387,100 @@ def test_anthropic_messages_pt_list_content_with_thinking_preserves_order(): # Verify signatures preserved in correct positions assert content[0]["signature"] == "sig_1" assert content[3]["signature"] == "sig_2" + + +def test_get_tool_calls_from_response_chat_completions(): + response = MagicMock() + response.output = None + response.content = None + tool_call = MagicMock() + tool_call.id = "call_abc" + tool_call.function.name = "my_tool" + tool_call.function.arguments = '{"x": 1}' + response.choices = [MagicMock(message=MagicMock(tool_calls=[tool_call]))] + + result = get_tool_calls_from_response(response) + + assert result == [{"id": "call_abc", "name": "my_tool", "arguments": {"x": 1}}] + + +def test_get_tool_calls_from_response_responses_api(): + response = MagicMock() + response.choices = None + response.content = None + response.output = [ + { + "type": "function_call", + "id": "fc_1", + "call_id": "call_1", + "name": "my_tool", + "arguments": '{"x": 2}', + } + ] + + result = get_tool_calls_from_response(response) + + assert result == [{"id": "call_1", "name": "my_tool", "arguments": {"x": 2}}] + + +def test_get_tool_calls_from_response_anthropic_messages(): + response = MagicMock() + response.choices = None + response.output = None + response.content = [ + {"type": "tool_use", "id": "toolu_1", "name": "my_tool", "input": {"x": 3}}, + ] + + result = get_tool_calls_from_response(response) + + assert result == [{"id": "toolu_1", "name": "my_tool", "arguments": {"x": 3}}] + + +def test_get_tool_calls_from_response_anthropic_messages_plain_dict(): + # AnthropicMessagesResponse is a TypedDict -- real responses are plain + # dicts at runtime, not objects with attribute access. A MagicMock-only + # test would pass even if the extractor used bare getattr() and silently + # returned nothing for a real response. + response = { + "content": [ + {"type": "tool_use", "id": "toolu_1", "name": "my_tool", "input": {"x": 3}}, + ] + } + + result = get_tool_calls_from_response(response) + + assert result == [{"id": "toolu_1", "name": "my_tool", "arguments": {"x": 3}}] + + +def test_get_tool_calls_from_response_no_tool_calls(): + response = MagicMock() + response.choices = None + response.output = None + response.content = None + + assert get_tool_calls_from_response(response) == [] + + +def test_has_tool_with_name_openai_function_shape(): + tools = [{"type": "function", "function": {"name": "my_tool"}}] + assert has_tool_with_name(tools, "my_tool") + assert not has_tool_with_name(tools, "other_tool") + + +def test_has_tool_with_name_anthropic_custom_shape(): + tools = [{"type": "custom", "name": "my_tool", "input_schema": {}}] + assert has_tool_with_name(tools, "my_tool") + assert not has_tool_with_name(tools, "other_tool") + + +def test_has_tool_with_name_anthropic_shape_without_type_field(): + # Anthropic's documented client tool format is just name + input_schema; + # "type" isn't required at all (type: "custom" is only one possible value). + tools = [{"name": "my_tool", "input_schema": {}}] + assert has_tool_with_name(tools, "my_tool") + assert not has_tool_with_name(tools, "other_tool") + + +def test_has_tool_with_name_not_a_list(): + assert not has_tool_with_name(None, "my_tool") + assert not has_tool_with_name("not a list", "my_tool") diff --git a/tests/test_litellm/proxy/guardrails/guardrail_hooks/test_headroom.py b/tests/test_litellm/proxy/guardrails/guardrail_hooks/test_headroom.py index 66395035384..f5ce6cedf64 100644 --- a/tests/test_litellm/proxy/guardrails/guardrail_hooks/test_headroom.py +++ b/tests/test_litellm/proxy/guardrails/guardrail_hooks/test_headroom.py @@ -8,15 +8,25 @@ Tests cover: - response-type input is passed through unchanged - /v1/compress HTTP error raises HTTPException - /v1/compress returning malformed JSON raises HTTPException +- CCR: headroom_retrieve tool injected when compressed messages contain hashes +- CCR: async_should_run_agentic_loop returns True when response has headroom_retrieve tool calls +- CCR: async_build_agentic_loop_plan calls retrieve endpoint and builds follow-up messages """ +import json +import time from unittest.mock import AsyncMock, MagicMock, patch import httpx import pytest from fastapi import HTTPException -from litellm.proxy.guardrails.guardrail_hooks.headroom.headroom import HeadroomGuardrail +from litellm.proxy.guardrails.guardrail_hooks.headroom.headroom import ( + HeadroomGuardrail, + extract_hashes_from_messages, + has_headroom_retrieve_tool, + HEADROOM_RETRIEVE_TOOL_NAME, +) from litellm.types.utils import GenericGuardrailAPIInputs FAKE_API_BASE = "https://headroom.example.com" @@ -30,6 +40,13 @@ COMPRESSED_MESSAGES = [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "A" * 500}, ] +COMPRESSED_MESSAGES_WITH_HASH = [ + {"role": "system", "content": "You are a helpful assistant."}, + { + "role": "user", + "content": "Summary. Retrieve more: hash=b573993006976af767214fac", + }, +] def _make_guardrail(**kwargs) -> HeadroomGuardrail: @@ -57,6 +74,36 @@ def _make_compress_response(messages: list, status: int = 200) -> MagicMock: return mock +def _make_retrieve_response(original_content: str, status: int = 200) -> MagicMock: + mock = MagicMock() + mock.status_code = status + mock.json.return_value = {"original_content": original_content} + mock.text = original_content + return mock + + +def _make_openai_response_with_tool_call(tool_name: str, arguments: dict, tool_id: str = "call_abc123") -> MagicMock: + fn = MagicMock() + fn.name = tool_name + fn.arguments = json.dumps(arguments) + + tc = MagicMock() + tc.id = tool_id + tc.type = "function" + tc.function = fn + + message = MagicMock() + message.content = None + message.tool_calls = [tc] + + choice = MagicMock() + choice.message = message + + response = MagicMock() + response.choices = [choice] + return response + + @pytest.fixture def guardrail() -> HeadroomGuardrail: return _make_guardrail() @@ -87,6 +134,567 @@ async def test_apply_guardrail_compresses_and_returns_structured_messages( assert result.get("structured_messages") == COMPRESSED_MESSAGES +@pytest.mark.asyncio +async def test_apply_guardrail_injects_retrieve_tool_when_hashes_present( + guardrail: HeadroomGuardrail, +): + inputs = GenericGuardrailAPIInputs( + texts=["A" * 5000], + structured_messages=ORIGINAL_MESSAGES, + ) + mock_response = _make_compress_response(COMPRESSED_MESSAGES_WITH_HASH) + + with patch.object( + guardrail.async_handler, + "post", + new_callable=AsyncMock, + return_value=mock_response, + ): + result = await guardrail.apply_guardrail( + inputs=inputs, + request_data={"model": "gpt-4o"}, + input_type="request", + ) + + tools = result.get("tools") + assert tools is not None + assert has_headroom_retrieve_tool(tools) + + +@pytest.mark.asyncio +async def test_apply_guardrail_no_tool_injected_when_no_hashes( + guardrail: HeadroomGuardrail, +): + inputs = GenericGuardrailAPIInputs( + texts=["A" * 5000], + structured_messages=ORIGINAL_MESSAGES, + ) + mock_response = _make_compress_response(COMPRESSED_MESSAGES) + + with patch.object( + guardrail.async_handler, + "post", + new_callable=AsyncMock, + return_value=mock_response, + ): + result = await guardrail.apply_guardrail( + inputs=inputs, + request_data={"model": "gpt-4o"}, + input_type="request", + ) + + tools = result.get("tools") + assert not has_headroom_retrieve_tool(tools or []) + + +@pytest.mark.asyncio +async def test_apply_guardrail_preserves_existing_tools_when_injecting( + guardrail: HeadroomGuardrail, +): + existing_tool = {"type": "function", "function": {"name": "my_tool", "parameters": {}}} + inputs = GenericGuardrailAPIInputs( + texts=["A" * 5000], + structured_messages=ORIGINAL_MESSAGES, + tools=[existing_tool], + ) + mock_response = _make_compress_response(COMPRESSED_MESSAGES_WITH_HASH) + + with patch.object( + guardrail.async_handler, + "post", + new_callable=AsyncMock, + return_value=mock_response, + ): + result = await guardrail.apply_guardrail( + inputs=inputs, + request_data={"model": "gpt-4o"}, + input_type="request", + ) + + tools = result.get("tools") + assert tools is not None + assert isinstance(tools, list) + assert any(isinstance(t, dict) and t.get("function", {}).get("name") == "my_tool" for t in tools) + assert has_headroom_retrieve_tool(tools) + + +@pytest.mark.asyncio +async def test_async_should_run_agentic_loop_returns_true_for_retrieve_call( + guardrail: HeadroomGuardrail, +): + retrieve_tool_def = [{"type": "function", "function": {"name": HEADROOM_RETRIEVE_TOOL_NAME}}] + response = _make_openai_response_with_tool_call( + tool_name=HEADROOM_RETRIEVE_TOOL_NAME, + arguments={"hash": "b573993006976af767214fac"}, + ) + + should_run, ctx = await guardrail.async_should_run_agentic_loop( + response=response, + model="gpt-4o", + messages=[], + tools=retrieve_tool_def, + stream=False, + custom_llm_provider="openai", + kwargs={}, + ) + + assert should_run is True + assert len(ctx["tool_calls"]) == 1 + assert ctx["tool_calls"][0]["arguments"]["hash"] == "b573993006976af767214fac" + + +@pytest.mark.asyncio +async def test_async_should_run_agentic_loop_returns_false_without_retrieve_tool( + guardrail: HeadroomGuardrail, +): + other_tools = [{"type": "function", "function": {"name": "other_tool"}}] + response = _make_openai_response_with_tool_call( + tool_name="other_tool", + arguments={}, + ) + + should_run, _ = await guardrail.async_should_run_agentic_loop( + response=response, + model="gpt-4o", + messages=[], + tools=other_tools, + stream=False, + custom_llm_provider="openai", + kwargs={}, + ) + + assert should_run is False + + +@pytest.mark.asyncio +async def test_async_should_run_agentic_loop_returns_false_when_no_retrieve_calls( + guardrail: HeadroomGuardrail, +): + retrieve_tool_def = [{"type": "function", "function": {"name": HEADROOM_RETRIEVE_TOOL_NAME}}] + response = _make_openai_response_with_tool_call( + tool_name="some_other_function", + arguments={}, + ) + + should_run, _ = await guardrail.async_should_run_agentic_loop( + response=response, + model="gpt-4o", + messages=[], + tools=retrieve_tool_def, + stream=False, + custom_llm_provider="openai", + kwargs={}, + ) + + assert should_run is False + + +@pytest.mark.asyncio +async def test_async_build_agentic_loop_plan_calls_retrieve_and_builds_messages( + guardrail: HeadroomGuardrail, +): + original_content = "This is the full compressed content." + mock_retrieve = _make_retrieve_response(original_content) + + tool_calls = [ + { + "id": "call_abc123", + "type": "function", + "name": HEADROOM_RETRIEVE_TOOL_NAME, + "arguments": {"hash": "b573993006976af767214fac"}, + } + ] + response = _make_openai_response_with_tool_call( + tool_name=HEADROOM_RETRIEVE_TOOL_NAME, + arguments={"hash": "b573993006976af767214fac"}, + tool_id="call_abc123", + ) + messages = [{"role": "user", "content": "What does it say? hash=b573993006976af767214fac"}] + guardrail._issued_hashes_by_call_id["call-1"] = ( + frozenset({"b573993006976af767214fac"}), + time.monotonic() + 999, + ) + + with patch.object( + guardrail.async_handler, + "get", + new_callable=AsyncMock, + return_value=mock_retrieve, + ) as mock_get: + plan = await guardrail.async_build_agentic_loop_plan( + tools={"tool_calls": tool_calls}, + model="gpt-4o", + messages=messages, + response=response, + anthropic_messages_provider_config=None, + anthropic_messages_optional_request_params={}, + logging_obj=None, + stream=False, + kwargs={"litellm_call_id": "call-1"}, + ) + + assert plan.run_agentic_loop is True + assert plan.request_patch is not None + + follow_up = plan.request_patch.messages + assert follow_up is not None + + tool_result_message = next((m for m in follow_up if m.get("role") == "tool"), None) + assert tool_result_message is not None + assert tool_result_message["content"] == original_content + assert tool_result_message["tool_call_id"] == "call_abc123" + + mock_get.assert_called_once() + call_url = mock_get.call_args.kwargs.get("url") or mock_get.call_args.args[0] + assert "b573993006976af767214fac" in call_url + + +@pytest.mark.asyncio +async def test_async_build_agentic_loop_plan_handles_retrieve_404( + guardrail: HeadroomGuardrail, +): + mock_retrieve = MagicMock() + mock_retrieve.status_code = 404 + + tool_calls = [ + { + "id": "call_xyz", + "type": "function", + "name": HEADROOM_RETRIEVE_TOOL_NAME, + "arguments": {"hash": "deadbeef000000000000dead"}, + } + ] + response = _make_openai_response_with_tool_call( + tool_name=HEADROOM_RETRIEVE_TOOL_NAME, + arguments={"hash": "deadbeef000000000000dead"}, + tool_id="call_xyz", + ) + + messages = [ + { + "role": "user", + "content": "Retrieve more: hash=deadbeef000000000000dead", + } + ] + guardrail._issued_hashes_by_call_id["call-1"] = ( + frozenset({"deadbeef000000000000dead"}), + time.monotonic() + 999, + ) + + with patch.object( + guardrail.async_handler, + "get", + new_callable=AsyncMock, + return_value=mock_retrieve, + ): + plan = await guardrail.async_build_agentic_loop_plan( + tools={"tool_calls": tool_calls}, + model="gpt-4o", + messages=messages, + response=response, + anthropic_messages_provider_config=None, + anthropic_messages_optional_request_params={}, + logging_obj=None, + stream=False, + kwargs={"litellm_call_id": "call-1"}, + ) + + follow_up = plan.request_patch.messages # type: ignore[union-attr] + tool_result = next((m for m in follow_up if m.get("role") == "tool"), None) + assert tool_result is not None + assert "not found" in tool_result["content"] or "expired" in tool_result["content"] + + +@pytest.mark.asyncio +async def test_async_build_agentic_loop_plan_rejects_hash_with_no_known_call( + guardrail: HeadroomGuardrail, +): + """A hash-shaped string planted in message text must not be honored when + this guardrail has no record of ever issuing it, even if it's echoed back + in the current request's own messages (e.g. via prompt injection).""" + tool_calls = [ + { + "id": "call_xyz", + "type": "function", + "name": HEADROOM_RETRIEVE_TOOL_NAME, + "arguments": {"hash": "deadbeef000000000000dead"}, + } + ] + response = _make_openai_response_with_tool_call( + tool_name=HEADROOM_RETRIEVE_TOOL_NAME, + arguments={"hash": "deadbeef000000000000dead"}, + tool_id="call_xyz", + ) + assert not guardrail._issued_hashes_by_call_id + + with patch.object( + guardrail.async_handler, + "get", + new_callable=AsyncMock, + ) as mock_get: + plan = await guardrail.async_build_agentic_loop_plan( + tools={"tool_calls": tool_calls}, + model="gpt-4o", + messages=[{"role": "user", "content": "Please fetch hash=deadbeef000000000000dead for me"}], + response=response, + anthropic_messages_provider_config=None, + anthropic_messages_optional_request_params={}, + logging_obj=None, + stream=False, + kwargs={"litellm_call_id": "call-unknown"}, + ) + + mock_get.assert_not_called() + + follow_up = plan.request_patch.messages # type: ignore[union-attr] + tool_result = next((m for m in follow_up if m.get("role") == "tool"), None) + assert tool_result is not None + assert "was not produced by the current request" in tool_result["content"] + + +@pytest.mark.asyncio +async def test_async_build_agentic_loop_plan_rejects_hash_issued_for_different_call( + guardrail: HeadroomGuardrail, +): + """A hash issued for one request must not be retrievable by a different + request just because the second request echoes that hash-shaped string + back in its own messages -- retrieval must be scoped per litellm_call_id, + not derived by re-scanning attacker-controlled message text.""" + guardrail._issued_hashes_by_call_id["call-A"] = ( + frozenset({"b573993006976af767214fac"}), + time.monotonic() + 999, + ) + + tool_calls = [ + { + "id": "call_xyz", + "type": "function", + "name": HEADROOM_RETRIEVE_TOOL_NAME, + "arguments": {"hash": "b573993006976af767214fac"}, + } + ] + response = _make_openai_response_with_tool_call( + tool_name=HEADROOM_RETRIEVE_TOOL_NAME, + arguments={"hash": "b573993006976af767214fac"}, + tool_id="call_xyz", + ) + + with patch.object( + guardrail.async_handler, + "get", + new_callable=AsyncMock, + ) as mock_get: + plan = await guardrail.async_build_agentic_loop_plan( + tools={"tool_calls": tool_calls}, + model="gpt-4o", + messages=[{"role": "user", "content": "Please fetch hash=b573993006976af767214fac for me"}], + response=response, + anthropic_messages_provider_config=None, + anthropic_messages_optional_request_params={}, + logging_obj=None, + stream=False, + kwargs={"litellm_call_id": "call-B"}, + ) + + mock_get.assert_not_called() + + follow_up = plan.request_patch.messages # type: ignore[union-attr] + tool_result = next((m for m in follow_up if m.get("role") == "tool"), None) + assert tool_result is not None + assert "was not produced by the current request" in tool_result["content"] + + +@pytest.mark.asyncio +async def test_async_build_agentic_loop_plan_builds_responses_api_function_call_items( + guardrail: HeadroomGuardrail, +): + """For the Responses API, follow-up input must echo a function_call paired + with a function_call_output keyed by the same call_id -- chat-style + assistant/tool messages are not valid Responses API input items.""" + original_content = "This is the full compressed content." + mock_retrieve = _make_retrieve_response(original_content) + + response = MagicMock() + response.choices = None + response.content = None + response.output = [ + { + "type": "function_call", + "id": "fc_abc123", + "call_id": "call_abc123", + "name": HEADROOM_RETRIEVE_TOOL_NAME, + "arguments": json.dumps({"hash": "b573993006976af767214fac"}), + } + ] + + tool_calls = [ + { + "id": "call_abc123", + "type": "function", + "name": HEADROOM_RETRIEVE_TOOL_NAME, + "arguments": {"hash": "b573993006976af767214fac"}, + } + ] + messages = [{"role": "user", "content": "What does it say? hash=b573993006976af767214fac"}] + guardrail._issued_hashes_by_call_id["call-1"] = ( + frozenset({"b573993006976af767214fac"}), + time.monotonic() + 999, + ) + + with patch.object( + guardrail.async_handler, + "get", + new_callable=AsyncMock, + return_value=mock_retrieve, + ): + plan = await guardrail.async_build_agentic_loop_plan( + tools={"tool_calls": tool_calls}, + model="gpt-4o", + messages=messages, + response=response, + anthropic_messages_provider_config=None, + anthropic_messages_optional_request_params={}, + logging_obj=None, + stream=False, + kwargs={"litellm_call_id": "call-1"}, + ) + + follow_up = plan.request_patch.messages # type: ignore[union-attr] + assert all("role" not in item for item in follow_up if item not in messages) + + function_call_item = next((i for i in follow_up if i.get("type") == "function_call"), None) + assert function_call_item is not None + assert function_call_item["call_id"] == "call_abc123" + assert function_call_item["name"] == HEADROOM_RETRIEVE_TOOL_NAME + + output_item = next((i for i in follow_up if i.get("type") == "function_call_output"), None) + assert output_item is not None + assert output_item["call_id"] == "call_abc123" + assert output_item["output"] == original_content + + +@pytest.mark.asyncio +async def test_async_build_agentic_loop_plan_builds_anthropic_tool_result_messages( + guardrail: HeadroomGuardrail, +): + """For the Anthropic Messages API, follow-up must echo a tool_use content + block in an assistant message paired with a tool_result content block in a + user message keyed by the same tool_use_id -- chat-style tool-role + messages are not valid Anthropic input. + + AnthropicMessagesResponse is a TypedDict, so real responses are plain + dicts at runtime; a MagicMock response here would pass even if branch + selection used bare getattr() and silently fell through to the + chat-completions replay shape for every real Anthropic response. + """ + original_content = "This is the full compressed content." + mock_retrieve = _make_retrieve_response(original_content) + + response = { + "content": [ + { + "type": "tool_use", + "id": "toolu_abc123", + "name": HEADROOM_RETRIEVE_TOOL_NAME, + "input": {"hash": "b573993006976af767214fac"}, + } + ] + } + + tool_calls = [ + { + "id": "toolu_abc123", + "type": "function", + "name": HEADROOM_RETRIEVE_TOOL_NAME, + "arguments": {"hash": "b573993006976af767214fac"}, + } + ] + messages = [{"role": "user", "content": "What does it say? hash=b573993006976af767214fac"}] + guardrail._issued_hashes_by_call_id["call-1"] = ( + frozenset({"b573993006976af767214fac"}), + time.monotonic() + 999, + ) + + with patch.object( + guardrail.async_handler, + "get", + new_callable=AsyncMock, + return_value=mock_retrieve, + ): + plan = await guardrail.async_build_agentic_loop_plan( + tools={"tool_calls": tool_calls}, + model="claude-sonnet-4-5", + messages=messages, + response=response, + anthropic_messages_provider_config=None, + anthropic_messages_optional_request_params={}, + logging_obj=None, + stream=False, + kwargs={"litellm_call_id": "call-1"}, + ) + + follow_up = plan.request_patch.messages # type: ignore[union-attr] + assert all(m.get("role") != "tool" for m in follow_up) + + assistant_message = next((m for m in follow_up if m.get("role") == "assistant"), None) + assert assistant_message is not None + tool_use_block = next((b for b in assistant_message["content"] if b.get("type") == "tool_use"), None) + assert tool_use_block is not None + assert tool_use_block["id"] == "toolu_abc123" + + user_message = follow_up[-1] + assert user_message["role"] == "user" + tool_result_block = next((b for b in user_message["content"] if b.get("type") == "tool_result"), None) + assert tool_result_block is not None + assert tool_result_block["tool_use_id"] == "toolu_abc123" + assert tool_result_block["content"] == original_content + + +def test_extract_hashes_from_messages_finds_hashes(): + messages = [ + {"role": "user", "content": "Retrieve more: hash=b573993006976af767214fac"}, + {"role": "assistant", "content": "Also: hash=aabbccdd001122334455aabb"}, + ] + hashes = extract_hashes_from_messages(messages) + assert "b573993006976af767214fac" in hashes + assert "aabbccdd001122334455aabb" in hashes + + +def test_extract_hashes_from_messages_ignores_short_hashes(): + messages = [{"role": "user", "content": "hash=tooshort"}] + hashes = extract_hashes_from_messages(messages) + assert not hashes + + +def test_extract_hashes_from_list_content_blocks(): + messages = [ + { + "role": "user", + "content": [ + {"type": "text", "text": "hash=b573993006976af767214fac found here"}, + ], + } + ] + hashes = extract_hashes_from_messages(messages) + assert "b573993006976af767214fac" in hashes + + +def test_has_headroom_retrieve_tool_recognizes_anthropic_native_shape(): + """By the time an Anthropic Messages API response reaches the agentic-loop + gate, the OpenAI-shaped tool this guardrail injects (type: "function") + has already been transformed into Anthropic's native tool shape + (type: "custom", top-level "name", no nested "function" object).""" + anthropic_native_tools = [ + { + "type": "custom", + "name": HEADROOM_RETRIEVE_TOOL_NAME, + "input_schema": {"type": "object", "properties": {"hash": {"type": "string"}}}, + } + ] + assert has_headroom_retrieve_tool(anthropic_native_tools) + assert not has_headroom_retrieve_tool([{"type": "custom", "name": "some_other_tool"}]) + + @pytest.mark.asyncio async def test_apply_guardrail_bypass_header_skips_compression( guardrail: HeadroomGuardrail, @@ -97,9 +705,7 @@ async def test_apply_guardrail_bypass_header_skips_compression( ) request_data = {"proxy_server_request": {"headers": {"x-headroom-bypass": "true"}}} - with patch.object( - guardrail.async_handler, "post", new_callable=AsyncMock - ) as mock_post: + with patch.object(guardrail.async_handler, "post", new_callable=AsyncMock) as mock_post: result = await guardrail.apply_guardrail( inputs=inputs, request_data=request_data, @@ -119,9 +725,7 @@ async def test_apply_guardrail_response_type_passthrough( structured_messages=ORIGINAL_MESSAGES, ) - with patch.object( - guardrail.async_handler, "post", new_callable=AsyncMock - ) as mock_post: + with patch.object(guardrail.async_handler, "post", new_callable=AsyncMock) as mock_post: result = await guardrail.apply_guardrail( inputs=inputs, request_data={}, @@ -138,9 +742,7 @@ async def test_apply_guardrail_empty_structured_messages_passthrough( ): inputs = GenericGuardrailAPIInputs(texts=["hello"]) - with patch.object( - guardrail.async_handler, "post", new_callable=AsyncMock - ) as mock_post: + with patch.object(guardrail.async_handler, "post", new_callable=AsyncMock) as mock_post: result = await guardrail.apply_guardrail( inputs=inputs, request_data={}, @@ -277,9 +879,7 @@ def test_bypass_header_case_insensitive(): guardrail = _make_guardrail() for header_value in ("true", "True", "TRUE"): - data = { - "proxy_server_request": {"headers": {"x-headroom-bypass": header_value}} - } + data = {"proxy_server_request": {"headers": {"x-headroom-bypass": header_value}}} assert guardrail._should_bypass(data) is True data = {"proxy_server_request": {"headers": {"x-headroom-bypass": "false"}}} @@ -344,3 +944,118 @@ async def test_apply_guardrail_sends_model_from_request_data_when_no_config_mode call_kwargs = mock_post.call_args sent_payload = call_kwargs.kwargs.get("json") or call_kwargs.args[1] assert sent_payload.get("model") == "gpt-4o" + + +@pytest.mark.asyncio +async def test_async_should_run_agentic_loop_detects_anthropic_content_block_format( + guardrail: HeadroomGuardrail, +): + # Anthropic's native tool format (type: "custom", top-level "name") -- + # by the time a Messages API response reaches this gate, the OpenAI-shaped + # tool this guardrail injects has already been transformed into this shape. + retrieve_tool_def = [ + { + "type": "custom", + "name": HEADROOM_RETRIEVE_TOOL_NAME, + "input_schema": {"type": "object", "properties": {"hash": {"type": "string"}}}, + } + ] + + response = MagicMock() + response.choices = None + response.content = [ + { + "type": "tool_use", + "id": "toolu_abc", + "name": HEADROOM_RETRIEVE_TOOL_NAME, + "input": {"hash": "b573993006976af767214fac"}, + } + ] + + should_run, ctx = await guardrail.async_should_run_agentic_loop( + response=response, + model="claude-sonnet-4-6", + messages=[], + tools=retrieve_tool_def, + stream=False, + custom_llm_provider="anthropic", + kwargs={}, + ) + + assert should_run is True + assert len(ctx["tool_calls"]) == 1 + assert ctx["tool_calls"][0]["arguments"]["hash"] == "b573993006976af767214fac" + + +@pytest.mark.asyncio +async def test_async_should_run_agentic_loop_detects_anthropic_response_as_plain_dict( + guardrail: HeadroomGuardrail, +): + """AnthropicMessagesResponse is a TypedDict -- real Messages API responses + are plain dicts at runtime, not objects with attribute access. A + MagicMock-only test would pass even if detection used bare getattr() and + silently treated every real response as having no tool calls.""" + retrieve_tool_def = [ + { + "type": "custom", + "name": HEADROOM_RETRIEVE_TOOL_NAME, + "input_schema": {"type": "object", "properties": {"hash": {"type": "string"}}}, + } + ] + response = { + "content": [ + { + "type": "tool_use", + "id": "toolu_abc", + "name": HEADROOM_RETRIEVE_TOOL_NAME, + "input": {"hash": "b573993006976af767214fac"}, + } + ] + } + + should_run, ctx = await guardrail.async_should_run_agentic_loop( + response=response, + model="claude-sonnet-4-6", + messages=[], + tools=retrieve_tool_def, + stream=False, + custom_llm_provider="anthropic", + kwargs={}, + ) + + assert should_run is True + assert len(ctx["tool_calls"]) == 1 + assert ctx["tool_calls"][0]["arguments"]["hash"] == "b573993006976af767214fac" + + +@pytest.mark.asyncio +async def test_async_should_run_agentic_loop_detects_responses_api_output_format( + guardrail: HeadroomGuardrail, +): + retrieve_tool_def = [{"type": "function", "function": {"name": HEADROOM_RETRIEVE_TOOL_NAME}}] + + response = MagicMock() + response.choices = None + response.content = None + response.output = [ + { + "type": "function_call", + "id": "fc_abc123", + "name": HEADROOM_RETRIEVE_TOOL_NAME, + "arguments": json.dumps({"hash": "b573993006976af767214fac"}), + } + ] + + should_run, ctx = await guardrail.async_should_run_agentic_loop( + response=response, + model="gpt-4o", + messages=[], + tools=retrieve_tool_def, + stream=False, + custom_llm_provider="openai", + kwargs={}, + ) + + assert should_run is True + assert len(ctx["tool_calls"]) == 1 + assert ctx["tool_calls"][0]["arguments"]["hash"] == "b573993006976af767214fac" From 23af78465c877f5f7f02c53d9f04cf1af612f7a9 Mon Sep 17 00:00:00 2001 From: "devin-ai-integration[bot]" <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Tue, 30 Jun 2026 19:31:51 -0700 Subject: [PATCH 49/79] feat: add cache control injection support for v1/messages endpoint (#31778) * feat: add cache control injection support for v1/messages endpoint Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * fix: normalize string content to list for Anthropic-native cache_control injection Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * refactor: simplify cache control injection, fix system=[] bug, fix handler system type Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> * refactor: extract cache control logic into static helper on AnthropicCacheControlHook Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --------- Co-authored-by: Krrish Dholakia Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- .../anthropic_cache_control_hook.py | 97 ++++- .../messages/handler.py | 16 +- .../test_anthropic_cache_control_hook.py | 400 +++++++++++------- 3 files changed, 356 insertions(+), 157 deletions(-) diff --git a/litellm/integrations/anthropic_cache_control_hook.py b/litellm/integrations/anthropic_cache_control_hook.py index 1314fd82255..608fdebc1d9 100644 --- a/litellm/integrations/anthropic_cache_control_hook.py +++ b/litellm/integrations/anthropic_cache_control_hook.py @@ -1,9 +1,12 @@ """ -This hook is used to inject cache control directives into the messages of a chat completion. +This hook is used to inject cache control directives into messages. Users can define - `cache_control_injection_points` in the completion params and litellm will inject the cache control directives into the messages at the specified injection points. +Supported for both `v1/chat/completions` (via the prompt-management hook) and +`v1/messages` (via `apply_to_anthropic_messages_request`). + """ import copy @@ -225,6 +228,98 @@ class AnthropicCacheControlHook(CustomPromptManagement): message_content[-1]["cache_control"] = control # type: ignore return message + @staticmethod + def apply_to_anthropic_messages_request( + messages: List[Dict], + system: str | list | None, + injection_points: List[CacheControlInjectionPoint], + ) -> Tuple[List[Dict], str | list | None, List[CacheControlInjectionPoint]]: + """Apply cache control injection for the Anthropic-native v1/messages endpoint. + + Returns (messages, system, remaining_non_message_points). + """ + if not injection_points: + return messages, system, [] + + processed_messages: List[Dict] = copy.deepcopy(messages) + processed_system = copy.deepcopy(system) if system is not None else None + + message_points: List[CacheControlMessageInjectionPoint] = [] + system_points: List[CacheControlMessageInjectionPoint] = [] + remaining_points: List[CacheControlInjectionPoint] = [] + + for point in injection_points: + if point.get("location") == "message": + msg_point = cast(CacheControlMessageInjectionPoint, point) + if msg_point.get("role") == "system": + system_points.append(msg_point) + else: + message_points.append(msg_point) + else: + remaining_points.append(point) + + reserved_blocks = 1 if any(p.get("location") == "tool_config" for p in remaining_points) else 0 + max_blocks = MAX_CACHE_CONTROL_BLOCKS - reserved_blocks + + used_blocks = sum( + AnthropicCacheControlHook._count_cache_control_blocks(cast(AllMessageValues, msg)) + for msg in processed_messages + ) + if isinstance(processed_system, list): + used_blocks += sum( + 1 for b in processed_system if isinstance(b, dict) and b.get("cache_control") is not None + ) + + if system_points and processed_system is not None and used_blocks < max_blocks: + system_already_has_cc = isinstance(processed_system, list) and any( + isinstance(b, dict) and b.get("cache_control") is not None for b in processed_system + ) + if not system_already_has_cc: + control = system_points[0].get("control") or ChatCompletionCachedContent(type="ephemeral") + if isinstance(processed_system, str): + processed_system = [{"type": "text", "text": processed_system, "cache_control": control}] + used_blocks += 1 + elif len(processed_system) > 0 and isinstance(processed_system[-1], dict): + processed_system[-1] = {**processed_system[-1], "cache_control": control} + used_blocks += 1 + + for i, msg in enumerate(processed_messages): + content = msg.get("content") + if isinstance(content, str): + processed_messages[i] = {**msg, "content": [{"type": "text", "text": content}]} + + processed_messages = AnthropicCacheControlHook._apply_message_injections( + points=message_points, + messages=cast(List[AllMessageValues], processed_messages), + max_blocks=max_blocks - used_blocks, + ) + + return processed_messages, processed_system, remaining_points + + @staticmethod + def maybe_inject_cache_control( + messages: List[Dict], + system: str | list | None, + kwargs: Dict[str, Any], + ) -> Tuple[List[Dict], str | list | None]: + """Extract cache_control_injection_points from kwargs and apply if present. + + Pops the key from kwargs; if remaining (non-message) points exist they + are written back so downstream transforms can handle them. + """ + injection_points = kwargs.pop("cache_control_injection_points", None) + if not injection_points: + return messages, system + + messages, system, remaining = AnthropicCacheControlHook.apply_to_anthropic_messages_request( + messages=messages, + system=system, + injection_points=injection_points, + ) + if remaining: + kwargs["cache_control_injection_points"] = remaining + return messages, system + @property def integration_name(self) -> str: """Return the integration name for this hook.""" diff --git a/litellm/llms/anthropic/experimental_pass_through/messages/handler.py b/litellm/llms/anthropic/experimental_pass_through/messages/handler.py index 547ddd9b8d3..effd7dda6a0 100644 --- a/litellm/llms/anthropic/experimental_pass_through/messages/handler.py +++ b/litellm/llms/anthropic/experimental_pass_through/messages/handler.py @@ -199,7 +199,7 @@ async def anthropic_messages( metadata: Optional[Dict] = None, stop_sequences: Optional[List[str]] = None, stream: Optional[bool] = False, - system: Optional[str] = None, + system: Optional[Union[str, list]] = None, temperature: Optional[float] = None, thinking: Optional[Dict] = None, tool_choice: Optional[Dict] = None, @@ -230,6 +230,12 @@ async def anthropic_messages( # ids like ``functions.Bash:0`` that violate Anthropic's id pattern. messages = sanitize_tool_use_ids_in_anthropic_messages(messages) + from litellm.integrations.anthropic_cache_control_hook import ( + AnthropicCacheControlHook, + ) + + messages, system = AnthropicCacheControlHook.maybe_inject_cache_control(messages, system, kwargs) + original_stream = stream or kwargs.get("_websearch_interception_converted_stream", False) # Execute pre-request hooks to allow CustomLoggers to modify request. @@ -375,7 +381,7 @@ def anthropic_messages_handler( metadata: Optional[Dict] = None, stop_sequences: Optional[List[str]] = None, stream: Optional[bool] = False, - system: Optional[str] = None, + system: Optional[Union[str, list]] = None, temperature: Optional[float] = None, thinking: Optional[Dict] = None, tool_choice: Optional[Dict] = None, @@ -412,6 +418,12 @@ def anthropic_messages_handler( messages = strip_empty_text_blocks_from_anthropic_messages(messages) messages = sanitize_tool_use_ids_in_anthropic_messages(messages) + from litellm.integrations.anthropic_cache_control_hook import ( + AnthropicCacheControlHook, + ) + + messages, system = AnthropicCacheControlHook.maybe_inject_cache_control(messages, system, kwargs) + metadata = validate_anthropic_api_metadata(metadata) local_vars = locals() diff --git a/tests/test_litellm/integrations/test_anthropic_cache_control_hook.py b/tests/test_litellm/integrations/test_anthropic_cache_control_hook.py index 6afe5efc54d..4664cc86303 100644 --- a/tests/test_litellm/integrations/test_anthropic_cache_control_hook.py +++ b/tests/test_litellm/integrations/test_anthropic_cache_control_hook.py @@ -1,3 +1,4 @@ +import copy import datetime import json import os @@ -9,9 +10,7 @@ from unittest.mock import ANY, MagicMock, Mock, patch import httpx import pytest -sys.path.insert( - 0, os.path.abspath("../..") -) # Adds the parent directory to the system-path +sys.path.insert(0, os.path.abspath("../..")) # Adds the parent directory to the system-path import litellm from litellm.integrations.anthropic_cache_control_hook import AnthropicCacheControlHook from litellm.llms.custom_httpx.http_handler import AsyncHTTPHandler @@ -93,13 +92,9 @@ async def test_anthropic_cache_control_hook_system_message(): # Verify that cache control was applied (Bedrock transforms it to a separate item) cache_control_count = sum( - 1 - for item in request_body["system"] - if isinstance(item, dict) and "cachePoint" in item + 1 for item in request_body["system"] if isinstance(item, dict) and "cachePoint" in item ) - assert ( - cache_control_count == 1 - ), f"Expected exactly 1 cache control point, found {cache_control_count}" + assert cache_control_count == 1, f"Expected exactly 1 cache control point, found {cache_control_count}" @pytest.mark.asyncio @@ -171,9 +166,7 @@ async def test_anthropic_cache_control_hook_user_message(): print("request_body: ", json.dumps(request_body, indent=4)) # Verify the request body - assert request_body["messages"][1]["content"][1]["cachePoint"] == { - "type": "default" - } + assert request_body["messages"][1]["content"][1]["cachePoint"] == {"type": "default"} @pytest.mark.asyncio @@ -262,14 +255,10 @@ async def test_anthropic_cache_control_hook_negative_indices(): # Verify the last message (input index -1 -> request index 2) has cache control last_message_content = request_body["messages"][2]["content"] - assert isinstance( - last_message_content, list - ), "Last message content should be a list" - assert any( - "cachePoint" in item - for item in last_message_content - if isinstance(item, dict) - ), "CachePoint missing in last message" + assert isinstance(last_message_content, list), "Last message content should be a list" + assert any("cachePoint" in item for item in last_message_content if isinstance(item, dict)), ( + "CachePoint missing in last message" + ) # Note: Based on debug output, the hook correctly applies cache control to both messages, # but the Bedrock API transformation appears to only preserve cache control for user messages, @@ -278,30 +267,20 @@ async def test_anthropic_cache_control_hook_negative_indices(): # The second-to-last message (assistant) gets cache_control from the hook but loses it # during API transformation. This test documents this behavior. second_last_message_content = request_body["messages"][1]["content"] - assert isinstance( - second_last_message_content, list - ), "Second-to-last message content should be a list" + assert isinstance(second_last_message_content, list), "Second-to-last message content should be a list" # Check if assistant message cache control is preserved (currently it's not) assistant_has_cache_control = any( - "cachePoint" in item - for item in second_last_message_content - if isinstance(item, dict) - ) - print( - f"Assistant message has cache control in final request: {assistant_has_cache_control}" + "cachePoint" in item for item in second_last_message_content if isinstance(item, dict) ) + print(f"Assistant message has cache control in final request: {assistant_has_cache_control}") # Verify the first user message (request index 0) was NOT modified first_user_message_content = request_body["messages"][0]["content"] - assert isinstance( - first_user_message_content, list - ), "First user message content should be a list" - assert not any( - "cachePoint" in item - for item in first_user_message_content - if isinstance(item, dict) - ), "CachePoint unexpectedly found in first user message" + assert isinstance(first_user_message_content, list), "First user message content should be a list" + assert not any("cachePoint" in item for item in first_user_message_content if isinstance(item, dict)), ( + "CachePoint unexpectedly found in first user message" + ) @pytest.mark.asyncio @@ -342,9 +321,7 @@ async def test_anthropic_cache_control_hook_out_of_bounds_logging(): client = AsyncHTTPHandler() # Mock the verbose_logger to capture warning calls - with patch( - "litellm.integrations.anthropic_cache_control_hook.verbose_logger" - ) as mock_logger: + with patch("litellm.integrations.anthropic_cache_control_hook.verbose_logger") as mock_logger: with patch.object(client, "post", return_value=mock_response) as mock_post: messages = [ {"role": "user", "content": "Message 1"}, @@ -354,9 +331,7 @@ async def test_anthropic_cache_control_hook_out_of_bounds_logging(): await litellm.acompletion( model="bedrock/us.anthropic.claude-sonnet-4-5-20250929-v1:0", messages=messages, - cache_control_injection_points=[ - {"location": "message", "index": 10} - ], # Out of bounds index + cache_control_injection_points=[{"location": "message", "index": 10}], # Out of bounds index client=client, ) @@ -365,10 +340,7 @@ async def test_anthropic_cache_control_hook_out_of_bounds_logging(): warning_call = mock_logger.warning.call_args[0][0] # Check that the warning message contains the expected information - assert ( - "AnthropicCacheControlHook: Provided index 10 is out of bounds" - in warning_call - ) + assert "AnthropicCacheControlHook: Provided index 10 is out of bounds" in warning_call assert "message list of length 2" in warning_call assert "Targeted index was 10" in warning_call assert "Skipping cache control injection for this point" in warning_call @@ -411,9 +383,7 @@ async def test_anthropic_cache_control_hook_negative_out_of_bounds_logging(): client = AsyncHTTPHandler() # Mock the verbose_logger to capture warning calls - with patch( - "litellm.integrations.anthropic_cache_control_hook.verbose_logger" - ) as mock_logger: + with patch("litellm.integrations.anthropic_cache_control_hook.verbose_logger") as mock_logger: with patch.object(client, "post", return_value=mock_response) as mock_post: messages = [ {"role": "user", "content": "Single message"}, @@ -436,14 +406,9 @@ async def test_anthropic_cache_control_hook_negative_out_of_bounds_logging(): warning_call = mock_logger.warning.call_args[0][0] # Check that the warning message contains the original negative index - assert ( - "AnthropicCacheControlHook: Provided index -5 is out of bounds" - in warning_call - ) + assert "AnthropicCacheControlHook: Provided index -5 is out of bounds" in warning_call assert "message list of length 1" in warning_call - assert ( - "Targeted index was -4" in warning_call - ) # -5 + 1 = -4 (converted index) + assert "Targeted index was -4" in warning_call # -5 + 1 = -4 (converted index) assert "Skipping cache control injection for this point" in warning_call @@ -531,15 +496,11 @@ async def test_anthropic_cache_control_hook_multiple_user_messages(): # Count cache control points - should have 2 since both injection points were applied cache_control_count = sum( - 1 - for item in combined_message_content - if isinstance(item, dict) and "cachePoint" in item + 1 for item in combined_message_content if isinstance(item, dict) and "cachePoint" in item ) assert cache_control_count == 2 - print( - f"Found {cache_control_count} cache control points in the combined message" - ) + print(f"Found {cache_control_count} cache control points in the combined message") @pytest.mark.asyncio @@ -588,9 +549,7 @@ async def test_anthropic_cache_control_hook_out_of_bounds(bad_index): await litellm.acompletion( model="bedrock/us.anthropic.claude-sonnet-4-5-20250929-v1:0", messages=messages, - cache_control_injection_points=[ - {"location": "message", "index": bad_index} - ], + cache_control_injection_points=[{"location": "message", "index": bad_index}], client=client, ) @@ -601,19 +560,13 @@ async def test_anthropic_cache_control_hook_out_of_bounds(bad_index): for msg in request_body["messages"]: content = msg.get("content", []) if isinstance(content, list): - assert not any( - "cachePoint" in item - for item in content - if isinstance(item, dict) - ) + assert not any("cachePoint" in item for item in content if isinstance(item, dict)) @pytest.mark.asyncio @pytest.mark.parametrize( "message_list", - [ - [{"role": "user", "content": "Single message"}] - ], # Single message only - empty list will fail at API level + [[{"role": "user", "content": "Single message"}]], # Single message only - empty list will fail at API level ) async def test_anthropic_cache_control_hook_single_message(message_list): """ @@ -662,9 +615,7 @@ async def test_anthropic_cache_control_hook_single_message(message_list): # For the single message, verify cache control was applied content = request_body["messages"][0]["content"] assert isinstance(content, list) - assert any( - "cachePoint" in item for item in content if isinstance(item, dict) - ) + assert any("cachePoint" in item for item in content if isinstance(item, dict)) @pytest.mark.asyncio @@ -693,9 +644,7 @@ async def test_anthropic_cache_control_hook_empty_message_list(): await litellm.acompletion( model="bedrock/us.anthropic.claude-sonnet-4-5-20250929-v1:0", messages=[], - cache_control_injection_points=[ - {"location": "message", "index": -1} - ], + cache_control_injection_points=[{"location": "message", "index": -1}], client=client, ) @@ -755,11 +704,7 @@ async def test_anthropic_cache_control_hook_no_op(): for msg in request_body["messages"]: content = msg.get("content", []) if isinstance(content, list): - assert not any( - "cachePoint" in item - for item in content - if isinstance(item, dict) - ) + assert not any("cachePoint" in item for item in content if isinstance(item, dict)) @pytest.mark.asyncio @@ -827,14 +772,10 @@ async def test_anthropic_cache_control_hook_multiple_content_items_last_only(): message_content = request_body["messages"][0]["content"] assert isinstance(message_content, list) - cache_control_count = sum( - 1 - for item in message_content - if isinstance(item, dict) and "cachePoint" in item + cache_control_count = sum(1 for item in message_content if isinstance(item, dict) and "cachePoint" in item) + assert cache_control_count == 1, ( + f"Expected exactly 1 cache control point, found {cache_control_count}. This test verifies the fix for issue 15696 where cache_control was incorrectly applied to ALL content items." ) - assert ( - cache_control_count == 1 - ), f"Expected exactly 1 cache control point, found {cache_control_count}. This test verifies the fix for issue 15696 where cache_control was incorrectly applied to ALL content items." @pytest.mark.asyncio @@ -891,30 +832,22 @@ async def test_anthropic_cache_control_hook_document_analysis_multiple_pages(): ], } ], - cache_control_injection_points=[ - {"location": "message", "role": "user"} - ], + cache_control_injection_points=[{"location": "message", "role": "user"}], client=client, ) mock_post.assert_called_once() request_body = json.loads(mock_post.call_args.kwargs["data"]) - print( - "Document analysis request_body: ", json.dumps(request_body, indent=4) - ) + print("Document analysis request_body: ", json.dumps(request_body, indent=4)) message_content = request_body["messages"][0]["content"] assert isinstance(message_content, list) - cache_control_count = sum( - 1 - for item in message_content - if isinstance(item, dict) and "cachePoint" in item + cache_control_count = sum(1 for item in message_content if isinstance(item, dict) and "cachePoint" in item) + assert cache_control_count == 1, ( + f"Expected exactly 1 cache control point (last item only), found {cache_control_count}. Before fix, this would be 6 (one for each content item)." ) - assert ( - cache_control_count == 1 - ), f"Expected exactly 1 cache control point (last item only), found {cache_control_count}. Before fix, this would be 6 (one for each content item)." def test_gemini_cache_control_injection_points_detected(): @@ -1076,13 +1009,8 @@ async def test_anthropic_cache_control_hook_string_negative_index(): # The last user message should have cache control applied last_message = request_body["messages"][-1] last_message_content = last_message["content"] - assert isinstance( - last_message_content, list - ), f"Expected list content, got {type(last_message_content)}" - has_cache_point = any( - isinstance(item, dict) and "cachePoint" in item - for item in last_message_content - ) + assert isinstance(last_message_content, list), f"Expected list content, got {type(last_message_content)}" + has_cache_point = any(isinstance(item, dict) and "cachePoint" in item for item in last_message_content) assert has_cache_point, ( f"Expected cachePoint in last message content, got: {last_message_content}. " "String index '-1' was not parsed correctly (str.isdigit() returns False for negative strings)." @@ -1146,17 +1074,13 @@ def test_cache_control_hook_caps_at_four_blocks_with_client_cache_control(): _, processed, _ = hook.get_chat_completion_prompt( model="bedrock/us.anthropic.claude-opus-4-6-v1:0", messages=messages, - non_default_params={ - "cache_control_injection_points": _build_injection_points() - }, + non_default_params={"cache_control_injection_points": _build_injection_points()}, prompt_id=None, prompt_variables=None, dynamic_callback_params={}, ) - assert ( - _count_cache_control(processed) == 4 - ), "Hook must cap cache_control at Anthropic's limit of 4 blocks" + assert _count_cache_control(processed) == 4, "Hook must cap cache_control at Anthropic's limit of 4 blocks" # Client TTL on system blocks must be preserved (not overwritten by config). for i in range(4): @@ -1170,11 +1094,7 @@ def test_cache_control_hook_caps_at_four_blocks_with_client_cache_control(): assert user_message.get("cache_control") is None user_content = user_message.get("content") if isinstance(user_content, list): - assert all( - block.get("cache_control") is None - for block in user_content - if isinstance(block, dict) - ) + assert all(block.get("cache_control") is None for block in user_content if isinstance(block, dict)) def test_cache_control_hook_caps_at_four_blocks_without_client_cache_control(): @@ -1184,17 +1104,13 @@ def test_cache_control_hook_caps_at_four_blocks_without_client_cache_control(): """ hook = AnthropicCacheControlHook() - messages: List[AllMessageValues] = [ - {"role": "system", "content": f"System {i}"} for i in range(4) - ] + messages: List[AllMessageValues] = [{"role": "system", "content": f"System {i}"} for i in range(4)] messages.append({"role": "user", "content": "hello"}) _, processed, _ = hook.get_chat_completion_prompt( model="bedrock/us.anthropic.claude-opus-4-6-v1:0", messages=messages, - non_default_params={ - "cache_control_injection_points": _build_injection_points() - }, + non_default_params={"cache_control_injection_points": _build_injection_points()}, prompt_id=None, prompt_variables=None, dynamic_callback_params={}, @@ -1303,18 +1219,12 @@ async def test_cache_control_hook_bedrock_payload_caps_cachepoints_at_four(): request_body = json.loads(mock_post.call_args.kwargs["data"]) cache_points = sum( - 1 - for block in request_body.get("system", []) - if isinstance(block, dict) and "cachePoint" in block + 1 for block in request_body.get("system", []) if isinstance(block, dict) and "cachePoint" in block ) for msg in request_body.get("messages", []): content = msg.get("content", []) if isinstance(content, list): - cache_points += sum( - 1 - for block in content - if isinstance(block, dict) and "cachePoint" in block - ) + cache_points += sum(1 for block in content if isinstance(block, dict) and "cachePoint" in block) assert cache_points <= 4, ( f"Bedrock payload exceeded Anthropic's 4 cache_control block limit: " @@ -1331,9 +1241,7 @@ def test_cache_control_hook_reserves_slot_for_tool_config_point(): """ hook = AnthropicCacheControlHook() - messages: List[AllMessageValues] = [ - {"role": "system", "content": f"System {i}"} for i in range(4) - ] + messages: List[AllMessageValues] = [{"role": "system", "content": f"System {i}"} for i in range(4)] messages.append({"role": "user", "content": "hello"}) _, processed, non_default_params = hook.get_chat_completion_prompt( @@ -1356,9 +1264,7 @@ def test_cache_control_hook_reserves_slot_for_tool_config_point(): assert _count_cache_control(processed) == 3 # The tool_config point is passed through for the provider transform. - assert non_default_params["cache_control_injection_points"] == [ - {"location": "tool_config"} - ] + assert non_default_params["cache_control_injection_points"] == [{"location": "tool_config"}] @pytest.mark.asyncio @@ -1384,9 +1290,7 @@ async def test_cache_control_hook_bedrock_payload_caps_with_tool_config_point(): client = AsyncHTTPHandler() with patch.object(client, "post", return_value=mock_response) as mock_post: - messages = [ - {"role": "system", "content": f"System block {i}"} for i in range(4) - ] + messages = [{"role": "system", "content": f"System block {i}"} for i in range(4)] messages.append({"role": "user", "content": "What is the weather?"}) await litellm.acompletion( @@ -1421,18 +1325,12 @@ async def test_cache_control_hook_bedrock_payload_caps_with_tool_config_point(): request_body = json.loads(mock_post.call_args.kwargs["data"]) cache_points = sum( - 1 - for block in request_body.get("system", []) - if isinstance(block, dict) and "cachePoint" in block + 1 for block in request_body.get("system", []) if isinstance(block, dict) and "cachePoint" in block ) for msg in request_body.get("messages", []): content = msg.get("content", []) if isinstance(content, list): - cache_points += sum( - 1 - for block in content - if isinstance(block, dict) and "cachePoint" in block - ) + cache_points += sum(1 for block in content if isinstance(block, dict) and "cachePoint" in block) for tool in request_body.get("toolConfig", {}).get("tools", []): if isinstance(tool, dict) and "cachePoint" in tool: cache_points += 1 @@ -1441,3 +1339,197 @@ async def test_cache_control_hook_bedrock_payload_caps_with_tool_config_point(): f"Bedrock payload exceeded Anthropic's 4 cache_control block limit " f"when mixing message and tool_config injection: found {cache_points}" ) + + +class TestApplyToAnthropicMessagesRequest: + """Tests for apply_to_anthropic_messages_request (v1/messages cache control).""" + + def test_system_string_injection(self): + messages = [{"role": "user", "content": [{"type": "text", "text": "Hello"}]}] + system = "You are helpful" + injection_points = [{"location": "message", "role": "system"}] + + result_msgs, result_sys, remaining = AnthropicCacheControlHook.apply_to_anthropic_messages_request( + messages=messages, + system=system, + injection_points=injection_points, + ) + + assert result_sys == [{"type": "text", "text": "You are helpful", "cache_control": {"type": "ephemeral"}}] + assert result_msgs == messages + assert remaining == [] + + def test_system_list_injection(self): + messages = [{"role": "user", "content": [{"type": "text", "text": "Hello"}]}] + system = [ + {"type": "text", "text": "Part 1"}, + {"type": "text", "text": "Part 2"}, + ] + injection_points = [{"location": "message", "role": "system"}] + + _, result_sys, _ = AnthropicCacheControlHook.apply_to_anthropic_messages_request( + messages=messages, + system=system, + injection_points=injection_points, + ) + + assert result_sys[0] == {"type": "text", "text": "Part 1"} + assert result_sys[1] == {"type": "text", "text": "Part 2", "cache_control": {"type": "ephemeral"}} + + def test_user_message_injection_by_role(self): + messages = [ + {"role": "user", "content": [{"type": "text", "text": "First"}]}, + {"role": "assistant", "content": [{"type": "text", "text": "Response"}]}, + {"role": "user", "content": [{"type": "text", "text": "Second"}]}, + ] + injection_points = [{"location": "message", "role": "user"}] + + result_msgs, _, _ = AnthropicCacheControlHook.apply_to_anthropic_messages_request( + messages=messages, + system=None, + injection_points=injection_points, + ) + + assert result_msgs[0]["content"][-1].get("cache_control") == {"type": "ephemeral"} + assert result_msgs[2]["content"][-1].get("cache_control") == {"type": "ephemeral"} + assert result_msgs[1]["content"][-1].get("cache_control") is None + + def test_message_injection_by_index(self): + messages = [ + {"role": "user", "content": [{"type": "text", "text": "First"}]}, + {"role": "assistant", "content": [{"type": "text", "text": "Response"}]}, + {"role": "user", "content": [{"type": "text", "text": "Second"}]}, + ] + injection_points = [{"location": "message", "index": -1}] + + result_msgs, _, _ = AnthropicCacheControlHook.apply_to_anthropic_messages_request( + messages=messages, + system=None, + injection_points=injection_points, + ) + + assert result_msgs[2]["content"][-1].get("cache_control") == {"type": "ephemeral"} + assert result_msgs[0]["content"][-1].get("cache_control") is None + assert result_msgs[1]["content"][-1].get("cache_control") is None + + def test_mixed_system_and_message_injection(self): + messages = [ + {"role": "user", "content": [{"type": "text", "text": "Hello"}]}, + {"role": "assistant", "content": [{"type": "text", "text": "Hi"}]}, + {"role": "user", "content": [{"type": "text", "text": "Question"}]}, + ] + system = "System prompt" + injection_points = [ + {"location": "message", "role": "system"}, + {"location": "message", "index": -1}, + ] + + result_msgs, result_sys, _ = AnthropicCacheControlHook.apply_to_anthropic_messages_request( + messages=messages, + system=system, + injection_points=injection_points, + ) + + assert result_sys[0]["cache_control"] == {"type": "ephemeral"} + assert result_msgs[2]["content"][-1].get("cache_control") == {"type": "ephemeral"} + + def test_respects_max_4_blocks(self): + messages = [{"role": "user", "content": [{"type": "text", "text": f"Msg {i}"}]} for i in range(6)] + system = "System" + injection_points = [ + {"location": "message", "role": "system"}, + {"location": "message", "role": "user"}, + ] + + result_msgs, result_sys, _ = AnthropicCacheControlHook.apply_to_anthropic_messages_request( + messages=messages, + system=system, + injection_points=injection_points, + ) + + sys_blocks = sum(1 for b in (result_sys or []) if isinstance(b, dict) and b.get("cache_control") is not None) + total_blocks = sys_blocks + sum(AnthropicCacheControlHook._count_cache_control_blocks(m) for m in result_msgs) + assert total_blocks <= 4 + + def test_tool_config_points_forwarded_as_remaining(self): + messages = [{"role": "user", "content": [{"type": "text", "text": "Hello"}]}] + injection_points = [ + {"location": "message", "role": "user"}, + {"location": "tool_config"}, + ] + + _, _, remaining = AnthropicCacheControlHook.apply_to_anthropic_messages_request( + messages=messages, + system=None, + injection_points=injection_points, + ) + + assert remaining == [{"location": "tool_config"}] + + def test_no_injection_points_returns_unchanged(self): + messages = [{"role": "user", "content": [{"type": "text", "text": "Hello"}]}] + system = "System" + + result_msgs, result_sys, remaining = AnthropicCacheControlHook.apply_to_anthropic_messages_request( + messages=messages, + system=system, + injection_points=[], + ) + + assert result_msgs == messages + assert result_sys == system + assert remaining == [] + + def test_does_not_mutate_input(self): + messages = [{"role": "user", "content": [{"type": "text", "text": "Hello"}]}] + system = [{"type": "text", "text": "System"}] + injection_points = [{"location": "message", "role": "system"}] + + original_system = copy.deepcopy(system) + original_messages = copy.deepcopy(messages) + + AnthropicCacheControlHook.apply_to_anthropic_messages_request( + messages=messages, + system=system, + injection_points=injection_points, + ) + + assert messages == original_messages + assert system == original_system + + def test_system_none_with_system_point_skipped(self): + messages = [{"role": "user", "content": [{"type": "text", "text": "Hello"}]}] + injection_points = [{"location": "message", "role": "system"}] + + result_msgs, result_sys, _ = AnthropicCacheControlHook.apply_to_anthropic_messages_request( + messages=messages, + system=None, + injection_points=injection_points, + ) + + assert result_sys is None + + def test_existing_cache_control_counted_toward_limit(self): + messages = [ + {"role": "user", "content": [{"type": "text", "text": "A", "cache_control": {"type": "ephemeral"}}]}, + {"role": "assistant", "content": [{"type": "text", "text": "B", "cache_control": {"type": "ephemeral"}}]}, + {"role": "user", "content": [{"type": "text", "text": "C", "cache_control": {"type": "ephemeral"}}]}, + {"role": "user", "content": [{"type": "text", "text": "D"}]}, + {"role": "user", "content": [{"type": "text", "text": "E"}]}, + ] + system = "System" + injection_points = [ + {"location": "message", "role": "system"}, + {"location": "message", "index": 3}, + {"location": "message", "index": 4}, + ] + + result_msgs, result_sys, _ = AnthropicCacheControlHook.apply_to_anthropic_messages_request( + messages=messages, + system=system, + injection_points=injection_points, + ) + + sys_blocks = sum(1 for b in (result_sys or []) if isinstance(b, dict) and b.get("cache_control") is not None) + total_blocks = sys_blocks + sum(AnthropicCacheControlHook._count_cache_control_blocks(m) for m in result_msgs) + assert total_blocks <= 4 From bfb8ffccb8e42b69533d95605c5821d88324c870 Mon Sep 17 00:00:00 2001 From: yucheng-berri Date: Tue, 30 Jun 2026 19:32:27 -0700 Subject: [PATCH 50/79] feat(proxy): audit remaining system-wide settings updates (#31754) * feat(proxy): audit remaining system-wide settings updates Extends the audit logging framework introduced in the parent PR to the rest of the LiteLLM_Config writers and the two adjacent settings tables: /config/update (general, environment_variables, litellm_settings, router_settings sections), /config/field/update, /config/field/delete, /config/callback/delete, /update/default_team_settings, /update/mcp_semantic_filter_settings, /add/allowed_ip, /delete/allowed_ip, /update/sso_settings, /update/ui_theme_settings, /update/ui_settings. Each writer records the actor, action, the affected config section, and a redacted before/after snapshot. SSO and UI settings rows use their own table_name (LiteLLM_SSOConfig, LiteLLM_UISettings). The /config/callback and /update/sso_settings audits fire BEFORE the proxy reload and the env cleanup step respectively, so a failure in either leaves the audit row intact. The audit-actor parameter on _update_litellm_setting is now required rather than optional; the chokepoint covers default_team and mcp_semantic_filter for free, and a future caller that forgets the actor fails loudly instead of silently skipping the audit. The two direct-calling tests pass a dummy actor. The environment_variables section redacts every value rather than relying on key-name matching, because it carries credentials under non-secret-looking uppercase keys (e.g. DATABASE_URL). * fix(proxy): capture redacted SSO before-snapshot in audit log Greptile review of #31754 flagged update_sso_settings as the one endpoint where before_value is permanently None, so the LiteLLM_SSOConfig audit trail has no pre-change state. An auditor reviewing a secret-rotation event could see what the SSO settings were changed to but not what they were before. Read the existing SSO row before the upsert, decrypt it via proxy_config._decrypt_db_variables, and pass it as before_value. create_config_audit_log's secret-name redaction then masks the *_client_secret fields, so neither the old nor the new plaintext secret lands in the audit row. Add a regression test asserting the before-snapshot reflects the pre-change values for non-secret fields (google_client_id) and is redacted for secret fields (google_client_secret). Mutation-checked against reverting to before_value=None. The pre-existing SSO tests now also mock litellm_ssoconfig.find_unique since the endpoint reads it; the read returns None for tests that do not care about the before-state. * fix: remove committed zero init migration * refactor(proxy): audit config writes via asyncio.create_task everywhere PR A's chokepoint audit call was refactored from a blocking await to asyncio.create_task so that a post-save audit-log failure could not surface as a 500 to the caller. The 12 other audit call sites added in this PR were still using await, reintroducing the exact 500-after-commit exposure at every sibling endpoint. Wrap them all in asyncio.create_task to match the model_management_endpoints / key_management_endpoints / hooks / config_override_endpoints / team_callback_endpoints / cache_settings_endpoints house pattern, so the codebase tells one story. The two direct-invocation tests (test_update_config_general_settings and test_delete_config_general_settings, which call the handler in-process rather than via TestClient) yield with `await asyncio.sleep(0)` after the handler returns so the scheduled audit task runs before the assertion. --------- Co-authored-by: Cursor Agent --- litellm/proxy/_types.py | 2 + litellm/proxy/proxy_server.py | 53 ++- .../proxy_setting_endpoints.py | 145 +++++-- .../scim/test_scim_v2_endpoints.py | 2 + .../test_team_default_params.py | 2 + tests/test_litellm/proxy/test_proxy_server.py | 275 ++++++++++++ .../test_proxy_setting_endpoints.py | 407 ++++++++++++++++++ 7 files changed, 861 insertions(+), 25 deletions(-) diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index a6ef7de07ae..643f8d69300 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -190,6 +190,8 @@ class LitellmTableNames(str, enum.Enum): CACHE_CONFIG_TABLE_NAME = "LiteLLM_CacheConfig" CONFIG_OVERRIDES_TABLE_NAME = "LiteLLM_ConfigOverrides" CONFIG_TABLE_NAME = "LiteLLM_Config" + SSO_CONFIG_TABLE_NAME = "LiteLLM_SSOConfig" + UI_SETTINGS_TABLE_NAME = "LiteLLM_UISettings" class Litellm_EntityType(enum.Enum): diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 0158f601d32..2f6c48a751b 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -13962,6 +13962,7 @@ async def update_config( # effect of auto-enabling slack alerting. if config_info.general_settings is not None: existing = await _read_section("general_settings") + before_general_settings = copy.deepcopy(existing) updates = config_info.general_settings.dict(exclude_none=True) for k, v in updates.items(): if k == "alert_to_webhook_url": @@ -13971,6 +13972,11 @@ async def update_config( existing["alerting"].append("slack") existing[k] = v await _upsert_section("general_settings", existing) + asyncio.create_task( + create_config_audit_log( + "general_settings", "updated", before_general_settings, existing, user_api_key_dict + ) + ) # environment_variables: idempotently encrypt the request values # (plaintext on first write, OR ciphertext the UI read back via @@ -13979,10 +13985,16 @@ async def update_config( # their stored ciphertext byte-for-byte. if config_info.environment_variables is not None: existing = await _read_section("environment_variables") + before_environment_variables = copy.deepcopy(existing) existing.update( proxy_config._encrypt_env_variables_for_db(environment_variables=config_info.environment_variables) ) await _upsert_section("environment_variables", existing) + asyncio.create_task( + create_config_audit_log( + "environment_variables", "updated", before_environment_variables, existing, user_api_key_dict + ) + ) # litellm_settings: merge existing + request, request wins (matching # router_settings semantics — the caller's value for any given key is @@ -13994,6 +14006,7 @@ async def update_config( # entries that delete_callback (lowercase lookup) cannot find. if config_info.litellm_settings is not None: existing = await _read_section("litellm_settings") + before_litellm_settings = copy.deepcopy(existing) updated_litellm_settings = dict(config_info.litellm_settings) incoming_cb = updated_litellm_settings.get("success_callback") @@ -14015,12 +14028,24 @@ async def update_config( merged["success_callback"] = list(set(incoming_cb)) await _upsert_section("litellm_settings", merged) + asyncio.create_task( + create_config_audit_log( + "litellm_settings", "updated", before_litellm_settings, merged, user_api_key_dict + ) + ) # router_settings: merge existing + request, request wins. if config_info.router_settings is not None: existing = await _read_section("router_settings") + before_router_settings = copy.deepcopy(existing) updates = config_info.router_settings.dict(exclude_none=True) - await _upsert_section("router_settings", {**existing, **updates}) + new_router_settings = {**existing, **updates} + await _upsert_section("router_settings", new_router_settings) + asyncio.create_task( + create_config_audit_log( + "router_settings", "updated", before_router_settings, new_router_settings, user_api_key_dict + ) + ) await proxy_config.add_deployment(prisma_client=prisma_client, proxy_logging_obj=proxy_logging_obj) @@ -14152,6 +14177,8 @@ async def update_config_general_settings( else: general_settings = dict(db_general_settings.param_value) + before_general_settings = copy.deepcopy(general_settings) + ## update db field_value = data.field_value @@ -14171,6 +14198,11 @@ async def update_config_general_settings( }, ) await invalidate_config_param("general_settings") + asyncio.create_task( + create_config_audit_log( + "general_settings", "updated", before_general_settings, general_settings, user_api_key_dict + ) + ) if data.field_name == "plugins": register_plugins_from_config(general_settings) @@ -14555,6 +14587,8 @@ async def delete_config_general_settings( else: general_settings = dict(db_general_settings.param_value) + before_general_settings = copy.deepcopy(general_settings) + ## update db general_settings.pop(data.field_name, None) @@ -14570,6 +14604,11 @@ async def delete_config_general_settings( }, ) await invalidate_config_param("general_settings") + asyncio.create_task( + create_config_audit_log( + "general_settings", "deleted", before_general_settings, general_settings, user_api_key_dict + ) + ) return response @@ -14627,6 +14666,8 @@ async def delete_callback( detail={"error": f"Callback '{callback_name}' not found in active configuration"}, ) + before_success_callbacks = list(success_callbacks) + # Remove callback from success_callback list success_callbacks.remove(callback_name) config.setdefault("litellm_settings", {})["success_callback"] = success_callbacks @@ -14634,6 +14675,16 @@ async def delete_callback( # Save the updated configuration await proxy_config.save_config(new_config=config) + asyncio.create_task( + create_config_audit_log( + "litellm_settings", + "deleted", + {"success_callback": before_success_callbacks}, + {"success_callback": success_callbacks}, + user_api_key_dict, + ) + ) + # Restart the proxy to apply changes await proxy_config.add_deployment(prisma_client=prisma_client, proxy_logging_obj=proxy_logging_obj) diff --git a/litellm/proxy/ui_crud_endpoints/proxy_setting_endpoints.py b/litellm/proxy/ui_crud_endpoints/proxy_setting_endpoints.py index 1be17c86123..0fc303737b4 100644 --- a/litellm/proxy/ui_crud_endpoints/proxy_setting_endpoints.py +++ b/litellm/proxy/ui_crud_endpoints/proxy_setting_endpoints.py @@ -323,8 +323,12 @@ async def get_allowed_ips(): tags=["Budget & Spend Tracking"], dependencies=[Depends(user_api_key_auth)], ) -async def add_allowed_ip(ip_address: IPAddress): +async def add_allowed_ip( + ip_address: IPAddress, + user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), +): from litellm.proxy.proxy_server import ( + create_config_audit_log, general_settings, prisma_client, proxy_config, @@ -356,11 +360,22 @@ async def add_allowed_ip(ip_address: IPAddress): if "allowed_ips" not in config["general_settings"]: config["general_settings"]["allowed_ips"] = [] + before_allowed_ips = list(config["general_settings"]["allowed_ips"]) if ip_address.ip not in config["general_settings"]["allowed_ips"]: config["general_settings"]["allowed_ips"].append(ip_address.ip) await proxy_config.save_config(new_config=config) + asyncio.create_task( + create_config_audit_log( + param_name="general_settings", + action="updated", + before_value={"allowed_ips": before_allowed_ips}, + after_value={"allowed_ips": config["general_settings"]["allowed_ips"]}, + user_api_key_dict=user_api_key_dict, + ) + ) + return { "message": f"IP {ip_address.ip} address added successfully", "status": "success", @@ -372,8 +387,15 @@ async def add_allowed_ip(ip_address: IPAddress): tags=["Budget & Spend Tracking"], dependencies=[Depends(user_api_key_auth)], ) -async def delete_allowed_ip(ip_address: IPAddress): - from litellm.proxy.proxy_server import general_settings, proxy_config +async def delete_allowed_ip( + ip_address: IPAddress, + user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), +): + from litellm.proxy.proxy_server import ( + create_config_audit_log, + general_settings, + proxy_config, + ) _allowed_ips: List = general_settings.get("allowed_ips", []) if ip_address.ip in _allowed_ips: @@ -391,11 +413,22 @@ async def delete_allowed_ip(ip_address: IPAddress): if "allowed_ips" not in config["general_settings"]: config["general_settings"]["allowed_ips"] = [] + before_allowed_ips = list(config["general_settings"]["allowed_ips"]) if ip_address.ip in config["general_settings"]["allowed_ips"]: config["general_settings"]["allowed_ips"].remove(ip_address.ip) await proxy_config.save_config(new_config=config) + asyncio.create_task( + create_config_audit_log( + param_name="general_settings", + action="deleted", + before_value={"allowed_ips": before_allowed_ips}, + after_value={"allowed_ips": config["general_settings"]["allowed_ips"]}, + user_api_key_dict=user_api_key_dict, + ) + ) + return {"message": f"IP {ip_address.ip} deleted successfully", "status": "success"} @@ -554,7 +587,7 @@ async def _update_litellm_setting( settings: Union[DefaultInternalUserParams, DefaultTeamSSOParams, MCPSemanticFilterSettings], settings_key: str, success_message: str, - user_api_key_dict: Optional[UserAPIKeyAuth] = None, + user_api_key_dict: UserAPIKeyAuth, ): """ Common utility function to update `litellm_settings` in both memory and config. @@ -564,8 +597,6 @@ async def _update_litellm_setting( settings_key: The key in litellm_settings to update success_message: Message to return on success user_api_key_dict: The acting admin, recorded as the audit-log actor. - Optional today so callers that have not been wired for auditing - keep working; the audit row is only written when an actor is passed. """ from litellm.proxy.proxy_server import ( create_config_audit_log, @@ -599,20 +630,19 @@ async def _update_litellm_setting( # Save the updated config await proxy_config.save_config(new_config=config) - if user_api_key_dict is not None: - # Fire-and-forget so an audit-log failure (transient DB blip, etc.) - # never surfaces as a 500 after save_config has already committed, - # matching the create_object_audit_log pattern used elsewhere - # (e.g. model_management_endpoints). - asyncio.create_task( - create_config_audit_log( - param_name=settings_key, - action="updated", - before_value=before_value, - after_value=in_memory_var, - user_api_key_dict=user_api_key_dict, - ) + # Fire-and-forget so an audit-log failure (transient DB blip, etc.) + # never surfaces as a 500 after save_config has already committed, + # matching the create_object_audit_log pattern used elsewhere + # (e.g. model_management_endpoints). + asyncio.create_task( + create_config_audit_log( + param_name=settings_key, + action="updated", + before_value=before_value, + after_value=in_memory_var, + user_api_key_dict=user_api_key_dict, ) + ) return { "message": success_message, @@ -653,7 +683,10 @@ async def update_internal_user_settings( tags=["SSO Settings"], dependencies=[Depends(user_api_key_auth)], ) -async def update_default_team_settings(settings: DefaultTeamSSOParams): +async def update_default_team_settings( + settings: DefaultTeamSSOParams, + user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), +): """ Update the default team parameters for SSO users. These settings will be applied to new teams created from SSO. @@ -662,6 +695,7 @@ async def update_default_team_settings(settings: DefaultTeamSSOParams): settings=settings, settings_key="default_team_params", success_message="Default team settings updated successfully", + user_api_key_dict=user_api_key_dict, ) @@ -772,7 +806,10 @@ async def get_sso_settings(): tags=["SSO Settings"], dependencies=[Depends(user_api_key_auth)], ) -async def update_sso_settings(sso_config: SSOConfig): +async def update_sso_settings( + sso_config: SSOConfig, + user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), +): """ Update SSO configuration by saving to the dedicated SSO table. """ @@ -780,6 +817,7 @@ async def update_sso_settings(sso_config: SSOConfig): import os from litellm.proxy.proxy_server import ( + create_config_audit_log, prisma_client, proxy_config, store_model_in_db, @@ -812,6 +850,20 @@ async def update_sso_settings(sso_config: SSOConfig): "proxy_base_url": "PROXY_BASE_URL", } + # Read the existing SSO row first so the audit log captures a real + # before/after diff. Stored values are encrypted; decrypt them so the + # before-snapshot has the same shape as after_value, and rely on + # create_config_audit_log's secret-name redaction to mask the + # *_client_secret fields before the audit row is written. + existing_sso_record = await SSOConfigRepository(prisma_client).table.find_unique(where={"id": "sso_config"}) + before_sso_data: Optional[Dict[str, Any]] = None + if existing_sso_record and existing_sso_record.sso_settings: + stored = existing_sso_record.sso_settings + if isinstance(stored, str): + stored = json.loads(stored) + if isinstance(stored, dict): + before_sso_data = proxy_config._decrypt_db_variables(stored) + # Load existing config config = await proxy_config.get_config() @@ -850,6 +902,17 @@ async def update_sso_settings(sso_config: SSOConfig): }, ) + asyncio.create_task( + create_config_audit_log( + param_name="sso_config", + action="updated", + before_value=before_sso_data, + after_value=sso_data, + user_api_key_dict=user_api_key_dict, + table_name=LitellmTableNames.SSO_CONFIG_TABLE_NAME, + ) + ) + # Remove SSO-related env vars from config.environment_variables try: env_var_entry = await ConfigRepository(prisma_client).table.find_unique( @@ -943,14 +1006,21 @@ def _validate_public_image_url(value: Optional[str], field_name: str) -> None: tags=["UI Theme Settings"], dependencies=[Depends(user_api_key_auth)], ) -async def update_ui_theme_settings(theme_config: UIThemeConfig): +async def update_ui_theme_settings( + theme_config: UIThemeConfig, + user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), +): """ Update UI theme configuration. Updates logo settings for the admin UI. """ import os - from litellm.proxy.proxy_server import proxy_config, store_model_in_db + from litellm.proxy.proxy_server import ( + create_config_audit_log, + proxy_config, + store_model_in_db, + ) _validate_public_image_url(theme_config.logo_url, "logo_url") _validate_public_image_url(theme_config.favicon_url, "favicon_url") @@ -963,6 +1033,7 @@ async def update_ui_theme_settings(theme_config: UIThemeConfig): # Load existing config config = await proxy_config.get_config() + before_theme = config.get("litellm_settings", {}).get("ui_theme_config") # Update config with UI theme settings if "general_settings" not in config: @@ -1029,6 +1100,16 @@ async def update_ui_theme_settings(theme_config: UIThemeConfig): # Save the updated config await proxy_config.save_config(new_config=stored_config) + asyncio.create_task( + create_config_audit_log( + param_name="ui_theme_config", + action="updated", + before_value=before_theme, + after_value=theme_data, + user_api_key_dict=user_api_key_dict, + ) + ) + return { "message": "UI theme settings updated successfully.", "status": "success", @@ -1083,6 +1164,7 @@ async def update_mcp_semantic_filter_settings( settings=settings, settings_key="mcp_semantic_tool_filter", success_message="MCP Semantic Filter settings updated successfully. Changes will be applied across all pods within 10 seconds.", + user_api_key_dict=user_api_key_dict, ) try: from litellm.proxy.proxy_server import prisma_client, proxy_config @@ -1200,7 +1282,11 @@ async def update_ui_settings( Update UI-specific configuration flags. Only proxy admins are allowed to modify these settings. """ - from litellm.proxy.proxy_server import prisma_client, store_model_in_db + from litellm.proxy.proxy_server import ( + create_config_audit_log, + prisma_client, + store_model_in_db, + ) if user_api_key_dict.user_role != LitellmUserRoles.PROXY_ADMIN: raise HTTPException(status_code=403, detail="Only proxy admins can update UI settings.") @@ -1282,6 +1368,17 @@ async def update_ui_settings( sanitized = {k: v for k, v in ui_settings.items() if k in ALLOWED_UI_SETTINGS_FIELDS} await user_api_key_cache.async_set_cache(key=UI_SETTINGS_CACHE_KEY, value=sanitized, ttl=UI_SETTINGS_CACHE_TTL) + asyncio.create_task( + create_config_audit_log( + param_name="ui_settings", + action="updated", + before_value=existing, + after_value=ui_settings, + user_api_key_dict=user_api_key_dict, + table_name=LitellmTableNames.UI_SETTINGS_TABLE_NAME, + ) + ) + return { "message": "UI settings updated successfully", "status": "success", diff --git a/tests/test_litellm/proxy/management_endpoints/scim/test_scim_v2_endpoints.py b/tests/test_litellm/proxy/management_endpoints/scim/test_scim_v2_endpoints.py index 7f5aee51f51..f39ff93cee7 100644 --- a/tests/test_litellm/proxy/management_endpoints/scim/test_scim_v2_endpoints.py +++ b/tests/test_litellm/proxy/management_endpoints/scim/test_scim_v2_endpoints.py @@ -258,6 +258,7 @@ async def test_scim_create_user_respects_default_role_set_via_ui(mocker, monkeyp ) import litellm + from litellm.proxy._types import UserAPIKeyAuth settings = DefaultInternalUserParams( user_role=LitellmUserRoles.INTERNAL_USER, @@ -266,6 +267,7 @@ async def test_scim_create_user_respects_default_role_set_via_ui(mocker, monkeyp settings=settings, settings_key="default_internal_user_params", success_message="ok", + user_api_key_dict=UserAPIKeyAuth(user_id="test-admin"), ) # Verify the in-memory variable was actually updated diff --git a/tests/test_litellm/proxy/management_endpoints/test_team_default_params.py b/tests/test_litellm/proxy/management_endpoints/test_team_default_params.py index 443089b5f01..e0b90332ca0 100644 --- a/tests/test_litellm/proxy/management_endpoints/test_team_default_params.py +++ b/tests/test_litellm/proxy/management_endpoints/test_team_default_params.py @@ -426,6 +426,7 @@ class TestUpdateLitellmSettingOrdering: settings=new_settings, settings_key="default_team_params", success_message="Updated", + user_api_key_dict=UserAPIKeyAuth(user_id="test-admin"), ) # In-memory value should be the NEW value, not the stale one @@ -459,6 +460,7 @@ class TestUpdateLitellmSettingOrdering: settings=DefaultTeamSSOParams(max_budget=100.0), settings_key="default_team_params", success_message="Updated", + user_api_key_dict=UserAPIKeyAuth(user_id="test-admin"), ) assert exc_info.value.status_code == 500 diff --git a/tests/test_litellm/proxy/test_proxy_server.py b/tests/test_litellm/proxy/test_proxy_server.py index dc35d71ccbd..88d9ad0d968 100644 --- a/tests/test_litellm/proxy/test_proxy_server.py +++ b/tests/test_litellm/proxy/test_proxy_server.py @@ -8764,3 +8764,278 @@ def test_dump_redacted_config_serializes_non_json_native_values(): restored = json.loads(out) assert "2026-06-30" in restored["updated_at"] + +@pytest.mark.asyncio +async def test_update_config_general_settings_emits_audit_log(monkeypatch): + import litellm.proxy.proxy_server as proxy_server_module + from litellm.proxy._types import ConfigFieldUpdate + from litellm.proxy.proxy_server import update_config_general_settings + + existing = {"max_parallel_requests": 5, "some_api_key": "sk-stored-secret"} + fake = _fake_prisma_with_config(existing) + monkeypatch.setattr(proxy_server_module, "prisma_client", fake) + monkeypatch.setattr(proxy_server_module, "premium_user", True) + monkeypatch.setattr(litellm, "store_audit_logs", True) + + admin = UserAPIKeyAuth( + api_key="hashed-admin", + user_id="admin-1", + user_role=LitellmUserRoles.PROXY_ADMIN, + ) + await update_config_general_settings( + data=ConfigFieldUpdate( + field_name="max_parallel_requests", + field_value=42, + config_type="general_settings", + ), + user_api_key_dict=admin, + ) + # Audit is scheduled via asyncio.create_task; yield so it runs. + await asyncio.sleep(0) + + fake.db.litellm_auditlog.create.assert_awaited_once() + written = fake.db.litellm_auditlog.create.call_args.kwargs["data"] + assert written["table_name"] == "LiteLLM_Config" + assert written["object_id"] == "general_settings" + assert written["action"] == "updated" + assert written["changed_by"] == "admin-1" + + before = json.loads(written["before_value"]) + after = json.loads(written["updated_values"]) + assert before["max_parallel_requests"] == 5 + assert after["max_parallel_requests"] == 42 + assert "sk-stored-secret" not in written["before_value"] + assert "sk-stored-secret" not in written["updated_values"] + assert before["some_api_key"] != "sk-stored-secret" + + +@pytest.mark.asyncio +async def test_delete_config_general_settings_emits_deleted_audit_log(monkeypatch): + import litellm.proxy.proxy_server as proxy_server_module + from litellm.proxy._types import ConfigFieldDelete + from litellm.proxy.proxy_server import delete_config_general_settings + + existing = {"max_parallel_requests": 5} + fake = _fake_prisma_with_config(existing) + monkeypatch.setattr(proxy_server_module, "prisma_client", fake) + monkeypatch.setattr(proxy_server_module, "premium_user", True) + monkeypatch.setattr(litellm, "store_audit_logs", True) + + admin = UserAPIKeyAuth( + api_key="hashed-admin", + user_id="admin-1", + user_role=LitellmUserRoles.PROXY_ADMIN, + ) + await delete_config_general_settings( + data=ConfigFieldDelete( + field_name="max_parallel_requests", config_type="general_settings" + ), + user_api_key_dict=admin, + ) + # Audit is scheduled via asyncio.create_task; yield so it runs. + await asyncio.sleep(0) + + fake.db.litellm_auditlog.create.assert_awaited_once() + written = fake.db.litellm_auditlog.create.call_args.kwargs["data"] + assert written["object_id"] == "general_settings" + assert written["action"] == "deleted" + before = json.loads(written["before_value"]) + after = json.loads(written["updated_values"]) + assert before["max_parallel_requests"] == 5 + assert "max_parallel_requests" not in after + + +def test_update_config_audits_every_written_section(_update_config_setup, monkeypatch): + """/config/update must emit one audit row per section it writes, so each + of the four call sites (general_settings, environment_variables, + litellm_settings, router_settings) is mutation-protected. litellm_settings + is the row that holds default_internal_user_params ("default user settings").""" + import litellm.proxy.proxy_server as proxy_server_module + + client, prisma, restore = _update_config_setup( + initial_rows={"litellm_settings": {"drop_params": True}} + ) + audit_create = AsyncMock() + prisma.db.litellm_auditlog.create = audit_create + monkeypatch.setattr(proxy_server_module, "premium_user", True) + monkeypatch.setattr(litellm, "store_audit_logs", True) + try: + resp = client.post( + "/config/update", + json={ + "general_settings": {"store_prompts_in_spend_logs": True}, + "environment_variables": {"FOO": "bar"}, + "litellm_settings": { + "default_internal_user_params": {"max_budget": 10} + }, + "router_settings": {"routing_strategy": "latency-based-routing"}, + }, + ) + assert resp.status_code == 200, resp.text + + audited = { + call.kwargs["data"]["object_id"]: call.kwargs["data"]["action"] + for call in audit_create.await_args_list + } + assert audited == { + "general_settings": "updated", + "environment_variables": "updated", + "litellm_settings": "updated", + "router_settings": "updated", + } + for call in audit_create.await_args_list: + assert call.kwargs["data"]["table_name"] == "LiteLLM_Config" + assert call.kwargs["data"]["changed_by"] == "test_admin" + + ls_call = next( + c + for c in audit_create.await_args_list + if c.kwargs["data"]["object_id"] == "litellm_settings" + ) + after = json.loads(ls_call.kwargs["data"]["updated_values"]) + assert after["default_internal_user_params"] == {"max_budget": 10} + finally: + restore() + + +def test_delete_callback_audits_litellm_settings_deletion( + _update_config_setup, monkeypatch +): + """/config/callback/delete must emit a deleted audit row for litellm_settings + capturing the success_callback list before and after removal.""" + import litellm.proxy.proxy_server as proxy_server_module + + client, prisma, restore = _update_config_setup() + audit_create = AsyncMock() + prisma.db.litellm_auditlog.create = audit_create + monkeypatch.setattr(proxy_server_module, "premium_user", True) + monkeypatch.setattr(litellm, "store_audit_logs", True) + + from litellm.proxy.proxy_server import proxy_config as real_proxy_config + + monkeypatch.setattr( + real_proxy_config, + "get_config", + AsyncMock( + return_value={ + "litellm_settings": {"success_callback": ["langfuse", "datadog"]} + } + ), + ) + monkeypatch.setattr( + real_proxy_config, "save_config", AsyncMock(return_value=None) + ) + try: + resp = client.post( + "/config/callback/delete", json={"callback_name": "datadog"} + ) + assert resp.status_code == 200, resp.text + + audit_create.assert_awaited_once() + written = audit_create.await_args.kwargs["data"] + assert written["object_id"] == "litellm_settings" + assert written["action"] == "deleted" + before = json.loads(written["before_value"]) + after = json.loads(written["updated_values"]) + assert before["success_callback"] == ["langfuse", "datadog"] + assert after["success_callback"] == ["langfuse"] + finally: + restore() + + +def test_delete_callback_audits_before_reload_failure(_update_config_setup, monkeypatch): + import litellm.proxy.proxy_server as proxy_server_module + + client, prisma, restore = _update_config_setup() + audit_create = AsyncMock() + prisma.db.litellm_auditlog.create = audit_create + monkeypatch.setattr(proxy_server_module, "premium_user", True) + monkeypatch.setattr(litellm, "store_audit_logs", True) + + from litellm.proxy.proxy_server import proxy_config as real_proxy_config + + monkeypatch.setattr( + real_proxy_config, + "get_config", + AsyncMock( + return_value={ + "litellm_settings": {"success_callback": ["langfuse", "datadog"]} + } + ), + ) + monkeypatch.setattr( + real_proxy_config, "save_config", AsyncMock(return_value=None) + ) + monkeypatch.setattr( + real_proxy_config, + "add_deployment", + AsyncMock(side_effect=RuntimeError("reload failed")), + ) + try: + resp = client.post( + "/config/callback/delete", json={"callback_name": "datadog"} + ) + assert resp.status_code == 500, resp.text + + audit_create.assert_awaited_once() + written = audit_create.await_args.kwargs["data"] + assert written["object_id"] == "litellm_settings" + assert written["action"] == "deleted" + finally: + restore() + + +def test_update_config_redacts_all_environment_variable_values( + _update_config_setup, monkeypatch +): + """environment_variables hold credentials under arbitrary uppercase keys + (DATABASE_URL) that key-name secret matching misses, so every value in the + section must be redacted before the audit row is written; a plaintext + secret must never reach LiteLLM_AuditLog.""" + import litellm.proxy.proxy_server as proxy_server_module + + # DATABASE_URL is the bug class: an uppercase env key that key-name secret + # matching does NOT flag, so only whole-section value redaction protects it. + client, prisma, restore = _update_config_setup( + initial_rows={ + "environment_variables": { + "DATABASE_URL": "enc:postgresql://OLDsecret@old.host:5432/db" + } + } + ) + audit_create = AsyncMock() + prisma.db.litellm_auditlog.create = audit_create + monkeypatch.setattr(proxy_server_module, "premium_user", True) + monkeypatch.setattr(litellm, "store_audit_logs", True) + try: + resp = client.post( + "/config/update", + json={ + "environment_variables": { + "DATABASE_URL": "postgresql://u:p@db.internal:5432/litellm", + "LOG_LEVEL": "debug", + } + }, + ) + assert resp.status_code == 200, resp.text + + env_call = next( + c + for c in audit_create.await_args_list + if c.kwargs["data"]["object_id"] == "environment_variables" + ) + data = env_call.kwargs["data"] + + # the pre-existing secret must be redacted in the before snapshot + before = json.loads(data["before_value"]) + assert before == {"DATABASE_URL": "REDACTED"} + assert "OLDsecret" not in data["before_value"] + assert "old.host" not in data["before_value"] + + # the newly-written values must be redacted in the after snapshot + after = json.loads(data["updated_values"]) + assert after == {"DATABASE_URL": "REDACTED", "LOG_LEVEL": "REDACTED"} + assert "postgresql://" not in data["updated_values"] + assert "db.internal" not in data["updated_values"] + finally: + restore() diff --git a/tests/test_litellm/proxy/ui_crud_endpoints/test_proxy_setting_endpoints.py b/tests/test_litellm/proxy/ui_crud_endpoints/test_proxy_setting_endpoints.py index 7a586f758f4..cb77c42fe9b 100644 --- a/tests/test_litellm/proxy/ui_crud_endpoints/test_proxy_setting_endpoints.py +++ b/tests/test_litellm/proxy/ui_crud_endpoints/test_proxy_setting_endpoints.py @@ -396,6 +396,7 @@ class TestProxySettingEndpoints: # Mock the prisma client mock_prisma = MagicMock() + mock_prisma.db.litellm_ssoconfig.find_unique = AsyncMock(return_value=None) mock_prisma.db.litellm_ssoconfig.upsert = AsyncMock() mock_prisma.db.litellm_config = MagicMock() mock_prisma.db.litellm_config.find_unique = AsyncMock(return_value=None) @@ -466,6 +467,62 @@ class TestProxySettingEndpoints: create_sso_settings = json.loads(create_data["sso_settings"]) assert create_sso_settings["google_client_id"] == "new_google_client_id" + def test_update_sso_settings_audits_when_env_cleanup_fails( + self, mock_proxy_config, mock_auth, monkeypatch + ): + import json + from unittest.mock import AsyncMock, MagicMock + + monkeypatch.setenv("LITELLM_SALT_KEY", "test_salt_key") + monkeypatch.setattr("litellm.proxy.proxy_server.store_model_in_db", True) + + mock_prisma = MagicMock() + mock_prisma.db.litellm_ssoconfig.find_unique = AsyncMock(return_value=None) + mock_prisma.db.litellm_ssoconfig.upsert = AsyncMock() + mock_prisma.db.litellm_config = MagicMock() + mock_prisma.db.litellm_config.find_unique = AsyncMock( + side_effect=ValueError("cleanup failed") + ) + mock_prisma.db.litellm_config.update = AsyncMock() + monkeypatch.setattr("litellm.proxy.proxy_server.prisma_client", mock_prisma) + + from litellm.proxy.proxy_server import proxy_config + + monkeypatch.setattr( + proxy_config, + "_encrypt_env_variables", + lambda environment_variables: environment_variables, + ) + + create_config_audit_log = AsyncMock() + monkeypatch.setattr( + "litellm.proxy.proxy_server.create_config_audit_log", + create_config_audit_log, + ) + + response = client.patch( + "/update/sso_settings", + json={"google_client_id": "new_google_client_id"}, + ) + + assert response.status_code == 500 + assert mock_prisma.db.litellm_ssoconfig.upsert.called + create_config_audit_log.assert_awaited_once() + audit_log_kwargs = create_config_audit_log.await_args.kwargs + assert audit_log_kwargs["param_name"] == "sso_config" + assert ( + audit_log_kwargs["after_value"]["google_client_id"] + == "new_google_client_id" + ) + assert ( + json.loads( + mock_prisma.db.litellm_ssoconfig.upsert.call_args.kwargs["data"][ + "create" + ]["sso_settings"] + )["google_client_id"] + == "new_google_client_id" + ) + def test_update_sso_settings_with_null_values_clears_env_vars( self, mock_proxy_config, mock_auth, monkeypatch ): @@ -478,6 +535,7 @@ class TestProxySettingEndpoints: # Mock the prisma client mock_prisma = MagicMock() + mock_prisma.db.litellm_ssoconfig.find_unique = AsyncMock(return_value=None) mock_prisma.db.litellm_ssoconfig.upsert = AsyncMock() mock_prisma.db.litellm_config = MagicMock() @@ -557,6 +615,7 @@ class TestProxySettingEndpoints: # Mock the prisma client mock_prisma = MagicMock() + mock_prisma.db.litellm_ssoconfig.find_unique = AsyncMock(return_value=None) mock_prisma.db.litellm_ssoconfig.upsert = AsyncMock() mock_prisma.db.litellm_config = MagicMock() env_var_entry = MagicMock() @@ -627,6 +686,7 @@ class TestProxySettingEndpoints: # Mock the prisma client mock_prisma = MagicMock() + mock_prisma.db.litellm_ssoconfig.find_unique = AsyncMock(return_value=None) mock_prisma.db.litellm_ssoconfig.upsert = AsyncMock() mock_prisma.db.litellm_config = MagicMock() @@ -704,6 +764,7 @@ class TestProxySettingEndpoints: # Mock the prisma client mock_prisma = MagicMock() + mock_prisma.db.litellm_ssoconfig.find_unique = AsyncMock(return_value=None) mock_prisma.db.litellm_ssoconfig.upsert = AsyncMock() mock_prisma.db.litellm_config = MagicMock() mock_prisma.db.litellm_config.find_unique = AsyncMock(return_value=None) @@ -1350,6 +1411,7 @@ class TestProxySettingEndpoints: # Mock the prisma client mock_prisma = MagicMock() upsert_mock = AsyncMock() + mock_prisma.db.litellm_ssoconfig.find_unique = AsyncMock(return_value=None) mock_prisma.db.litellm_ssoconfig.upsert = upsert_mock mock_prisma.db.litellm_config = MagicMock() mock_prisma.db.litellm_config.find_unique = AsyncMock(return_value=None) @@ -1429,6 +1491,7 @@ class TestProxySettingEndpoints: mock_prisma = MagicMock() mock_prisma.db = MagicMock() mock_prisma.db.litellm_ssoconfig = MagicMock() + mock_prisma.db.litellm_ssoconfig.find_unique = AsyncMock(return_value=None) mock_prisma.db.litellm_ssoconfig.upsert = AsyncMock() env_var_entry = MagicMock() @@ -1480,6 +1543,7 @@ class TestProxySettingEndpoints: mock_prisma = MagicMock() mock_prisma.db = MagicMock() mock_prisma.db.litellm_ssoconfig = MagicMock() + mock_prisma.db.litellm_ssoconfig.find_unique = AsyncMock(return_value=None) mock_prisma.db.litellm_ssoconfig.upsert = AsyncMock() env_var_entry = MagicMock() @@ -1651,6 +1715,7 @@ class TestProxySettingEndpoints: # Mock the prisma client mock_prisma = MagicMock() + mock_prisma.db.litellm_ssoconfig.find_unique = AsyncMock(return_value=None) mock_prisma.db.litellm_ssoconfig.upsert = AsyncMock() mock_prisma.db.litellm_config = MagicMock() mock_prisma.db.litellm_config.find_unique = AsyncMock(return_value=None) @@ -1960,3 +2025,345 @@ def test_update_internal_user_settings_returns_200_when_audit_write_raises( assert resp.json()["status"] == "success" finally: app.dependency_overrides.pop(user_api_key_auth, None) + + +def test_update_sso_settings_writes_redacted_audit_log(mock_proxy_config, monkeypatch): + """Updating SSO settings must write an audit row to the SSO config table + with the client secret redacted.""" + from unittest.mock import AsyncMock, MagicMock + + import litellm + import litellm.proxy.proxy_server as proxy_server_module + from litellm.proxy._types import UserAPIKeyAuth + from litellm.proxy.auth.user_api_key_auth import user_api_key_auth + + audit_create = AsyncMock() + fake_prisma = MagicMock() + fake_prisma.db.litellm_auditlog.create = audit_create + fake_prisma.db.litellm_ssoconfig.upsert = AsyncMock() + # No prior SSO row, so before_value resolves to None. + fake_prisma.db.litellm_ssoconfig.find_unique = AsyncMock(return_value=None) + fake_prisma.db.litellm_config.find_unique = AsyncMock(return_value=None) + + monkeypatch.setattr(proxy_server_module, "prisma_client", fake_prisma) + monkeypatch.setattr(proxy_server_module, "premium_user", True) + monkeypatch.setattr("litellm.proxy.proxy_server.store_model_in_db", True) + monkeypatch.setattr(litellm, "store_audit_logs", True) + monkeypatch.setattr( + proxy_server_module.proxy_config, + "_encrypt_env_variables", + lambda environment_variables: environment_variables, + ) + + async def _admin_auth(): + return UserAPIKeyAuth( + user_id="audit-admin", + api_key="hashed-admin-key", + user_role=LitellmUserRoles.PROXY_ADMIN, + ) + + app.dependency_overrides[user_api_key_auth] = _admin_auth + try: + resp = client.patch( + "/update/sso_settings", + json={ + "google_client_id": "client-id-123", + "google_client_secret": "super-secret-xyz", + }, + ) + assert resp.status_code == 200, resp.text + + audit_create.assert_awaited_once() + written = audit_create.await_args.kwargs["data"] + assert written["object_id"] == "sso_config" + assert written["table_name"] == "LiteLLM_SSOConfig" + assert written["changed_by"] == "audit-admin" + + after = json.loads(written["updated_values"]) + assert after["google_client_id"] == "client-id-123" + assert after["google_client_secret"] == "REDACTED" + assert "super-secret-xyz" not in written["updated_values"] + finally: + app.dependency_overrides.pop(user_api_key_auth, None) + + +def test_update_sso_settings_audit_captures_redacted_before_snapshot( + mock_proxy_config, monkeypatch +): + """An auditor reviewing an SSO secret rotation needs to see a real + before/after diff in the audit row, not before_value=None. The endpoint + reads the existing (encrypted) SSO row, decrypts it, and lets the audit + helper redact the *_client_secret fields before persistence so neither + the old nor the new plaintext secret is recorded.""" + from unittest.mock import AsyncMock, MagicMock + + import litellm + import litellm.proxy.proxy_server as proxy_server_module + from litellm.proxy._types import UserAPIKeyAuth + from litellm.proxy.auth.user_api_key_auth import user_api_key_auth + + audit_create = AsyncMock() + fake_prisma = MagicMock() + fake_prisma.db.litellm_auditlog.create = audit_create + fake_prisma.db.litellm_ssoconfig.upsert = AsyncMock() + + # Pre-existing SSO row contains the *prior* secret (would be ciphertext in + # production; the test patches _decrypt_db_variables to pass through). + existing_record = MagicMock() + existing_record.sso_settings = { + "google_client_id": "old-client-id", + "google_client_secret": "OLD-SUPER-SECRET", + } + fake_prisma.db.litellm_ssoconfig.find_unique = AsyncMock(return_value=existing_record) + fake_prisma.db.litellm_config.find_unique = AsyncMock(return_value=None) + + monkeypatch.setattr(proxy_server_module, "prisma_client", fake_prisma) + monkeypatch.setattr(proxy_server_module, "premium_user", True) + monkeypatch.setattr("litellm.proxy.proxy_server.store_model_in_db", True) + monkeypatch.setattr(litellm, "store_audit_logs", True) + monkeypatch.setattr( + proxy_server_module.proxy_config, + "_encrypt_env_variables", + lambda environment_variables: environment_variables, + ) + # Pretend the stored value is already plaintext for the test (production + # decrypts via Fernet); the audit helper still has to redact it. + monkeypatch.setattr( + proxy_server_module.proxy_config, + "_decrypt_db_variables", + lambda variables_dict: dict(variables_dict), + ) + + async def _admin_auth(): + return UserAPIKeyAuth( + user_id="audit-admin", + api_key="hashed-admin-key", + user_role=LitellmUserRoles.PROXY_ADMIN, + ) + + app.dependency_overrides[user_api_key_auth] = _admin_auth + try: + resp = client.patch( + "/update/sso_settings", + json={ + "google_client_id": "new-client-id", + "google_client_secret": "NEW-SUPER-SECRET", + }, + ) + assert resp.status_code == 200, resp.text + + audit_create.assert_awaited_once() + written = audit_create.await_args.kwargs["data"] + before = json.loads(written["before_value"]) + after = json.loads(written["updated_values"]) + + # Non-secret field shows the diff + assert before["google_client_id"] == "old-client-id" + assert after["google_client_id"] == "new-client-id" + + # Secret field is redacted in BOTH snapshots — auditor sees the + # rotation event without ever seeing either plaintext secret. + assert before["google_client_secret"] == "REDACTED" + assert after["google_client_secret"] == "REDACTED" + assert "OLD-SUPER-SECRET" not in written["before_value"] + assert "NEW-SUPER-SECRET" not in written["updated_values"] + finally: + app.dependency_overrides.pop(user_api_key_auth, None) + + +def test_add_allowed_ip_writes_audit_log(mock_proxy_config, monkeypatch): + """Adding an allowed IP is a system-wide security setting change and must + be audited with the before and after IP list.""" + from unittest.mock import AsyncMock, MagicMock + + import litellm + import litellm.proxy.proxy_server as proxy_server_module + from litellm.proxy._types import UserAPIKeyAuth + from litellm.proxy.auth.user_api_key_auth import user_api_key_auth + + audit_create = AsyncMock() + fake_prisma = MagicMock() + fake_prisma.db.litellm_auditlog.create = audit_create + + monkeypatch.setattr(proxy_server_module, "prisma_client", fake_prisma) + monkeypatch.setattr(proxy_server_module, "premium_user", True) + monkeypatch.setattr(proxy_server_module, "general_settings", {}) + monkeypatch.setattr("litellm.proxy.proxy_server.store_model_in_db", True) + monkeypatch.setattr(litellm, "store_audit_logs", True) + + async def _admin_auth(): + return UserAPIKeyAuth( + user_id="audit-admin", + api_key="hashed-admin-key", + user_role=LitellmUserRoles.PROXY_ADMIN, + ) + + app.dependency_overrides[user_api_key_auth] = _admin_auth + try: + resp = client.post("/add/allowed_ip", json={"ip": "203.0.113.77"}) + assert resp.status_code == 200, resp.text + + audit_create.assert_awaited_once() + written = audit_create.await_args.kwargs["data"] + assert written["object_id"] == "general_settings" + assert written["action"] == "updated" + assert written["changed_by"] == "audit-admin" + + before = json.loads(written["before_value"]) + after = json.loads(written["updated_values"]) + assert "203.0.113.77" not in before["allowed_ips"] + assert "203.0.113.77" in after["allowed_ips"] + finally: + app.dependency_overrides.pop(user_api_key_auth, None) + + +def test_delete_allowed_ip_writes_deleted_audit_log(monkeypatch): + """Removing an allowed IP must be audited as a deletion, symmetric with the + add path.""" + from unittest.mock import AsyncMock, MagicMock + + import litellm + import litellm.proxy.proxy_server as proxy_server_module + from litellm.proxy._types import UserAPIKeyAuth + from litellm.proxy.auth.user_api_key_auth import user_api_key_auth + + audit_create = AsyncMock() + fake_prisma = MagicMock() + fake_prisma.db.litellm_auditlog.create = audit_create + + config = {"general_settings": {"allowed_ips": ["203.0.113.77", "198.51.100.1"]}} + + async def _get_config(): + return config + + async def _save_config(new_config=None): + nonlocal config + if new_config is not None: + config = new_config + return config + + monkeypatch.setattr(proxy_server_module, "prisma_client", fake_prisma) + monkeypatch.setattr(proxy_server_module, "premium_user", True) + monkeypatch.setattr( + proxy_server_module, "general_settings", {"allowed_ips": ["203.0.113.77"]} + ) + monkeypatch.setattr(litellm, "store_audit_logs", True) + monkeypatch.setattr(proxy_server_module.proxy_config, "get_config", _get_config) + monkeypatch.setattr(proxy_server_module.proxy_config, "save_config", _save_config) + + async def _admin_auth(): + return UserAPIKeyAuth( + user_id="audit-admin", + api_key="hashed-admin-key", + user_role=LitellmUserRoles.PROXY_ADMIN, + ) + + app.dependency_overrides[user_api_key_auth] = _admin_auth + try: + resp = client.post("/delete/allowed_ip", json={"ip": "203.0.113.77"}) + assert resp.status_code == 200, resp.text + + audit_create.assert_awaited_once() + written = audit_create.await_args.kwargs["data"] + assert written["object_id"] == "general_settings" + assert written["action"] == "deleted" + before = json.loads(written["before_value"]) + after = json.loads(written["updated_values"]) + assert "203.0.113.77" in before["allowed_ips"] + assert "203.0.113.77" not in after["allowed_ips"] + finally: + app.dependency_overrides.pop(user_api_key_auth, None) + + +def test_update_ui_theme_settings_writes_audit_log(mock_proxy_config, monkeypatch): + """Updating the UI theme must be audited under ui_theme_config.""" + from unittest.mock import AsyncMock, MagicMock + + import litellm + import litellm.proxy.proxy_server as proxy_server_module + from litellm.proxy._types import UserAPIKeyAuth + from litellm.proxy.auth.user_api_key_auth import user_api_key_auth + + audit_create = AsyncMock() + fake_prisma = MagicMock() + fake_prisma.db.litellm_auditlog.create = audit_create + + monkeypatch.setattr(proxy_server_module, "prisma_client", fake_prisma) + monkeypatch.setattr(proxy_server_module, "premium_user", True) + monkeypatch.setattr("litellm.proxy.proxy_server.store_model_in_db", True) + monkeypatch.setattr(litellm, "store_audit_logs", True) + monkeypatch.setattr( + proxy_server_module.proxy_config, + "_encrypt_env_variables", + lambda environment_variables: environment_variables, + ) + + async def _admin_auth(): + return UserAPIKeyAuth( + user_id="audit-admin", + api_key="hashed-admin-key", + user_role=LitellmUserRoles.PROXY_ADMIN, + ) + + app.dependency_overrides[user_api_key_auth] = _admin_auth + try: + resp = client.patch( + "/update/ui_theme_settings", + json={"logo_url": "https://example.com/logo.png"}, + ) + assert resp.status_code == 200, resp.text + + audit_create.assert_awaited_once() + written = audit_create.await_args.kwargs["data"] + assert written["object_id"] == "ui_theme_config" + assert written["action"] == "updated" + assert written["changed_by"] == "audit-admin" + after = json.loads(written["updated_values"]) + assert after["logo_url"] == "https://example.com/logo.png" + finally: + app.dependency_overrides.pop(user_api_key_auth, None) + + +def test_update_ui_settings_writes_audit_log(monkeypatch): + """Updating UI settings must be audited under the UI settings table.""" + from unittest.mock import AsyncMock, MagicMock + + import litellm + import litellm.proxy.proxy_server as proxy_server_module + from litellm.proxy._types import UserAPIKeyAuth + from litellm.proxy.auth.user_api_key_auth import user_api_key_auth + + audit_create = AsyncMock() + fake_prisma = MagicMock() + fake_prisma.db.litellm_auditlog.create = audit_create + fake_prisma.db.litellm_uisettings.find_unique = AsyncMock(return_value=None) + fake_prisma.db.litellm_uisettings.upsert = AsyncMock() + + monkeypatch.setattr(proxy_server_module, "prisma_client", fake_prisma) + monkeypatch.setattr(proxy_server_module, "premium_user", True) + monkeypatch.setattr("litellm.proxy.proxy_server.store_model_in_db", True) + monkeypatch.setattr(litellm, "store_audit_logs", True) + + async def _admin_auth(): + return UserAPIKeyAuth( + user_id="audit-admin", + api_key="hashed-admin-key", + user_role=LitellmUserRoles.PROXY_ADMIN, + ) + + app.dependency_overrides[user_api_key_auth] = _admin_auth + try: + resp = client.patch( + "/update/ui_settings", json={"disable_custom_api_keys": True} + ) + assert resp.status_code == 200, resp.text + + audit_create.assert_awaited_once() + written = audit_create.await_args.kwargs["data"] + assert written["object_id"] == "ui_settings" + assert written["table_name"] == "LiteLLM_UISettings" + assert written["changed_by"] == "audit-admin" + after = json.loads(written["updated_values"]) + assert after["disable_custom_api_keys"] is True + finally: + app.dependency_overrides.pop(user_api_key_auth, None) From c4a77bded7b3e21e0ca8bf52caaa75b9442f6145 Mon Sep 17 00:00:00 2001 From: "devin-ai-integration[bot]" <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Wed, 1 Jul 2026 10:44:02 +0800 Subject: [PATCH 51/79] fix(prometheus): expose project_alias in custom metadata labels (LIT-3741) (#31784) Include top-level scalar fields from standard_logging_metadata in the combined metadata dict used by custom_prometheus_metadata_labels. Previously only nested sub-dicts (requester_metadata, user_api_key_auth_metadata, spend_logs_metadata) were spread into combined_metadata, so fields like user_api_key_project_alias were inaccessible and always resolved to None. Co-authored-by: unknown <> Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- litellm/integrations/prometheus.py | 5 + .../test_prometheus_spend_logs_metadata.py | 98 ++++++++++++++++++- 2 files changed, 102 insertions(+), 1 deletion(-) diff --git a/litellm/integrations/prometheus.py b/litellm/integrations/prometheus.py index 1f516e9dc93..8eb6eaa8e2b 100644 --- a/litellm/integrations/prometheus.py +++ b/litellm/integrations/prometheus.py @@ -3804,6 +3804,10 @@ def _get_combined_custom_metadata_from_standard_logging_payload( ) -> Dict[str, Any]: """ Combine the metadata sources that can supply custom Prometheus labels. + + Includes top-level scalar fields from the standard logging metadata (e.g. + user_api_key_project_alias, user_api_key_team_alias) so they are accessible + via custom_prometheus_metadata_labels configuration. """ if not isinstance(standard_logging_payload, dict): return {} @@ -3817,6 +3821,7 @@ def _get_combined_custom_metadata_from_standard_logging_payload( spend_logs_metadata = standard_logging_metadata.get("spend_logs_metadata") return { + **{k: v for k, v in standard_logging_metadata.items() if not isinstance(v, dict)}, **(requester_metadata if isinstance(requester_metadata, dict) else {}), **(user_api_key_auth_metadata if isinstance(user_api_key_auth_metadata, dict) else {}), **(spend_logs_metadata if isinstance(spend_logs_metadata, dict) else {}), diff --git a/tests/test_litellm/integrations/test_prometheus_spend_logs_metadata.py b/tests/test_litellm/integrations/test_prometheus_spend_logs_metadata.py index 31934e5fd8e..e2af6fd2daf 100644 --- a/tests/test_litellm/integrations/test_prometheus_spend_logs_metadata.py +++ b/tests/test_litellm/integrations/test_prometheus_spend_logs_metadata.py @@ -5,7 +5,10 @@ Verifies that metadata from x-litellm-spend-logs-metadata header is available in Prometheus custom labels via combined_metadata. """ -from litellm.integrations.prometheus import get_custom_labels_from_metadata +from litellm.integrations.prometheus import ( + _get_combined_custom_metadata_from_standard_logging_payload, + get_custom_labels_from_metadata, +) def test_get_custom_labels_includes_spend_logs_metadata(monkeypatch): @@ -109,3 +112,96 @@ def test_combined_metadata_with_none_spend_logs(monkeypatch): result = get_custom_labels_from_metadata(combined_metadata) assert result == {"metadata_foo": "bar"} + + +def test_combined_metadata_includes_top_level_fields(): + """ + Regression test for LIT-3741: user_api_key_project_alias (and other + top-level metadata fields) must be included in the combined metadata + so they can be referenced via custom_prometheus_metadata_labels. + """ + standard_logging_payload = { + "metadata": { + "user_api_key_hash": "sk-abc123", + "user_api_key_alias": "hotel-key", + "user_api_key_team_id": "team-1", + "user_api_key_team_alias": "hotel-team", + "user_api_key_project_id": "proj-1", + "user_api_key_project_alias": "hotel-recommendations", + "user_api_key_user_id": "user-1", + "user_api_key_user_email": "user@example.com", + "user_api_key_end_user_id": None, + "user_api_key_org_id": None, + "user_api_key_org_alias": None, + "user_api_key_request_route": "/v1/chat/completions", + "requester_metadata": {"custom_field": "custom_value"}, + "user_api_key_auth_metadata": {"auth_field": "auth_value"}, + "spend_logs_metadata": None, + } + } + + combined = _get_combined_custom_metadata_from_standard_logging_payload( + standard_logging_payload + ) + + assert combined["user_api_key_project_alias"] == "hotel-recommendations" + assert combined["user_api_key_project_id"] == "proj-1" + assert combined["user_api_key_team_alias"] == "hotel-team" + assert combined["user_api_key_request_route"] == "/v1/chat/completions" + assert combined["custom_field"] == "custom_value" + assert combined["auth_field"] == "auth_value" + + +def test_project_alias_accessible_via_custom_prometheus_labels(monkeypatch): + """ + Regression test for LIT-3741: configuring + custom_prometheus_metadata_labels with "metadata.user_api_key_project_alias" + should produce a label with the project's alias value. + """ + monkeypatch.setattr( + "litellm.custom_prometheus_metadata_labels", + ["metadata.user_api_key_project_alias"], + ) + + standard_logging_payload = { + "metadata": { + "user_api_key_project_alias": "hotel-recommendations", + "requester_metadata": None, + "user_api_key_auth_metadata": None, + "spend_logs_metadata": None, + } + } + + combined = _get_combined_custom_metadata_from_standard_logging_payload( + standard_logging_payload + ) + result = get_custom_labels_from_metadata(combined) + + assert result == {"metadata_user_api_key_project_alias": "hotel-recommendations"} + + +def test_project_alias_accessible_without_prefix(monkeypatch): + """ + user_api_key_project_alias should also be accessible without + the "metadata." prefix in custom_prometheus_metadata_labels config. + """ + monkeypatch.setattr( + "litellm.custom_prometheus_metadata_labels", + ["user_api_key_project_alias"], + ) + + standard_logging_payload = { + "metadata": { + "user_api_key_project_alias": "hotel-recommendations", + "requester_metadata": None, + "user_api_key_auth_metadata": None, + "spend_logs_metadata": None, + } + } + + combined = _get_combined_custom_metadata_from_standard_logging_payload( + standard_logging_payload + ) + result = get_custom_labels_from_metadata(combined) + + assert result == {"user_api_key_project_alias": "hotel-recommendations"} From cca71a07c20e065fe0bd2fa1857cba783946ac93 Mon Sep 17 00:00:00 2001 From: Krrish Dholakia Date: Tue, 30 Jun 2026 20:03:59 -0700 Subject: [PATCH 52/79] feat(mcp): add mcp_tool_search virtual tools for large tool catalogs (#31777) * feat(mcp): add tool search virtual tools for large catalogs When mcp_tool_search_enabled is set on a key's object_permission, tools/list returns only mcp_tool_search and mcp_tool_call instead of the full catalog. The LLM searches by keyword then calls discovered tools by name, avoiding context bloat with 100+ tool deployments. * fix(mcp): persist mcp_tool_search_enabled and route tool_call by name The mcp_tool_search_enabled flag existed on the Pydantic models but the Prisma schema lacked the column, so keys generated with the flag never persisted it and tools/list kept returning the full catalog. Add the column across all three schema.prisma copies plus a migration. handle_mcp_tool_call passed server_name="" into call_tool, which built a malformed prefixed name ("-") and failed to resolve the server. Resolve the caller's allowed servers and dispatch through execute_mcp_tool instead, matching how the normal /tools/call path routes. * fix(mcp): filter list_tools to virtual tools on the protocol path The REST surface (/mcp-rest/tools/list) returned only the two virtual tools when mcp_tool_search_enabled was set, but the MCP protocol handler (handle_list_tools, used by real MCP clients over streamable-http/SSE) still returned the full catalog. Apply the same early return there so an actual MCP client sees mcp_tool_search and mcp_tool_call instead of every tool. call_tool was already intercepted on this path. * fix(mcp): enforce IP + server filtering on virtual tool search/call Review flagged that the virtual mcp_tool_search/mcp_tool_call path skipped access controls the normal MCP flow applies. mcp_tool_call resolved allowed servers from key permissions only, never applying IP filtering, so a caller on a public IP could invoke a tool on a server marked available_on_public_internet: false. mcp_tool_search listed the raw catalog via global_mcp_server_manager.list_tools, exposing tool names/schemas that /tools/list would hide and ignoring per-key/per-server tool filters. Route both virtual handlers through the same filtered paths used by the normal MCP flow: search now calls _list_mcp_tools and call resolves servers via _get_allowed_mcp_servers, both threaded with the request client IP so filter_server_ids_by_ip applies. execute_mcp_tool then enforces the server allowlist and per-key tool permissions. Thread client_ip through _list_mcp_tools/_get_tools_from_mcp_servers and pass it from the REST and SSE call sites. * fix(ci): ruff format server.py and sync dashboard API types ruff format normalizes the list_tools client_ip changes in server.py, and schema.d.ts gains the mcp_tool_search_enabled object-permission field so the generated dashboard types match the proxy OpenAPI spec. * style(mcp): drop quoted annotations and sort imports Clears UP037 on the virtual tool handler signatures (redundant with from __future__ import annotations) and I001 on the list_tools import block. * refactor(mcp): extract virtual-tool dispatch and host progress capture Pulls the mcp_tool_search/mcp_tool_call interception and the host progress-callback setup out of mcp_server_tool_call into helpers, keeping that handler under the strict cyclomatic-complexity ceiling after the client_ip threading. No behavior change. * test(mcp): cover SSE virtual-tool dispatch and host progress helpers Adds unit tests for _dispatch_virtual_mcp_tool (non-virtual passthrough, flag-disabled rejection, search/call routing with client_ip), _capture_host_progress_callback, and the protocol list_tools virtual early-return, covering the new server.py paths. * fix(mcp): forward per-request auth headers through virtual tool handlers The virtual mcp_tool_search/mcp_tool_call path intercepted the request before the normal header extraction ran, so client-supplied per-request auth (Authorization for upstream pass-through, x-mcp-auth-) was dropped and execute_mcp_tool/_list_mcp_tools received None. Thread mcp_auth_header, mcp_server_auth_headers, oauth2_headers, and raw_headers from both the REST and SSE call sites through the handlers so upstream MCP servers that require pass-through auth can be listed and called. * fix(mcp): preserve requested server scope in virtual tool calls A scoped MCP session (/mcp// or header-scoped) carries an mcp_servers scope that the normal call path passes into routing so the session can only reach that server. The virtual-tool branch dropped it and resolved with mcp_servers=None, letting a scoped session call mcp_tool_call for any server the key can access. Thread the context mcp_servers scope through _dispatch_virtual_mcp_tool into both handlers so search and call resolve against the same scoped server set. * fix(mcp): convert virtual tool errors to isError on the protocol path The virtual-tool dispatch ran before the protocol handler's HTTPException and guardrail handling, so a rejected virtual call (e.g. an out-of-scope 403 from execute_mcp_tool) raised out of mcp_server_tool_call and broke the MCP JSON-RPC stream instead of returning an isError CallToolResult. Move the dispatch inside the same try that wraps call_mcp_tool so virtual-tool errors get the same isError conversion as normal tool calls. * fix(mcp): spend-log virtual tool calls on the REST path The REST virtual-tool branch returned before common_processing_pre_call_logic, so execute_mcp_tool ran without a litellm_logging_obj and virtual mcp_tool_call invocations were not spend-logged or guardrail-checked like normal calls. Run the same pre-call pipeline in the call branch and thread the resulting litellm_logging_obj through handle_mcp_tool_call into execute_mcp_tool. * fix(mcp): reject virtual tool call when key has no accessible servers handle_mcp_tool_call passed an empty allowed_mcp_servers list into execute_mcp_tool; an unprefixed local tool name then fell through to the local registry, which has no server permission check, so a key with only mcp_tool_search_enabled and no server grants could run operator-configured local tools by name. Reject with 403 before dispatch when no servers are accessible, matching call_mcp_tool. * docs(mcp): document virtual tool_search module and parity rule in AGENTS.md * style(mcp): apply ruff format at repo line-length (120) * fix(mcp): add mcp_tool_search_enabled to ObjectPermissionDict and customer test fixture * chore: trigger CI * fix(mcp): mirror pre-call pipeline, guard imports, coerce top_k, honor include_disabled_tools - SSE mcp_tool_call now runs common_processing_pre_call_logic so it spend-logs and runs guardrails like the REST path (P1) - coerce_top_k avoids ValueError on non-integer top_k from clients (both REST and SSE) - guard mcp.types import in tool_search behind runtime/TYPE_CHECKING per package convention - admin list with include_disabled_tools returns the real catalog even when mcp_tool_search_enabled is set --- .../migration.sql | 2 + .../litellm_proxy_extras/schema.prisma | 1 + litellm/models/object_permission.py | 1 + .../proxy/_experimental/mcp_server/AGENTS.md | 6 + .../mcp_server/rest_endpoints.py | 86 +- .../proxy/_experimental/mcp_server/server.py | 228 ++++- .../_experimental/mcp_server/tool_search.py | 157 ++++ litellm/proxy/_types.py | 1 + litellm/proxy/schema.prisma | 1 + litellm/types/object_permission.py | 1 + schema.prisma | 1 + .../mcp_server/test_mcp_tool_search.py | 837 ++++++++++++++++++ .../test_customer_endpoints.py | 1 + .../test_object_permission_utils.py | 32 + ui/litellm-dashboard/src/lib/http/schema.d.ts | 4 + 15 files changed, 1321 insertions(+), 38 deletions(-) create mode 100644 litellm-proxy-extras/litellm_proxy_extras/migrations/20260626120000_add_mcp_tool_search_enabled/migration.sql create mode 100644 litellm/proxy/_experimental/mcp_server/tool_search.py create mode 100644 tests/test_litellm/proxy/_experimental/mcp_server/test_mcp_tool_search.py diff --git a/litellm-proxy-extras/litellm_proxy_extras/migrations/20260626120000_add_mcp_tool_search_enabled/migration.sql b/litellm-proxy-extras/litellm_proxy_extras/migrations/20260626120000_add_mcp_tool_search_enabled/migration.sql new file mode 100644 index 00000000000..542677426ba --- /dev/null +++ b/litellm-proxy-extras/litellm_proxy_extras/migrations/20260626120000_add_mcp_tool_search_enabled/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "LiteLLM_ObjectPermissionTable" ADD COLUMN "mcp_tool_search_enabled" BOOLEAN; diff --git a/litellm-proxy-extras/litellm_proxy_extras/schema.prisma b/litellm-proxy-extras/litellm_proxy_extras/schema.prisma index e21c0016491..5351e0a1470 100644 --- a/litellm-proxy-extras/litellm_proxy_extras/schema.prisma +++ b/litellm-proxy-extras/litellm_proxy_extras/schema.prisma @@ -279,6 +279,7 @@ model LiteLLM_ObjectPermissionTable { blocked_tools String[] @default([]) // Tool names blocked for any key/team/user with this permission mcp_toolsets String[] @default([]) // Toolset IDs granted to this key/team/user search_tools String[] @default([]) // search_tool_name values this key/team/user may call + mcp_tool_search_enabled Boolean? teams LiteLLM_TeamTable[] projects LiteLLM_ProjectTable[] verification_tokens LiteLLM_VerificationToken[] diff --git a/litellm/models/object_permission.py b/litellm/models/object_permission.py index 6c0d100046c..3052a2af459 100644 --- a/litellm/models/object_permission.py +++ b/litellm/models/object_permission.py @@ -24,3 +24,4 @@ class LiteLLM_ObjectPermissionTable(LiteLLMPydanticObjectBase): mcp_toolsets: Optional[List[str]] = None blocked_tools: Optional[List[str]] = [] search_tools: Optional[List[str]] = [] + mcp_tool_search_enabled: Optional[bool] = None diff --git a/litellm/proxy/_experimental/mcp_server/AGENTS.md b/litellm/proxy/_experimental/mcp_server/AGENTS.md index 8eebc3ea3b3..6e1d121c3be 100644 --- a/litellm/proxy/_experimental/mcp_server/AGENTS.md +++ b/litellm/proxy/_experimental/mcp_server/AGENTS.md @@ -41,6 +41,7 @@ litellm/proxy/_experimental/mcp_server/ sampling_handler.py # MCP sampling to LiteLLM completion flow elicitation_handler.py # MCP elicitation relay flow semantic_tool_filter.py # semantic filtering of available MCP tools + tool_search.py # opt-in virtual tools (mcp_tool_search + mcp_tool_call) for large catalogs guardrail_translation/ handler.py # MCP guardrail result translation sse_transport.py # SSE transport implementation @@ -79,6 +80,11 @@ module materially harder to understand. encryption need focused tests for both allowed and rejected paths. - Avoid adding comments to new code unless they explain non-obvious security or protocol behavior. Prefer clear names and small functions. +- The virtual tool path (`tool_search.py`, gated by `mcp_tool_search_enabled`) + must mirror the normal tool flow: IP filtering, server allowlist, per-key tool + permissions, no-accessible-server rejection, per-request auth headers, server + scope, error to `isError` conversion, and spend logging. Reuse `_list_mcp_tools` + and `execute_mcp_tool` rather than reimplementing any of these checks. ## Tests diff --git a/litellm/proxy/_experimental/mcp_server/rest_endpoints.py b/litellm/proxy/_experimental/mcp_server/rest_endpoints.py index d30d8af2af2..7ab7eb28147 100644 --- a/litellm/proxy/_experimental/mcp_server/rest_endpoints.py +++ b/litellm/proxy/_experimental/mcp_server/rest_endpoints.py @@ -569,6 +569,21 @@ if MCP_AVAILABLE: include_disabled_tools and user_api_key_dict.user_role == LitellmUserRoles.PROXY_ADMIN ) + if apply_tool_filters and getattr( + getattr(user_api_key_dict, "object_permission", None), + "mcp_tool_search_enabled", + False, + ): + from litellm.proxy._experimental.mcp_server.tool_search import ( + get_virtual_tool_definitions, + ) + + return { + "tools": get_virtual_tool_definitions(), + "error": None, + "message": "Successfully retrieved tools", + } + # Extract auth headers from request headers = request.headers raw_headers_from_request = dict(headers) @@ -727,6 +742,74 @@ if MCP_AVAILABLE: try: data = await request.json() + tool_name = data.get("name") + tool_arguments = data.get("arguments") or {} + + from litellm.proxy._experimental.mcp_server.tool_search import ( + MCP_TOOL_CALL_TOOL_NAME, + MCP_TOOL_SEARCH_TOOL_NAME, + coerce_top_k, + handle_mcp_tool_call, + handle_mcp_tool_search, + ) + + if tool_name in (MCP_TOOL_SEARCH_TOOL_NAME, MCP_TOOL_CALL_TOOL_NAME): + if not getattr( + getattr(user_api_key_dict, "object_permission", None), + "mcp_tool_search_enabled", + False, + ): + raise HTTPException( + status_code=403, + detail={ + "error": "forbidden", + "message": f"{tool_name} requires mcp_tool_search_enabled on the key", + }, + ) + rest_client_ip = IPAddressUtils.get_mcp_client_ip(request) + ( + virtual_mcp_auth_header, + virtual_mcp_server_auth_headers, + virtual_raw_headers, + ) = _extract_mcp_headers_from_request(request, MCPRequestHandler) + virtual_oauth2_headers = MCPRequestHandler._get_oauth2_headers_from_headers(request.headers) + if tool_name == MCP_TOOL_SEARCH_TOOL_NAME: + return await handle_mcp_tool_search( + query=tool_arguments.get("query", ""), + top_k=coerce_top_k(tool_arguments.get("top_k", 5)), + user_api_key_dict=user_api_key_dict, + client_ip=rest_client_ip, + mcp_auth_header=virtual_mcp_auth_header, + mcp_server_auth_headers=virtual_mcp_server_auth_headers, + oauth2_headers=virtual_oauth2_headers, + raw_headers=virtual_raw_headers, + ) + else: # MCP_TOOL_CALL_TOOL_NAME + # Run the same pre-call pipeline as the normal call path so the + # tool execution is spend-logged and guardrail-checked. + ( + _, + virtual_logging_obj, + ) = await ProxyBaseLLMRequestProcessing(data=data).common_processing_pre_call_logic( + request=request, + user_api_key_dict=user_api_key_dict, + proxy_config=proxy_config, + route_type=CallTypes.call_mcp_tool.value, + proxy_logging_obj=proxy_logging_obj, + general_settings=general_settings, + ) + return await handle_mcp_tool_call( + tool_name=tool_arguments.get("tool_name", ""), + arguments=tool_arguments.get("arguments") or {}, + user_api_key_dict=user_api_key_dict, + client_ip=rest_client_ip, + mcp_auth_header=virtual_mcp_auth_header, + mcp_server_auth_headers=virtual_mcp_server_auth_headers, + oauth2_headers=virtual_oauth2_headers, + raw_headers=virtual_raw_headers, + litellm_logging_obj=virtual_logging_obj, + ) + # Validate required parameters early server_id = data.get("server_id") if not server_id: @@ -738,7 +821,6 @@ if MCP_AVAILABLE: }, ) - tool_name = data.get("name") if not tool_name: raise HTTPException( status_code=400, @@ -748,8 +830,6 @@ if MCP_AVAILABLE: }, ) - tool_arguments = data.get("arguments") or {} - proxy_base_llm_response_processor = ProxyBaseLLMRequestProcessing(data=data) ( data, diff --git a/litellm/proxy/_experimental/mcp_server/server.py b/litellm/proxy/_experimental/mcp_server/server.py index 607e676524e..a65239b296f 100644 --- a/litellm/proxy/_experimental/mcp_server/server.py +++ b/litellm/proxy/_experimental/mcp_server/server.py @@ -10,8 +10,8 @@ import contextvars import hashlib import json import time -import types import traceback +import types import uuid from datetime import datetime from typing import ( @@ -37,13 +37,17 @@ from starlette.types import Message, Receive, Scope, Send from litellm._logging import verbose_logger from litellm.constants import MAXIMUM_TRACEBACK_LINES_TO_LOG from litellm.litellm_core_utils.litellm_logging import Logging as LiteLLMLoggingObj +from litellm.llms.custom_httpx.http_handler import ( + get_async_httpx_client, + httpxSpecialProvider, +) from litellm.proxy._experimental.mcp_server.auth.user_api_key_auth_mcp import ( MCPRequestHandler, ) -from litellm.proxy._experimental.mcp_server.exceptions import MCPUpstreamAuthError from litellm.proxy._experimental.mcp_server.discoverable_endpoints import ( get_request_base_url, ) +from litellm.proxy._experimental.mcp_server.exceptions import MCPUpstreamAuthError from litellm.proxy._experimental.mcp_server.mcp_context import ( _mcp_active_toolset_id, _mcp_gateway_initialize_instructions, @@ -59,10 +63,6 @@ from litellm.proxy._experimental.mcp_server.utils import ( get_server_prefix, iter_known_server_prefixes, ) -from litellm.llms.custom_httpx.http_handler import ( - get_async_httpx_client, - httpxSpecialProvider, -) from litellm.proxy._types import ( ProxyException, SpecialMCPServerNames, @@ -122,9 +122,12 @@ def _write_byok_cred_cache(user_id: str, server_id: str, credential: Optional[st # TODO: Make this a util function for litellm client usage MCP_AVAILABLE: bool = True try: + import weakref + from mcp import ReadResourceResult, Resource from mcp.server import Server from mcp.server.lowlevel.helper_types import ReadResourceContents + from mcp.server.session import ServerSession as _McpServerSession from mcp.types import ( BlobResourceContents, GetPromptResult, @@ -132,8 +135,6 @@ try: TextResourceContents, Tool, ) - from mcp.server.session import ServerSession as _McpServerSession - import weakref # Robust auth lookup keyed by session_object. _session_obj_auth_storage: "weakref.WeakKeyDictionary[Any, MCPAuthenticatedUser]" = weakref.WeakKeyDictionary() @@ -303,14 +304,14 @@ def _proxy_exception_to_http_exception(exc: ProxyException) -> HTTPException: if MCP_AVAILABLE: from mcp.server import Server - from mcp.server.lowlevel.server import NotificationOptions - from mcp.server.models import InitializationOptions # Import auth context variables and middleware from mcp.server.auth.middleware.auth_context import ( AuthContextMiddleware, auth_context_var, ) + from mcp.server.lowlevel.server import NotificationOptions + from mcp.server.models import InitializationOptions try: from mcp.server.streamable_http_manager import StreamableHTTPSessionManager @@ -664,6 +665,19 @@ if MCP_AVAILABLE: verbose_logger.debug( f"MCP list_tools - MCP server auth headers: {list(mcp_server_auth_headers.keys()) if mcp_server_auth_headers else None}" ) + if getattr( + getattr(user_api_key_auth, "object_permission", None), + "mcp_tool_search_enabled", + False, + ): + from mcp.types import Tool + + from litellm.proxy._experimental.mcp_server.tool_search import ( + get_virtual_tool_definitions, + ) + + return [Tool(**d) for d in get_virtual_tool_definitions()] + # Get mcp_servers from context variable verbose_logger.debug("MCP list_tools - Calling _list_mcp_tools") tools = await _list_mcp_tools( @@ -688,6 +702,150 @@ if MCP_AVAILABLE: if _session_reset_token is not None: active_mcp_session_var.reset(_session_reset_token) + def _capture_host_progress_callback(host_server) -> Optional[Callable]: + """Return a progress-forwarding callback bound to the host MCP session. + + Returns ``None`` when the host did not supply a progress token. + """ + try: + host_ctx = host_server.request_context + except Exception as e: + verbose_logger.warning(f"Could not capture host progress context: {e}") + return None + + if not (host_ctx and hasattr(host_ctx, "meta") and host_ctx.meta): + return None + host_token = getattr(host_ctx.meta, "progressToken", None) + if not (host_token and hasattr(host_ctx, "session") and host_ctx.session): + return None + host_session = host_ctx.session + + async def forward_progress(progress: float, total: Optional[float]): + """Forward progress notifications from external MCP to Host""" + try: + await host_session.send_progress_notification( + progress_token=host_token, + progress=progress, + total=total, + ) + verbose_logger.debug(f"Forwarded progress {progress}/{total} to Host") + except Exception as e: + verbose_logger.error(f"Failed to forward progress to Host: {e}") + + verbose_logger.debug(f"Host progressToken captured: {host_token[:8]}...") + return forward_progress + + async def _build_virtual_call_logging_obj( + name: str, + arguments: dict[str, Any], + user_api_key_auth: UserAPIKeyAuth, + ) -> Optional[LiteLLMLoggingObj]: + """Run the pre-call pipeline (guardrails + logging setup) for a virtual + mcp_tool_call so the SSE path spend-logs like the REST path.""" + from fastapi import Request + + from litellm.proxy.common_request_processing import ( + ProxyBaseLLMRequestProcessing, + ) + from litellm.proxy.proxy_server import ( + general_settings, + proxy_config, + proxy_logging_obj, + ) + + request = Request( + scope={ + "type": "http", + "method": "POST", + "path": "/mcp/tools/call", + "headers": [(b"content-type", b"application/json")], + } + ) + _, virtual_logging_obj = await ProxyBaseLLMRequestProcessing( + data={"name": name, "arguments": arguments} + ).common_processing_pre_call_logic( + request=request, + user_api_key_dict=user_api_key_auth, + proxy_config=proxy_config, + route_type=CallTypes.call_mcp_tool.value, + proxy_logging_obj=proxy_logging_obj, + general_settings=general_settings, + ) + return virtual_logging_obj + + async def _dispatch_virtual_mcp_tool( + name: str, + arguments: Optional[dict[str, Any]], + user_api_key_auth: Optional[UserAPIKeyAuth], + client_ip: Optional[str], + mcp_servers: Optional[list[str]] = None, + mcp_auth_header: Optional[str] = None, + mcp_server_auth_headers: Optional[dict[str, dict[str, str]]] = None, + oauth2_headers: Optional[dict[str, str]] = None, + raw_headers: Optional[dict[str, str]] = None, + ) -> Optional[CallToolResult]: + """Handle the mcp_tool_search / mcp_tool_call virtual tools. + + Returns a CallToolResult when ``name`` is a virtual tool, else ``None`` so + the caller falls through to normal tool routing. + """ + from litellm.proxy._experimental.mcp_server.tool_search import ( + MCP_TOOL_CALL_TOOL_NAME, + MCP_TOOL_SEARCH_TOOL_NAME, + coerce_top_k, + handle_mcp_tool_call, + handle_mcp_tool_search, + ) + + if name not in (MCP_TOOL_SEARCH_TOOL_NAME, MCP_TOOL_CALL_TOOL_NAME): + return None + + if not getattr( + getattr(user_api_key_auth, "object_permission", None), + "mcp_tool_search_enabled", + False, + ): + return CallToolResult( + content=[ + TextContent( + type="text", + text=f"Tool {name} requires mcp_tool_search_enabled on the key", + ) + ], + isError=True, + ) + + args = arguments or {} + if name == MCP_TOOL_SEARCH_TOOL_NAME: + return await handle_mcp_tool_search( + query=args.get("query", ""), + top_k=coerce_top_k(args.get("top_k", 5)), + user_api_key_dict=user_api_key_auth, + client_ip=client_ip, + mcp_servers=mcp_servers, + mcp_auth_header=mcp_auth_header, + mcp_server_auth_headers=mcp_server_auth_headers, + oauth2_headers=oauth2_headers, + raw_headers=raw_headers, + ) + + assert user_api_key_auth is not None # guaranteed by the flag check above + virtual_logging_obj = await _build_virtual_call_logging_obj( + name=name, arguments=args, user_api_key_auth=user_api_key_auth + ) + return await handle_mcp_tool_call( + tool_name=args.get("tool_name", ""), + arguments=args.get("arguments") or {}, + user_api_key_dict=user_api_key_auth, + client_ip=client_ip, + mcp_servers=mcp_servers, + mcp_auth_header=mcp_auth_header, + mcp_server_auth_headers=mcp_server_auth_headers, + oauth2_headers=oauth2_headers, + raw_headers=raw_headers, + litellm_logging_obj=virtual_logging_obj, + ) + @server.call_tool() async def mcp_server_tool_call(name: str, arguments: Dict[str, Any] | None) -> CallToolResult: """ @@ -701,11 +859,12 @@ if MCP_AVAILABLE: HTTPException: If tool not found or arguments missing """ from fastapi import Request + from mcp.server.lowlevel.server import request_ctx + from mcp.types import CallToolResult + from litellm.exceptions import BlockedPiiEntityError, GuardrailRaisedException from litellm.proxy.litellm_pre_call_utils import add_litellm_data_to_request from litellm.proxy.proxy_server import proxy_config - from mcp.types import CallToolResult - from mcp.server.lowlevel.server import request_ctx req_ctx = request_ctx.get(None) _session_reset_token = None @@ -730,31 +889,25 @@ if MCP_AVAILABLE: ) verbose_logger.debug(f"MCP mcp_server_tool_call - User API Key Auth from context: {user_api_key_auth}") - host_progress_callback = None - try: - host_ctx = server.request_context - if host_ctx and hasattr(host_ctx, "meta") and host_ctx.meta: - host_token = getattr(host_ctx.meta, "progressToken", None) - if host_token and hasattr(host_ctx, "session") and host_ctx.session: - host_session = host_ctx.session - async def forward_progress(progress: float, total: Optional[float]): - """Forward progress notifications from external MCP to Host""" - try: - await host_session.send_progress_notification( - progress_token=host_token, - progress=progress, - total=total, - ) - verbose_logger.debug(f"Forwarded progress {progress}/{total} to Host") - except Exception as e: - verbose_logger.error(f"Failed to forward progress to Host: {e}") - - host_progress_callback = forward_progress - verbose_logger.debug(f"Host progressToken captured: {host_token[:8]}...") - except Exception as e: - verbose_logger.warning(f"Could not capture host progress context: {e}") try: + # Inside this try so virtual-tool errors convert to isError + # CallToolResult instead of raising out of the protocol handler. + virtual_tool_result = await _dispatch_virtual_mcp_tool( + name=name, + arguments=arguments, + user_api_key_auth=user_api_key_auth, + client_ip=_client_ip, + mcp_servers=mcp_servers, + mcp_auth_header=mcp_auth_header, + mcp_server_auth_headers=mcp_server_auth_headers, + oauth2_headers=oauth2_headers, + raw_headers=raw_headers, + ) + if virtual_tool_result is not None: + return virtual_tool_result + + host_progress_callback = _capture_host_progress_callback(server) # Create a body date for logging body_data = {"name": name, "arguments": arguments} # Set trace/session id from raw_headers so spend logs and logging_obj stay consistent (same as A2A) @@ -1528,6 +1681,7 @@ if MCP_AVAILABLE: log_list_tools_to_spendlogs: bool = False, list_tools_log_source: Optional[str] = None, litellm_trace_id: Optional[str] = None, + client_ip: Optional[str] = None, ) -> List[MCPTool]: """ Helper method to fetch tools from MCP servers based on server filtering criteria. @@ -1615,6 +1769,7 @@ if MCP_AVAILABLE: allowed_mcp_servers = await _get_allowed_mcp_servers( user_api_key_auth=user_api_key_auth, mcp_servers=mcp_servers, + client_ip=client_ip, ) # Pre-fetch OAuth credentials only when at least one server uses OAuth2, @@ -2024,6 +2179,7 @@ if MCP_AVAILABLE: raw_headers: Optional[Dict[str, str]] = None, log_list_tools_to_spendlogs: bool = False, list_tools_log_source: Optional[str] = None, + client_ip: Optional[str] = None, ) -> List[MCPTool]: """ List all available MCP tools. @@ -2033,6 +2189,7 @@ if MCP_AVAILABLE: mcp_auth_header: Optional auth header for MCP server (deprecated) mcp_servers: Optional list of server names/aliases to filter by mcp_server_auth_headers: Optional dict of server-specific auth headers {server_alias: auth_value} + client_ip: Client IP for IP-based server access control Returns: List[MCPTool]: Combined list of tools from all accessible servers @@ -2056,6 +2213,7 @@ if MCP_AVAILABLE: raw_headers=raw_headers, log_list_tools_to_spendlogs=log_list_tools_to_spendlogs, list_tools_log_source=list_tools_log_source, + client_ip=client_ip, ) verbose_logger.debug(f"Successfully fetched {len(managed_tools)} tools from managed MCP servers") except Exception as e: diff --git a/litellm/proxy/_experimental/mcp_server/tool_search.py b/litellm/proxy/_experimental/mcp_server/tool_search.py new file mode 100644 index 00000000000..fa57a2b3eb2 --- /dev/null +++ b/litellm/proxy/_experimental/mcp_server/tool_search.py @@ -0,0 +1,157 @@ +from __future__ import annotations + +import json +from datetime import datetime +from typing import TYPE_CHECKING, Any, Optional + +if TYPE_CHECKING: + from mcp.types import CallToolResult + + from litellm.litellm_core_utils.litellm_logging import Logging as LiteLLMLoggingObj + from litellm.proxy._types import UserAPIKeyAuth + +MCP_TOOL_SEARCH_TOOL_NAME: str = "mcp_tool_search" +MCP_TOOL_CALL_TOOL_NAME: str = "mcp_tool_call" + + +def coerce_top_k(value: Any, default: int = 5) -> int: + try: + return int(value) + except (TypeError, ValueError): + return default + + +def search_tools(query: str, tools: list[dict[str, Any]], top_k: int = 5) -> list[dict[str, Any]]: + if not query: + return [] + tokens = query.lower().split() + + def _score(tool: dict[str, Any]) -> int: + haystack = (tool.get("name", "") + " " + tool.get("description", "")).lower() + return sum(1 for t in tokens if t in haystack) + + scored = ((s, tool) for tool in tools if (s := _score(tool)) > 0) + return [tool for _, tool in sorted(scored, key=lambda x: x[0], reverse=True)[:top_k]] + + +def get_virtual_tool_definitions() -> list[dict[str, Any]]: + return [ + { + "name": MCP_TOOL_SEARCH_TOOL_NAME, + "description": "Search for MCP tools by keyword. Returns top matching tools with names, descriptions, and input schemas.", + "inputSchema": { + "type": "object", + "properties": { + "query": { + "type": "string", + "description": "Keywords to search for in tool names and descriptions.", + }, + "top_k": { + "type": "integer", + "description": "Maximum number of results to return.", + "default": 5, + }, + }, + "required": ["query"], + }, + }, + { + "name": MCP_TOOL_CALL_TOOL_NAME, + "description": "Call an MCP tool by name with the given arguments.", + "inputSchema": { + "type": "object", + "properties": { + "tool_name": { + "type": "string", + "description": "The exact name of the MCP tool to call.", + }, + "arguments": { + "type": "object", + "description": "Arguments to pass to the tool.", + }, + }, + "required": ["tool_name"], + }, + }, + ] + + +async def handle_mcp_tool_search( + query: str, + top_k: int, + user_api_key_dict: UserAPIKeyAuth, + client_ip: Optional[str] = None, + mcp_servers: Optional[list[str]] = None, + mcp_auth_header: Optional[str] = None, + mcp_server_auth_headers: Optional[dict[str, dict[str, str]]] = None, + oauth2_headers: Optional[dict[str, str]] = None, + raw_headers: Optional[dict[str, str]] = None, +) -> CallToolResult: + from mcp.types import CallToolResult, TextContent + + from litellm.proxy._experimental.mcp_server.server import _list_mcp_tools + + mcp_tools = await _list_mcp_tools( + user_api_key_auth=user_api_key_dict, + mcp_servers=mcp_servers, + client_ip=client_ip, + mcp_auth_header=mcp_auth_header, + mcp_server_auth_headers=mcp_server_auth_headers, + oauth2_headers=oauth2_headers, + raw_headers=raw_headers, + ) + tools = [ + { + "name": t.name, + "description": t.description or "", + "inputSchema": t.inputSchema, + } + for t in mcp_tools + ] + results = search_tools(query, tools, top_k) + return CallToolResult(content=[TextContent(type="text", text=json.dumps(results))], isError=False) + + +async def handle_mcp_tool_call( + tool_name: str, + arguments: dict[str, Any], + user_api_key_dict: UserAPIKeyAuth, + client_ip: Optional[str] = None, + mcp_servers: Optional[list[str]] = None, + mcp_auth_header: Optional[str] = None, + mcp_server_auth_headers: Optional[dict[str, dict[str, str]]] = None, + oauth2_headers: Optional[dict[str, str]] = None, + raw_headers: Optional[dict[str, str]] = None, + litellm_logging_obj: Optional[LiteLLMLoggingObj] = None, +) -> CallToolResult: + from litellm.proxy._experimental.mcp_server.server import ( + _get_allowed_mcp_servers, + execute_mcp_tool, + ) + + allowed_mcp_servers = await _get_allowed_mcp_servers( + user_api_key_auth=user_api_key_dict, + mcp_servers=mcp_servers, + client_ip=client_ip, + ) + + # Reject before dispatch when the key has no accessible servers; otherwise an + # unprefixed local tool name would fall through to the local registry in + # execute_mcp_tool, which has no server permission check. + if not allowed_mcp_servers: + from fastapi import HTTPException + + raise HTTPException(status_code=403, detail="User not allowed to call this tool.") + + return await execute_mcp_tool( + name=tool_name, + arguments=arguments, + allowed_mcp_servers=allowed_mcp_servers, + start_time=datetime.now(), + user_api_key_auth=user_api_key_dict, + mcp_auth_header=mcp_auth_header, + mcp_server_auth_headers=mcp_server_auth_headers, + oauth2_headers=oauth2_headers, + raw_headers=raw_headers, + litellm_logging_obj=litellm_logging_obj, + ) diff --git a/litellm/proxy/_types.py b/litellm/proxy/_types.py index 643f8d69300..12466b525d6 100644 --- a/litellm/proxy/_types.py +++ b/litellm/proxy/_types.py @@ -1006,6 +1006,7 @@ class LiteLLM_ObjectPermissionBase(LiteLLMPydanticObjectBase): agent_access_groups: Optional[List[str]] = None models: Optional[List[str]] = None search_tools: Optional[List[str]] = None + mcp_tool_search_enabled: Optional[bool] = None from litellm.types.object_permission import ( # noqa: E402 diff --git a/litellm/proxy/schema.prisma b/litellm/proxy/schema.prisma index e21c0016491..5351e0a1470 100644 --- a/litellm/proxy/schema.prisma +++ b/litellm/proxy/schema.prisma @@ -279,6 +279,7 @@ model LiteLLM_ObjectPermissionTable { blocked_tools String[] @default([]) // Tool names blocked for any key/team/user with this permission mcp_toolsets String[] @default([]) // Toolset IDs granted to this key/team/user search_tools String[] @default([]) // search_tool_name values this key/team/user may call + mcp_tool_search_enabled Boolean? teams LiteLLM_TeamTable[] projects LiteLLM_ProjectTable[] verification_tokens LiteLLM_VerificationToken[] diff --git a/litellm/types/object_permission.py b/litellm/types/object_permission.py index ff932dccd5d..d0458173fbf 100644 --- a/litellm/types/object_permission.py +++ b/litellm/types/object_permission.py @@ -24,3 +24,4 @@ class ObjectPermissionDict(TypedDict, total=False): agent_access_groups: Optional[list[str]] models: Optional[list[str]] search_tools: Optional[list[str]] + mcp_tool_search_enabled: Optional[bool] diff --git a/schema.prisma b/schema.prisma index e21c0016491..5351e0a1470 100644 --- a/schema.prisma +++ b/schema.prisma @@ -279,6 +279,7 @@ model LiteLLM_ObjectPermissionTable { blocked_tools String[] @default([]) // Tool names blocked for any key/team/user with this permission mcp_toolsets String[] @default([]) // Toolset IDs granted to this key/team/user search_tools String[] @default([]) // search_tool_name values this key/team/user may call + mcp_tool_search_enabled Boolean? teams LiteLLM_TeamTable[] projects LiteLLM_ProjectTable[] verification_tokens LiteLLM_VerificationToken[] diff --git a/tests/test_litellm/proxy/_experimental/mcp_server/test_mcp_tool_search.py b/tests/test_litellm/proxy/_experimental/mcp_server/test_mcp_tool_search.py new file mode 100644 index 00000000000..9c20808df67 --- /dev/null +++ b/tests/test_litellm/proxy/_experimental/mcp_server/test_mcp_tool_search.py @@ -0,0 +1,837 @@ +""" +Tests for MCP tool search feature. + +Covers: +- search_tools() pure function +- get_virtual_tool_definitions() shape +- list_tool_rest_api returns only virtual tools when mcp_tool_search_enabled=True +- call_tool_rest_api intercepts mcp_tool_search calls +- call_tool_rest_api intercepts mcp_tool_call calls +""" + +import json +from typing import Any +from unittest.mock import AsyncMock, MagicMock, patch + +import pytest + +from litellm.models.object_permission import LiteLLM_ObjectPermissionTable +from litellm.proxy._experimental.mcp_server.tool_search import ( + MCP_TOOL_CALL_TOOL_NAME, + MCP_TOOL_SEARCH_TOOL_NAME, + coerce_top_k, + get_virtual_tool_definitions, + search_tools, +) +from litellm.proxy._types import LitellmUserRoles, UserAPIKeyAuth + + +def _make_tools(specs: list[tuple[str, str]]) -> list[dict[str, Any]]: + return [ + { + "name": name, + "description": desc, + "inputSchema": {"type": "object", "properties": {}}, + } + for name, desc in specs + ] + + +def _make_perm(**kwargs: Any) -> LiteLLM_ObjectPermissionTable: + return LiteLLM_ObjectPermissionTable(object_permission_id="test", **kwargs) + + +SAMPLE_TOOLS = _make_tools( + [ + ("github-create_issue", "Create a new issue in a GitHub repository"), + ("github-list_repos", "List all repositories for a GitHub user"), + ("slack-send_message", "Send a message to a Slack channel"), + ("slack-list_channels", "List all Slack channels in a workspace"), + ("notion-create_page", "Create a new page in Notion"), + ] +) + + +class TestCoerceTopK: + def test_int_passthrough(self) -> None: + assert coerce_top_k(3) == 3 + + def test_numeric_string_coerced(self) -> None: + assert coerce_top_k("7") == 7 + + def test_float_truncated(self) -> None: + assert coerce_top_k(3.9) == 3 + + def test_non_numeric_string_returns_default(self) -> None: + assert coerce_top_k("abc") == 5 + + def test_none_returns_default(self) -> None: + assert coerce_top_k(None) == 5 + + def test_custom_default(self) -> None: + assert coerce_top_k("nope", default=10) == 10 + + +class TestSearchTools: + def test_returns_matching_tools(self) -> None: + results = search_tools("github issue", SAMPLE_TOOLS) + names = [t["name"] for t in results] + assert "github-create_issue" in names + + def test_ranks_by_relevance(self) -> None: + results = search_tools("github", SAMPLE_TOOLS) + names = [t["name"] for t in results] + github_positions = [i for i, n in enumerate(names) if n.startswith("github")] + other_positions = [i for i, n in enumerate(names) if not n.startswith("github")] + assert all(g < o for g in github_positions for o in other_positions) + + def test_top_k_limits_results(self) -> None: + results = search_tools("a", SAMPLE_TOOLS, top_k=2) + assert len(results) <= 2 + + def test_empty_query_returns_empty(self) -> None: + assert search_tools("", SAMPLE_TOOLS) == [] + + def test_no_match_returns_empty(self) -> None: + assert search_tools("xyzzy_nonexistent_zzz", SAMPLE_TOOLS) == [] + + def test_matches_description_not_just_name(self) -> None: + results = search_tools("channel", SAMPLE_TOOLS) + names = [t["name"] for t in results] + assert "slack-list_channels" in names + + def test_case_insensitive(self) -> None: + lower = [t["name"] for t in search_tools("github", SAMPLE_TOOLS)] + upper = [t["name"] for t in search_tools("GITHUB", SAMPLE_TOOLS)] + assert lower == upper + + def test_result_tools_have_full_schema(self) -> None: + for tool in search_tools("github", SAMPLE_TOOLS): + assert "name" in tool + assert "description" in tool + assert "inputSchema" in tool + + +class TestGetVirtualToolDefinitions: + def test_returns_two_tools(self) -> None: + assert len(get_virtual_tool_definitions()) == 2 + + def test_has_mcp_tool_search(self) -> None: + names = [t["name"] for t in get_virtual_tool_definitions()] + assert MCP_TOOL_SEARCH_TOOL_NAME in names + + def test_has_mcp_tool_call(self) -> None: + names = [t["name"] for t in get_virtual_tool_definitions()] + assert MCP_TOOL_CALL_TOOL_NAME in names + + def test_mcp_tool_search_schema_has_query(self) -> None: + tools = get_virtual_tool_definitions() + search_tool = next(t for t in tools if t["name"] == MCP_TOOL_SEARCH_TOOL_NAME) + props = search_tool["inputSchema"]["properties"] + assert "query" in props + assert search_tool["inputSchema"]["required"] == ["query"] + + def test_mcp_tool_call_schema_has_tool_name_and_arguments(self) -> None: + tools = get_virtual_tool_definitions() + call_tool = next(t for t in tools if t["name"] == MCP_TOOL_CALL_TOOL_NAME) + props = call_tool["inputSchema"]["properties"] + assert "tool_name" in props + assert "arguments" in props + assert "tool_name" in call_tool["inputSchema"]["required"] + + def test_all_tools_have_description(self) -> None: + for tool in get_virtual_tool_definitions(): + assert tool.get("description"), f"{tool['name']} missing description" + + def test_definitions_construct_mcp_protocol_tool(self) -> None: + """The MCP protocol list_tools handler builds mcp.types.Tool(**d) from + each definition, so the dict keys must stay valid Tool fields.""" + from mcp.types import Tool + + built = [Tool(**d) for d in get_virtual_tool_definitions()] + assert {t.name for t in built} == { + MCP_TOOL_SEARCH_TOOL_NAME, + MCP_TOOL_CALL_TOOL_NAME, + } + + +class TestListToolRestApiWithToolSearch: + @pytest.mark.asyncio + async def test_returns_only_virtual_tools_when_flag_enabled(self) -> None: + from litellm.proxy._experimental.mcp_server.rest_endpoints import router + + user_api_key_dict = UserAPIKeyAuth( + api_key="test_key", + object_permission=_make_perm( + mcp_tool_search_enabled=True, + mcp_servers=["github", "slack"], + ), + ) + + mock_request = MagicMock() + mock_request.headers = {} + + list_fn = next( + r.endpoint + for r in router.routes + if hasattr(r, "path") and r.path.endswith("/tools/list") and hasattr(r, "methods") and "GET" in r.methods + ) + + result = await list_fn( + request=mock_request, + server_id=None, + include_disabled_tools=False, + user_api_key_dict=user_api_key_dict, + ) + + assert result["error"] is None + tool_names = [t["name"] for t in result["tools"]] + assert set(tool_names) == {MCP_TOOL_SEARCH_TOOL_NAME, MCP_TOOL_CALL_TOOL_NAME} + + @pytest.mark.asyncio + async def test_returns_full_catalog_when_flag_disabled(self) -> None: + from litellm.proxy._experimental.mcp_server.rest_endpoints import router + + user_api_key_dict = UserAPIKeyAuth( + api_key="test_key", + object_permission=_make_perm( + mcp_tool_search_enabled=False, + mcp_servers=["github"], + ), + ) + + mock_request = MagicMock() + mock_request.headers = {} + + fake_tools = [ + { + "name": "github-create_issue", + "description": "Create issue", + "inputSchema": {"type": "object"}, + } + ] + + list_fn = next( + r.endpoint + for r in router.routes + if hasattr(r, "path") and r.path.endswith("/tools/list") and hasattr(r, "methods") and "GET" in r.methods + ) + + with ( + patch( + "litellm.proxy._experimental.mcp_server.rest_endpoints.build_effective_auth_contexts", + new_callable=AsyncMock, + return_value=[user_api_key_dict], + ), + patch("litellm.proxy._experimental.mcp_server.rest_endpoints.global_mcp_server_manager") as mock_manager, + patch( + "litellm.proxy._experimental.mcp_server.rest_endpoints._get_tools_for_single_server", + new_callable=AsyncMock, + return_value=fake_tools, + ), + patch("litellm.proxy._experimental.mcp_server.rest_endpoints.IPAddressUtils"), + patch( + "litellm.proxy._experimental.mcp_server.rest_endpoints._prefetch_user_oauth_creds", + new_callable=AsyncMock, + return_value={}, + ), + patch( + "litellm.proxy._experimental.mcp_server.rest_endpoints._get_oauth2_server_ids", + return_value=[], + ), + patch( + "litellm.proxy._experimental.mcp_server.rest_endpoints._get_server_auth_header", + return_value=None, + ), + patch( + "litellm.proxy._experimental.mcp_server.rest_endpoints._get_user_oauth_extra_headers", + new_callable=AsyncMock, + return_value=None, + ), + ): + mock_manager.get_allowed_mcp_servers = AsyncMock(return_value=["github"]) + mock_manager.filter_server_ids_by_ip_with_info = MagicMock(return_value=(["github"], 0)) + mock_manager.get_mcp_server_by_id = MagicMock(return_value=MagicMock(name="github", server_id="github")) + result = await list_fn( + request=mock_request, + server_id=None, + include_disabled_tools=False, + user_api_key_dict=user_api_key_dict, + ) + + tool_names = [t["name"] for t in result["tools"]] + assert MCP_TOOL_SEARCH_TOOL_NAME not in tool_names + assert "github-create_issue" in tool_names + + @pytest.mark.asyncio + async def test_admin_include_disabled_tools_bypasses_virtual_catalog(self) -> None: + """Regression: an admin listing with include_disabled_tools must see the + real catalog (to configure allowlists) even when mcp_tool_search_enabled is + set, instead of the two virtual tools.""" + from litellm.proxy._experimental.mcp_server.rest_endpoints import router + + user_api_key_dict = UserAPIKeyAuth( + api_key="admin_key", + user_role=LitellmUserRoles.PROXY_ADMIN, + object_permission=_make_perm( + mcp_tool_search_enabled=True, + mcp_servers=["github"], + ), + ) + + mock_request = MagicMock() + mock_request.headers = {} + + fake_tools = [ + { + "name": "github-create_issue", + "description": "Create issue", + "inputSchema": {"type": "object"}, + } + ] + + list_fn = next( + r.endpoint + for r in router.routes + if hasattr(r, "path") and r.path.endswith("/tools/list") and hasattr(r, "methods") and "GET" in r.methods + ) + + with ( + patch( + "litellm.proxy._experimental.mcp_server.rest_endpoints.build_effective_auth_contexts", + new_callable=AsyncMock, + return_value=[user_api_key_dict], + ), + patch("litellm.proxy._experimental.mcp_server.rest_endpoints.global_mcp_server_manager") as mock_manager, + patch( + "litellm.proxy._experimental.mcp_server.rest_endpoints._get_tools_for_single_server", + new_callable=AsyncMock, + return_value=fake_tools, + ), + patch("litellm.proxy._experimental.mcp_server.rest_endpoints.IPAddressUtils"), + patch( + "litellm.proxy._experimental.mcp_server.rest_endpoints._prefetch_user_oauth_creds", + new_callable=AsyncMock, + return_value={}, + ), + patch( + "litellm.proxy._experimental.mcp_server.rest_endpoints._get_oauth2_server_ids", + return_value=[], + ), + patch( + "litellm.proxy._experimental.mcp_server.rest_endpoints._get_server_auth_header", + return_value=None, + ), + patch( + "litellm.proxy._experimental.mcp_server.rest_endpoints._get_user_oauth_extra_headers", + new_callable=AsyncMock, + return_value=None, + ), + ): + mock_manager.get_allowed_mcp_servers = AsyncMock(return_value=["github"]) + mock_manager.filter_server_ids_by_ip_with_info = MagicMock(return_value=(["github"], 0)) + mock_manager.get_mcp_server_by_id = MagicMock(return_value=MagicMock(name="github", server_id="github")) + result = await list_fn( + request=mock_request, + server_id=None, + include_disabled_tools=True, + user_api_key_dict=user_api_key_dict, + ) + + tool_names = [t["name"] for t in result["tools"]] + assert MCP_TOOL_SEARCH_TOOL_NAME not in tool_names + assert "github-create_issue" in tool_names + + +class TestCallToolRestApiVirtualTools: + def _make_request(self, body: dict[str, Any]) -> MagicMock: + mock_request = MagicMock() + mock_request.json = AsyncMock(return_value=body) + mock_request.headers = {} + mock_request.url = MagicMock() + mock_request.url.path = "/mcp-rest/tools/call" + return mock_request + + def _get_call_fn(self) -> Any: + from litellm.proxy._experimental.mcp_server.rest_endpoints import router + + return next( + r.endpoint + for r in router.routes + if hasattr(r, "path") and r.path.endswith("/tools/call") and hasattr(r, "methods") and "POST" in r.methods + ) + + @pytest.mark.asyncio + async def test_mcp_tool_search_call_returns_tool_defs(self) -> None: + user_api_key_dict = UserAPIKeyAuth( + api_key="test_key", + object_permission=_make_perm( + mcp_tool_search_enabled=True, + mcp_servers=["github"], + ), + ) + + request = self._make_request({"name": MCP_TOOL_SEARCH_TOOL_NAME, "arguments": {"query": "create issue"}}) + + mock_tool = MagicMock() + mock_tool.name = "github-create_issue" + mock_tool.description = "Create a GitHub issue" + mock_tool.inputSchema = {"type": "object", "properties": {}} + + with patch( + "litellm.proxy._experimental.mcp_server.server._list_mcp_tools", + new_callable=AsyncMock, + return_value=[mock_tool], + ): + result = await self._get_call_fn()( + request=request, + user_api_key_dict=user_api_key_dict, + ) + + assert result.content + assert result.content[0].type == "text" + returned_tools = json.loads(result.content[0].text) + assert isinstance(returned_tools, list) + assert any(t["name"] == "github-create_issue" for t in returned_tools) + + @pytest.mark.asyncio + async def test_mcp_tool_call_executes_discovered_tool(self) -> None: + from mcp.types import CallToolResult, TextContent + + user_api_key_dict = UserAPIKeyAuth( + api_key="test_key", + object_permission=_make_perm( + mcp_tool_search_enabled=True, + mcp_servers=["github"], + ), + ) + + request = self._make_request( + { + "name": MCP_TOOL_CALL_TOOL_NAME, + "arguments": { + "tool_name": "github-create_issue", + "arguments": {"title": "bug", "repo": "myrepo"}, + }, + } + ) + + fake_result = CallToolResult( + content=[TextContent(type="text", text="Issue created")], + isError=False, + ) + + with ( + patch( + "litellm.proxy._experimental.mcp_server.server._get_allowed_mcp_servers", + new_callable=AsyncMock, + return_value=[MagicMock()], + ), + patch( + "litellm.proxy._experimental.mcp_server.server.execute_mcp_tool", + new_callable=AsyncMock, + return_value=fake_result, + ) as mock_execute, + ): + result = await self._get_call_fn()( + request=request, + user_api_key_dict=user_api_key_dict, + ) + + mock_execute.assert_awaited_once() + assert mock_execute.await_args.kwargs["name"] == "github-create_issue" + + assert result.isError is False + assert result.content[0].text == "Issue created" + + @pytest.mark.asyncio + async def test_mcp_tool_call_forwards_client_ip_for_ip_filtering(self) -> None: + """Regression: the virtual call path must resolve allowed servers with the + request's client IP so IP-restricted servers (available_on_public_internet: + false) cannot be reached from a public IP.""" + from mcp.types import CallToolResult, TextContent + + user_api_key_dict = UserAPIKeyAuth( + api_key="test_key", + object_permission=_make_perm(mcp_tool_search_enabled=True, mcp_servers=["github"]), + ) + request = self._make_request( + { + "name": MCP_TOOL_CALL_TOOL_NAME, + "arguments": {"tool_name": "github-create_issue", "arguments": {}}, + } + ) + + fake_result = CallToolResult(content=[TextContent(type="text", text="ok")], isError=False) + + with ( + patch( + "litellm.proxy._experimental.mcp_server.rest_endpoints.IPAddressUtils.get_mcp_client_ip", + return_value="203.0.113.7", + ), + patch( + "litellm.proxy._experimental.mcp_server.server._get_allowed_mcp_servers", + new_callable=AsyncMock, + return_value=[MagicMock()], + ) as mock_allowed, + patch( + "litellm.proxy._experimental.mcp_server.server.execute_mcp_tool", + new_callable=AsyncMock, + return_value=fake_result, + ), + ): + await self._get_call_fn()(request=request, user_api_key_dict=user_api_key_dict) + + mock_allowed.assert_awaited_once() + assert mock_allowed.await_args.kwargs["client_ip"] == "203.0.113.7" + + @pytest.mark.asyncio + async def test_mcp_tool_search_forwards_client_ip_for_ip_filtering(self) -> None: + """Search must list tools through the IP-filtered catalog, not the raw one.""" + user_api_key_dict = UserAPIKeyAuth( + api_key="test_key", + object_permission=_make_perm(mcp_tool_search_enabled=True, mcp_servers=["github"]), + ) + request = self._make_request({"name": MCP_TOOL_SEARCH_TOOL_NAME, "arguments": {"query": "issue"}}) + + with ( + patch( + "litellm.proxy._experimental.mcp_server.rest_endpoints.IPAddressUtils.get_mcp_client_ip", + return_value="203.0.113.7", + ), + patch( + "litellm.proxy._experimental.mcp_server.server._list_mcp_tools", + new_callable=AsyncMock, + return_value=[], + ) as mock_list, + ): + await self._get_call_fn()(request=request, user_api_key_dict=user_api_key_dict) + + mock_list.assert_awaited_once() + assert mock_list.await_args.kwargs["client_ip"] == "203.0.113.7" + + @pytest.mark.asyncio + async def test_mcp_tool_search_requires_flag_enabled(self) -> None: + from fastapi import HTTPException + + user_api_key_dict = UserAPIKeyAuth( + api_key="test_key", + object_permission=_make_perm(mcp_tool_search_enabled=False), + ) + + request = self._make_request({"name": MCP_TOOL_SEARCH_TOOL_NAME, "arguments": {"query": "create issue"}}) + + with pytest.raises(HTTPException) as exc_info: + await self._get_call_fn()( + request=request, + user_api_key_dict=user_api_key_dict, + ) + + assert exc_info.value.status_code in (400, 403, 404) + + +class TestDispatchVirtualMcpTool: + """Covers the SSE/protocol-path interception helper in server.py.""" + + @pytest.mark.asyncio + async def test_returns_none_for_non_virtual_tool(self) -> None: + from litellm.proxy._experimental.mcp_server.server import ( + _dispatch_virtual_mcp_tool, + ) + + result = await _dispatch_virtual_mcp_tool( + name="github-create_issue", + arguments={}, + user_api_key_auth=UserAPIKeyAuth(api_key="k"), + client_ip=None, + ) + assert result is None + + @pytest.mark.asyncio + async def test_rejects_when_flag_disabled(self) -> None: + from litellm.proxy._experimental.mcp_server.server import ( + _dispatch_virtual_mcp_tool, + ) + + uak = UserAPIKeyAuth(api_key="k", object_permission=_make_perm(mcp_tool_search_enabled=False)) + result = await _dispatch_virtual_mcp_tool( + name=MCP_TOOL_SEARCH_TOOL_NAME, + arguments={"query": "x"}, + user_api_key_auth=uak, + client_ip=None, + ) + assert result is not None + assert result.isError is True + + @pytest.mark.asyncio + async def test_routes_search_with_client_ip(self) -> None: + from litellm.proxy._experimental.mcp_server import server as srv + + uak = UserAPIKeyAuth(api_key="k", object_permission=_make_perm(mcp_tool_search_enabled=True)) + with patch( + "litellm.proxy._experimental.mcp_server.tool_search.handle_mcp_tool_search", + new_callable=AsyncMock, + return_value="SEARCH_RESULT", + ) as mock_search: + result = await srv._dispatch_virtual_mcp_tool( + name=MCP_TOOL_SEARCH_TOOL_NAME, + arguments={"query": "q", "top_k": 3}, + user_api_key_auth=uak, + client_ip="203.0.113.9", + ) + + assert result == "SEARCH_RESULT" + assert mock_search.await_args.kwargs["client_ip"] == "203.0.113.9" + assert mock_search.await_args.kwargs["query"] == "q" + assert mock_search.await_args.kwargs["top_k"] == 3 + + @pytest.mark.asyncio + async def test_routes_call_with_client_ip(self) -> None: + from litellm.proxy._experimental.mcp_server import server as srv + + uak = UserAPIKeyAuth(api_key="k", object_permission=_make_perm(mcp_tool_search_enabled=True)) + with patch( + "litellm.proxy._experimental.mcp_server.tool_search.handle_mcp_tool_call", + new_callable=AsyncMock, + return_value="CALL_RESULT", + ) as mock_call: + result = await srv._dispatch_virtual_mcp_tool( + name=MCP_TOOL_CALL_TOOL_NAME, + arguments={"tool_name": "math-add", "arguments": {"a": 1, "b": 2}}, + user_api_key_auth=uak, + client_ip="203.0.113.9", + mcp_auth_header="bearer-xyz", + mcp_server_auth_headers={"github": {"Authorization": "Bearer gh"}}, + oauth2_headers={"Authorization": "Bearer oauth"}, + raw_headers={"x-mcp-auth": "tok"}, + ) + + assert result == "CALL_RESULT" + kw = mock_call.await_args.kwargs + assert kw["tool_name"] == "math-add" + assert kw["client_ip"] == "203.0.113.9" + assert kw["mcp_auth_header"] == "bearer-xyz" + assert kw["mcp_server_auth_headers"] == {"github": {"Authorization": "Bearer gh"}} + assert kw["oauth2_headers"] == {"Authorization": "Bearer oauth"} + assert kw["raw_headers"] == {"x-mcp-auth": "tok"} + + @pytest.mark.asyncio + async def test_call_builds_and_forwards_logging_obj(self) -> None: + """Regression: the SSE dispatch must run the pre-call pipeline and forward + the resulting logging object to handle_mcp_tool_call, otherwise mcp_tool_call + over /mcp/ skips spend logging and guardrails (unlike the REST path).""" + from litellm.proxy._experimental.mcp_server import server as srv + + uak = UserAPIKeyAuth(api_key="k", object_permission=_make_perm(mcp_tool_search_enabled=True)) + sentinel_logging_obj = object() + with ( + patch.object( + srv, + "_build_virtual_call_logging_obj", + new_callable=AsyncMock, + return_value=sentinel_logging_obj, + ) as mock_build, + patch( + "litellm.proxy._experimental.mcp_server.tool_search.handle_mcp_tool_call", + new_callable=AsyncMock, + return_value="CALL_RESULT", + ) as mock_call, + ): + await srv._dispatch_virtual_mcp_tool( + name=MCP_TOOL_CALL_TOOL_NAME, + arguments={"tool_name": "math-add", "arguments": {"a": 1}}, + user_api_key_auth=uak, + client_ip=None, + ) + + assert mock_build.await_count == 1 + assert mock_call.await_args.kwargs["litellm_logging_obj"] is sentinel_logging_obj + + @pytest.mark.asyncio + async def test_search_coerces_non_int_top_k(self) -> None: + """Regression: a non-integer top_k from an MCP client must not raise; it + falls back to the default instead of ValueError propagating out.""" + from litellm.proxy._experimental.mcp_server import server as srv + + uak = UserAPIKeyAuth(api_key="k", object_permission=_make_perm(mcp_tool_search_enabled=True)) + with patch( + "litellm.proxy._experimental.mcp_server.tool_search.handle_mcp_tool_search", + new_callable=AsyncMock, + return_value="SEARCH_RESULT", + ) as mock_search: + await srv._dispatch_virtual_mcp_tool( + name=MCP_TOOL_SEARCH_TOOL_NAME, + arguments={"query": "issue", "top_k": "not-a-number"}, + user_api_key_auth=uak, + client_ip=None, + ) + + assert mock_search.await_args.kwargs["top_k"] == 5 + + @pytest.mark.asyncio + async def test_call_handler_forwards_auth_headers_to_execute(self) -> None: + """Regression: per-request auth headers must reach execute_mcp_tool so + upstream MCP servers needing pass-through auth can be called.""" + from mcp.types import CallToolResult, TextContent + + from litellm.proxy._experimental.mcp_server.tool_search import ( + handle_mcp_tool_call, + ) + + uak = UserAPIKeyAuth(api_key="k", object_permission=_make_perm(mcp_tool_search_enabled=True)) + fake = CallToolResult(content=[TextContent(type="text", text="ok")], isError=False) + with ( + patch( + "litellm.proxy._experimental.mcp_server.server._get_allowed_mcp_servers", + new_callable=AsyncMock, + return_value=[MagicMock()], + ) as mock_allowed, + patch( + "litellm.proxy._experimental.mcp_server.server.execute_mcp_tool", + new_callable=AsyncMock, + return_value=fake, + ) as mock_exec, + ): + sentinel_logging_obj = object() + await handle_mcp_tool_call( + tool_name="github-create_issue", + arguments={}, + user_api_key_dict=uak, + mcp_servers=["github"], + mcp_auth_header="bearer-xyz", + mcp_server_auth_headers={"github": {"Authorization": "Bearer gh"}}, + oauth2_headers={"Authorization": "Bearer oauth"}, + raw_headers={"x-mcp-auth": "tok"}, + litellm_logging_obj=sentinel_logging_obj, + ) + + kw = mock_exec.await_args.kwargs + assert kw["mcp_auth_header"] == "bearer-xyz" + assert kw["mcp_server_auth_headers"] == {"github": {"Authorization": "Bearer gh"}} + assert kw["oauth2_headers"] == {"Authorization": "Bearer oauth"} + assert kw["raw_headers"] == {"x-mcp-auth": "tok"} + # Spend logging: the logging object must reach execute_mcp_tool + assert kw["litellm_logging_obj"] is sentinel_logging_obj + # Scoped session: the requested mcp_servers scope must reach server resolution + assert mock_allowed.await_args.kwargs["mcp_servers"] == ["github"] + + @pytest.mark.asyncio + async def test_call_rejected_when_no_accessible_servers(self) -> None: + """Regression: a key with no accessible MCP servers must not reach + execute_mcp_tool, where an unprefixed local tool name would otherwise + run via the local registry without a server permission check.""" + from fastapi import HTTPException + + from litellm.proxy._experimental.mcp_server.tool_search import ( + handle_mcp_tool_call, + ) + + uak = UserAPIKeyAuth(api_key="k", object_permission=_make_perm(mcp_tool_search_enabled=True)) + with ( + patch( + "litellm.proxy._experimental.mcp_server.server._get_allowed_mcp_servers", + new_callable=AsyncMock, + return_value=[], + ), + patch( + "litellm.proxy._experimental.mcp_server.server.execute_mcp_tool", + new_callable=AsyncMock, + ) as mock_exec, + ): + with pytest.raises(HTTPException) as exc_info: + await handle_mcp_tool_call( + tool_name="local_secret_tool", + arguments={}, + user_api_key_dict=uak, + ) + + assert exc_info.value.status_code == 403 + mock_exec.assert_not_awaited() + + +class TestCaptureHostProgressCallback: + """Covers the host progress-forwarding helper extracted from the tool call path.""" + + def test_returns_none_when_request_context_unavailable(self) -> None: + from litellm.proxy._experimental.mcp_server.server import ( + _capture_host_progress_callback, + ) + + class _NoCtx: + @property + def request_context(self): # type: ignore[no-untyped-def] + raise RuntimeError("no context") + + assert _capture_host_progress_callback(_NoCtx()) is None + + def test_returns_none_when_no_progress_token(self) -> None: + from litellm.proxy._experimental.mcp_server.server import ( + _capture_host_progress_callback, + ) + + host = MagicMock() + host.request_context.meta.progressToken = None + assert _capture_host_progress_callback(host) is None + + def test_returns_callable_when_token_present(self) -> None: + from litellm.proxy._experimental.mcp_server.server import ( + _capture_host_progress_callback, + ) + + host = MagicMock() + host.request_context.meta.progressToken = "tok12345" + host.request_context.session = MagicMock() + assert callable(_capture_host_progress_callback(host)) + + +class TestHandleListToolsVirtual: + """Covers the protocol list_tools early-return when the flag is enabled.""" + + @pytest.mark.asyncio + async def test_returns_virtual_tools_when_flag_enabled(self) -> None: + from litellm.proxy._experimental.mcp_server import server as srv + + uak = UserAPIKeyAuth(api_key="k", object_permission=_make_perm(mcp_tool_search_enabled=True)) + with patch( + "litellm.proxy._experimental.mcp_server.server.get_or_extract_auth_context", + new_callable=AsyncMock, + return_value=(uak, None, None, None, None, None, None), + ): + tools = await srv.handle_list_tools() + + assert {t.name for t in tools} == { + MCP_TOOL_SEARCH_TOOL_NAME, + MCP_TOOL_CALL_TOOL_NAME, + } + + +class TestMcpServerToolCallErrorHandling: + """The protocol tool-call handler must convert virtual-tool errors to an + isError CallToolResult instead of letting them raise out of the handler.""" + + @pytest.mark.asyncio + async def test_virtual_tool_error_returns_iserror_not_raised(self) -> None: + from fastapi import HTTPException + + from litellm.proxy._experimental.mcp_server import server as srv + + uak = UserAPIKeyAuth(api_key="k", object_permission=_make_perm(mcp_tool_search_enabled=True)) + with ( + patch( + "litellm.proxy._experimental.mcp_server.server.get_or_extract_auth_context", + new_callable=AsyncMock, + return_value=(uak, None, None, None, None, None, None), + ), + patch( + "litellm.proxy._experimental.mcp_server.server._dispatch_virtual_mcp_tool", + new_callable=AsyncMock, + side_effect=HTTPException(status_code=403, detail="User not allowed to call this tool"), + ), + ): + result = await srv.mcp_server_tool_call( + name=MCP_TOOL_CALL_TOOL_NAME, + arguments={"tool_name": "other-server-tool", "arguments": {}}, + ) + + assert result.isError is True + assert "User not allowed to call this tool" in result.content[0].text diff --git a/tests/test_litellm/proxy/management_endpoints/test_customer_endpoints.py b/tests/test_litellm/proxy/management_endpoints/test_customer_endpoints.py index d4089b23e81..5fbc3c4869b 100644 --- a/tests/test_litellm/proxy/management_endpoints/test_customer_endpoints.py +++ b/tests/test_litellm/proxy/management_endpoints/test_customer_endpoints.py @@ -718,6 +718,7 @@ _EXPECTED_CUSTOMER = { "mcp_toolsets": None, "blocked_tools": [], "search_tools": [], + "mcp_tool_search_enabled": None, }, } diff --git a/tests/test_litellm/proxy/management_helpers/test_object_permission_utils.py b/tests/test_litellm/proxy/management_helpers/test_object_permission_utils.py index 26c8c774812..0981c4239ee 100644 --- a/tests/test_litellm/proxy/management_helpers/test_object_permission_utils.py +++ b/tests/test_litellm/proxy/management_helpers/test_object_permission_utils.py @@ -87,6 +87,38 @@ async def test_set_object_permission(): assert result["models"] == ["gpt-4"] +@pytest.mark.asyncio +async def test_set_object_permission_persists_mcp_tool_search_enabled(): + """ + Regression: mcp_tool_search_enabled must be carried into the Prisma create + payload so it persists to LiteLLM_ObjectPermissionTable. The field was + present on the Pydantic models but missing from the create path, so keys + generated with mcp_tool_search_enabled=True silently lost the flag. + """ + mock_prisma_client = MagicMock() + mock_created_permission = MagicMock() + mock_created_permission.object_permission_id = "perm_id" + mock_prisma_client.db.litellm_objectpermissiontable.create = AsyncMock( + return_value=mock_created_permission + ) + + data_json = { + "object_permission": { + "mcp_servers": ["server_a"], + "mcp_tool_search_enabled": True, + }, + } + + await _set_object_permission(data_json=data_json, prisma_client=mock_prisma_client) + + created_data = ( + mock_prisma_client.db.litellm_objectpermissiontable.create.call_args.kwargs[ + "data" + ] + ) + assert created_data["mcp_tool_search_enabled"] is True + + # ---- Tests for _extract_requested_mcp_server_ids ---- diff --git a/ui/litellm-dashboard/src/lib/http/schema.d.ts b/ui/litellm-dashboard/src/lib/http/schema.d.ts index f15eaf9ea1f..ddf2040cd04 100644 --- a/ui/litellm-dashboard/src/lib/http/schema.d.ts +++ b/ui/litellm-dashboard/src/lib/http/schema.d.ts @@ -25107,6 +25107,8 @@ export interface components { mcp_tool_permissions?: { [key: string]: string[]; } | null; + /** Mcp Tool Search Enabled */ + mcp_tool_search_enabled?: boolean | null; /** Mcp Toolsets */ mcp_toolsets?: string[] | null; /** Models */ @@ -25150,6 +25152,8 @@ export interface components { mcp_tool_permissions?: { [key: string]: string[]; } | null; + /** Mcp Tool Search Enabled */ + mcp_tool_search_enabled?: boolean | null; /** Mcp Toolsets */ mcp_toolsets?: string[] | null; /** From 13b590c8ec8d5c0d69bdd6e6affe51a57976fd4b Mon Sep 17 00:00:00 2001 From: tin-berri Date: Tue, 30 Jun 2026 21:23:49 -0700 Subject: [PATCH 53/79] fix(proxy): hydrate MCP server registry from DB on startup when store_model_in_db is false (#31775) MCP servers created through the UI are persisted to the database independent of store_model_in_db, but the in-memory registry that GET /v1/mcp/server reads was hydrated from the database only through add_deployment, which runs solely when store_model_in_db is True. On a DB-backed single-instance proxy with store_model_in_db unset the registry started empty after a restart, so the MCP Servers page showed nothing until an add or edit triggered a reload. Hydrate the registry from the database on startup regardless of store_model_in_db via a new ProxyConfig.init_mcp_servers_from_db, honoring supported_db_objects. --- litellm/proxy/proxy_server.py | 7 +++ tests/test_litellm/proxy/test_proxy_server.py | 60 +++++++++++++++++++ 2 files changed, 67 insertions(+) diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 2f6c48a751b..6d64843fab0 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -6314,6 +6314,10 @@ class ProxyConfig: "litellm.proxy.proxy_server.py::ProxyConfig:_init_mcp_servers_in_db - {}".format(str(e)) ) + async def init_mcp_servers_from_db(self) -> None: + if self._should_load_db_object(object_type="mcp"): + await self._init_mcp_servers_in_db() + async def _init_agents_in_db(self, prisma_client: PrismaClient): from litellm.proxy.agent_endpoints.agent_registry import ( global_agent_registry as AGENT_REGISTRY, @@ -7561,6 +7565,9 @@ class ProxyStartupEvent: ) await proxy_config.get_credentials(prisma_client=prisma_client) + if store_model_in_db is not True: + await proxy_config.init_mcp_servers_from_db() + await cls._initialize_slack_alerting_jobs( scheduler=scheduler, general_settings=general_settings, diff --git a/tests/test_litellm/proxy/test_proxy_server.py b/tests/test_litellm/proxy/test_proxy_server.py index 88d9ad0d968..0d6cd972459 100644 --- a/tests/test_litellm/proxy/test_proxy_server.py +++ b/tests/test_litellm/proxy/test_proxy_server.py @@ -754,6 +754,66 @@ async def test_initialize_scheduled_jobs_credentials(monkeypatch): assert len(mock_scheduler_calls) > 0 +@pytest.mark.asyncio +async def test_initialize_scheduled_jobs_hydrates_mcp_when_store_model_in_db_false(monkeypatch): + """ + Regression (LIT-4128): MCP servers created via the UI are persisted to the DB + regardless of store_model_in_db, but the in-memory registry that GET + /v1/mcp/server reads is hydrated from the DB only by the store_model_in_db + model-sync loop (add_deployment). On a DB-backed proxy with store_model_in_db + unset the registry must still be hydrated on startup so previously-added + servers survive a restart instead of showing an empty list until a write. + """ + monkeypatch.delenv("DISABLE_PRISMA_SCHEMA_UPDATE", raising=False) + monkeypatch.delenv("STORE_MODEL_IN_DB", raising=False) + from litellm.proxy.proxy_server import ProxyStartupEvent + from litellm.proxy.utils import ProxyLogging + + mock_prisma_client = MagicMock() + mock_proxy_logging = MagicMock(spec=ProxyLogging) + mock_proxy_logging.slack_alerting_instance = MagicMock() + mock_proxy_config = AsyncMock() + + with ( + patch("litellm.proxy.proxy_server.proxy_config", mock_proxy_config), + patch("litellm.proxy.proxy_server.store_model_in_db", False), + ): + await ProxyStartupEvent.initialize_scheduled_background_jobs( + general_settings={}, + prisma_client=mock_prisma_client, + proxy_budget_rescheduler_min_time=1, + proxy_budget_rescheduler_max_time=2, + proxy_batch_write_at=5, + proxy_logging_obj=mock_proxy_logging, + ) + + mock_proxy_config.add_deployment.assert_not_called() + mock_proxy_config.init_mcp_servers_from_db.assert_awaited_once() + + +@pytest.mark.asyncio +async def test_init_mcp_servers_from_db_respects_supported_db_objects(monkeypatch): + """ + init_mcp_servers_from_db hydrates MCP from the DB by default but skips it when + an explicit supported_db_objects allowlist omits "mcp". + """ + from litellm.proxy.proxy_server import ProxyConfig + + config = ProxyConfig() + with patch.object(config, "_init_mcp_servers_in_db", new=AsyncMock()) as mock_init: + monkeypatch.setattr("litellm.proxy.proxy_server.general_settings", {}) + await config.init_mcp_servers_from_db() + mock_init.assert_awaited_once() + + mock_init.reset_mock() + monkeypatch.setattr( + "litellm.proxy.proxy_server.general_settings", + {"supported_db_objects": ["models"]}, + ) + await config.init_mcp_servers_from_db() + mock_init.assert_not_awaited() + + def test_update_config_fields_deep_merge_db_wins(): from litellm.proxy.proxy_server import ProxyConfig From e1415962049cfdc3f94522c697aaee4b25948e08 Mon Sep 17 00:00:00 2001 From: Mateo Wang <277851410+mateo-berri@users.noreply.github.com> Date: Wed, 1 Jul 2026 08:12:35 -0700 Subject: [PATCH 54/79] refactor(lint): collapse type/lint budgets to a single per-rule limit (#31883) * chore(lint): raise basedpyright per-rule slack to 50% of baseline The per-rule ceilings in basedpyright-code-budget.json sat at roughly 10% slack over baseline, which several in-flight PRs are already bumping into. Raise the slack on every rule to at least 50% of its baseline so there is ample headroom for a long while, while never lowering any rule that already had more generous slack (e.g. reportReturnType stays at 100). Co-authored-by: Mateo Wang * refactor(lint): collapse type/lint budgets to a single per-rule limit The three non-frontend budget files (ruff-strict, type-discipline, basedpyright-code) tracked a per-rule baseline and slack whose sum was the ceiling. Nothing consumed the split beyond that sum, so this replaces both keys with a single limit equal to the old baseline + slack; the original baselines live in git history if anyone needs them. The gate scripts and the ratchet guard now read limit directly. lint-budget-update no longer re-captures raw counts; it ratchets each rule's limit down by the number of violations this branch cleared since its branch point (the merge-base), so the granted headroom shrinks by exactly what was fixed and a limit never rises. The ratchet guard reads either schema so it still compares correctly across the migration boundary. Co-authored-by: Mateo Wang * chore(lint): surface staged-vs-working parity for pre-commit and budget-update make pre-commit selects which checks to run from the staged index but runs the linters over the working tree, so unstaged edits to tracked files and untracked files skew a green/red away from what a commit of only the staged changes would produce. There is no safe in-place way to lint the index, so the script now warns when unstaged or untracked changes are present, and CLAUDE.md documents that you must stage everything first for both make pre-commit and make lint-budget-update to predict CI correctly. Co-authored-by: Mateo Wang * docs(lint): list type-discipline budget in lint-budget-update instruction --------- Co-authored-by: Cursor Agent Co-authored-by: Mateo Wang --- CLAUDE.md | 4 +- Makefile | 23 +- basedpyright-code-budget.json | 144 +++---- ruff-strict-budget.json | 366 ++++++------------ scripts/budget_ratchet_check.py | 89 ++--- scripts/pre_commit_lint.sh | 16 + scripts/ruff_strict_gate.py | 55 ++- scripts/type_check_gate.py | 100 +++-- scripts/type_discipline_gate.py | 68 ++-- .../test_litellm/test_budget_ratchet_check.py | 76 ++-- tests/test_litellm/test_ruff_strict_gate.py | 36 +- tests/test_litellm/test_type_check_gate.py | 67 ++-- .../test_litellm/test_type_discipline_gate.py | 36 +- type-discipline-budget.json | 24 +- 14 files changed, 515 insertions(+), 589 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 83bf3e22d27..86bd89156a3 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -33,9 +33,9 @@ If you ever make public-facing PR descriptions, comments, issues, commit message Don't hesitate to use values in .env to get needed API keys and other secrets, as long as you never add them to conversation history, commit them, or include them in GitHub issues / PRs -Run tests before you commit. Also, run `make pre-commit` right before each commit, which generates types (as needed) and formats/lints your code. Any errors found must be fixed +Run tests before you commit. Also, run `make pre-commit` right before each commit, which generates types (as needed) and formats/lints your code. Any errors found must be fixed. For `make pre-commit` to work properly you must stage your changes first (git add): it reports CI red or green based on what would happen if you committed your staged changes, but it runs the linters over the working tree, so any unstaged edits to tracked files or untracked files are folded into the result and will skew it away from what CI (which only sees your commit) would report -When you fix violations gated by `ruff-strict-budget.json` or `basedpyright-code-budget.json`, run `make lint-budget-update` and commit the lowered baselines so the ceilings ratchet down instead of leaving stale headroom +When you fix violations gated by `ruff-strict-budget.json`, `type-discipline-budget.json`, or `basedpyright-code-budget.json`, run `make lint-budget-update` and commit the lowered limits so the ceilings ratchet down instead of leaving stale headroom. It lowers each rule's limit by the number of violations this branch cleared since its branch point and never raises one, measured against the working tree, so stage exactly the fixes you're committing before running it; crediting unstaged fixes you won't commit would over-tighten the limits and turn CI red once the committed subset is checked If you're trying to create a new function that relies on untyped stuff, instead of adding more Any's and pushing `reportAny` / `reportExplicitAny` closer to their basedpyright ceilings, just validate it in the caller with Pydantic (a model or `TypeAdapter` that returns the typed thing or raises will do) and then pass the now typed variable in diff --git a/Makefile b/Makefile index fb927148c80..c3fa21c156c 100644 --- a/Makefile +++ b/Makefile @@ -5,7 +5,7 @@ test-unit-integrations test-unit-core-utils test-unit-other test-unit-root \ test-proxy-unit-a test-proxy-unit-b test-integration test-unit-helm \ info lint lint-dev format \ - lint-basedpyright lint-basedpyright-budget-update \ + lint-basedpyright lint-basedpyright-budget-update lint-type-discipline lint-type-discipline-budget-update \ lint-ruff-budget lint-ruff-budget-update lint-budget-update lint-gate \ install-dev install-proxy-dev install-test-deps install-hooks \ install-helm-unittest check-circular-imports check-import-safety pre-commit \ @@ -27,12 +27,12 @@ help: @echo " make lint - Run all linting (Ruff, basedpyright, format check, circular imports, import safety)" @echo " make lint-ruff - Run Ruff linting only" @echo " make lint-basedpyright - Run basedpyright strict, gated by per-rule error counts" - @echo " make lint-basedpyright-budget-update - Re-capture the basedpyright per-rule budget (ratchet)" + @echo " make lint-basedpyright-budget-update - Ratchet basedpyright limits down by what this branch fixed" @echo " make lint-format - Check ruff format formatting (matches CI)" - @echo " make lint-ruff-budget - Gate the codebase total of each strict ruff rule against its ceiling" + @echo " make lint-ruff-budget - Gate the codebase total of each strict ruff rule against its limit" @echo " make lint-gate - Strict ruff gate in CI-parity mode (fetches staging, simulates the merge)" - @echo " make lint-ruff-budget-update - Re-capture per-rule baselines in ruff-strict-budget.json (ratchet)" - @echo " make lint-budget-update - Re-capture all ratchet budgets (ruff + basedpyright)" + @echo " make lint-ruff-budget-update - Ratchet ruff-strict-budget.json limits down by what this branch fixed" + @echo " make lint-budget-update - Ratchet all budgets down (ruff + type-discipline + basedpyright)" @echo " make check-circular-imports - Check for circular imports" @echo " make check-import-safety - Check import safety" @echo " make test - Run all tests" @@ -164,7 +164,9 @@ lint-basedpyright: install-dev lint-fetch-base lint-type-discipline: install-dev lint-fetch-base $(UV_RUN) python scripts/type_discipline_gate.py --base origin/litellm_internal_staging -lint-basedpyright-budget-update: install-dev +# --update lowers each limit by what this branch fixed since its branch point, so +# it needs the base ref fetched to resolve the merge-base. +lint-basedpyright-budget-update: install-dev lint-fetch-base ($(UV_RUN) basedpyright --outputjson || true) | $(UV_RUN) python scripts/type_check_gate.py --update lint-format: format-check @@ -177,11 +179,14 @@ lint-ruff-budget: install-dev lint-gate: install-dev lint-fetch-base $(UV_RUN) python scripts/ruff_strict_gate.py --base origin/litellm_internal_staging -lint-ruff-budget-update: install-dev +lint-ruff-budget-update: install-dev lint-fetch-base $(UV_RUN) python scripts/ruff_strict_gate.py --update -# Ratchet all budgets in one shot (ruff strict + basedpyright) -lint-budget-update: lint-ruff-budget-update lint-basedpyright-budget-update +lint-type-discipline-budget-update: install-dev lint-fetch-base + $(UV_RUN) python scripts/type_discipline_gate.py --update + +# Ratchet all budgets in one shot (ruff strict + type-discipline + basedpyright) +lint-budget-update: lint-ruff-budget-update lint-type-discipline-budget-update lint-basedpyright-budget-update check-circular-imports: install-dev cd litellm && $(UV_RUN) python ../tests/documentation_tests/test_circular_imports.py && cd .. diff --git a/basedpyright-code-budget.json b/basedpyright-code-budget.json index f2b54e1f889..79e6af05978 100644 --- a/basedpyright-code-budget.json +++ b/basedpyright-code-budget.json @@ -1,194 +1,146 @@ { "reportAny": { - "baseline": 24989, - "slack": 2500 + "limit": 37484 }, "reportArgumentType": { - "baseline": 1814, - "slack": 180 + "limit": 2721 }, "reportAssignmentType": { - "baseline": 220, - "slack": 22 + "limit": 330 }, "reportAttributeAccessIssue": { - "baseline": 346, - "slack": 35 + "limit": 519 }, "reportCallIssue": { - "baseline": 87, - "slack": 10 + "limit": 131 }, "reportConstantRedefinition": { - "baseline": 39, - "slack": 4 + "limit": 59 }, "reportDeprecated": { - "baseline": 217, - "slack": 22 + "limit": 326 }, "reportDuplicateImport": { - "baseline": 28, - "slack": 3 + "limit": 42 }, "reportExplicitAny": { - "baseline": 6931, - "slack": 700 + "limit": 10397 }, "reportFunctionMemberAccess": { - "baseline": 7, - "slack": 3 + "limit": 11 }, "reportGeneralTypeIssues": { - "baseline": 151, - "slack": 15 + "limit": 227 }, "reportIncompatibleMethodOverride": { - "baseline": 52, - "slack": 5 + "limit": 78 }, "reportIncompatibleVariableOverride": { - "baseline": 8, - "slack": 3 + "limit": 12 }, "reportInconsistentOverload": { - "baseline": 12, - "slack": 3 + "limit": 18 }, "reportIndexIssue": { - "baseline": 26, - "slack": 3 + "limit": 39 }, "reportInvalidTypeForm": { - "baseline": 23, - "slack": 3 + "limit": 35 }, "reportInvalidTypeVarUse": { - "baseline": 2, - "slack": 3 + "limit": 5 }, "reportMatchNotExhaustive": { - "baseline": 1, - "slack": 0 + "limit": 2 }, "reportMissingParameterType": { - "baseline": 3933, - "slack": 390 + "limit": 5900 }, "reportMissingTypeArgument": { - "baseline": 10612, - "slack": 1000 + "limit": 15918 }, "reportMissingTypeStubs": { - "baseline": 27, - "slack": 10 + "limit": 41 }, "reportOperatorIssue": { - "baseline": 6, - "slack": 3 + "limit": 9 }, "reportOptionalCall": { - "baseline": 4, - "slack": 3 + "limit": 7 }, "reportOptionalIterable": { - "baseline": 3, - "slack": 3 + "limit": 6 }, "reportOptionalMemberAccess": { - "baseline": 724, - "slack": 72 + "limit": 1086 }, "reportOptionalOperand": { - "baseline": 3, - "slack": 3 + "limit": 6 }, "reportOptionalSubscript": { - "baseline": 11, - "slack": 3 + "limit": 17 }, "reportPossiblyUnboundVariable": { - "baseline": 52, - "slack": 10 + "limit": 78 }, "reportPrivateUsage": { - "baseline": 1625, - "slack": 160 + "limit": 2438 }, "reportRedeclaration": { - "baseline": 8, - "slack": 3 + "limit": 12 }, "reportReturnType": { - "baseline": 126, - "slack": 100 + "limit": 226 }, "reportTypedDictNotRequiredAccess": { - "baseline": 20, - "slack": 3 + "limit": 30 }, "reportUndefinedVariable": { - "baseline": 2, - "slack": 3 + "limit": 5 }, "reportUnknownArgumentType": { - "baseline": 30603, - "slack": 3000 + "limit": 45905 }, "reportUnknownLambdaType": { - "baseline": 75, - "slack": 10 + "limit": 113 }, "reportUnknownMemberType": { - "baseline": 27037, - "slack": 2500 + "limit": 40556 }, "reportUnknownParameterType": { - "baseline": 13612, - "slack": 1000 + "limit": 20418 }, "reportUnknownVariableType": { - "baseline": 21445, - "slack": 2000 + "limit": 32168 }, "reportUnnecessaryCast": { - "baseline": 118, - "slack": 10 + "limit": 177 }, "reportUnnecessaryComparison": { - "baseline": 683, - "slack": 100 + "limit": 1025 }, "reportUnnecessaryContains": { - "baseline": 4, - "slack": 3 + "limit": 7 }, "reportUnnecessaryIsInstance": { - "baseline": 808, - "slack": 80 + "limit": 1212 }, "reportUntypedBaseClass": { - "baseline": 110, - "slack": 11 + "limit": 165 }, "reportUntypedFunctionDecorator": { - "baseline": 22, - "slack": 3 + "limit": 33 }, "reportUnusedClass": { - "baseline": 22, - "slack": 3 + "limit": 33 }, "reportUnusedFunction": { - "baseline": 137, - "slack": 10 + "limit": 206 }, "reportUnusedImport": { - "baseline": 670, - "slack": 50 + "limit": 1005 }, "reportUnusedVariable": { - "baseline": 865, - "slack": 50 + "limit": 1298 } } diff --git a/ruff-strict-budget.json b/ruff-strict-budget.json index 10c820324ea..be62f8a9d67 100644 --- a/ruff-strict-budget.json +++ b/ruff-strict-budget.json @@ -1,490 +1,368 @@ { "ANN001": { - "baseline": 2865, - "slack": 287 + "limit": 3152 }, "ANN002": { - "baseline": 64, - "slack": 5 + "limit": 69 }, "ANN003": { - "baseline": 759, - "slack": 76 + "limit": 835 }, "ANN201": { - "baseline": 1944, - "slack": 194 + "limit": 2138 }, "ANN202": { - "baseline": 858, - "slack": 86 + "limit": 944 }, "ANN204": { - "baseline": 658, - "slack": 66 + "limit": 724 }, "ANN205": { - "baseline": 117, - "slack": 10 + "limit": 127 }, "ANN206": { - "baseline": 120, - "slack": 10 + "limit": 130 }, "ANN401": { - "baseline": 1886, - "slack": 189 + "limit": 2075 }, "ASYNC230": { - "baseline": 11, - "slack": 3 + "limit": 14 }, "B004": { - "baseline": 1, - "slack": 3 + "limit": 4 }, "B006": { - "baseline": 180, - "slack": 10 + "limit": 190 }, "B008": { - "baseline": 490, - "slack": 15 + "limit": 505 }, "B009": { - "baseline": 79, - "slack": 5 + "limit": 84 }, "B010": { - "baseline": 187, - "slack": 10 + "limit": 197 }, "B018": { - "baseline": 2, - "slack": 3 + "limit": 5 }, "B019": { - "baseline": 1, - "slack": 3 + "limit": 4 }, "B021": { - "baseline": 1, - "slack": 3 + "limit": 4 }, "B026": { - "baseline": 3, - "slack": 3 + "limit": 6 }, "B033": { - "baseline": 1, - "slack": 3 + "limit": 4 }, "BLE001": { - "baseline": 2854, - "slack": 50 + "limit": 2904 }, "C401": { - "baseline": 8, - "slack": 3 + "limit": 11 }, "C404": { - "baseline": 1, - "slack": 3 + "limit": 4 }, "C405": { - "baseline": 20, - "slack": 3 + "limit": 23 }, "C408": { - "baseline": 11, - "slack": 3 + "limit": 14 }, "C414": { - "baseline": 4, - "slack": 3 + "limit": 7 }, "C419": { - "baseline": 1, - "slack": 3 + "limit": 4 }, "C901": { - "baseline": 301, - "slack": 15 + "limit": 316 }, "D419": { - "baseline": 6, - "slack": 3 + "limit": 9 }, "DTZ001": { - "baseline": 2, - "slack": 3 + "limit": 5 }, "DTZ003": { - "baseline": 30, - "slack": 3 + "limit": 33 }, "DTZ005": { - "baseline": 229, - "slack": 15 + "limit": 244 }, "DTZ006": { - "baseline": 10, - "slack": 3 + "limit": 13 }, "DTZ007": { - "baseline": 20, - "slack": 3 + "limit": 23 }, "DTZ011": { - "baseline": 3, - "slack": 3 + "limit": 6 }, "EXE001": { - "baseline": 4, - "slack": 3 + "limit": 7 }, "EXE002": { - "baseline": 3, - "slack": 3 + "limit": 6 }, "F401": { - "baseline": 20, - "slack": 3 + "limit": 23 }, "FURB136": { - "baseline": 1, - "slack": 3 + "limit": 4 }, "FURB168": { - "baseline": 1, - "slack": 3 + "limit": 4 }, "FURB188": { - "baseline": 49, - "slack": 3 + "limit": 52 }, "I001": { - "baseline": 258, - "slack": 15 + "limit": 273 }, "LOG015": { - "baseline": 5, - "slack": 3 + "limit": 8 }, "N999": { - "baseline": 1, - "slack": 3 + "limit": 4 }, "PERF102": { - "baseline": 27, - "slack": 3 + "limit": 30 }, "PERF401": { - "baseline": 136, - "slack": 10 + "limit": 146 }, "PERF402": { - "baseline": 6, - "slack": 3 + "limit": 9 }, "PERF403": { - "baseline": 69, - "slack": 5 + "limit": 74 }, "PIE790": { - "baseline": 263, - "slack": 15 + "limit": 278 }, "PIE800": { - "baseline": 1, - "slack": 3 + "limit": 4 }, "PIE804": { - "baseline": 21, - "slack": 3 + "limit": 24 }, "PIE810": { - "baseline": 41, - "slack": 3 + "limit": 44 }, "PLC0206": { - "baseline": 28, - "slack": 3 + "limit": 31 }, "PLC0208": { - "baseline": 1, - "slack": 3 + "limit": 4 }, "PLC0414": { - "baseline": 35, - "slack": 3 + "limit": 38 }, "PLR0124": { - "baseline": 1, - "slack": 3 + "limit": 4 }, "PLR0206": { - "baseline": 1, - "slack": 3 + "limit": 4 }, "PLR0402": { - "baseline": 6, - "slack": 3 + "limit": 9 }, "PLR1704": { - "baseline": 3, - "slack": 3 + "limit": 6 }, "PLR1711": { - "baseline": 31, - "slack": 3 + "limit": 34 }, "PLR1714": { - "baseline": 252, - "slack": 15 + "limit": 267 }, "PLR1730": { - "baseline": 7, - "slack": 3 + "limit": 10 }, "PLR2044": { - "baseline": 1, - "slack": 3 + "limit": 4 }, "PLW0127": { - "baseline": 41, - "slack": 3 + "limit": 44 }, "PLW0133": { - "baseline": 1, - "slack": 3 + "limit": 4 }, "PLW0602": { - "baseline": 215, - "slack": 15 + "limit": 230 }, "PLW0603": { - "baseline": 183, - "slack": 10 + "limit": 193 }, "PLW1508": { - "baseline": 188, - "slack": 10 + "limit": 198 }, "PLW1510": { - "baseline": 2, - "slack": 3 + "limit": 5 }, "PYI030": { - "baseline": 2, - "slack": 3 + "limit": 5 }, "PYI036": { - "baseline": 2, - "slack": 3 + "limit": 5 }, "PYI041": { - "baseline": 9, - "slack": 3 + "limit": 12 }, "PYI064": { - "baseline": 2, - "slack": 3 + "limit": 5 }, "RET501": { - "baseline": 35, - "slack": 3 + "limit": 38 }, "RET504": { - "baseline": 702, - "slack": 20 + "limit": 722 }, "RUF010": { - "baseline": 844, - "slack": 30 + "limit": 874 }, "RUF012": { - "baseline": 158, - "slack": 10 + "limit": 168 }, "RUF015": { - "baseline": 8, - "slack": 3 + "limit": 11 }, "RUF019": { - "baseline": 38, - "slack": 3 + "limit": 41 }, "RUF022": { - "baseline": 80, - "slack": 5 + "limit": 85 }, "RUF023": { - "baseline": 2, - "slack": 3 + "limit": 5 }, "RUF046": { - "baseline": 5, - "slack": 3 + "limit": 8 }, "RUF051": { - "baseline": 3, - "slack": 3 + "limit": 6 }, "RUF059": { - "baseline": 69, - "slack": 5 + "limit": 74 }, "RUF100": { - "baseline": 465, - "slack": 15 + "limit": 480 }, "S110": { - "baseline": 222, - "slack": 15 + "limit": 237 }, "S112": { - "baseline": 21, - "slack": 3 + "limit": 24 }, "SIM101": { - "baseline": 58, - "slack": 5 + "limit": 63 }, "SIM102": { - "baseline": 311, - "slack": 15 + "limit": 326 }, "SIM103": { - "baseline": 119, - "slack": 10 + "limit": 129 }, "SIM113": { - "baseline": 3, - "slack": 3 + "limit": 6 }, "SIM114": { - "baseline": 103, - "slack": 10 + "limit": 113 }, "SIM115": { - "baseline": 2, - "slack": 3 + "limit": 5 }, "SIM117": { - "baseline": 7, - "slack": 3 + "limit": 10 }, "SIM118": { - "baseline": 104, - "slack": 10 + "limit": 114 }, "SIM201": { - "baseline": 1, - "slack": 3 + "limit": 4 }, "SIM210": { - "baseline": 9, - "slack": 3 + "limit": 12 }, "SIM211": { - "baseline": 1, - "slack": 3 + "limit": 4 }, "SIM222": { - "baseline": 1, - "slack": 3 + "limit": 4 }, "SIM401": { - "baseline": 9, - "slack": 3 + "limit": 12 }, "TC004": { - "baseline": 5, - "slack": 3 + "limit": 8 }, "TC005": { - "baseline": 6, - "slack": 3 + "limit": 9 }, "TID251": { - "baseline": 2664, - "slack": 50 + "limit": 2714 }, "TRY002": { - "baseline": 528, - "slack": 20 + "limit": 548 }, "TRY004": { - "baseline": 93, - "slack": 5 + "limit": 98 }, "TRY201": { - "baseline": 409, - "slack": 15 + "limit": 424 }, "TRY203": { - "baseline": 113, - "slack": 10 + "limit": 123 }, "TRY300": { - "baseline": 853, - "slack": 30 + "limit": 883 }, "UP006": { - "baseline": 12941, - "slack": 100 + "limit": 13041 }, "UP007": { - "baseline": 2520, - "slack": 50 + "limit": 2570 }, "UP008": { - "baseline": 2, - "slack": 3 + "limit": 5 }, "UP012": { - "baseline": 4, - "slack": 3 + "limit": 7 }, "UP018": { - "baseline": 18, - "slack": 3 + "limit": 21 }, "UP024": { - "baseline": 12, - "slack": 3 + "limit": 15 }, "UP028": { - "baseline": 2, - "slack": 3 + "limit": 5 }, "UP031": { - "baseline": 2, - "slack": 3 + "limit": 5 }, "UP032": { - "baseline": 609, - "slack": 20 + "limit": 629 }, "UP034": { - "baseline": 1, - "slack": 3 + "limit": 4 }, "UP035": { - "baseline": 2250, - "slack": 50 + "limit": 2300 }, "UP036": { - "baseline": 1, - "slack": 3 + "limit": 4 }, "UP037": { - "baseline": 100, - "slack": 5 + "limit": 105 }, "UP045": { - "baseline": 18417, - "slack": 100 + "limit": 18517 } } diff --git a/scripts/budget_ratchet_check.py b/scripts/budget_ratchet_check.py index df9815d6557..10a78483643 100644 --- a/scripts/budget_ratchet_check.py +++ b/scripts/budget_ratchet_check.py @@ -1,19 +1,16 @@ #!/usr/bin/env python3 -"""Non-gating ratchet guard: budget baselines and ceilings may only fall, never rise. +"""Non-gating ratchet guard: budget limits may only fall, never rise. Every `*-budget.json` file (ruff-strict, type-discipline, basedpyright-code) is a -one-way ratchet: each rule's ceiling is `baseline + slack`, and both the recorded -`baseline` (the live violation count) and that ceiling are meant to be driven DOWN -over time. This check compares every budget file against its own content at the -merge-base with the target branch and fails (exits 1, red) if: +one-way ratchet: each rule's ceiling is its `limit`, and that limit is meant to be +driven DOWN over time. This check compares every budget file against its own +content at the merge-base with the target branch and fails (exits 1, red) if: - * a rule's ceiling (`baseline + slack`) went up, - * a rule's `baseline` went up, even if `slack` was lowered to keep the ceiling - flat (a higher baseline bakes in more accepted debt and must be acknowledged), + * a rule's `limit` went up, * a rule was dropped from a budget (its ceiling effectively became infinite), or * an entire budget file was deleted. -New rules and lowered/equal baselines and ceilings are fine. +New rules and lowered/equal limits are fine. This is deliberately NOT a gating check. It should turn the run red so that a loosening is impossible to miss in review, but it must stay OUT of the @@ -89,19 +86,21 @@ def _load_base(rel: str, ref: str) -> dict | None: return json.loads(proc.stdout) -def _baselines(budget: dict) -> dict[str, int]: - """Map each rule to its recorded baseline; skip malformed specs.""" - return { - rule: int(spec.get("baseline", 0)) - for rule, spec in budget.items() - if isinstance(spec, dict) - } +def _ceiling(spec: dict) -> int: + """A rule's ceiling: its `limit`, or legacy `baseline + slack`. + + The base side of the diff can predate the `limit` migration, so a spec is read + under either schema and the two are compared on the same footing. + """ + if "limit" in spec: + return int(spec["limit"]) + return int(spec.get("baseline", 0)) + int(spec.get("slack", 0)) -def _caps(budget: dict) -> dict[str, int]: - """Map each rule to its ceiling (baseline + slack); skip malformed specs.""" +def _limits(budget: dict) -> dict[str, int]: + """Map each rule to its ceiling; skip malformed specs.""" return { - rule: int(spec.get("baseline", 0)) + int(spec.get("slack", 0)) + rule: _ceiling(spec) for rule, spec in budget.items() if isinstance(spec, dict) } @@ -109,54 +108,32 @@ def _caps(budget: dict) -> dict[str, int]: def _regression_detail( rule: str, - base_caps: dict[str, int], - head_caps: dict[str, int], - base_baselines: dict[str, int], - head_baselines: dict[str, int], + base_limits: dict[str, int], + head_limits: dict[str, int], ) -> str | None: """Why `rule` regressed vs base, or None when it held flat or fell. - A dropped rule is terminal; otherwise a raised ceiling and a raised baseline are - independent loosenings (the latter catches a baseline bump masked by a slack cut), - so both reasons are reported when both apply. + A dropped rule is terminal; otherwise the only loosening left is a raised limit. """ - base_cap = base_caps[rule] - if rule not in head_caps: - return f"rule dropped (ceiling {base_cap} -> removed)" - reasons = tuple( - message - for raised, message in ( - ( - head_caps[rule] > base_cap, - f"ceiling raised {base_cap} -> {head_caps[rule]}", - ), - ( - head_baselines[rule] > base_baselines[rule], - f"baseline raised {base_baselines[rule]} -> {head_baselines[rule]}", - ), - ) - if raised - ) - return "; ".join(reasons) or None + base_limit = base_limits[rule] + if rule not in head_limits: + return f"rule dropped (limit {base_limit} -> removed)" + if head_limits[rule] > base_limit: + return f"limit raised {base_limit} -> {head_limits[rule]}" + return None def regressions_for(rel: str, base: dict | None, head: dict | None) -> list[Regression]: if base is None: return [] # new budget file: nothing to ratchet against yet if head is None: - return [Regression(rel, "*", "budget file was deleted (every ceiling removed)")] + return [Regression(rel, "*", "budget file was deleted (every limit removed)")] - base_caps, head_caps = _caps(base), _caps(head) - base_baselines, head_baselines = _baselines(base), _baselines(head) + base_limits, head_limits = _limits(base), _limits(head) return [ Regression(rel, rule, detail) - for rule in sorted(base_caps) - if ( - detail := _regression_detail( - rule, base_caps, head_caps, base_baselines, head_baselines - ) - ) - is not None + for rule in sorted(base_limits) + if (detail := _regression_detail(rule, base_limits, head_limits)) is not None ] @@ -191,7 +168,7 @@ def main() -> int: if regressions: print( - f"FAIL: budget baseline(s)/ceiling(s) loosened vs base {args.base} (merge-base {ref[:12]}):" + f"FAIL: budget limit(s) loosened vs base {args.base} (merge-base {ref[:12]}):" ) for reg in regressions: print(f" {reg.budget} {reg.rule}: {reg.detail}") @@ -203,7 +180,7 @@ def main() -> int: return 1 suffix = f" ({', '.join(checked)})" if checked else "" - print(f"OK: no budget ceiling increased vs base {args.base}{suffix}") + print(f"OK: no budget limit increased vs base {args.base}{suffix}") return 0 diff --git a/scripts/pre_commit_lint.sh b/scripts/pre_commit_lint.sh index 0852e9e0ca2..d667d6758e1 100755 --- a/scripts/pre_commit_lint.sh +++ b/scripts/pre_commit_lint.sh @@ -36,6 +36,22 @@ spec_files=$(staged_match '^(litellm/(proxy|types)/.*|ui/litellm-dashboard/(scri ui_prettier_files=$(staged_match '^ui/litellm-dashboard/.*\.(js|jsx|ts|tsx|mjs|cjs|json|css|scss|md|mdx|yml|yaml|html)$') ui_eslint_files=$(staged_match '^ui/litellm-dashboard/.*\.(js|jsx|ts|tsx|mjs|cjs)$') +# CI lints the committed tree, so this script predicts CI for what you have STAGED +# (every trigger above reads `git diff --cached`). The tools it runs, though, read +# the working tree, so unstaged edits to tracked files and untracked files fold +# into the result and a green/red here won't match a commit of just the staged +# changes. There's no safe way to lint the index in place, so surface the gap +# instead of hiding it: stage everything you intend to commit before trusting a +# pass. This only warns; it never blocks or touches your changes. +unstaged=$(git diff --name-only) +untracked=$(git ls-files --others --exclude-standard) +if [ -n "$unstaged" ] || [ -n "$untracked" ]; then + echo "pre-commit: NOTE - unstaged/untracked changes are included in these checks but" >&2 + echo " won't be in a commit of only your staged changes, so this result may differ from" >&2 + echo " CI. Stage everything you intend to commit (git add) for an accurate prediction:" >&2 + printf '%s\n' "$unstaged" "$untracked" | sed '/^$/d' | sed 's/^/ /' >&2 +fi + lint_dashboard() { ( rc=0 diff --git a/scripts/ruff_strict_gate.py b/scripts/ruff_strict_gate.py index 5951a1215ed..5273e4805f6 100644 --- a/scripts/ruff_strict_gate.py +++ b/scripts/ruff_strict_gate.py @@ -1,10 +1,12 @@ #!/usr/bin/env python3 """Total-count gate for the strict ruff rules in ruff-strict.toml. -Each rule has a hard ceiling (baseline + slack) in ruff-strict-budget.json. The -gate counts each rule across the whole tree and fails when a rule is both over -its ceiling and higher than the base it merges into, so a change is blamed for -the violations it adds, never for drift that already exists in the base. +Each rule has a hard ``limit`` in ruff-strict-budget.json. The gate counts each +rule across the whole tree and fails when a rule is both over its limit and +higher than the base it merges into, so a change is blamed for the violations it +adds, never for drift that already exists in the base. ``--update`` ratchets each +rule's limit down by the number of violations this branch fixed relative to its +branch point (the merge-base). """ import argparse @@ -90,7 +92,7 @@ def base_counts(ref: str) -> dict: def evaluate(head: dict, base: dict, budget: dict) -> list: breaches = [] for rule, spec in budget.items(): - cap = spec["baseline"] + spec["slack"] + cap = spec["limit"] total = head.get(rule, 0) if total > cap and total > base.get(rule, 0): breaches.append(Breach(rule, total, cap, total - base.get(rule, 0))) @@ -128,26 +130,49 @@ def cmd_check(base: str) -> None: _run(["git", "diff", base_point, "--unified=0", "--no-color", "--", TARGET]) ), ) - print(f"FAIL: strict-rule totals exceed their ceiling (base {base}):") + print(f"FAIL: strict-rule totals exceed their limit (base {base}):") for breach in breaches: print( - f" {breach.rule}: total {breach.total} over cap {breach.cap} (this change added {breach.added})" + f" {breach.rule}: total {breach.total} over limit {breach.cap} (this change added {breach.added})" ) for violation in sorted(v for v in new if v.code == breach.rule): print(f" {violation.file}:{violation.line}") print( - "Reduce the new violations or remove an equal number elsewhere; the ceiling is baseline + slack in ruff-strict-budget.json." + "Reduce the new violations or remove an equal number elsewhere; the ceiling is the limit in ruff-strict-budget.json." ) raise SystemExit(1) -def cmd_update() -> None: +def ratcheted_budget(budget: dict, current: dict, base: dict) -> dict: + """Each rule's limit lowered by the violations `current` fixed vs `base`. + + `base` is the count at the branch point (the commit this branch diverged + from). The drop is clamped to what was actually cleared (a rule that grew + stays put), so the limit only ever falls. + """ + return { + rule: { + "limit": max(0, spec["limit"] - max(0, base.get(rule, 0) - current.get(rule, 0))) + } + for rule, spec in sorted(budget.items()) + } + + +def cmd_update(base_ref: str = DEFAULT_BASE) -> None: + """Ratchet each rule's limit down by the violations this branch fixed. + + The working-tree count is compared against a ruff pass over a detached + worktree at the branch point (the merge-base with `base_ref`), so a branch's + fixes tighten its own ceilings by exactly what they cleared since it diverged. + """ budget = json.loads(BUDGET_PATH.read_text()) - head = count_by_rule(head_violations()) - for rule in budget: - budget[rule]["baseline"] = head.get(rule, 0) - BUDGET_PATH.write_text(json.dumps(budget, indent=2, sort_keys=True) + "\n") - print("Re-captured per-rule baselines from the current tree") + base_point = _run(["git", "merge-base", base_ref, "HEAD"]).strip() or base_ref + updated = ratcheted_budget( + budget, count_by_rule(head_violations()), base_counts(base_point) + ) + BUDGET_PATH.write_text(json.dumps(updated, indent=2, sort_keys=True) + "\n") + cleared = sum(budget[rule]["limit"] - updated[rule]["limit"] for rule in updated) + print(f"Ratcheted strict-rule limits down by {cleared} violations this branch fixed") def main() -> None: @@ -155,7 +180,7 @@ def main() -> None: parser.add_argument("--base", default=DEFAULT_BASE) parser.add_argument("--update", action="store_true") args = parser.parse_args() - cmd_update() if args.update else cmd_check(args.base) + cmd_update(args.base) if args.update else cmd_check(args.base) if __name__ == "__main__": diff --git a/scripts/type_check_gate.py b/scripts/type_check_gate.py index 2ef332d91ea..256fc433d8d 100644 --- a/scripts/type_check_gate.py +++ b/scripts/type_check_gate.py @@ -3,20 +3,22 @@ basedpyright's ``--outputjson`` is reduced to a count of errors per *rule* (``reportAny``, ``reportArgumentType``, ...) and checked against a committed -budget of the form ``{rule: {baseline, slack}}``, the same shape as +budget of the form ``{rule: {limit}}``, the same shape as ``ruff-strict-budget.json``. A rule fails only when its codebase-wide total is -both over its ceiling (``baseline + slack``) *and* higher than the count on the -base it merges into, so a change is blamed for the errors it adds, never for -drift that already sits in the base. That ``> base`` guard is what stops an -unrelated PR from inheriting a red once two PRs each land near the ceiling and -their sum crosses it: the bystander's count equals its base, so it is spared, -while any PR that actually grows the rule past the cap still fails. +both over its ``limit`` *and* higher than the count on the base it merges into, +so a change is blamed for the errors it adds, never for drift that already sits +in the base. That ``> base`` guard is what stops an unrelated PR from inheriting +a red once two PRs each land near the limit and their sum crosses it: the +bystander's count equals its base, so it is spared, while any PR that actually +grows the rule past its limit still fails. Head counts are read from stdin (the caller runs basedpyright once and pipes ``--outputjson`` in); the base count is a second basedpyright pass over a detached worktree at the merge-base, run under the same environment so import -resolution matches. ``--update`` re-captures the absolute per-rule baselines for -the ratchet, preserving each rule's slack. +resolution matches. ``--update`` ratchets each rule's ``limit`` down by the +number of errors this branch fixed relative to its branch point (the merge-base), +so the headroom you were granted shrinks by exactly what you cleared and never +grows. ``--outputjson`` is used rather than text diagnostics because the latter wrap across lines, leaving the ``(reportRule)`` on a continuation line away from the @@ -44,10 +46,10 @@ DEFAULT_BASE = "origin/litellm_internal_staging" # Bucket for a basedpyright diagnostic with no `rule`. Counted so it's gated. UNCODED = "" -# Ceiling for a rule that shows up at HEAD but isn't in the budget at all -- a -# brand-new error category (new construct, or a tool/version change). baseline -# is treated as 0, so the rule fails once it clears this much slack. -DEFAULT_SLACK = 10 +# Limit for a rule that shows up at HEAD but isn't in the budget at all -- a +# brand-new error category (new construct, or a tool/version change). The rule +# fails once it clears this many errors. +DEFAULT_LIMIT = 10 class Breach(NamedTuple): @@ -57,13 +59,6 @@ class Breach(NamedTuple): added: int -def _seed_slack(baseline: int) -> int: - """Slack written for a rule first captured into a budget; busy rules get - more headroom, mirroring the tiering in ruff-strict-budget.json. Existing - rules keep whatever slack their JSON already declares.""" - return 10 if baseline >= 50 else 3 - - def _to_relative(raw: str, root: Path) -> str | None: path = Path(raw) absolute = path if path.is_absolute() else root / path @@ -142,7 +137,7 @@ def evaluate( breaches = [] for code, total in head.items(): spec = budget.get(code) - cap = spec["baseline"] + spec["slack"] if spec else DEFAULT_SLACK + cap = spec["limit"] if spec else DEFAULT_LIMIT prior = base.get(code, 0) if total > cap and total > prior: breaches.append(Breach(code, total, cap, total - prior)) @@ -155,24 +150,47 @@ def is_vacuous_run( """True when nothing was parsed but the budget expects errors -- the signature of a type checker that crashed or produced no output. The CI pipe swallows the tool's exit code (`tool || true`), so without this guard an - empty run would clear every ceiling and pass silently.""" - return not counts and any(spec["baseline"] for spec in budget.values()) + empty run would clear every limit and pass silently.""" + return not counts and any(spec["limit"] for spec in budget.values()) -def cmd_update(counts: Mapping[str, int]) -> None: - existing = json.loads(BUDGET_PATH.read_text()) if BUDGET_PATH.exists() else {} - budget = { +def ratcheted_budget( + budget: Mapping[str, Mapping[str, int]], + current: Mapping[str, int], + base: Mapping[str, int], +) -> dict[str, dict[str, int]]: + """Each rule's limit lowered by the errors `current` fixed vs `base`. + + `base` is the count at the branch point (the commit this branch diverged + from). The drop is clamped to what was actually cleared (a rule that grew + stays put), so the limit only ever falls. Rules absent from the budget are + dropped: a genuinely new error category is added to the JSON deliberately, + not on update. + """ + return { code: { - "baseline": count, - "slack": ( - existing[code]["slack"] if code in existing else _seed_slack(count) - ), + "limit": max(0, spec["limit"] - max(0, base.get(code, 0) - current.get(code, 0))) } - for code, count in sorted(counts.items()) + for code, spec in sorted(budget.items()) } - BUDGET_PATH.write_text(json.dumps(budget, indent=2, sort_keys=True) + "\n") + + +def cmd_update(current: Mapping[str, int], base_ref: str = DEFAULT_BASE) -> None: + """Ratchet each rule's limit down by the errors this branch fixed. + + `current` is the working-tree count (piped in); the reference count comes + from a second basedpyright pass over a detached worktree at the branch point + (the merge-base with `base_ref`), so a branch's fixes tighten its own ceilings + by exactly what they cleared since it diverged, and limits never rise. + """ + budget = json.loads(BUDGET_PATH.read_text()) if BUDGET_PATH.exists() else {} + base_point = _run(["git", "merge-base", base_ref, "HEAD"]).strip() or base_ref + updated = ratcheted_budget(budget, current, base_counts(base_point)) + BUDGET_PATH.write_text(json.dumps(updated, indent=2, sort_keys=True) + "\n") + cleared = sum(budget[code]["limit"] - updated[code]["limit"] for code in updated) print( - f"Re-captured basedpyright per-rule budget: {len(budget)} rules, {sum(counts.values())} errors total" + f"Ratcheted basedpyright limits down by {cleared} errors this branch fixed " + f"across {len(updated)} rules" ) @@ -180,10 +198,10 @@ def cmd_check(base_ref: str) -> None: budget = json.loads(BUDGET_PATH.read_text()) head = count_basedpyright(sys.stdin.read()) if is_vacuous_run(head, budget): - expected = sum(spec["baseline"] for spec in budget.values()) + expected = sum(spec["limit"] for spec in budget.values()) print( - f"FAIL: basedpyright produced no errors, but {BUDGET_PATH.name} expects " - f"~{expected}. The type checker almost certainly crashed or emitted " + f"FAIL: basedpyright produced no errors, but {BUDGET_PATH.name} allows " + f"up to ~{expected}. The type checker almost certainly crashed or emitted " f"nothing; refusing to certify a vacuous run." ) raise SystemExit(1) @@ -199,17 +217,17 @@ def cmd_check(base_ref: str) -> None: breaches = evaluate(head, base, budget) if not breaches: print( - f"OK: every rule is within its basedpyright ceiling or no higher than base ({sum(head.values())} errors total)" + f"OK: every rule is within its basedpyright limit or no higher than base ({sum(head.values())} errors total)" ) return - print("FAIL: basedpyright errors exceed the per-rule ceiling:") + print("FAIL: basedpyright errors exceed the per-rule limit:") for breach in breaches: print( - f" {breach.code}: total {breach.total} over cap {breach.cap} (this change added {breach.added})" + f" {breach.code}: total {breach.total} over limit {breach.cap} (this change added {breach.added})" ) print( "Reduce the new errors or remove an equal number elsewhere; the ceiling is " - "baseline + slack in basedpyright-code-budget.json." + "the limit in basedpyright-code-budget.json." ) summary = "; ".join(f"{b.code} {b.total}/{b.cap} (+{b.added})" for b in breaches) print(f"BREACHED RULES: {summary}") @@ -222,7 +240,7 @@ def main() -> None: parser.add_argument("--update", action="store_true") args = parser.parse_args() if args.update: - cmd_update(count_basedpyright(sys.stdin.read())) + cmd_update(count_basedpyright(sys.stdin.read()), args.base) else: cmd_check(args.base) diff --git a/scripts/type_discipline_gate.py b/scripts/type_discipline_gate.py index c111486e56a..bd63a42dcab 100644 --- a/scripts/type_discipline_gate.py +++ b/scripts/type_discipline_gate.py @@ -2,18 +2,19 @@ """Total-count gate for the LIT* rules in scripts/check_type_discipline.py. Sibling of scripts/ruff_strict_gate.py. Each rule listed in -type-discipline-budget.json has a hard ceiling (baseline + slack). The gate counts -each rule across the whole `litellm` tree and fails when a rule is both over its -ceiling and higher than the base it merges into, so a change is blamed for the -violations it adds, never for drift that already exists in the base. +type-discipline-budget.json has a hard ``limit``. The gate counts each rule +across the whole `litellm` tree and fails when a rule is both over its limit and +higher than the base it merges into, so a change is blamed for the violations it +adds, never for drift that already exists in the base. Rules not present in the budget are ignored, but today every rule the checker emits is gated: LIT001 (mutable collection in any annotation), LIT002 (mutable-collection construction), LIT003/LIT004 (noqa / ignore without codes or -reason), LIT006 (cast), and LIT008 (`**kwargs`) carry slack-buffered ceilings to -ratchet down; LIT005 (`*-ok` suppression without a reason) is frozen at slack 0 -so any net-new reasonless suppression trips the gate; and LIT007 (TypeGuard/TypeIs) -is a hard zero. Re-baseline with `--update` to ratchet a ceiling down. +reason), LIT006 (cast), and LIT008 (`**kwargs`) carry limits above their current +count to ratchet down; LIT005 (`*-ok` suppression without a reason) is frozen at +limit 0 so any net-new reasonless suppression trips the gate; and LIT007 +(TypeGuard/TypeIs) is a hard zero. ``--update`` ratchets a limit down by the +violations this branch fixed relative to its branch point (the merge-base). """ import argparse @@ -104,21 +105,21 @@ def base_counts(ref: str) -> dict: def over_ceiling(head: dict, budget: dict) -> frozenset: - """Rules whose head count already exceeds baseline + slack. + """Rules whose head count already exceeds their limit. - A rule can only breach when it is over its ceiling, so when none are the base + A rule can only breach when it is over its limit, so when none are the base comparison cannot change the verdict and the base worktree scan can be skipped. """ return frozenset( rule for rule, spec in budget.items() - if head.get(rule, 0) > spec["baseline"] + spec["slack"] + if head.get(rule, 0) > spec["limit"] ) def evaluate(head: dict, base: dict, budget: dict) -> list: breaches = [] for rule, spec in budget.items(): - cap = spec["baseline"] + spec["slack"] + cap = spec["limit"] total = head.get(rule, 0) if total > cap and total > base.get(rule, 0): breaches.append(Breach(rule, total, cap, total - base.get(rule, 0))) @@ -160,10 +161,10 @@ def cmd_check(base: str) -> None: _run(["git", "diff", base_point, "--unified=0", "--no-color", "--", TARGET]) ), ) - print(f"FAIL: LIT-rule totals exceed their ceiling (base {base}):") + print(f"FAIL: LIT-rule totals exceed their limit (base {base}):") for breach in breaches: print( - f" {breach.rule}: total {breach.total} over cap {breach.cap} (this change added {breach.added})" + f" {breach.rule}: total {breach.total} over limit {breach.cap} (this change added {breach.added})" ) for violation in sorted(v for v in new if v.code == breach.rule): print(f" {violation.file}:{violation.line}") @@ -171,19 +172,42 @@ def cmd_check(base: str) -> None: "Remove the new violations, give each a reason (`# noqa: XXX # `, " "`# pyright: ignore[rule] # `, `# mutable-ok: `, " "`# cast-ok: `, `# guard-ok: `, `# kwargs-ok: `), or " - "remove an equal number elsewhere; the ceiling is baseline + slack in " + "remove an equal number elsewhere; the ceiling is the limit in " "type-discipline-budget.json." ) raise SystemExit(1) -def cmd_update() -> None: +def ratcheted_budget(budget: dict, current: dict, base: dict) -> dict: + """Each rule's limit lowered by the violations `current` fixed vs `base`. + + `base` is the count at the branch point (the commit this branch diverged + from). The drop is clamped to what was actually cleared (a rule that grew + stays put), so the limit only ever falls. + """ + return { + rule: { + "limit": max(0, spec["limit"] - max(0, base.get(rule, 0) - current.get(rule, 0))) + } + for rule, spec in sorted(budget.items()) + } + + +def cmd_update(base_ref: str = DEFAULT_BASE) -> None: + """Ratchet each rule's limit down by the violations this branch fixed. + + The working-tree count is compared against a checker pass over a detached + worktree at the branch point (the merge-base with `base_ref`), so a branch's + fixes tighten its own ceilings by exactly what they cleared since it diverged. + """ budget = json.loads(BUDGET_PATH.read_text()) - head = count_by_rule(head_violations()) - for rule in budget: - budget[rule]["baseline"] = head.get(rule, 0) - BUDGET_PATH.write_text(json.dumps(budget, indent=2, sort_keys=True) + "\n") - print("Re-captured per-rule baselines from the current tree") + base_point = _run(["git", "merge-base", base_ref, "HEAD"]).strip() or base_ref + updated = ratcheted_budget( + budget, count_by_rule(head_violations()), base_counts(base_point) + ) + BUDGET_PATH.write_text(json.dumps(updated, indent=2, sort_keys=True) + "\n") + cleared = sum(budget[rule]["limit"] - updated[rule]["limit"] for rule in updated) + print(f"Ratcheted LIT-rule limits down by {cleared} violations this branch fixed") def main() -> None: @@ -191,7 +215,7 @@ def main() -> None: parser.add_argument("--base", default=DEFAULT_BASE) parser.add_argument("--update", action="store_true") args = parser.parse_args() - cmd_update() if args.update else cmd_check(args.base) + cmd_update(args.base) if args.update else cmd_check(args.base) if __name__ == "__main__": diff --git a/tests/test_litellm/test_budget_ratchet_check.py b/tests/test_litellm/test_budget_ratchet_check.py index 77cee8a485c..1972c1b6386 100644 --- a/tests/test_litellm/test_budget_ratchet_check.py +++ b/tests/test_litellm/test_budget_ratchet_check.py @@ -1,9 +1,8 @@ """Tests for scripts/budget_ratchet_check.py. -The guard's contract is "baselines and ceilings may only fall": a raised ceiling, a -raised baseline (even when slack is cut to keep the ceiling flat), a dropped rule, or -a deleted file is a regression, while a lowered/equal baseline and ceiling, a brand-new -rule, or a brand-new budget file is fine. Each branch is pinned here. +The guard's contract is "limits may only fall": a raised limit, a dropped rule, or +a deleted file is a regression, while a lowered/equal limit, a brand-new rule, or a +brand-new budget file is fine. Each branch is pinned here. """ import importlib.util @@ -19,69 +18,64 @@ ratchet = importlib.util.module_from_spec(_spec) _spec.loader.exec_module(ratchet) -def _spec_of(baseline, slack): - return {"baseline": baseline, "slack": slack} +def _spec_of(limit): + return {"limit": limit} -def test_caps_sum_baseline_and_slack_and_skip_malformed(): - caps = ratchet._caps({"LIT006": _spec_of(1013, 10), "junk": 5}) - assert caps == {"LIT006": 1023} # malformed (non-dict) spec ignored +def test_limits_read_the_limit_and_skip_malformed(): + limits = ratchet._limits({"LIT006": _spec_of(1023), "junk": 5}) + assert limits == {"LIT006": 1023} # malformed (non-dict) spec ignored -def test_raised_ceiling_is_a_regression(): - base = {"LIT006": _spec_of(1013, 10)} - head = {"LIT006": _spec_of(1013, 11)} # cap 1023 -> 1024 +def test_limits_fall_back_to_legacy_baseline_plus_slack(): + # The base side of a diff can predate the `limit` migration; its ceiling is + # baseline + slack, read on the same footing as a new-schema `limit`. + assert ratchet._limits({"LIT006": {"baseline": 1013, "slack": 10}}) == {"LIT006": 1023} + + +def test_migration_from_legacy_schema_to_equal_limit_is_clean(): + # baseline+slack (1023) -> limit 1023 is the same ceiling, so no regression. + base = {"LIT006": {"baseline": 1013, "slack": 10}} + assert ratchet.regressions_for("b.json", base, {"LIT006": _spec_of(1023)}) == [] + # ...and a genuine raise across the migration is still caught. + regs = ratchet.regressions_for("b.json", base, {"LIT006": _spec_of(1024)}) + assert [r.rule for r in regs] == ["LIT006"] and "1023 -> 1024" in regs[0].detail + + +def test_raised_limit_is_a_regression(): + base = {"LIT006": _spec_of(1023)} + head = {"LIT006": _spec_of(1024)} regs = ratchet.regressions_for("b.json", base, head) assert [r.rule for r in regs] == ["LIT006"] assert "1023 -> 1024" in regs[0].detail -def test_lowered_or_equal_ceiling_is_clean(): - base = {"LIT006": _spec_of(1013, 10)} - # baseline drops, slack flat -> ceiling falls - assert ratchet.regressions_for("b.json", base, {"LIT006": _spec_of(1000, 10)}) == [] +def test_lowered_or_equal_limit_is_clean(): + base = {"LIT006": _spec_of(1023)} + # limit drops + assert ratchet.regressions_for("b.json", base, {"LIT006": _spec_of(1000)}) == [] # nothing changes - assert ratchet.regressions_for("b.json", base, {"LIT006": _spec_of(1013, 10)}) == [] - # slack cut while baseline holds -> ceiling falls, baseline flat - assert ratchet.regressions_for("b.json", base, {"LIT006": _spec_of(1013, 0)}) == [] - - -def test_raised_baseline_is_a_regression_even_when_ceiling_held_flat(): - # baseline 1013 -> 1023 with slack cut 10 -> 0 keeps the ceiling at 1023, but a - # higher baseline bakes in more accepted debt and must still surface as a regression - base = {"LIT006": _spec_of(1013, 10)} - regs = ratchet.regressions_for("b.json", base, {"LIT006": _spec_of(1023, 0)}) - assert [r.rule for r in regs] == ["LIT006"] - assert "baseline raised 1013 -> 1023" in regs[0].detail - assert "ceiling raised" not in regs[0].detail - - -def test_raised_baseline_and_ceiling_report_both_reasons(): - base = {"LIT006": _spec_of(1013, 10)} - regs = ratchet.regressions_for("b.json", base, {"LIT006": _spec_of(1100, 10)}) - assert [r.rule for r in regs] == ["LIT006"] - assert "ceiling raised 1023 -> 1110" in regs[0].detail - assert "baseline raised 1013 -> 1100" in regs[0].detail + assert ratchet.regressions_for("b.json", base, {"LIT006": _spec_of(1023)}) == [] def test_dropped_rule_is_a_regression(): - regs = ratchet.regressions_for("b.json", {"LIT007": _spec_of(0, 0)}, {}) + regs = ratchet.regressions_for("b.json", {"LIT007": _spec_of(0)}, {}) assert [r.rule for r in regs] == ["LIT007"] assert "dropped" in regs[0].detail def test_new_rule_in_head_is_clean(): - assert ratchet.regressions_for("b.json", {}, {"new-rule": _spec_of(5, 0)}) == [] + assert ratchet.regressions_for("b.json", {}, {"new-rule": _spec_of(5)}) == [] def test_deleted_budget_file_is_a_regression(): - regs = ratchet.regressions_for("b.json", {"LIT006": _spec_of(1, 0)}, None) + regs = ratchet.regressions_for("b.json", {"LIT006": _spec_of(1)}, None) assert [r.rule for r in regs] == ["*"] assert "deleted" in regs[0].detail def test_new_budget_file_has_nothing_to_ratchet(): - assert ratchet.regressions_for("b.json", None, {"LIT006": _spec_of(1, 0)}) == [] + assert ratchet.regressions_for("b.json", None, {"LIT006": _spec_of(1)}) == [] def test_default_budgets_watch_every_budget_file_in_the_repo(): diff --git a/tests/test_litellm/test_ruff_strict_gate.py b/tests/test_litellm/test_ruff_strict_gate.py index 22255f0555e..ec8f49730dd 100644 --- a/tests/test_litellm/test_ruff_strict_gate.py +++ b/tests/test_litellm/test_ruff_strict_gate.py @@ -11,16 +11,16 @@ _spec.loader.exec_module(gate) Violation = gate.Violation -def rule(name, baseline, slack): - return {name: {"baseline": baseline, "slack": slack}} +def rule(name, limit): + return {name: {"limit": limit}} def test_under_ceiling_passes(): - assert gate.evaluate({"ANN001": 100}, {"ANN001": 100}, rule("ANN001", 90, 20)) == [] + assert gate.evaluate({"ANN001": 100}, {"ANN001": 100}, rule("ANN001", 110)) == [] -def test_ceiling_is_baseline_plus_slack_boundary(): - budget = rule("ANN001", 90, 20) # cap 110 +def test_ceiling_is_the_limit_boundary(): + budget = rule("ANN001", 110) at = gate.evaluate({"ANN001": 110}, {"ANN001": 90}, budget) over = gate.evaluate({"ANN001": 111}, {"ANN001": 90}, budget) assert at == [] @@ -30,23 +30,23 @@ def test_ceiling_is_baseline_plus_slack_boundary(): def test_over_ceiling_and_change_added_fails(): - breaches = gate.evaluate({"C901": 11}, {"C901": 9}, rule("C901", 10, 0)) + breaches = gate.evaluate({"C901": 11}, {"C901": 9}, rule("C901", 10)) assert [b.rule for b in breaches] == ["C901"] assert breaches[0].added == 2 def test_base_already_over_ceiling_change_added_nothing_is_not_blamed(): - # drift safety: base is over cap, this change leaves the count where it is - assert gate.evaluate({"C901": 15}, {"C901": 15}, rule("C901", 10, 0)) == [] + # drift safety: base is over limit, this change leaves the count where it is + assert gate.evaluate({"C901": 15}, {"C901": 15}, rule("C901", 10)) == [] def test_change_that_reduces_an_over_ceiling_rule_is_not_blamed(): - # still over cap, but moving the right direction - assert gate.evaluate({"C901": 14}, {"C901": 16}, rule("C901", 10, 0)) == [] + # still over limit, but moving the right direction + assert gate.evaluate({"C901": 14}, {"C901": 16}, rule("C901", 10)) == [] def test_rules_are_independent(): - budget = {**rule("ANN001", 100, 50), **rule("C901", 10, 0)} + budget = {**rule("ANN001", 150), **rule("C901", 10)} breaches = gate.evaluate( {"ANN001": 130, "C901": 11}, {"ANN001": 100, "C901": 10}, budget ) @@ -54,7 +54,19 @@ def test_rules_are_independent(): def test_missing_rule_counts_as_zero(): - assert gate.evaluate({}, {}, rule("C901", 0, 0)) == [] + assert gate.evaluate({}, {}, rule("C901", 0)) == [] + + +def test_update_ratchets_limit_down_by_what_the_branch_fixed_never_up(): + budget = {**rule("ANN001", 150), **rule("C901", 10)} + # ANN001 fixed 20 (100 -> 80) so its limit falls 150 -> 130; C901 grew, so its + # limit holds flat at 10 (a fix must never loosen a ceiling). + current = {"ANN001": 80, "C901": 12} + base = {"ANN001": 100, "C901": 9} + assert gate.ratcheted_budget(budget, current, base) == { + "ANN001": {"limit": 130}, + "C901": {"limit": 10}, + } def test_parse_changed_lines_maps_added_lines_per_file(): diff --git a/tests/test_litellm/test_type_check_gate.py b/tests/test_litellm/test_type_check_gate.py index e99ad0a4f41..3faf46c87de 100644 --- a/tests/test_litellm/test_type_check_gate.py +++ b/tests/test_litellm/test_type_check_gate.py @@ -55,77 +55,98 @@ def test_paths_outside_repo_are_skipped(): def test_at_or_under_ceiling_passes(): - budget = {"no-any-return": {"baseline": 5, "slack": 0}} + budget = {"no-any-return": {"limit": 5}} assert gate.evaluate({"no-any-return": 5}, {}, budget) == [] def test_one_more_error_than_ceiling_fails(): - budget = {"no-any-return": {"baseline": 5, "slack": 0}} + budget = {"no-any-return": {"limit": 5}} assert gate.evaluate({"no-any-return": 6}, {}, budget) == [ gate.Breach("no-any-return", 6, 5, 6) ] -def test_slack_absorbs_small_increase_then_fails_past_it(): - budget = {"arg-type": {"baseline": 5, "slack": 5}} +def test_limit_absorbs_increase_up_to_it_then_fails_past_it(): + budget = {"arg-type": {"limit": 10}} assert gate.evaluate({"arg-type": 10}, {}, budget) == [] assert gate.evaluate({"arg-type": 11}, {}, budget) == [ gate.Breach("arg-type", 11, 10, 11) ] -def test_unbudgeted_new_code_uses_default_slack(): - assert gate.evaluate({"brand-new": gate.DEFAULT_SLACK}, {}, {}) == [] - assert gate.evaluate({"brand-new": gate.DEFAULT_SLACK + 1}, {}, {}) == [ +def test_unbudgeted_new_code_uses_default_limit(): + assert gate.evaluate({"brand-new": gate.DEFAULT_LIMIT}, {}, {}) == [] + assert gate.evaluate({"brand-new": gate.DEFAULT_LIMIT + 1}, {}, {}) == [ gate.Breach( "brand-new", - gate.DEFAULT_SLACK + 1, - gate.DEFAULT_SLACK, - gate.DEFAULT_SLACK + 1, + gate.DEFAULT_LIMIT + 1, + gate.DEFAULT_LIMIT, + gate.DEFAULT_LIMIT + 1, ) ] def test_drift_already_over_cap_in_base_is_not_blamed_on_a_flat_change(): - # The bystander case: a rule sits over its ceiling because two earlier PRs + # The bystander case: a rule sits over its limit because two earlier PRs # summed past it. A PR that branches off that base and adds nothing must pass - # -- total > cap but total == base, so the `> base` guard spares it. - budget = {"arg-type": {"baseline": 5, "slack": 5}} + # -- total > limit but total == base, so the `> base` guard spares it. + budget = {"arg-type": {"limit": 10}} assert gate.evaluate({"arg-type": 12}, {"arg-type": 12}, budget) == [] def test_change_that_grows_an_over_cap_rule_is_blamed_for_only_what_it_added(): - # Over cap AND above base: blamed, and `added` is the delta vs base, not the + # Over limit AND above base: blamed, and `added` is the delta vs base, not the # whole overage, so the message points at this change's contribution. - budget = {"arg-type": {"baseline": 5, "slack": 5}} + budget = {"arg-type": {"limit": 10}} assert gate.evaluate({"arg-type": 14}, {"arg-type": 12}, budget) == [ gate.Breach("arg-type", 14, 10, 2) ] def test_reducing_an_over_cap_rule_below_base_passes(): - budget = {"arg-type": {"baseline": 5, "slack": 5}} + budget = {"arg-type": {"limit": 10}} assert gate.evaluate({"arg-type": 11}, {"arg-type": 12}, budget) == [] def test_no_output_against_a_nonempty_budget_is_a_vacuous_run(): # A crashed type checker emits nothing; the gate must not certify it as clean. - budget = {"no-untyped-def": {"baseline": 4888, "slack": 10}} + budget = {"no-untyped-def": {"limit": 4898}} assert gate.is_vacuous_run({}, budget) is True def test_genuine_zero_and_empty_budget_are_not_vacuous(): assert gate.is_vacuous_run({}, {}) is False + assert gate.is_vacuous_run({}, {"no-untyped-def": {"limit": 0}}) is False assert ( - gate.is_vacuous_run({}, {"no-untyped-def": {"baseline": 0, "slack": 3}}) - is False - ) - assert ( - gate.is_vacuous_run({"arg-type": 1}, {"arg-type": {"baseline": 9, "slack": 1}}) - is False + gate.is_vacuous_run({"arg-type": 1}, {"arg-type": {"limit": 10}}) is False ) +def test_update_ratchets_a_limit_down_by_what_the_branch_fixed(): + # A rule that dropped from 40 (branch point) to 30 (current) fixed 10, so its + # limit of 100 falls to 90 -- the granted headroom (60) is preserved, not the + # raw count. + budget = {"reportAny": {"limit": 100}} + assert gate.ratcheted_budget(budget, {"reportAny": 30}, {"reportAny": 40}) == { + "reportAny": {"limit": 90} + } + + +def test_update_never_raises_a_limit_when_a_rule_grows(): + # Adding violations must not loosen the ceiling; the limit holds flat. + budget = {"reportAny": {"limit": 100}} + assert gate.ratcheted_budget(budget, {"reportAny": 55}, {"reportAny": 40}) == { + "reportAny": {"limit": 100} + } + + +def test_update_clamps_a_limit_at_zero_never_negative(): + budget = {"reportAny": {"limit": 5}} + assert gate.ratcheted_budget(budget, {"reportAny": 0}, {"reportAny": 40}) == { + "reportAny": {"limit": 0} + } + + def test_malformed_basedpyright_json_exits_loudly_not_as_zero_errors(): import pytest diff --git a/tests/test_litellm/test_type_discipline_gate.py b/tests/test_litellm/test_type_discipline_gate.py index d7d827685a6..8424d480fa6 100644 --- a/tests/test_litellm/test_type_discipline_gate.py +++ b/tests/test_litellm/test_type_discipline_gate.py @@ -14,27 +14,39 @@ gate = importlib.util.module_from_spec(_spec) _spec.loader.exec_module(gate) -def _budget(baseline, slack): - return {"LIT006": {"baseline": baseline, "slack": slack}} +def _budget(limit): + return {"LIT006": {"limit": limit}} -def test_over_ceiling_flags_only_counts_above_baseline_plus_slack(): - budget = _budget(10, 2) # cap 12 - assert gate.over_ceiling({"LIT006": 12}, budget) == frozenset() # at cap - assert gate.over_ceiling({"LIT006": 13}, budget) == frozenset({"LIT006"}) # over cap +def test_over_ceiling_flags_only_counts_above_the_limit(): + budget = _budget(12) + assert gate.over_ceiling({"LIT006": 12}, budget) == frozenset() # at limit + assert gate.over_ceiling({"LIT006": 13}, budget) == frozenset({"LIT006"}) # over limit assert gate.over_ceiling({}, budget) == frozenset() # missing rule counts as zero def test_over_ceiling_is_independent_across_rules(): - budget = {"LIT001": {"baseline": 5, "slack": 0}, "LIT006": {"baseline": 10, "slack": 0}} + budget = {"LIT001": {"limit": 5}, "LIT006": {"limit": 10}} assert gate.over_ceiling({"LIT001": 6, "LIT006": 10}, budget) == frozenset({"LIT001"}) -def test_evaluate_blames_only_a_rule_over_cap_and_over_base(): - budget = _budget(10, 0) # cap 10 - # over cap and grown vs base -> breach +def test_evaluate_blames_only_a_rule_over_limit_and_over_base(): + budget = _budget(10) + # over limit and grown vs base -> breach assert [b.rule for b in gate.evaluate({"LIT006": 12}, {"LIT006": 9}, budget)] == ["LIT006"] - # over cap but flat vs base (pre-existing drift) -> not blamed + # over limit but flat vs base (pre-existing drift) -> not blamed assert gate.evaluate({"LIT006": 12}, {"LIT006": 12}, budget) == [] - # within cap -> not blamed regardless of base + # within limit -> not blamed regardless of base assert gate.evaluate({"LIT006": 10}, {"LIT006": 0}, budget) == [] + + +def test_update_ratchets_limit_down_by_what_the_branch_fixed_never_up(): + budget = {"LIT001": {"limit": 100}, "LIT006": {"limit": 10}} + # LIT001 fixed 15 (60 -> 45) so its limit falls 100 -> 85; LIT006 grew, so its + # limit holds flat at 10. + current = {"LIT001": 45, "LIT006": 12} + base = {"LIT001": 60, "LIT006": 9} + assert gate.ratcheted_budget(budget, current, base) == { + "LIT001": {"limit": 85}, + "LIT006": {"limit": 10}, + } diff --git a/type-discipline-budget.json b/type-discipline-budget.json index a6588ac89aa..aa16b30b215 100644 --- a/type-discipline-budget.json +++ b/type-discipline-budget.json @@ -1,34 +1,26 @@ { "LIT001": { - "baseline": 21452, - "slack": 2000 + "limit": 23452 }, "LIT002": { - "baseline": 25022, - "slack": 2500 + "limit": 27522 }, "LIT003": { - "baseline": 397, - "slack": 25 + "limit": 422 }, "LIT004": { - "baseline": 2515, - "slack": 50 + "limit": 2565 }, "LIT005": { - "baseline": 0, - "slack": 0 + "limit": 0 }, "LIT006": { - "baseline": 1013, - "slack": 100 + "limit": 1113 }, "LIT007": { - "baseline": 0, - "slack": 0 + "limit": 0 }, "LIT008": { - "baseline": 914, - "slack": 90 + "limit": 1004 } } From 3e0bd71ee933957610bd6faeda4e800420f5e8ed Mon Sep 17 00:00:00 2001 From: ryan-crabbe-berri Date: Wed, 1 Jul 2026 10:25:32 -0700 Subject: [PATCH 55/79] feat(ui): disclaim that the Update API Key modal only rotates api_key (#31805) * feat(ui): disclaim that the Update API Key modal only rotates api_key An adversarial review of the credential-rotation work noted the modal always writes litellm_params.api_key, so models that authenticate with an Azure AD token, AWS credentials, or a Vertex service-account JSON are not rotated by it. Adds a warning Alert to the modal so users are not misled into thinking those secrets were rotated; broadening the modal to those providers is a follow-up * Update ui/litellm-dashboard/src/components/update_model_credentials_modal.tsx Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> * style(ui): prettier-format the credential modal --------- Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> --- .../src/components/update_model_credentials_modal.tsx | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/ui/litellm-dashboard/src/components/update_model_credentials_modal.tsx b/ui/litellm-dashboard/src/components/update_model_credentials_modal.tsx index 238207a4aa8..b98f0ec3242 100644 --- a/ui/litellm-dashboard/src/components/update_model_credentials_modal.tsx +++ b/ui/litellm-dashboard/src/components/update_model_credentials_modal.tsx @@ -1,4 +1,4 @@ -import { Button, Form, Input, Modal, Typography } from "antd"; +import { Alert, Button, Form, Input, Modal, Typography } from "antd"; import { useState } from "react"; import { modelPatchUpdateCall } from "./networking"; import NotificationsManager from "./molecules/notifications_manager"; @@ -56,8 +56,15 @@ export default function UpdateModelCredentialsModal({ return ( - Rotate this model's API key. Only the new key is sent; the rest of the deployment is left untouched. + Update this model's API key. Only the new key is sent; the rest of the deployment configuration is left + untouched. +
From 1fe76dcedba6595fcb3b2e30c80f7d5973dc7c2d Mon Sep 17 00:00:00 2001 From: Yuneng Jiang Date: Wed, 1 Jul 2026 13:25:47 -0700 Subject: [PATCH 56/79] Revert "chore: remove _experimental/out (#31546)" This reverts commit 72bcb748b97179657a4c252230f6b249757d7e66. --- .gitignore | 11 +- litellm/proxy/_experimental/out/404.html | 1 + .../proxy/_experimental/out/404/index.html | 1 + .../out/__next.!KGRhc2hib2FyZCk.__PAGE__.txt | 9 + .../out/__next.!KGRhc2hib2FyZCk.txt | 7 + .../proxy/_experimental/out/__next._full.txt | 30 ++ .../proxy/_experimental/out/__next._head.txt | 6 + .../proxy/_experimental/out/__next._index.txt | 9 + .../proxy/_experimental/out/__next._tree.txt | 4 + .../5rDiFx0t_mOGYmV_8kSkw/_buildManifest.js | 16 + .../_clientMiddlewareManifest.js | 1 + .../5rDiFx0t_mOGYmV_8kSkw/_ssgManifest.js | 1 + .../out/_next/static/chunks/0-3i_.uof35pm.js | 2 + .../out/_next/static/chunks/0-4tg9f~_a3b~.js | 12 + .../out/_next/static/chunks/0-85n.4jrc2vv.js | 1 + .../out/_next/static/chunks/0-dhh1_d1.b1u.js | 3 + .../out/_next/static/chunks/0-f.2po-pctaa.js | 1 + .../out/_next/static/chunks/0-ih8xcz_89nt.js | 1 + .../out/_next/static/chunks/0.4.bbjx7y007.js | 143 ++++++ .../out/_next/static/chunks/0.bx44y-6~tug.js | 10 + .../out/_next/static/chunks/0.yiw37jc_bvi.js | 1 + .../out/_next/static/chunks/00cy3g~l27g1y.js | 1 + .../out/_next/static/chunks/00jwo~_zp.35~.js | 420 ++++++++++++++++++ .../out/_next/static/chunks/00p.gft-l.6p..js | 3 + .../out/_next/static/chunks/00pl5r0.xdcua.js | 1 + .../out/_next/static/chunks/00q4mtjboprhm.js | 4 + .../out/_next/static/chunks/011mgw.-67gs_.js | 10 + .../out/_next/static/chunks/01_xjyxcb1uco.js | 1 + .../out/_next/static/chunks/01xm1xt.gmrff.js | 3 + .../out/_next/static/chunks/01y._o853f7le.js | 4 + .../out/_next/static/chunks/01~uswbzv7_90.js | 1 + .../out/_next/static/chunks/022.sz94ycw4x.js | 4 + .../out/_next/static/chunks/02813b2b-kz98.js | 8 + .../out/_next/static/chunks/02c1-r_khzb89.js | 1 + .../out/_next/static/chunks/02ihc5xweq16v.js | 1 + .../out/_next/static/chunks/02nrwvikmd-wf.js | 1 + .../out/_next/static/chunks/02oicwo.~e~ak.js | 1 + .../out/_next/static/chunks/036wlkuzplhfz.js | 1 + .../out/_next/static/chunks/038lmn5.g6myc.js | 8 + .../out/_next/static/chunks/03_wvlr03g~35.js | 1 + .../out/_next/static/chunks/03fia.h6j.gpu.js | 14 + .../out/_next/static/chunks/03iznh0~x-p5x.js | 1 + .../out/_next/static/chunks/03l9yp-0vdrvg.js | 1 + .../out/_next/static/chunks/03rcuw-pknh--.js | 1 + .../out/_next/static/chunks/03~yq9q893hmn.js | 1 + .../out/_next/static/chunks/043q3g5-5-aju.js | 55 +++ .../out/_next/static/chunks/04476udqypzuu.js | 1 + .../out/_next/static/chunks/04amwk-x_vjxu.js | 1 + .../out/_next/static/chunks/04jvxoid~vpxj.js | 1 + .../out/_next/static/chunks/04p5iour3skhn.js | 1 + .../out/_next/static/chunks/04~mux1g2xqfl.js | 10 + .../out/_next/static/chunks/05.uhnqp00zd5.js | 86 ++++ .../out/_next/static/chunks/058o-fyv9lb_l.js | 10 + .../out/_next/static/chunks/05btv.l5gro_..js | 10 + .../out/_next/static/chunks/05qmwjqau64bz.css | 1 + .../out/_next/static/chunks/05t1k89l9tc3s.js | 1 + .../out/_next/static/chunks/05w6e8.ake4_v.js | 11 + .../out/_next/static/chunks/05wzckn7dnk9_.js | 1 + .../out/_next/static/chunks/05z02g9s~8km0.js | 4 + .../out/_next/static/chunks/066hp9.940823.js | 1 + .../out/_next/static/chunks/0689o862~x~pg.js | 1 + .../out/_next/static/chunks/06x5y8ia4k1mc.js | 2 + .../out/_next/static/chunks/07.fwfv-sinb5.js | 4 + .../out/_next/static/chunks/07_~yky8gc9_m.js | 10 + .../out/_next/static/chunks/08b3bdf-s.-y4.js | 2 + .../out/_next/static/chunks/08is8lfgypp_2.js | 31 ++ .../out/_next/static/chunks/09dh.hm0vr~61.js | 3 + .../out/_next/static/chunks/09n64dqzn.le~.js | 13 + .../out/_next/static/chunks/0_cwbuh_om4s9.js | 91 ++++ .../out/_next/static/chunks/0_rk9sxkapt-r.js | 1 + .../out/_next/static/chunks/0_tak0mb5m-3k.js | 1 + .../out/_next/static/chunks/0_y-b9_d9dsuv.js | 14 + .../out/_next/static/chunks/0aj3r46j-.qsy.js | 1 + .../out/_next/static/chunks/0ajdq5~-z4-0o.js | 1 + .../out/_next/static/chunks/0au3mg4n33g_o.js | 12 + .../out/_next/static/chunks/0b5g~_decuer~.js | 1 + .../out/_next/static/chunks/0bqafy~83g2md.js | 8 + .../out/_next/static/chunks/0byy7z~x~srwc.js | 1 + .../out/_next/static/chunks/0c2apcdkbqq0o.js | 1 + .../out/_next/static/chunks/0c4pfjjue0uc-.js | 86 ++++ .../out/_next/static/chunks/0ceh~7zrbxj.y.js | 1 + .../out/_next/static/chunks/0d2qt-f_paso0.js | 2 + .../out/_next/static/chunks/0ecsfnbwne0sn.js | 1 + .../out/_next/static/chunks/0el08tticy_20.js | 3 + .../out/_next/static/chunks/0em0654rb513m.js | 4 + .../out/_next/static/chunks/0gj2~qks1xrx8.js | 1 + .../out/_next/static/chunks/0gtegjaljim2a.js | 1 + .../out/_next/static/chunks/0h274dbe8lloe.js | 1 + .../out/_next/static/chunks/0hsqxu.xbf.l5.js | 216 +++++++++ .../out/_next/static/chunks/0hzdsr8t0ksq..js | 2 + .../out/_next/static/chunks/0hzj3mfqun9q~.js | 8 + .../out/_next/static/chunks/0i77.0u.82o9u.css | 1 + .../out/_next/static/chunks/0ip1d_6ew-zr2.js | 179 ++++++++ .../out/_next/static/chunks/0ivj_wax-joap.js | 31 ++ .../out/_next/static/chunks/0j2~0jseuoube.js | 16 + .../out/_next/static/chunks/0jaa-io9cz430.js | 10 + .../out/_next/static/chunks/0jdm7x5soayfw.js | 1 + .../out/_next/static/chunks/0jib1e4hgitwz.css | 1 + .../out/_next/static/chunks/0jr8wo_7ak~7n.js | 1 + .../out/_next/static/chunks/0jzxuesytdzt0.js | 1 + .../out/_next/static/chunks/0k3aqiu733i3f.js | 1 + .../out/_next/static/chunks/0kqhn69~lkflo.js | 11 + .../out/_next/static/chunks/0kr3_6r.1wa_9.js | 1 + .../out/_next/static/chunks/0l7em-5kjv49e.js | 7 + .../out/_next/static/chunks/0lb0p7rh5znu_.js | 20 + .../out/_next/static/chunks/0ldurpg4iqx04.js | 1 + .../out/_next/static/chunks/0lg.6rbfsd-l9.js | 1 + .../out/_next/static/chunks/0lku60vnd9m1i.js | 1 + .../out/_next/static/chunks/0lstohw6r.qs..js | 1 + .../out/_next/static/chunks/0m._ijxus~ryi.js | 4 + .../out/_next/static/chunks/0m.pilqkjqyg3.js | 1 + .../out/_next/static/chunks/0m5k-5fv1ya8x.js | 3 + .../out/_next/static/chunks/0m6zdocif1gl4.js | 1 + .../out/_next/static/chunks/0mb3erwqomzal.js | 1 + .../out/_next/static/chunks/0md97r_057_33.js | 1 + .../out/_next/static/chunks/0mh1wnrvmv_y7.js | 4 + .../out/_next/static/chunks/0mmrbksvmhp.1.js | 1 + .../out/_next/static/chunks/0mspdfvjqoti_.js | 1 + .../out/_next/static/chunks/0mzw3maijoev6.js | 1 + .../out/_next/static/chunks/0n.a~e5dwfnkn.js | 1 + .../out/_next/static/chunks/0n028f.v-dhms.js | 1 + .../out/_next/static/chunks/0ngre0.s4-ej6.js | 1 + .../out/_next/static/chunks/0nnx~7-7e5t~1.js | 5 + .../out/_next/static/chunks/0ogm.~yq5rjmw.js | 179 ++++++++ .../out/_next/static/chunks/0ovmgshl9hfea.js | 10 + .../out/_next/static/chunks/0p.6bs58-_3lw.js | 2 + .../out/_next/static/chunks/0pd5zl~lciww9.js | 1 + .../out/_next/static/chunks/0pidya1qvuvx8.js | 1 + .../out/_next/static/chunks/0pu3ltw1cci2~.js | 35 ++ .../out/_next/static/chunks/0pwkd9r.mc_ee.js | 1 + .../out/_next/static/chunks/0pwrfxkkt~qfh.js | 50 +++ .../out/_next/static/chunks/0q2og72gex34u.js | 1 + .../out/_next/static/chunks/0q6~n4y84cejn.js | 1 + .../out/_next/static/chunks/0q9_qqi.nzx5l.js | 1 + .../out/_next/static/chunks/0ql_-8xthluga.js | 1 + .../out/_next/static/chunks/0r8_z31ow7vw9.js | 68 +++ .../out/_next/static/chunks/0rdv7_7_95b-1.js | 1 + .../out/_next/static/chunks/0rsh-mjgd1-1b.js | 11 + .../out/_next/static/chunks/0scfmfivwcppe.js | 10 + .../out/_next/static/chunks/0snrx6.._0zus.js | 8 + .../out/_next/static/chunks/0sx3mu2_l9g_y.js | 21 + .../out/_next/static/chunks/0sxgv7gc5lm3g.js | 1 + .../out/_next/static/chunks/0sylbcw3ha_ba.js | 11 + .../out/_next/static/chunks/0t4ig3ibz46ga.js | 1 + .../out/_next/static/chunks/0tbzoqict3-mi.js | 1 + .../out/_next/static/chunks/0teffxf7o_863.js | 1 + .../out/_next/static/chunks/0tgl~~_4hb1rp.js | 1 + .../out/_next/static/chunks/0u3_nka63vh6t.js | 1 + .../out/_next/static/chunks/0us_9w7qaihte.js | 1 + .../out/_next/static/chunks/0uu6lckpr0s15.js | 14 + .../out/_next/static/chunks/0uy6wzxw5oh5v.js | 1 + .../out/_next/static/chunks/0v1rxqc1hqmrl.js | 4 + .../out/_next/static/chunks/0vo11_94ear6l.js | 1 + .../out/_next/static/chunks/0w39dn9x3dp9g.js | 1 + .../out/_next/static/chunks/0whkizop7gd0~.js | 41 ++ .../out/_next/static/chunks/0x.73w57rn4ou.js | 1 + .../out/_next/static/chunks/0x6hmpiq7.b-x.js | 420 ++++++++++++++++++ .../out/_next/static/chunks/0ydd65iv6ffpl.js | 10 + .../out/_next/static/chunks/0ys10755n8os_.js | 1 + .../out/_next/static/chunks/0z4fh7pvzmoy8.js | 1 + .../out/_next/static/chunks/0zqdpz_rk5.wq.js | 14 + .../out/_next/static/chunks/0zrbitbm~0koh.js | 14 + .../out/_next/static/chunks/0~-ovi6c4wjt1.js | 1 + .../out/_next/static/chunks/0~0su3wi_7f6-.js | 1 + .../out/_next/static/chunks/0~tp1mbr_st8h.js | 1 + .../out/_next/static/chunks/0~~y94vmu8z5d.js | 1 + .../out/_next/static/chunks/101az3fsw7lje.js | 1 + .../out/_next/static/chunks/10e9lx.nawttb.js | 1 + .../out/_next/static/chunks/10jlu0mdcmzoi.js | 1 + .../out/_next/static/chunks/10sdqywhhhn7i.js | 1 + .../out/_next/static/chunks/10ybnll3qh-8s.js | 10 + .../out/_next/static/chunks/114pbx0696lkh.js | 1 + .../out/_next/static/chunks/11h.ntqd0jl3z.js | 1 + .../out/_next/static/chunks/11kowzys1c43t.js | 420 ++++++++++++++++++ .../out/_next/static/chunks/129bujhdmi9ce.js | 4 + .../out/_next/static/chunks/13c74.fwk0wmq.js | 1 + .../out/_next/static/chunks/13ln.k6r3lkv_.js | 167 +++++++ .../out/_next/static/chunks/13s0v9siktndj.js | 1 + .../out/_next/static/chunks/142-5lmjc6wc~.js | 1 + .../out/_next/static/chunks/14566-_ogh-19.js | 1 + .../out/_next/static/chunks/14_9gq.6yjjih.js | 2 + .../out/_next/static/chunks/15.9ylrtxojbj.js | 4 + .../out/_next/static/chunks/1560njdijg7fq.js | 48 ++ .../out/_next/static/chunks/15auqattd2wzv.js | 1 + .../out/_next/static/chunks/15hm8gokjq2uu.js | 13 + .../out/_next/static/chunks/15rg~y4h.lcrl.js | 1 + .../out/_next/static/chunks/15wqqcwhnlidr.js | 1 + .../out/_next/static/chunks/16.oisvgwzo8s.js | 56 +++ .../out/_next/static/chunks/169km.d7x9qr6.js | 1 + .../out/_next/static/chunks/16qfko21~_dn~.js | 10 + .../out/_next/static/chunks/1781p3yhsw7kp.js | 1 + .../out/_next/static/chunks/17b18lwgc39xm.js | 420 ++++++++++++++++++ .../out/_next/static/chunks/17cvpyw6fshd4.js | 1 + .../out/_next/static/chunks/17e1s6gkzjh5f.js | 1 + .../out/_next/static/chunks/17j1m89pizunk.js | 1 + .../out/_next/static/chunks/17jd5l9o~hzf3.js | 1 + .../out/_next/static/chunks/17n.qg70cy9.9.js | 1 + .../out/_next/static/chunks/184o99uxk88c7.js | 1 + .../static/chunks/turbopack-0a~tzicx4wgrt.js | 1 + .../1bffadaabf893a1e-s.16ipb6fqu393i.woff2 | Bin 0 -> 85272 bytes .../2bbe8d2671613f1f-s.067x_6k0k23tk.woff2 | Bin 0 -> 10280 bytes .../2c55a0e60120577a-s.0bjc5tiuqdqro.woff2 | Bin 0 -> 25844 bytes .../5476f68d60460930-s.0wxq9webf.ew4.woff2 | Bin 0 -> 19044 bytes .../83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2 | Bin 0 -> 48432 bytes .../9c72aa0f40e4eef8-s.0m6w47a4e5dy9.woff2 | Bin 0 -> 18744 bytes .../ad66f9afd8947f86-s.11u06r12fd6v_.woff2 | Bin 0 -> 11272 bytes .../static/media/favicon.0~dgapwhi~75y.ico | Bin 0 -> 6387 bytes .../out/_not-found/__next._full.txt | 20 + .../out/_not-found/__next._head.txt | 6 + .../out/_not-found/__next._index.txt | 9 + .../_not-found/__next._not-found.__PAGE__.txt | 5 + .../out/_not-found/__next._not-found.txt | 5 + .../out/_not-found/__next._tree.txt | 3 + .../_experimental/out/_not-found/index.html | 1 + .../_experimental/out/_not-found/index.txt | 20 + ...KGRhc2hib2FyZCk.access-groups.__PAGE__.txt | 9 + .../__next.!KGRhc2hib2FyZCk.access-groups.txt | 5 + .../access-groups/__next.!KGRhc2hib2FyZCk.txt | 7 + .../out/access-groups/__next._full.txt | 33 ++ .../out/access-groups/__next._head.txt | 6 + .../out/access-groups/__next._index.txt | 9 + .../out/access-groups/__next._tree.txt | 4 + .../out/access-groups/index.html | 1 + .../_experimental/out/access-groups/index.txt | 33 ++ ....!KGRhc2hib2FyZCk.admin-panel.__PAGE__.txt | 9 + .../__next.!KGRhc2hib2FyZCk.admin-panel.txt | 5 + .../admin-panel/__next.!KGRhc2hib2FyZCk.txt | 7 + .../out/admin-panel/__next._full.txt | 33 ++ .../out/admin-panel/__next._head.txt | 6 + .../out/admin-panel/__next._index.txt | 9 + .../out/admin-panel/__next._tree.txt | 4 + .../_experimental/out/admin-panel/index.html | 1 + .../_experimental/out/admin-panel/index.txt | 33 ++ ..._next.!KGRhc2hib2FyZCk.agents.__PAGE__.txt | 9 + .../agents/__next.!KGRhc2hib2FyZCk.agents.txt | 5 + .../out/agents/__next.!KGRhc2hib2FyZCk.txt | 7 + .../_experimental/out/agents/__next._full.txt | 33 ++ .../_experimental/out/agents/__next._head.txt | 6 + .../out/agents/__next._index.txt | 9 + .../_experimental/out/agents/__next._tree.txt | 4 + .../proxy/_experimental/out/agents/index.html | 1 + .../proxy/_experimental/out/agents/index.txt | 33 ++ ...ext.!KGRhc2hib2FyZCk.api-keys.__PAGE__.txt | 9 + .../__next.!KGRhc2hib2FyZCk.api-keys.txt | 5 + .../out/api-keys/__next.!KGRhc2hib2FyZCk.txt | 7 + .../out/api-keys/__next._full.txt | 33 ++ .../out/api-keys/__next._head.txt | 6 + .../out/api-keys/__next._index.txt | 9 + .../out/api-keys/__next._tree.txt | 4 + .../_experimental/out/api-keys/index.html | 1 + .../_experimental/out/api-keys/index.txt | 33 ++ ...KGRhc2hib2FyZCk.api-reference.__PAGE__.txt | 9 + .../__next.!KGRhc2hib2FyZCk.api-reference.txt | 5 + .../api-reference/__next.!KGRhc2hib2FyZCk.txt | 7 + .../out/api-reference/__next._full.txt | 33 ++ .../out/api-reference/__next._head.txt | 6 + .../out/api-reference/__next._index.txt | 9 + .../out/api-reference/__next._tree.txt | 4 + .../out/api-reference/index.html | 1 + .../_experimental/out/api-reference/index.txt | 33 ++ .../out/assets/audit-logs-preview.png | Bin 0 -> 240654 bytes .../out/assets/logos/a2a_agent.png | Bin 0 -> 72568 bytes .../_experimental/out/assets/logos/ai21.svg | 1 + .../out/assets/logos/aim_logo.jpeg | Bin 0 -> 3754 bytes .../out/assets/logos/aim_security.jpeg | Bin 0 -> 3754 bytes .../out/assets/logos/aiml_api.svg | 1 + .../_experimental/out/assets/logos/akto.svg | 10 + .../out/assets/logos/anthropic.svg | 5 + .../_experimental/out/assets/logos/aporia.png | Bin 0 -> 2472 bytes .../_experimental/out/assets/logos/arize.png | Bin 0 -> 14249 bytes .../out/assets/logos/assemblyai_small.png | Bin 0 -> 414 bytes .../_experimental/out/assets/logos/aws.svg | 34 ++ .../out/assets/logos/azure_ai_foundry.png | Bin 0 -> 26316 bytes .../out/assets/logos/baseten.svg | 1 + .../out/assets/logos/bedrock.svg | 1 + .../out/assets/logos/braintrust.png | Bin 0 -> 10428 bytes .../out/assets/logos/cato_networks.svg | 4 + .../out/assets/logos/cerebras.svg | 89 ++++ .../_experimental/out/assets/logos/cisco.png | Bin 0 -> 1964 bytes .../out/assets/logos/cloudflare.svg | 1 + .../_experimental/out/assets/logos/cohere.svg | 1 + .../out/assets/logos/cometapi.svg | 1 + .../_experimental/out/assets/logos/cursor.svg | 1 + .../out/assets/logos/databricks.svg | 1 + .../out/assets/logos/datadog.png | Bin 0 -> 5213 bytes .../out/assets/logos/dataforseo.png | Bin 0 -> 139307 bytes .../out/assets/logos/deepgram.png | Bin 0 -> 1224 bytes .../out/assets/logos/deepinfra.png | Bin 0 -> 7014 bytes .../out/assets/logos/deepseek.svg | 25 ++ .../out/assets/logos/elevenlabs.png | Bin 0 -> 35410 bytes .../out/assets/logos/enkrypt_ai.avif | Bin 0 -> 2908 bytes .../_experimental/out/assets/logos/exa_ai.png | Bin 0 -> 40751 bytes .../_experimental/out/assets/logos/fal_ai.jpg | Bin 0 -> 8254 bytes .../out/assets/logos/featherless.svg | 1 + .../_experimental/out/assets/logos/figma.svg | 7 + .../out/assets/logos/fireworks.svg | 1 + .../out/assets/logos/friendli.svg | 1 + .../out/assets/logos/galileo.ico | Bin 0 -> 9714 bytes .../_experimental/out/assets/logos/github.svg | 1 + .../out/assets/logos/github_copilot.svg | 1 + .../_experimental/out/assets/logos/gitlab.svg | 8 + .../_experimental/out/assets/logos/gmail.svg | 3 + .../_experimental/out/assets/logos/google.svg | 2 + .../out/assets/logos/google_drive.svg | 6 + .../out/assets/logos/google_pse.png | Bin 0 -> 2392 bytes .../_experimental/out/assets/logos/groq.svg | 3 + .../out/assets/logos/guardrails_ai.jpeg | Bin 0 -> 9041 bytes .../out/assets/logos/hubspot.svg | 3 + .../out/assets/logos/huggingface.svg | 1 + .../out/assets/logos/hyperbolic.svg | 1 + .../out/assets/logos/infinity.png | Bin 0 -> 7377 bytes .../out/assets/logos/javelin.png | Bin 0 -> 1956 bytes .../_experimental/out/assets/logos/jina.png | Bin 0 -> 2758 bytes .../_experimental/out/assets/logos/jira.svg | 15 + .../_experimental/out/assets/logos/lago.svg | 11 + .../out/assets/logos/lakeraai.jpeg | Bin 0 -> 2617 bytes .../_experimental/out/assets/logos/lambda.svg | 1 + .../out/assets/logos/langflow.svg | 5 + .../out/assets/logos/langfuse.png | Bin 0 -> 10860 bytes .../out/assets/logos/langfuse.svg | 1 + .../out/assets/logos/langgraph.png | Bin 0 -> 5495 bytes .../out/assets/logos/langsmith.png | Bin 0 -> 5495 bytes .../_experimental/out/assets/logos/lasso.png | Bin 0 -> 4115 bytes .../_experimental/out/assets/logos/linear.svg | 3 + .../out/assets/logos/litellm.jpg | Bin 0 -> 24694 bytes .../out/assets/logos/litellm_logo.jpg | Bin 0 -> 9222 bytes .../out/assets/logos/llm_guard.png | Bin 0 -> 48665 bytes .../out/assets/logos/lmstudio.svg | 1 + .../out/assets/logos/mcp_logo.png | Bin 0 -> 3902 bytes .../out/assets/logos/meta_llama.svg | 1 + .../out/assets/logos/microsoft_azure.svg | 72 +++ .../_experimental/out/assets/logos/milvus.svg | 1 + .../out/assets/logos/minimax.svg | 1 + .../out/assets/logos/mistral.svg | 1 + .../out/assets/logos/moonshot.svg | 1 + .../_experimental/out/assets/logos/morph.svg | 1 + .../_experimental/out/assets/logos/nebius.svg | 1 + .../out/assets/logos/newrelic.png | Bin 0 -> 862 bytes .../out/assets/logos/noma_security.png | Bin 0 -> 3163 bytes .../_experimental/out/assets/logos/notion.svg | 3 + .../_experimental/out/assets/logos/novita.svg | 1 + .../out/assets/logos/nvidia_nim.svg | 1 + .../out/assets/logos/nvidia_triton.png | Bin 0 -> 5704 bytes .../_experimental/out/assets/logos/ollama.svg | 7 + .../out/assets/logos/openai_small.svg | 5 + .../out/assets/logos/openmeter.png | Bin 0 -> 1114 bytes .../out/assets/logos/openrouter.svg | 39 ++ .../_experimental/out/assets/logos/oracle.svg | 1 + .../_experimental/out/assets/logos/otel.png | Bin 0 -> 1949 bytes .../out/assets/logos/palo_alto_networks.jpeg | Bin 0 -> 5642 bytes .../_experimental/out/assets/logos/pangea.png | Bin 0 -> 31102 bytes .../out/assets/logos/parallel_ai.png | Bin 0 -> 2191 bytes .../out/assets/logos/perplexity-ai.svg | 16 + .../out/assets/logos/perplexity.png | Bin 0 -> 9615 bytes .../out/assets/logos/pillar.jpeg | Bin 0 -> 2554 bytes .../out/assets/logos/postgresql.svg | 1 + .../out/assets/logos/presidio.png | Bin 0 -> 62523 bytes .../out/assets/logos/prompt_security.png | Bin 0 -> 5695 bytes .../out/assets/logos/promptguard.svg | 95 ++++ .../out/assets/logos/pydantic.svg | 5 + .../_experimental/out/assets/logos/qohash.jpg | Bin 0 -> 11581 bytes .../_experimental/out/assets/logos/qwen.png | Bin 0 -> 49453 bytes .../out/assets/logos/recraft.svg | 1 + .../out/assets/logos/repelloai.png | Bin 0 -> 14323 bytes .../out/assets/logos/replicate.svg | 1 + .../_experimental/out/assets/logos/runway.png | Bin 0 -> 5165 bytes .../out/assets/logos/s3_vector.png | Bin 0 -> 191076 bytes .../out/assets/logos/salesforce.svg | 3 + .../out/assets/logos/sambanova.svg | 42 ++ .../_experimental/out/assets/logos/sap.png | Bin 0 -> 200176 bytes .../out/assets/logos/search1api.png | Bin 0 -> 1549 bytes .../out/assets/logos/secret_detect.png | Bin 0 -> 15590 bytes .../_experimental/out/assets/logos/sentry.svg | 3 + .../out/assets/logos/shopify.svg | 4 + .../_experimental/out/assets/logos/slack.svg | 6 + .../out/assets/logos/snowflake.svg | 9 + .../_experimental/out/assets/logos/soniox.svg | 1 + .../_experimental/out/assets/logos/stripe.svg | 3 + .../_experimental/out/assets/logos/tavily.png | Bin 0 -> 30986 bytes .../out/assets/logos/togetherai.svg | 14 + .../_experimental/out/assets/logos/topaz.svg | 1 + .../_experimental/out/assets/logos/twilio.svg | 3 + .../_experimental/out/assets/logos/v0.svg | 1 + .../_experimental/out/assets/logos/vercel.svg | 1 + .../_experimental/out/assets/logos/vllm.png | Bin 0 -> 1167 bytes .../out/assets/logos/volcengine.png | Bin 0 -> 36944 bytes .../out/assets/logos/voyage.webp | Bin 0 -> 2896 bytes .../out/assets/logos/watsonx.svg | 1 + .../_experimental/out/assets/logos/xai.svg | 28 ++ .../out/assets/logos/xecguard.svg | 4 + .../out/assets/logos/xinference.svg | 1 + .../_experimental/out/assets/logos/zapier.svg | 3 + .../out/assets/logos/zscaler.svg | 5 + ...next.!KGRhc2hib2FyZCk.budgets.__PAGE__.txt | 9 + .../__next.!KGRhc2hib2FyZCk.budgets.txt | 5 + .../out/budgets/__next.!KGRhc2hib2FyZCk.txt | 7 + .../out/budgets/__next._full.txt | 33 ++ .../out/budgets/__next._head.txt | 6 + .../out/budgets/__next._index.txt | 9 + .../out/budgets/__next._tree.txt | 4 + .../_experimental/out/budgets/index.html | 1 + .../proxy/_experimental/out/budgets/index.txt | 33 ++ ...next.!KGRhc2hib2FyZCk.caching.__PAGE__.txt | 9 + .../__next.!KGRhc2hib2FyZCk.caching.txt | 5 + .../out/caching/__next.!KGRhc2hib2FyZCk.txt | 7 + .../out/caching/__next._full.txt | 33 ++ .../out/caching/__next._head.txt | 6 + .../out/caching/__next._index.txt | 9 + .../out/caching/__next._tree.txt | 4 + .../_experimental/out/caching/index.html | 1 + .../proxy/_experimental/out/caching/index.txt | 33 ++ ...KGRhc2hib2FyZCk.cost-tracking.__PAGE__.txt | 9 + .../__next.!KGRhc2hib2FyZCk.cost-tracking.txt | 5 + .../cost-tracking/__next.!KGRhc2hib2FyZCk.txt | 7 + .../out/cost-tracking/__next._full.txt | 33 ++ .../out/cost-tracking/__next._head.txt | 6 + .../out/cost-tracking/__next._index.txt | 9 + .../out/cost-tracking/__next._tree.txt | 4 + .../out/cost-tracking/index.html | 1 + .../_experimental/out/cost-tracking/index.txt | 33 ++ litellm/proxy/_experimental/out/favicon.ico | Bin 0 -> 6387 bytes ...2hib2FyZCk.guardrails-monitor.__PAGE__.txt | 10 + ...xt.!KGRhc2hib2FyZCk.guardrails-monitor.txt | 5 + .../__next.!KGRhc2hib2FyZCk.txt | 7 + .../out/guardrails-monitor/__next._full.txt | 34 ++ .../out/guardrails-monitor/__next._head.txt | 6 + .../out/guardrails-monitor/__next._index.txt | 9 + .../out/guardrails-monitor/__next._tree.txt | 5 + .../out/guardrails-monitor/index.html | 1 + .../out/guardrails-monitor/index.txt | 34 ++ ...t.!KGRhc2hib2FyZCk.guardrails.__PAGE__.txt | 9 + .../__next.!KGRhc2hib2FyZCk.guardrails.txt | 5 + .../guardrails/__next.!KGRhc2hib2FyZCk.txt | 7 + .../out/guardrails/__next._full.txt | 33 ++ .../out/guardrails/__next._head.txt | 6 + .../out/guardrails/__next._index.txt | 9 + .../out/guardrails/__next._tree.txt | 4 + .../_experimental/out/guardrails/index.html | 1 + .../_experimental/out/guardrails/index.txt | 33 ++ litellm/proxy/_experimental/out/index.html | 1 + litellm/proxy/_experimental/out/index.txt | 30 ++ ...2hib2FyZCk.logging-and-alerts.__PAGE__.txt | 9 + ...xt.!KGRhc2hib2FyZCk.logging-and-alerts.txt | 5 + .../__next.!KGRhc2hib2FyZCk.txt | 7 + .../out/logging-and-alerts/__next._full.txt | 33 ++ .../out/logging-and-alerts/__next._head.txt | 6 + .../out/logging-and-alerts/__next._index.txt | 9 + .../out/logging-and-alerts/__next._tree.txt | 4 + .../out/logging-and-alerts/index.html | 1 + .../out/logging-and-alerts/index.txt | 33 ++ .../_experimental/out/login/__next._full.txt | 25 ++ .../_experimental/out/login/__next._head.txt | 6 + .../_experimental/out/login/__next._index.txt | 9 + .../_experimental/out/login/__next._tree.txt | 4 + .../out/login/__next.login.__PAGE__.txt | 9 + .../_experimental/out/login/__next.login.txt | 5 + .../proxy/_experimental/out/login/index.html | 1 + .../proxy/_experimental/out/login/index.txt | 25 ++ .../__next.!KGRhc2hib2FyZCk.logs.__PAGE__.txt | 10 + .../out/logs/__next.!KGRhc2hib2FyZCk.logs.txt | 5 + .../out/logs/__next.!KGRhc2hib2FyZCk.txt | 7 + .../_experimental/out/logs/__next._full.txt | 34 ++ .../_experimental/out/logs/__next._head.txt | 6 + .../_experimental/out/logs/__next._index.txt | 9 + .../_experimental/out/logs/__next._tree.txt | 5 + .../proxy/_experimental/out/logs/index.html | 1 + .../proxy/_experimental/out/logs/index.txt | 34 ++ ....!KGRhc2hib2FyZCk.mcp-servers.__PAGE__.txt | 9 + .../__next.!KGRhc2hib2FyZCk.mcp-servers.txt | 5 + .../mcp-servers/__next.!KGRhc2hib2FyZCk.txt | 7 + .../out/mcp-servers/__next._full.txt | 33 ++ .../out/mcp-servers/__next._head.txt | 6 + .../out/mcp-servers/__next._index.txt | 9 + .../out/mcp-servers/__next._tree.txt | 4 + .../_experimental/out/mcp-servers/index.html | 1 + .../_experimental/out/mcp-servers/index.txt | 33 ++ .../out/mcp/oauth/callback/__next._full.txt | 25 ++ .../out/mcp/oauth/callback/__next._head.txt | 6 + .../out/mcp/oauth/callback/__next._index.txt | 9 + .../out/mcp/oauth/callback/__next._tree.txt | 4 + .../__next.mcp.oauth.callback.__PAGE__.txt | 9 + .../callback/__next.mcp.oauth.callback.txt | 5 + .../mcp/oauth/callback/__next.mcp.oauth.txt | 5 + .../out/mcp/oauth/callback/__next.mcp.txt | 5 + .../out/mcp/oauth/callback/index.html | 1 + .../out/mcp/oauth/callback/index.txt | 25 ++ ..._next.!KGRhc2hib2FyZCk.memory.__PAGE__.txt | 9 + .../memory/__next.!KGRhc2hib2FyZCk.memory.txt | 5 + .../out/memory/__next.!KGRhc2hib2FyZCk.txt | 7 + .../_experimental/out/memory/__next._full.txt | 33 ++ .../_experimental/out/memory/__next._head.txt | 6 + .../out/memory/__next._index.txt | 9 + .../_experimental/out/memory/__next._tree.txt | 4 + .../proxy/_experimental/out/memory/index.html | 1 + .../proxy/_experimental/out/memory/index.txt | 33 ++ ...Rhc2hib2FyZCk.model-hub-table.__PAGE__.txt | 9 + ..._next.!KGRhc2hib2FyZCk.model-hub-table.txt | 5 + .../__next.!KGRhc2hib2FyZCk.txt | 7 + .../out/model-hub-table/__next._full.txt | 33 ++ .../out/model-hub-table/__next._head.txt | 6 + .../out/model-hub-table/__next._index.txt | 9 + .../out/model-hub-table/__next._tree.txt | 4 + .../out/model-hub-table/index.html | 1 + .../out/model-hub-table/index.txt | 33 ++ .../out/model_hub/__next._full.txt | 28 ++ .../out/model_hub/__next._head.txt | 6 + .../out/model_hub/__next._index.txt | 9 + .../out/model_hub/__next._tree.txt | 4 + .../model_hub/__next.model_hub.__PAGE__.txt | 9 + .../out/model_hub/__next.model_hub.txt | 5 + .../_experimental/out/model_hub/index.html | 1 + .../_experimental/out/model_hub/index.txt | 28 ++ .../out/model_hub_table/__next._full.txt | 32 ++ .../out/model_hub_table/__next._head.txt | 6 + .../out/model_hub_table/__next._index.txt | 9 + .../out/model_hub_table/__next._tree.txt | 4 + .../__next.model_hub_table.__PAGE__.txt | 9 + .../__next.model_hub_table.txt | 5 + .../out/model_hub_table/index.html | 1 + .../out/model_hub_table/index.txt | 32 ++ ...ib2FyZCk.models-and-endpoints.__PAGE__.txt | 9 + ....!KGRhc2hib2FyZCk.models-and-endpoints.txt | 5 + .../__next.!KGRhc2hib2FyZCk.txt | 7 + .../out/models-and-endpoints/__next._full.txt | 33 ++ .../out/models-and-endpoints/__next._head.txt | 6 + .../models-and-endpoints/__next._index.txt | 9 + .../out/models-and-endpoints/__next._tree.txt | 4 + .../out/models-and-endpoints/index.html | 1 + .../out/models-and-endpoints/index.txt | 33 ++ litellm/proxy/_experimental/out/next.svg | 1 + ...xt.!KGRhc2hib2FyZCk.old-usage.__PAGE__.txt | 9 + .../__next.!KGRhc2hib2FyZCk.old-usage.txt | 5 + .../out/old-usage/__next.!KGRhc2hib2FyZCk.txt | 7 + .../out/old-usage/__next._full.txt | 33 ++ .../out/old-usage/__next._head.txt | 6 + .../out/old-usage/__next._index.txt | 9 + .../out/old-usage/__next._tree.txt | 4 + .../_experimental/out/old-usage/index.html | 1 + .../_experimental/out/old-usage/index.txt | 33 ++ .../out/onboarding/__next._full.txt | 25 ++ .../out/onboarding/__next._head.txt | 6 + .../out/onboarding/__next._index.txt | 9 + .../out/onboarding/__next._tree.txt | 4 + .../onboarding/__next.onboarding.__PAGE__.txt | 9 + .../out/onboarding/__next.onboarding.txt | 5 + .../_experimental/out/onboarding/index.html | 1 + .../_experimental/out/onboarding/index.txt | 25 ++ ...KGRhc2hib2FyZCk.organizations.__PAGE__.txt | 9 + .../__next.!KGRhc2hib2FyZCk.organizations.txt | 5 + .../organizations/__next.!KGRhc2hib2FyZCk.txt | 7 + .../out/organizations/__next._full.txt | 33 ++ .../out/organizations/__next._head.txt | 6 + .../out/organizations/__next._index.txt | 9 + .../out/organizations/__next._tree.txt | 4 + .../out/organizations/index.html | 1 + .../_experimental/out/organizations/index.txt | 33 ++ ...t.!KGRhc2hib2FyZCk.playground.__PAGE__.txt | 9 + .../__next.!KGRhc2hib2FyZCk.playground.txt | 5 + .../playground/__next.!KGRhc2hib2FyZCk.txt | 7 + .../out/playground/__next._full.txt | 33 ++ .../out/playground/__next._head.txt | 6 + .../out/playground/__next._index.txt | 9 + .../out/playground/__next._tree.txt | 4 + .../_experimental/out/playground/index.html | 1 + .../_experimental/out/playground/index.txt | 33 ++ ...ext.!KGRhc2hib2FyZCk.policies.__PAGE__.txt | 9 + .../__next.!KGRhc2hib2FyZCk.policies.txt | 5 + .../out/policies/__next.!KGRhc2hib2FyZCk.txt | 7 + .../out/policies/__next._full.txt | 33 ++ .../out/policies/__next._head.txt | 6 + .../out/policies/__next._index.txt | 9 + .../out/policies/__next._tree.txt | 4 + .../_experimental/out/policies/index.html | 1 + .../_experimental/out/policies/index.txt | 33 ++ ...ext.!KGRhc2hib2FyZCk.projects.__PAGE__.txt | 9 + .../__next.!KGRhc2hib2FyZCk.projects.txt | 5 + .../out/projects/__next.!KGRhc2hib2FyZCk.txt | 7 + .../out/projects/__next._full.txt | 33 ++ .../out/projects/__next._head.txt | 6 + .../out/projects/__next._index.txt | 9 + .../out/projects/__next._tree.txt | 4 + .../_experimental/out/projects/index.html | 1 + .../_experimental/out/projects/index.txt | 33 ++ ...next.!KGRhc2hib2FyZCk.prompts.__PAGE__.txt | 9 + .../__next.!KGRhc2hib2FyZCk.prompts.txt | 5 + .../out/prompts/__next.!KGRhc2hib2FyZCk.txt | 7 + .../out/prompts/__next._full.txt | 33 ++ .../out/prompts/__next._head.txt | 6 + .../out/prompts/__next._index.txt | 9 + .../out/prompts/__next._tree.txt | 4 + .../_experimental/out/prompts/index.html | 1 + .../proxy/_experimental/out/prompts/index.txt | 33 ++ ...Rhc2hib2FyZCk.router-settings.__PAGE__.txt | 9 + ..._next.!KGRhc2hib2FyZCk.router-settings.txt | 5 + .../__next.!KGRhc2hib2FyZCk.txt | 7 + .../out/router-settings/__next._full.txt | 33 ++ .../out/router-settings/__next._head.txt | 6 + .../out/router-settings/__next._index.txt | 9 + .../out/router-settings/__next._tree.txt | 4 + .../out/router-settings/index.html | 1 + .../out/router-settings/index.txt | 33 ++ ...!KGRhc2hib2FyZCk.search-tools.__PAGE__.txt | 9 + .../__next.!KGRhc2hib2FyZCk.search-tools.txt | 5 + .../search-tools/__next.!KGRhc2hib2FyZCk.txt | 7 + .../out/search-tools/__next._full.txt | 33 ++ .../out/search-tools/__next._head.txt | 6 + .../out/search-tools/__next._index.txt | 9 + .../out/search-tools/__next._tree.txt | 4 + .../_experimental/out/search-tools/index.html | 1 + .../_experimental/out/search-tools/index.txt | 33 ++ ..._next.!KGRhc2hib2FyZCk.skills.__PAGE__.txt | 9 + .../skills/__next.!KGRhc2hib2FyZCk.skills.txt | 5 + .../out/skills/__next.!KGRhc2hib2FyZCk.txt | 7 + .../_experimental/out/skills/__next._full.txt | 33 ++ .../_experimental/out/skills/__next._head.txt | 6 + .../out/skills/__next._index.txt | 9 + .../_experimental/out/skills/__next._tree.txt | 4 + .../proxy/_experimental/out/skills/index.html | 1 + .../proxy/_experimental/out/skills/index.txt | 33 ++ ...GRhc2hib2FyZCk.tag-management.__PAGE__.txt | 9 + ...__next.!KGRhc2hib2FyZCk.tag-management.txt | 5 + .../__next.!KGRhc2hib2FyZCk.txt | 7 + .../out/tag-management/__next._full.txt | 33 ++ .../out/tag-management/__next._head.txt | 6 + .../out/tag-management/__next._index.txt | 9 + .../out/tag-management/__next._tree.txt | 4 + .../out/tag-management/index.html | 1 + .../out/tag-management/index.txt | 33 ++ ...__next.!KGRhc2hib2FyZCk.teams.__PAGE__.txt | 9 + .../teams/__next.!KGRhc2hib2FyZCk.teams.txt | 5 + .../out/teams/__next.!KGRhc2hib2FyZCk.txt | 7 + .../_experimental/out/teams/__next._full.txt | 33 ++ .../_experimental/out/teams/__next._head.txt | 6 + .../_experimental/out/teams/__next._index.txt | 9 + .../_experimental/out/teams/__next._tree.txt | 4 + .../proxy/_experimental/out/teams/index.html | 1 + .../proxy/_experimental/out/teams/index.txt | 33 ++ ...KGRhc2hib2FyZCk.tool-policies.__PAGE__.txt | 10 + .../__next.!KGRhc2hib2FyZCk.tool-policies.txt | 5 + .../tool-policies/__next.!KGRhc2hib2FyZCk.txt | 7 + .../out/tool-policies/__next._full.txt | 34 ++ .../out/tool-policies/__next._head.txt | 6 + .../out/tool-policies/__next._index.txt | 9 + .../out/tool-policies/__next._tree.txt | 5 + .../out/tool-policies/index.html | 1 + .../_experimental/out/tool-policies/index.txt | 34 ++ ...c2hib2FyZCk.transform-request.__PAGE__.txt | 9 + ...ext.!KGRhc2hib2FyZCk.transform-request.txt | 5 + .../__next.!KGRhc2hib2FyZCk.txt | 7 + .../out/transform-request/__next._full.txt | 33 ++ .../out/transform-request/__next._head.txt | 6 + .../out/transform-request/__next._index.txt | 9 + .../out/transform-request/__next._tree.txt | 4 + .../out/transform-request/index.html | 1 + .../out/transform-request/index.txt | 33 ++ .../out/ui-theme/__next.!KGRhc2hib2FyZCk.txt | 7 + ...ext.!KGRhc2hib2FyZCk.ui-theme.__PAGE__.txt | 9 + .../__next.!KGRhc2hib2FyZCk.ui-theme.txt | 5 + .../out/ui-theme/__next._full.txt | 33 ++ .../out/ui-theme/__next._head.txt | 6 + .../out/ui-theme/__next._index.txt | 9 + .../out/ui-theme/__next._tree.txt | 4 + .../_experimental/out/ui-theme/index.html | 1 + .../_experimental/out/ui-theme/index.txt | 33 ++ .../out/usage/__next.!KGRhc2hib2FyZCk.txt | 7 + ...__next.!KGRhc2hib2FyZCk.usage.__PAGE__.txt | 9 + .../usage/__next.!KGRhc2hib2FyZCk.usage.txt | 5 + .../_experimental/out/usage/__next._full.txt | 33 ++ .../_experimental/out/usage/__next._head.txt | 6 + .../_experimental/out/usage/__next._index.txt | 9 + .../_experimental/out/usage/__next._tree.txt | 4 + .../proxy/_experimental/out/usage/index.html | 1 + .../proxy/_experimental/out/usage/index.txt | 33 ++ .../out/users/__next.!KGRhc2hib2FyZCk.txt | 7 + ...__next.!KGRhc2hib2FyZCk.users.__PAGE__.txt | 9 + .../users/__next.!KGRhc2hib2FyZCk.users.txt | 5 + .../_experimental/out/users/__next._full.txt | 33 ++ .../_experimental/out/users/__next._head.txt | 6 + .../_experimental/out/users/__next._index.txt | 9 + .../_experimental/out/users/__next._tree.txt | 4 + .../proxy/_experimental/out/users/index.html | 1 + .../proxy/_experimental/out/users/index.txt | 33 ++ .../vector-stores/__next.!KGRhc2hib2FyZCk.txt | 7 + ...KGRhc2hib2FyZCk.vector-stores.__PAGE__.txt | 9 + .../__next.!KGRhc2hib2FyZCk.vector-stores.txt | 5 + .../out/vector-stores/__next._full.txt | 33 ++ .../out/vector-stores/__next._head.txt | 6 + .../out/vector-stores/__next._index.txt | 9 + .../out/vector-stores/__next._tree.txt | 4 + .../out/vector-stores/index.html | 1 + .../_experimental/out/vector-stores/index.txt | 33 ++ litellm/proxy/_experimental/out/vercel.svg | 1 + .../out/workflows/__next.!KGRhc2hib2FyZCk.txt | 7 + ...xt.!KGRhc2hib2FyZCk.workflows.__PAGE__.txt | 9 + .../__next.!KGRhc2hib2FyZCk.workflows.txt | 5 + .../out/workflows/__next._full.txt | 33 ++ .../out/workflows/__next._head.txt | 6 + .../out/workflows/__next._index.txt | 9 + .../out/workflows/__next._tree.txt | 4 + .../_experimental/out/workflows/index.html | 1 + .../_experimental/out/workflows/index.txt | 33 ++ litellm/proxy/_new_new_secret_config.yaml | 14 + litellm/proxy/_new_secret_config.yaml | 83 ++++ litellm/proxy/_super_secret_config.yaml | 110 +++++ litellm/proxy/proxy_server.py | 61 ++- .../test-results/.last-run.json | 4 + tests/test_litellm/proxy/test_proxy_server.py | 14 +- ui/litellm-dashboard/build_ui.sh | 3 +- ui/litellm-dashboard/build_ui_custom_path.sh | 3 +- 709 files changed, 8998 insertions(+), 50 deletions(-) create mode 100644 litellm/proxy/_experimental/out/404.html create mode 100644 litellm/proxy/_experimental/out/404/index.html create mode 100644 litellm/proxy/_experimental/out/__next.!KGRhc2hib2FyZCk.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/__next.!KGRhc2hib2FyZCk.txt create mode 100644 litellm/proxy/_experimental/out/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/_next/static/5rDiFx0t_mOGYmV_8kSkw/_buildManifest.js create mode 100644 litellm/proxy/_experimental/out/_next/static/5rDiFx0t_mOGYmV_8kSkw/_clientMiddlewareManifest.js create mode 100644 litellm/proxy/_experimental/out/_next/static/5rDiFx0t_mOGYmV_8kSkw/_ssgManifest.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0-3i_.uof35pm.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0-4tg9f~_a3b~.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0-85n.4jrc2vv.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0-dhh1_d1.b1u.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0-f.2po-pctaa.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0-ih8xcz_89nt.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0.4.bbjx7y007.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0.bx44y-6~tug.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0.yiw37jc_bvi.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/00cy3g~l27g1y.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/00jwo~_zp.35~.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/00p.gft-l.6p..js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/00pl5r0.xdcua.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/00q4mtjboprhm.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/011mgw.-67gs_.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/01_xjyxcb1uco.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/01xm1xt.gmrff.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/01y._o853f7le.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/01~uswbzv7_90.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/022.sz94ycw4x.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/02813b2b-kz98.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/02c1-r_khzb89.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/02ihc5xweq16v.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/02nrwvikmd-wf.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/02oicwo.~e~ak.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/036wlkuzplhfz.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/038lmn5.g6myc.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/03_wvlr03g~35.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/03fia.h6j.gpu.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/03iznh0~x-p5x.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/03l9yp-0vdrvg.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/03rcuw-pknh--.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/03~yq9q893hmn.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/043q3g5-5-aju.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/04476udqypzuu.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/04amwk-x_vjxu.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/04jvxoid~vpxj.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/04p5iour3skhn.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/04~mux1g2xqfl.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/05.uhnqp00zd5.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/058o-fyv9lb_l.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/05btv.l5gro_..js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/05qmwjqau64bz.css create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/05t1k89l9tc3s.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/05w6e8.ake4_v.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/05wzckn7dnk9_.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/05z02g9s~8km0.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/066hp9.940823.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0689o862~x~pg.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/06x5y8ia4k1mc.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/07.fwfv-sinb5.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/07_~yky8gc9_m.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/08b3bdf-s.-y4.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/08is8lfgypp_2.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/09dh.hm0vr~61.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/09n64dqzn.le~.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0_cwbuh_om4s9.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0_rk9sxkapt-r.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0_tak0mb5m-3k.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0_y-b9_d9dsuv.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0aj3r46j-.qsy.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0ajdq5~-z4-0o.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0au3mg4n33g_o.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0b5g~_decuer~.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0bqafy~83g2md.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0byy7z~x~srwc.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0c2apcdkbqq0o.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0c4pfjjue0uc-.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0ceh~7zrbxj.y.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0d2qt-f_paso0.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0ecsfnbwne0sn.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0el08tticy_20.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0em0654rb513m.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0gj2~qks1xrx8.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0gtegjaljim2a.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0h274dbe8lloe.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0hsqxu.xbf.l5.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0hzdsr8t0ksq..js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0hzj3mfqun9q~.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0i77.0u.82o9u.css create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0ip1d_6ew-zr2.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0ivj_wax-joap.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0j2~0jseuoube.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0jaa-io9cz430.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0jdm7x5soayfw.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0jib1e4hgitwz.css create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0jr8wo_7ak~7n.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0jzxuesytdzt0.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0k3aqiu733i3f.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0kqhn69~lkflo.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0kr3_6r.1wa_9.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0l7em-5kjv49e.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0lb0p7rh5znu_.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0ldurpg4iqx04.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0lg.6rbfsd-l9.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0lku60vnd9m1i.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0lstohw6r.qs..js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0m._ijxus~ryi.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0m.pilqkjqyg3.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0m5k-5fv1ya8x.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0m6zdocif1gl4.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0mb3erwqomzal.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0md97r_057_33.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0mh1wnrvmv_y7.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0mmrbksvmhp.1.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0mspdfvjqoti_.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0mzw3maijoev6.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0n.a~e5dwfnkn.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0n028f.v-dhms.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0ngre0.s4-ej6.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0nnx~7-7e5t~1.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0ogm.~yq5rjmw.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0ovmgshl9hfea.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0p.6bs58-_3lw.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0pd5zl~lciww9.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0pidya1qvuvx8.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0pu3ltw1cci2~.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0pwkd9r.mc_ee.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0pwrfxkkt~qfh.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0q2og72gex34u.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0q6~n4y84cejn.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0q9_qqi.nzx5l.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0ql_-8xthluga.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0r8_z31ow7vw9.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0rdv7_7_95b-1.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0rsh-mjgd1-1b.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0scfmfivwcppe.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0snrx6.._0zus.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0sx3mu2_l9g_y.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0sxgv7gc5lm3g.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0sylbcw3ha_ba.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0t4ig3ibz46ga.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0tbzoqict3-mi.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0teffxf7o_863.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0tgl~~_4hb1rp.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0u3_nka63vh6t.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0us_9w7qaihte.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0uu6lckpr0s15.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0uy6wzxw5oh5v.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0v1rxqc1hqmrl.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0vo11_94ear6l.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0w39dn9x3dp9g.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0whkizop7gd0~.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0x.73w57rn4ou.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0x6hmpiq7.b-x.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0ydd65iv6ffpl.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0ys10755n8os_.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0z4fh7pvzmoy8.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0zqdpz_rk5.wq.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0zrbitbm~0koh.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0~-ovi6c4wjt1.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0~0su3wi_7f6-.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0~tp1mbr_st8h.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/0~~y94vmu8z5d.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/101az3fsw7lje.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/10e9lx.nawttb.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/10jlu0mdcmzoi.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/10sdqywhhhn7i.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/10ybnll3qh-8s.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/114pbx0696lkh.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/11h.ntqd0jl3z.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/11kowzys1c43t.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/129bujhdmi9ce.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/13c74.fwk0wmq.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/13ln.k6r3lkv_.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/13s0v9siktndj.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/142-5lmjc6wc~.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/14566-_ogh-19.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/14_9gq.6yjjih.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/15.9ylrtxojbj.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/1560njdijg7fq.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/15auqattd2wzv.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/15hm8gokjq2uu.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/15rg~y4h.lcrl.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/15wqqcwhnlidr.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/16.oisvgwzo8s.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/169km.d7x9qr6.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/16qfko21~_dn~.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/1781p3yhsw7kp.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/17b18lwgc39xm.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/17cvpyw6fshd4.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/17e1s6gkzjh5f.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/17j1m89pizunk.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/17jd5l9o~hzf3.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/17n.qg70cy9.9.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/184o99uxk88c7.js create mode 100644 litellm/proxy/_experimental/out/_next/static/chunks/turbopack-0a~tzicx4wgrt.js create mode 100644 litellm/proxy/_experimental/out/_next/static/media/1bffadaabf893a1e-s.16ipb6fqu393i.woff2 create mode 100644 litellm/proxy/_experimental/out/_next/static/media/2bbe8d2671613f1f-s.067x_6k0k23tk.woff2 create mode 100644 litellm/proxy/_experimental/out/_next/static/media/2c55a0e60120577a-s.0bjc5tiuqdqro.woff2 create mode 100644 litellm/proxy/_experimental/out/_next/static/media/5476f68d60460930-s.0wxq9webf.ew4.woff2 create mode 100644 litellm/proxy/_experimental/out/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2 create mode 100644 litellm/proxy/_experimental/out/_next/static/media/9c72aa0f40e4eef8-s.0m6w47a4e5dy9.woff2 create mode 100644 litellm/proxy/_experimental/out/_next/static/media/ad66f9afd8947f86-s.11u06r12fd6v_.woff2 create mode 100644 litellm/proxy/_experimental/out/_next/static/media/favicon.0~dgapwhi~75y.ico create mode 100644 litellm/proxy/_experimental/out/_not-found/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/_not-found/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/_not-found/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/_not-found/__next._not-found.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/_not-found/__next._not-found.txt create mode 100644 litellm/proxy/_experimental/out/_not-found/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/_not-found/index.html create mode 100644 litellm/proxy/_experimental/out/_not-found/index.txt create mode 100644 litellm/proxy/_experimental/out/access-groups/__next.!KGRhc2hib2FyZCk.access-groups.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/access-groups/__next.!KGRhc2hib2FyZCk.access-groups.txt create mode 100644 litellm/proxy/_experimental/out/access-groups/__next.!KGRhc2hib2FyZCk.txt create mode 100644 litellm/proxy/_experimental/out/access-groups/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/access-groups/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/access-groups/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/access-groups/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/access-groups/index.html create mode 100644 litellm/proxy/_experimental/out/access-groups/index.txt create mode 100644 litellm/proxy/_experimental/out/admin-panel/__next.!KGRhc2hib2FyZCk.admin-panel.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/admin-panel/__next.!KGRhc2hib2FyZCk.admin-panel.txt create mode 100644 litellm/proxy/_experimental/out/admin-panel/__next.!KGRhc2hib2FyZCk.txt create mode 100644 litellm/proxy/_experimental/out/admin-panel/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/admin-panel/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/admin-panel/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/admin-panel/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/admin-panel/index.html create mode 100644 litellm/proxy/_experimental/out/admin-panel/index.txt create mode 100644 litellm/proxy/_experimental/out/agents/__next.!KGRhc2hib2FyZCk.agents.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/agents/__next.!KGRhc2hib2FyZCk.agents.txt create mode 100644 litellm/proxy/_experimental/out/agents/__next.!KGRhc2hib2FyZCk.txt create mode 100644 litellm/proxy/_experimental/out/agents/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/agents/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/agents/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/agents/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/agents/index.html create mode 100644 litellm/proxy/_experimental/out/agents/index.txt create mode 100644 litellm/proxy/_experimental/out/api-keys/__next.!KGRhc2hib2FyZCk.api-keys.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/api-keys/__next.!KGRhc2hib2FyZCk.api-keys.txt create mode 100644 litellm/proxy/_experimental/out/api-keys/__next.!KGRhc2hib2FyZCk.txt create mode 100644 litellm/proxy/_experimental/out/api-keys/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/api-keys/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/api-keys/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/api-keys/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/api-keys/index.html create mode 100644 litellm/proxy/_experimental/out/api-keys/index.txt create mode 100644 litellm/proxy/_experimental/out/api-reference/__next.!KGRhc2hib2FyZCk.api-reference.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/api-reference/__next.!KGRhc2hib2FyZCk.api-reference.txt create mode 100644 litellm/proxy/_experimental/out/api-reference/__next.!KGRhc2hib2FyZCk.txt create mode 100644 litellm/proxy/_experimental/out/api-reference/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/api-reference/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/api-reference/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/api-reference/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/api-reference/index.html create mode 100644 litellm/proxy/_experimental/out/api-reference/index.txt create mode 100644 litellm/proxy/_experimental/out/assets/audit-logs-preview.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/a2a_agent.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/ai21.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/aim_logo.jpeg create mode 100644 litellm/proxy/_experimental/out/assets/logos/aim_security.jpeg create mode 100644 litellm/proxy/_experimental/out/assets/logos/aiml_api.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/akto.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/anthropic.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/aporia.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/arize.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/assemblyai_small.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/aws.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/azure_ai_foundry.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/baseten.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/bedrock.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/braintrust.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/cato_networks.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/cerebras.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/cisco.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/cloudflare.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/cohere.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/cometapi.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/cursor.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/databricks.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/datadog.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/dataforseo.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/deepgram.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/deepinfra.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/deepseek.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/elevenlabs.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/enkrypt_ai.avif create mode 100644 litellm/proxy/_experimental/out/assets/logos/exa_ai.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/fal_ai.jpg create mode 100644 litellm/proxy/_experimental/out/assets/logos/featherless.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/figma.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/fireworks.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/friendli.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/galileo.ico create mode 100644 litellm/proxy/_experimental/out/assets/logos/github.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/github_copilot.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/gitlab.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/gmail.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/google.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/google_drive.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/google_pse.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/groq.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/guardrails_ai.jpeg create mode 100644 litellm/proxy/_experimental/out/assets/logos/hubspot.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/huggingface.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/hyperbolic.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/infinity.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/javelin.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/jina.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/jira.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/lago.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/lakeraai.jpeg create mode 100644 litellm/proxy/_experimental/out/assets/logos/lambda.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/langflow.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/langfuse.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/langfuse.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/langgraph.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/langsmith.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/lasso.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/linear.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/litellm.jpg create mode 100644 litellm/proxy/_experimental/out/assets/logos/litellm_logo.jpg create mode 100644 litellm/proxy/_experimental/out/assets/logos/llm_guard.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/lmstudio.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/mcp_logo.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/meta_llama.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/microsoft_azure.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/milvus.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/minimax.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/mistral.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/moonshot.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/morph.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/nebius.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/newrelic.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/noma_security.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/notion.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/novita.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/nvidia_nim.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/nvidia_triton.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/ollama.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/openai_small.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/openmeter.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/openrouter.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/oracle.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/otel.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/palo_alto_networks.jpeg create mode 100644 litellm/proxy/_experimental/out/assets/logos/pangea.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/parallel_ai.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/perplexity-ai.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/perplexity.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/pillar.jpeg create mode 100644 litellm/proxy/_experimental/out/assets/logos/postgresql.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/presidio.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/prompt_security.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/promptguard.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/pydantic.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/qohash.jpg create mode 100644 litellm/proxy/_experimental/out/assets/logos/qwen.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/recraft.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/repelloai.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/replicate.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/runway.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/s3_vector.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/salesforce.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/sambanova.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/sap.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/search1api.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/secret_detect.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/sentry.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/shopify.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/slack.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/snowflake.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/soniox.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/stripe.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/tavily.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/togetherai.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/topaz.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/twilio.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/v0.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/vercel.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/vllm.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/volcengine.png create mode 100644 litellm/proxy/_experimental/out/assets/logos/voyage.webp create mode 100644 litellm/proxy/_experimental/out/assets/logos/watsonx.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/xai.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/xecguard.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/xinference.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/zapier.svg create mode 100644 litellm/proxy/_experimental/out/assets/logos/zscaler.svg create mode 100644 litellm/proxy/_experimental/out/budgets/__next.!KGRhc2hib2FyZCk.budgets.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/budgets/__next.!KGRhc2hib2FyZCk.budgets.txt create mode 100644 litellm/proxy/_experimental/out/budgets/__next.!KGRhc2hib2FyZCk.txt create mode 100644 litellm/proxy/_experimental/out/budgets/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/budgets/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/budgets/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/budgets/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/budgets/index.html create mode 100644 litellm/proxy/_experimental/out/budgets/index.txt create mode 100644 litellm/proxy/_experimental/out/caching/__next.!KGRhc2hib2FyZCk.caching.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/caching/__next.!KGRhc2hib2FyZCk.caching.txt create mode 100644 litellm/proxy/_experimental/out/caching/__next.!KGRhc2hib2FyZCk.txt create mode 100644 litellm/proxy/_experimental/out/caching/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/caching/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/caching/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/caching/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/caching/index.html create mode 100644 litellm/proxy/_experimental/out/caching/index.txt create mode 100644 litellm/proxy/_experimental/out/cost-tracking/__next.!KGRhc2hib2FyZCk.cost-tracking.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/cost-tracking/__next.!KGRhc2hib2FyZCk.cost-tracking.txt create mode 100644 litellm/proxy/_experimental/out/cost-tracking/__next.!KGRhc2hib2FyZCk.txt create mode 100644 litellm/proxy/_experimental/out/cost-tracking/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/cost-tracking/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/cost-tracking/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/cost-tracking/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/cost-tracking/index.html create mode 100644 litellm/proxy/_experimental/out/cost-tracking/index.txt create mode 100644 litellm/proxy/_experimental/out/favicon.ico create mode 100644 litellm/proxy/_experimental/out/guardrails-monitor/__next.!KGRhc2hib2FyZCk.guardrails-monitor.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/guardrails-monitor/__next.!KGRhc2hib2FyZCk.guardrails-monitor.txt create mode 100644 litellm/proxy/_experimental/out/guardrails-monitor/__next.!KGRhc2hib2FyZCk.txt create mode 100644 litellm/proxy/_experimental/out/guardrails-monitor/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/guardrails-monitor/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/guardrails-monitor/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/guardrails-monitor/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/guardrails-monitor/index.html create mode 100644 litellm/proxy/_experimental/out/guardrails-monitor/index.txt create mode 100644 litellm/proxy/_experimental/out/guardrails/__next.!KGRhc2hib2FyZCk.guardrails.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/guardrails/__next.!KGRhc2hib2FyZCk.guardrails.txt create mode 100644 litellm/proxy/_experimental/out/guardrails/__next.!KGRhc2hib2FyZCk.txt create mode 100644 litellm/proxy/_experimental/out/guardrails/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/guardrails/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/guardrails/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/guardrails/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/guardrails/index.html create mode 100644 litellm/proxy/_experimental/out/guardrails/index.txt create mode 100644 litellm/proxy/_experimental/out/index.html create mode 100644 litellm/proxy/_experimental/out/index.txt create mode 100644 litellm/proxy/_experimental/out/logging-and-alerts/__next.!KGRhc2hib2FyZCk.logging-and-alerts.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/logging-and-alerts/__next.!KGRhc2hib2FyZCk.logging-and-alerts.txt create mode 100644 litellm/proxy/_experimental/out/logging-and-alerts/__next.!KGRhc2hib2FyZCk.txt create mode 100644 litellm/proxy/_experimental/out/logging-and-alerts/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/logging-and-alerts/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/logging-and-alerts/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/logging-and-alerts/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/logging-and-alerts/index.html create mode 100644 litellm/proxy/_experimental/out/logging-and-alerts/index.txt create mode 100644 litellm/proxy/_experimental/out/login/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/login/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/login/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/login/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/login/__next.login.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/login/__next.login.txt create mode 100644 litellm/proxy/_experimental/out/login/index.html create mode 100644 litellm/proxy/_experimental/out/login/index.txt create mode 100644 litellm/proxy/_experimental/out/logs/__next.!KGRhc2hib2FyZCk.logs.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/logs/__next.!KGRhc2hib2FyZCk.logs.txt create mode 100644 litellm/proxy/_experimental/out/logs/__next.!KGRhc2hib2FyZCk.txt create mode 100644 litellm/proxy/_experimental/out/logs/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/logs/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/logs/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/logs/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/logs/index.html create mode 100644 litellm/proxy/_experimental/out/logs/index.txt create mode 100644 litellm/proxy/_experimental/out/mcp-servers/__next.!KGRhc2hib2FyZCk.mcp-servers.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/mcp-servers/__next.!KGRhc2hib2FyZCk.mcp-servers.txt create mode 100644 litellm/proxy/_experimental/out/mcp-servers/__next.!KGRhc2hib2FyZCk.txt create mode 100644 litellm/proxy/_experimental/out/mcp-servers/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/mcp-servers/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/mcp-servers/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/mcp-servers/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/mcp-servers/index.html create mode 100644 litellm/proxy/_experimental/out/mcp-servers/index.txt create mode 100644 litellm/proxy/_experimental/out/mcp/oauth/callback/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/mcp/oauth/callback/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/mcp/oauth/callback/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/mcp/oauth/callback/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/mcp/oauth/callback/__next.mcp.oauth.callback.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/mcp/oauth/callback/__next.mcp.oauth.callback.txt create mode 100644 litellm/proxy/_experimental/out/mcp/oauth/callback/__next.mcp.oauth.txt create mode 100644 litellm/proxy/_experimental/out/mcp/oauth/callback/__next.mcp.txt create mode 100644 litellm/proxy/_experimental/out/mcp/oauth/callback/index.html create mode 100644 litellm/proxy/_experimental/out/mcp/oauth/callback/index.txt create mode 100644 litellm/proxy/_experimental/out/memory/__next.!KGRhc2hib2FyZCk.memory.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/memory/__next.!KGRhc2hib2FyZCk.memory.txt create mode 100644 litellm/proxy/_experimental/out/memory/__next.!KGRhc2hib2FyZCk.txt create mode 100644 litellm/proxy/_experimental/out/memory/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/memory/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/memory/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/memory/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/memory/index.html create mode 100644 litellm/proxy/_experimental/out/memory/index.txt create mode 100644 litellm/proxy/_experimental/out/model-hub-table/__next.!KGRhc2hib2FyZCk.model-hub-table.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/model-hub-table/__next.!KGRhc2hib2FyZCk.model-hub-table.txt create mode 100644 litellm/proxy/_experimental/out/model-hub-table/__next.!KGRhc2hib2FyZCk.txt create mode 100644 litellm/proxy/_experimental/out/model-hub-table/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/model-hub-table/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/model-hub-table/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/model-hub-table/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/model-hub-table/index.html create mode 100644 litellm/proxy/_experimental/out/model-hub-table/index.txt create mode 100644 litellm/proxy/_experimental/out/model_hub/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/model_hub/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/model_hub/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/model_hub/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/model_hub/__next.model_hub.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/model_hub/__next.model_hub.txt create mode 100644 litellm/proxy/_experimental/out/model_hub/index.html create mode 100644 litellm/proxy/_experimental/out/model_hub/index.txt create mode 100644 litellm/proxy/_experimental/out/model_hub_table/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/model_hub_table/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/model_hub_table/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/model_hub_table/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/model_hub_table/__next.model_hub_table.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/model_hub_table/__next.model_hub_table.txt create mode 100644 litellm/proxy/_experimental/out/model_hub_table/index.html create mode 100644 litellm/proxy/_experimental/out/model_hub_table/index.txt create mode 100644 litellm/proxy/_experimental/out/models-and-endpoints/__next.!KGRhc2hib2FyZCk.models-and-endpoints.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/models-and-endpoints/__next.!KGRhc2hib2FyZCk.models-and-endpoints.txt create mode 100644 litellm/proxy/_experimental/out/models-and-endpoints/__next.!KGRhc2hib2FyZCk.txt create mode 100644 litellm/proxy/_experimental/out/models-and-endpoints/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/models-and-endpoints/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/models-and-endpoints/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/models-and-endpoints/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/models-and-endpoints/index.html create mode 100644 litellm/proxy/_experimental/out/models-and-endpoints/index.txt create mode 100644 litellm/proxy/_experimental/out/next.svg create mode 100644 litellm/proxy/_experimental/out/old-usage/__next.!KGRhc2hib2FyZCk.old-usage.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/old-usage/__next.!KGRhc2hib2FyZCk.old-usage.txt create mode 100644 litellm/proxy/_experimental/out/old-usage/__next.!KGRhc2hib2FyZCk.txt create mode 100644 litellm/proxy/_experimental/out/old-usage/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/old-usage/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/old-usage/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/old-usage/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/old-usage/index.html create mode 100644 litellm/proxy/_experimental/out/old-usage/index.txt create mode 100644 litellm/proxy/_experimental/out/onboarding/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/onboarding/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/onboarding/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/onboarding/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/onboarding/__next.onboarding.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/onboarding/__next.onboarding.txt create mode 100644 litellm/proxy/_experimental/out/onboarding/index.html create mode 100644 litellm/proxy/_experimental/out/onboarding/index.txt create mode 100644 litellm/proxy/_experimental/out/organizations/__next.!KGRhc2hib2FyZCk.organizations.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/organizations/__next.!KGRhc2hib2FyZCk.organizations.txt create mode 100644 litellm/proxy/_experimental/out/organizations/__next.!KGRhc2hib2FyZCk.txt create mode 100644 litellm/proxy/_experimental/out/organizations/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/organizations/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/organizations/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/organizations/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/organizations/index.html create mode 100644 litellm/proxy/_experimental/out/organizations/index.txt create mode 100644 litellm/proxy/_experimental/out/playground/__next.!KGRhc2hib2FyZCk.playground.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/playground/__next.!KGRhc2hib2FyZCk.playground.txt create mode 100644 litellm/proxy/_experimental/out/playground/__next.!KGRhc2hib2FyZCk.txt create mode 100644 litellm/proxy/_experimental/out/playground/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/playground/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/playground/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/playground/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/playground/index.html create mode 100644 litellm/proxy/_experimental/out/playground/index.txt create mode 100644 litellm/proxy/_experimental/out/policies/__next.!KGRhc2hib2FyZCk.policies.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/policies/__next.!KGRhc2hib2FyZCk.policies.txt create mode 100644 litellm/proxy/_experimental/out/policies/__next.!KGRhc2hib2FyZCk.txt create mode 100644 litellm/proxy/_experimental/out/policies/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/policies/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/policies/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/policies/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/policies/index.html create mode 100644 litellm/proxy/_experimental/out/policies/index.txt create mode 100644 litellm/proxy/_experimental/out/projects/__next.!KGRhc2hib2FyZCk.projects.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/projects/__next.!KGRhc2hib2FyZCk.projects.txt create mode 100644 litellm/proxy/_experimental/out/projects/__next.!KGRhc2hib2FyZCk.txt create mode 100644 litellm/proxy/_experimental/out/projects/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/projects/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/projects/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/projects/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/projects/index.html create mode 100644 litellm/proxy/_experimental/out/projects/index.txt create mode 100644 litellm/proxy/_experimental/out/prompts/__next.!KGRhc2hib2FyZCk.prompts.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/prompts/__next.!KGRhc2hib2FyZCk.prompts.txt create mode 100644 litellm/proxy/_experimental/out/prompts/__next.!KGRhc2hib2FyZCk.txt create mode 100644 litellm/proxy/_experimental/out/prompts/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/prompts/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/prompts/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/prompts/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/prompts/index.html create mode 100644 litellm/proxy/_experimental/out/prompts/index.txt create mode 100644 litellm/proxy/_experimental/out/router-settings/__next.!KGRhc2hib2FyZCk.router-settings.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/router-settings/__next.!KGRhc2hib2FyZCk.router-settings.txt create mode 100644 litellm/proxy/_experimental/out/router-settings/__next.!KGRhc2hib2FyZCk.txt create mode 100644 litellm/proxy/_experimental/out/router-settings/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/router-settings/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/router-settings/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/router-settings/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/router-settings/index.html create mode 100644 litellm/proxy/_experimental/out/router-settings/index.txt create mode 100644 litellm/proxy/_experimental/out/search-tools/__next.!KGRhc2hib2FyZCk.search-tools.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/search-tools/__next.!KGRhc2hib2FyZCk.search-tools.txt create mode 100644 litellm/proxy/_experimental/out/search-tools/__next.!KGRhc2hib2FyZCk.txt create mode 100644 litellm/proxy/_experimental/out/search-tools/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/search-tools/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/search-tools/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/search-tools/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/search-tools/index.html create mode 100644 litellm/proxy/_experimental/out/search-tools/index.txt create mode 100644 litellm/proxy/_experimental/out/skills/__next.!KGRhc2hib2FyZCk.skills.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/skills/__next.!KGRhc2hib2FyZCk.skills.txt create mode 100644 litellm/proxy/_experimental/out/skills/__next.!KGRhc2hib2FyZCk.txt create mode 100644 litellm/proxy/_experimental/out/skills/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/skills/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/skills/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/skills/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/skills/index.html create mode 100644 litellm/proxy/_experimental/out/skills/index.txt create mode 100644 litellm/proxy/_experimental/out/tag-management/__next.!KGRhc2hib2FyZCk.tag-management.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/tag-management/__next.!KGRhc2hib2FyZCk.tag-management.txt create mode 100644 litellm/proxy/_experimental/out/tag-management/__next.!KGRhc2hib2FyZCk.txt create mode 100644 litellm/proxy/_experimental/out/tag-management/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/tag-management/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/tag-management/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/tag-management/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/tag-management/index.html create mode 100644 litellm/proxy/_experimental/out/tag-management/index.txt create mode 100644 litellm/proxy/_experimental/out/teams/__next.!KGRhc2hib2FyZCk.teams.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/teams/__next.!KGRhc2hib2FyZCk.teams.txt create mode 100644 litellm/proxy/_experimental/out/teams/__next.!KGRhc2hib2FyZCk.txt create mode 100644 litellm/proxy/_experimental/out/teams/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/teams/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/teams/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/teams/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/teams/index.html create mode 100644 litellm/proxy/_experimental/out/teams/index.txt create mode 100644 litellm/proxy/_experimental/out/tool-policies/__next.!KGRhc2hib2FyZCk.tool-policies.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/tool-policies/__next.!KGRhc2hib2FyZCk.tool-policies.txt create mode 100644 litellm/proxy/_experimental/out/tool-policies/__next.!KGRhc2hib2FyZCk.txt create mode 100644 litellm/proxy/_experimental/out/tool-policies/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/tool-policies/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/tool-policies/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/tool-policies/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/tool-policies/index.html create mode 100644 litellm/proxy/_experimental/out/tool-policies/index.txt create mode 100644 litellm/proxy/_experimental/out/transform-request/__next.!KGRhc2hib2FyZCk.transform-request.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/transform-request/__next.!KGRhc2hib2FyZCk.transform-request.txt create mode 100644 litellm/proxy/_experimental/out/transform-request/__next.!KGRhc2hib2FyZCk.txt create mode 100644 litellm/proxy/_experimental/out/transform-request/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/transform-request/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/transform-request/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/transform-request/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/transform-request/index.html create mode 100644 litellm/proxy/_experimental/out/transform-request/index.txt create mode 100644 litellm/proxy/_experimental/out/ui-theme/__next.!KGRhc2hib2FyZCk.txt create mode 100644 litellm/proxy/_experimental/out/ui-theme/__next.!KGRhc2hib2FyZCk.ui-theme.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/ui-theme/__next.!KGRhc2hib2FyZCk.ui-theme.txt create mode 100644 litellm/proxy/_experimental/out/ui-theme/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/ui-theme/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/ui-theme/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/ui-theme/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/ui-theme/index.html create mode 100644 litellm/proxy/_experimental/out/ui-theme/index.txt create mode 100644 litellm/proxy/_experimental/out/usage/__next.!KGRhc2hib2FyZCk.txt create mode 100644 litellm/proxy/_experimental/out/usage/__next.!KGRhc2hib2FyZCk.usage.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/usage/__next.!KGRhc2hib2FyZCk.usage.txt create mode 100644 litellm/proxy/_experimental/out/usage/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/usage/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/usage/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/usage/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/usage/index.html create mode 100644 litellm/proxy/_experimental/out/usage/index.txt create mode 100644 litellm/proxy/_experimental/out/users/__next.!KGRhc2hib2FyZCk.txt create mode 100644 litellm/proxy/_experimental/out/users/__next.!KGRhc2hib2FyZCk.users.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/users/__next.!KGRhc2hib2FyZCk.users.txt create mode 100644 litellm/proxy/_experimental/out/users/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/users/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/users/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/users/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/users/index.html create mode 100644 litellm/proxy/_experimental/out/users/index.txt create mode 100644 litellm/proxy/_experimental/out/vector-stores/__next.!KGRhc2hib2FyZCk.txt create mode 100644 litellm/proxy/_experimental/out/vector-stores/__next.!KGRhc2hib2FyZCk.vector-stores.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/vector-stores/__next.!KGRhc2hib2FyZCk.vector-stores.txt create mode 100644 litellm/proxy/_experimental/out/vector-stores/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/vector-stores/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/vector-stores/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/vector-stores/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/vector-stores/index.html create mode 100644 litellm/proxy/_experimental/out/vector-stores/index.txt create mode 100644 litellm/proxy/_experimental/out/vercel.svg create mode 100644 litellm/proxy/_experimental/out/workflows/__next.!KGRhc2hib2FyZCk.txt create mode 100644 litellm/proxy/_experimental/out/workflows/__next.!KGRhc2hib2FyZCk.workflows.__PAGE__.txt create mode 100644 litellm/proxy/_experimental/out/workflows/__next.!KGRhc2hib2FyZCk.workflows.txt create mode 100644 litellm/proxy/_experimental/out/workflows/__next._full.txt create mode 100644 litellm/proxy/_experimental/out/workflows/__next._head.txt create mode 100644 litellm/proxy/_experimental/out/workflows/__next._index.txt create mode 100644 litellm/proxy/_experimental/out/workflows/__next._tree.txt create mode 100644 litellm/proxy/_experimental/out/workflows/index.html create mode 100644 litellm/proxy/_experimental/out/workflows/index.txt create mode 100644 litellm/proxy/_new_new_secret_config.yaml create mode 100644 litellm/proxy/_new_secret_config.yaml create mode 100644 litellm/proxy/_super_secret_config.yaml create mode 100644 tests/proxy_admin_ui_tests/test-results/.last-run.json diff --git a/.gitignore b/.gitignore index 5b7c6e5585b..59fa5803abe 100644 --- a/.gitignore +++ b/.gitignore @@ -50,6 +50,8 @@ litellm/proxy/tests/package-lock.json ui/litellm-dashboard/.next ui/litellm-dashboard/node_modules ui/litellm-dashboard/next-env.d.ts +ui/litellm-dashboard/package.json +ui/litellm-dashboard/package-lock.json deploy/charts/litellm/*.tgz deploy/charts/litellm/charts/* deploy/charts/*.tgz @@ -85,12 +87,17 @@ litellm/proxy/db/migrations/* litellm/proxy/migrations/*config.yaml litellm/proxy/migrations/* litellm/proxy/to_delete_loadtest_work/* +config.yaml tests/litellm/litellm_core_utils/llm_cost_calc/log.txt tests/test_custom_dir/* +test.py +litellm_config.yaml +!.github/observatory/litellm_config.yaml .cursor litellm/proxy/to_delete_loadtest_work/* update_model_cost_map.py +tests/test_litellm/proxy/_experimental/mcp_server/test_mcp_server_manager.py scripts/test_vertex_ai_search.py LAZY_LOADING_IMPROVEMENTS.md STABILIZATION_TODO.md @@ -123,7 +130,3 @@ crash.*.log # pytest coverage data .coverage - -# _experimental/out UI build output -# (both componentized and non-componentized build the UI on project release) -litellm/proxy/_experimental/out/ \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/404.html b/litellm/proxy/_experimental/out/404.html new file mode 100644 index 00000000000..dd2a01991de --- /dev/null +++ b/litellm/proxy/_experimental/out/404.html @@ -0,0 +1 @@ +404: This page could not be found.LiteLLM Dashboard

404

This page could not be found.

\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/404/index.html b/litellm/proxy/_experimental/out/404/index.html new file mode 100644 index 00000000000..dd2a01991de --- /dev/null +++ b/litellm/proxy/_experimental/out/404/index.html @@ -0,0 +1 @@ +404: This page could not be found.LiteLLM Dashboard

404

This page could not be found.

\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/__next.!KGRhc2hib2FyZCk.__PAGE__.txt b/litellm/proxy/_experimental/out/__next.!KGRhc2hib2FyZCk.__PAGE__.txt new file mode 100644 index 00000000000..55b18876d5b --- /dev/null +++ b/litellm/proxy/_experimental/out/__next.!KGRhc2hib2FyZCk.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[871135,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","/litellm-asset-prefix/_next/static/chunks/0~-ovi6c4wjt1.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0c2apcdkbqq0o.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/0ngre0.s4-ej6.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/05t1k89l9tc3s.js","/litellm-asset-prefix/_next/static/chunks/17n.qg70cy9.9.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","/litellm-asset-prefix/_next/static/chunks/14566-_ogh-19.js","/litellm-asset-prefix/_next/static/chunks/0w39dn9x3dp9g.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0~-ovi6c4wjt1.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0c2apcdkbqq0o.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0ngre0.s4-ej6.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/05t1k89l9tc3s.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/17n.qg70cy9.9.js","async":true}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","async":true}],["$","script","script-13",{"src":"/litellm-asset-prefix/_next/static/chunks/14566-_ogh-19.js","async":true}],["$","script","script-14",{"src":"/litellm-asset-prefix/_next/static/chunks/0w39dn9x3dp9g.js","async":true}],["$","script","script-15",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true}],["$","script","script-16",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true}],["$","script","script-17",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/__next.!KGRhc2hib2FyZCk.txt b/litellm/proxy/_experimental/out/__next.!KGRhc2hib2FyZCk.txt new file mode 100644 index 00000000000..55176f9118b --- /dev/null +++ b/litellm/proxy/_experimental/out/__next.!KGRhc2hib2FyZCk.txt @@ -0,0 +1,7 @@ +1:"$Sreact.fragment" +2:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +3:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +4:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +5:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +0:{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true}]],["$","$L2",null,{"Component":"$3","slots":{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@6"]}}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +6:"$0:rsc:props:children:1:props:serverProvidedParams:params" diff --git a/litellm/proxy/_experimental/out/__next._full.txt b/litellm/proxy/_experimental/out/__next._full.txt new file mode 100644 index 00000000000..f1ff1ff8411 --- /dev/null +++ b/litellm/proxy/_experimental/out/__next._full.txt @@ -0,0 +1,30 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +c:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{},null,false,null]},null,false,null]},null,false,null],"$Lb",false]],"m":"$undefined","G":["$c",["$Ld","$Le"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +f:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +10:I[871135,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","/litellm-asset-prefix/_next/static/chunks/0~-ovi6c4wjt1.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0c2apcdkbqq0o.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/0ngre0.s4-ej6.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/05t1k89l9tc3s.js","/litellm-asset-prefix/_next/static/chunks/17n.qg70cy9.9.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","/litellm-asset-prefix/_next/static/chunks/14566-_ogh-19.js","/litellm-asset-prefix/_next/static/chunks/0w39dn9x3dp9g.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js"],"default"] +13:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +14:"$Sreact.suspense" +16:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +18:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[["$","$Lf",null,{"Component":"$10","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@11","$@12"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0~-ovi6c4wjt1.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0c2apcdkbqq0o.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0ngre0.s4-ej6.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/05t1k89l9tc3s.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/17n.qg70cy9.9.js","async":true,"nonce":"$undefined"}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","async":true,"nonce":"$undefined"}],["$","script","script-13",{"src":"/litellm-asset-prefix/_next/static/chunks/14566-_ogh-19.js","async":true,"nonce":"$undefined"}],["$","script","script-14",{"src":"/litellm-asset-prefix/_next/static/chunks/0w39dn9x3dp9g.js","async":true,"nonce":"$undefined"}],["$","script","script-15",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true,"nonce":"$undefined"}],["$","script","script-16",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true,"nonce":"$undefined"}],["$","script","script-17",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}]],["$","$L13",null,{"children":["$","$14",null,{"name":"Next.MetadataOutlet","children":"$@15"}]}]]}] +b:["$","$1","h",{"children":[null,["$","$L16",null,{"children":"$L17"}],["$","div",null,{"hidden":true,"children":["$","$L18",null,{"children":["$","$14",null,{"name":"Next.Metadata","children":"$L19"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +d:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +e:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +11:{} +12:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +17:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1a:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +15:null +19:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1a","4",{}]] diff --git a/litellm/proxy/_experimental/out/__next._head.txt b/litellm/proxy/_experimental/out/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/__next._index.txt b/litellm/proxy/_experimental/out/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/__next._tree.txt b/litellm/proxy/_experimental/out/__next._tree.txt new file mode 100644 index 00000000000..c8aadb1d1e2 --- /dev/null +++ b/litellm/proxy/_experimental/out/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"(dashboard)","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/_next/static/5rDiFx0t_mOGYmV_8kSkw/_buildManifest.js b/litellm/proxy/_experimental/out/_next/static/5rDiFx0t_mOGYmV_8kSkw/_buildManifest.js new file mode 100644 index 00000000000..d74e1661bbe --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/5rDiFx0t_mOGYmV_8kSkw/_buildManifest.js @@ -0,0 +1,16 @@ +self.__BUILD_MANIFEST = { + "__rewrites": { + "afterFiles": [], + "beforeFiles": [ + { + "source": "/litellm-asset-prefix/_next/:path+", + "destination": "/_next/:path+" + } + ], + "fallback": [] + }, + "sortedPages": [ + "/_app", + "/_error" + ] +};self.__BUILD_MANIFEST_CB && self.__BUILD_MANIFEST_CB() \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/5rDiFx0t_mOGYmV_8kSkw/_clientMiddlewareManifest.js b/litellm/proxy/_experimental/out/_next/static/5rDiFx0t_mOGYmV_8kSkw/_clientMiddlewareManifest.js new file mode 100644 index 00000000000..a8acaffa33a --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/5rDiFx0t_mOGYmV_8kSkw/_clientMiddlewareManifest.js @@ -0,0 +1 @@ +self.__MIDDLEWARE_MATCHERS = [];self.__MIDDLEWARE_MATCHERS_CB && self.__MIDDLEWARE_MATCHERS_CB() \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/5rDiFx0t_mOGYmV_8kSkw/_ssgManifest.js b/litellm/proxy/_experimental/out/_next/static/5rDiFx0t_mOGYmV_8kSkw/_ssgManifest.js new file mode 100644 index 00000000000..5b3ff592fd4 --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/5rDiFx0t_mOGYmV_8kSkw/_ssgManifest.js @@ -0,0 +1 @@ +self.__SSG_MANIFEST=new Set([]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB() \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0-3i_.uof35pm.js b/litellm/proxy/_experimental/out/_next/static/chunks/0-3i_.uof35pm.js new file mode 100644 index 00000000000..aaaafac2d13 --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0-3i_.uof35pm.js @@ -0,0 +1,2 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,184163,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let n={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M505.7 661a8 8 0 0012.6 0l112-141.7c4.1-5.2.4-12.9-6.3-12.9h-74.1V168c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v338.3H400c-6.7 0-10.4 7.7-6.3 12.9l112 141.8zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"}}]},name:"download",theme:"outlined"};var i=e.i(9583),s=r.forwardRef(function(e,s){return r.createElement(i.default,(0,t.default)({},e,{ref:s,icon:n}))});e.s(["default",0,s],184163)},309821,e=>{"use strict";e.i(247167);var t=e.i(271645),r=e.i(135551),n=e.i(201072),i=e.i(121229),s=e.i(726289),a=e.i(864517),l=e.i(343794),o=e.i(529681),c=e.i(242064),u=e.i(931067),d=e.i(209428),m=e.i(703923),f={percent:0,prefixCls:"rc-progress",strokeColor:"#2db7f5",strokeLinecap:"round",strokeWidth:1,trailColor:"#D9D9D9",trailWidth:1,gapPosition:"bottom"},h=function(){var e=(0,t.useRef)([]),r=(0,t.useRef)(null);return(0,t.useEffect)(function(){var t=Date.now(),n=!1;e.current.forEach(function(e){if(e){n=!0;var i=e.style;i.transitionDuration=".3s, .3s, .3s, .06s",r.current&&t-r.current<100&&(i.transitionDuration="0s, 0s")}}),n&&(r.current=Date.now())}),e.current},p=e.i(410160),g=e.i(392221),x=e.i(654310),v=0,y=(0,x.default)();let b=function(e){var r=t.useState(),n=(0,g.default)(r,2),i=n[0],s=n[1];return t.useEffect(function(){var e;s("rc_progress_".concat((y?(e=v,v+=1):e="TEST_OR_SSR",e)))},[]),e||i};var _=function(e){var r=e.bg,n=e.children;return t.createElement("div",{style:{width:"100%",height:"100%",background:r}},n)};function j(e,t){return Object.keys(e).map(function(r){var n=parseFloat(r),i="".concat(Math.floor(n*t),"%");return"".concat(e[r]," ").concat(i)})}var w=t.forwardRef(function(e,r){var n=e.prefixCls,i=e.color,s=e.gradientId,a=e.radius,l=e.style,o=e.ptg,c=e.strokeLinecap,u=e.strokeWidth,d=e.size,m=e.gapDegree,f=i&&"object"===(0,p.default)(i),h=d/2,g=t.createElement("circle",{className:"".concat(n,"-circle-path"),r:a,cx:h,cy:h,stroke:f?"#FFF":void 0,strokeLinecap:c,strokeWidth:u,opacity:+(0!==o),style:l,ref:r});if(!f)return g;var x="".concat(s,"-conic"),v=j(i,(360-m)/360),y=j(i,1),b="conic-gradient(from ".concat(m?"".concat(180+m/2,"deg"):"0deg",", ").concat(v.join(", "),")"),w="linear-gradient(to ".concat(m?"bottom":"top",", ").concat(y.join(", "),")");return t.createElement(t.Fragment,null,t.createElement("mask",{id:x},g),t.createElement("foreignObject",{x:0,y:0,width:d,height:d,mask:"url(#".concat(x,")")},t.createElement(_,{bg:w},t.createElement(_,{bg:b}))))}),k=function(e,t,r,n,i,s,a,l,o,c){var u=arguments.length>10&&void 0!==arguments[10]?arguments[10]:0,d=(100-n)/100*t;return"round"===o&&100!==n&&(d+=c/2)>=t&&(d=t-.01),{stroke:"string"==typeof l?l:void 0,strokeDasharray:"".concat(t,"px ").concat(e),strokeDashoffset:d+u,transform:"rotate(".concat(i+r/100*360*((360-s)/360)+(0===s?0:({bottom:0,top:180,left:90,right:-90})[a]),"deg)"),transformOrigin:"".concat(50,"px ").concat(50,"px"),transition:"stroke-dashoffset .3s ease 0s, stroke-dasharray .3s ease 0s, stroke .3s, stroke-width .06s ease .3s, opacity .3s ease 0s",fillOpacity:0}},C=["id","prefixCls","steps","strokeWidth","trailWidth","gapDegree","gapPosition","trailColor","strokeLinecap","style","className","strokeColor","percent"];function S(e){var t=null!=e?e:[];return Array.isArray(t)?t:[t]}let E=function(e){var r,n,i,s,a=(0,d.default)((0,d.default)({},f),e),o=a.id,c=a.prefixCls,g=a.steps,x=a.strokeWidth,v=a.trailWidth,y=a.gapDegree,_=void 0===y?0:y,j=a.gapPosition,E=a.trailColor,O=a.strokeLinecap,N=a.style,I=a.className,T=a.strokeColor,R=a.percent,P=(0,m.default)(a,C),D=b(o),$="".concat(D,"-gradient"),A=50-x/2,F=2*Math.PI*A,L=_>0?90+_/2:-90,M=(360-_)/360*F,B="object"===(0,p.default)(g)?g:{count:g,gap:2},U=B.count,z=B.gap,V=S(R),H=S(T),W=H.find(function(e){return e&&"object"===(0,p.default)(e)}),K=W&&"object"===(0,p.default)(W)?"butt":O,q=k(F,M,0,100,L,_,j,E,K,x),X=h();return t.createElement("svg",(0,u.default)({className:(0,l.default)("".concat(c,"-circle"),I),viewBox:"0 0 ".concat(100," ").concat(100),style:N,id:o,role:"presentation"},P),!U&&t.createElement("circle",{className:"".concat(c,"-circle-trail"),r:A,cx:50,cy:50,stroke:E,strokeLinecap:K,strokeWidth:v||x,style:q}),U?(r=Math.round(U*(V[0]/100)),n=100/U,i=0,Array(U).fill(null).map(function(e,s){var a=s<=r-1?H[0]:E,l=a&&"object"===(0,p.default)(a)?"url(#".concat($,")"):void 0,o=k(F,M,i,n,L,_,j,a,"butt",x,z);return i+=(M-o.strokeDashoffset+z)*100/M,t.createElement("circle",{key:s,className:"".concat(c,"-circle-path"),r:A,cx:50,cy:50,stroke:l,strokeWidth:x,opacity:1,style:o,ref:function(e){X[s]=e}})})):(s=0,V.map(function(e,r){var n=H[r]||H[H.length-1],i=k(F,M,s,e,L,_,j,n,K,x);return s+=e,t.createElement(w,{key:r,color:n,ptg:e,radius:A,prefixCls:c,gradientId:$,style:i,strokeLinecap:K,strokeWidth:x,gapDegree:_,ref:function(e){X[r]=e},size:100})}).reverse()))};var O=e.i(491816);e.i(765846);var N=e.i(896091);function I(e){return!e||e<0?0:e>100?100:e}function T({success:e,successPercent:t}){let r=t;return e&&"progress"in e&&(r=e.progress),e&&"percent"in e&&(r=e.percent),r}let R=(e,t,r)=>{var n,i,s,a;let l=-1,o=-1;if("step"===t){let t=r.steps,n=r.strokeWidth;"string"==typeof e||void 0===e?(l="small"===e?2:14,o=null!=n?n:8):"number"==typeof e?[l,o]=[e,e]:[l=14,o=8]=Array.isArray(e)?e:[e.width,e.height],l*=t}else if("line"===t){let t=null==r?void 0:r.strokeWidth;"string"==typeof e||void 0===e?o=t||("small"===e?6:8):"number"==typeof e?[l,o]=[e,e]:[l=-1,o=8]=Array.isArray(e)?e:[e.width,e.height]}else("circle"===t||"dashboard"===t)&&("string"==typeof e||void 0===e?[l,o]="small"===e?[60,60]:[120,120]:"number"==typeof e?[l,o]=[e,e]:Array.isArray(e)&&(l=null!=(i=null!=(n=e[0])?n:e[1])?i:120,o=null!=(a=null!=(s=e[0])?s:e[1])?a:120));return[l,o]},P=e=>{let{prefixCls:r,trailColor:n=null,strokeLinecap:i="round",gapPosition:s,gapDegree:a,width:o=120,type:c,children:u,success:d,size:m=o,steps:f}=e,[h,p]=R(m,"circle"),{strokeWidth:g}=e;void 0===g&&(g=Math.max(3/h*100,6));let x=t.useMemo(()=>a||0===a?a:"dashboard"===c?75:void 0,[a,c]),v=(({percent:e,success:t,successPercent:r})=>{let n=I(T({success:t,successPercent:r}));return[n,I(I(e)-n)]})(e),y="[object Object]"===Object.prototype.toString.call(e.strokeColor),b=(({success:e={},strokeColor:t})=>{let{strokeColor:r}=e;return[r||N.presetPrimaryColors.green,t||null]})({success:d,strokeColor:e.strokeColor}),_=(0,l.default)(`${r}-inner`,{[`${r}-circle-gradient`]:y}),j=t.createElement(E,{steps:f,percent:f?v[1]:v,strokeWidth:g,trailWidth:g,strokeColor:f?b[1]:b,strokeLinecap:i,trailColor:n,prefixCls:r,gapDegree:x,gapPosition:s||"dashboard"===c&&"bottom"||void 0}),w=h<=20,k=t.createElement("div",{className:_,style:{width:h,height:p,fontSize:.15*h+6}},j,!w&&u);return w?t.createElement(O.default,{title:u},k):k};e.i(296059);var D=e.i(694758),$=e.i(915654),A=e.i(183293),F=e.i(246422),L=e.i(838378);let M="--progress-line-stroke-color",B="--progress-percent",U=e=>{let t=e?"100%":"-100%";return new D.Keyframes(`antProgress${e?"RTL":"LTR"}Active`,{"0%":{transform:`translateX(${t}) scaleX(0)`,opacity:.1},"20%":{transform:`translateX(${t}) scaleX(0)`,opacity:.5},to:{transform:"translateX(0) scaleX(1)",opacity:0}})},z=(0,F.genStyleHooks)("Progress",e=>{let t=e.calc(e.marginXXS).div(2).equal(),r=(0,L.mergeToken)(e,{progressStepMarginInlineEnd:t,progressStepMinWidth:t,progressActiveMotionDuration:"2.4s"});return[(e=>{let{componentCls:t,iconCls:r}=e;return{[t]:Object.assign(Object.assign({},(0,A.resetComponent)(e)),{display:"inline-block","&-rtl":{direction:"rtl"},"&-line":{position:"relative",width:"100%",fontSize:e.fontSize},[`${t}-outer`]:{display:"inline-flex",alignItems:"center",width:"100%"},[`${t}-inner`]:{position:"relative",display:"inline-block",width:"100%",flex:1,overflow:"hidden",verticalAlign:"middle",backgroundColor:e.remainingColor,borderRadius:e.lineBorderRadius},[`${t}-inner:not(${t}-circle-gradient)`]:{[`${t}-circle-path`]:{stroke:e.defaultColor}},[`${t}-success-bg, ${t}-bg`]:{position:"relative",background:e.defaultColor,borderRadius:e.lineBorderRadius,transition:`all ${e.motionDurationSlow} ${e.motionEaseInOutCirc}`},[`${t}-layout-bottom`]:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",[`${t}-text`]:{width:"max-content",marginInlineStart:0,marginTop:e.marginXXS}},[`${t}-bg`]:{overflow:"hidden","&::after":{content:'""',background:{_multi_value_:!0,value:["inherit",`var(${M})`]},height:"100%",width:`calc(1 / var(${B}) * 100%)`,display:"block"},[`&${t}-bg-inner`]:{minWidth:"max-content","&::after":{content:"none"},[`${t}-text-inner`]:{color:e.colorWhite,[`&${t}-text-bright`]:{color:"rgba(0, 0, 0, 0.45)"}}}},[`${t}-success-bg`]:{position:"absolute",insetBlockStart:0,insetInlineStart:0,backgroundColor:e.colorSuccess},[`${t}-text`]:{display:"inline-block",marginInlineStart:e.marginXS,color:e.colorText,lineHeight:1,width:"2em",whiteSpace:"nowrap",textAlign:"start",verticalAlign:"middle",wordBreak:"normal",[r]:{fontSize:e.fontSize},[`&${t}-text-outer`]:{width:"max-content"},[`&${t}-text-outer${t}-text-start`]:{width:"max-content",marginInlineStart:0,marginInlineEnd:e.marginXS}},[`${t}-text-inner`]:{display:"flex",justifyContent:"center",alignItems:"center",width:"100%",height:"100%",marginInlineStart:0,padding:`0 ${(0,$.unit)(e.paddingXXS)}`,[`&${t}-text-start`]:{justifyContent:"start"},[`&${t}-text-end`]:{justifyContent:"end"}},[`&${t}-status-active`]:{[`${t}-bg::before`]:{position:"absolute",inset:0,backgroundColor:e.colorBgContainer,borderRadius:e.lineBorderRadius,opacity:0,animationName:U(),animationDuration:e.progressActiveMotionDuration,animationTimingFunction:e.motionEaseOutQuint,animationIterationCount:"infinite",content:'""'}},[`&${t}-rtl${t}-status-active`]:{[`${t}-bg::before`]:{animationName:U(!0)}},[`&${t}-status-exception`]:{[`${t}-bg`]:{backgroundColor:e.colorError},[`${t}-text`]:{color:e.colorError}},[`&${t}-status-exception ${t}-inner:not(${t}-circle-gradient)`]:{[`${t}-circle-path`]:{stroke:e.colorError}},[`&${t}-status-success`]:{[`${t}-bg`]:{backgroundColor:e.colorSuccess},[`${t}-text`]:{color:e.colorSuccess}},[`&${t}-status-success ${t}-inner:not(${t}-circle-gradient)`]:{[`${t}-circle-path`]:{stroke:e.colorSuccess}}})}})(r),(e=>{let{componentCls:t,iconCls:r}=e;return{[t]:{[`${t}-circle-trail`]:{stroke:e.remainingColor},[`&${t}-circle ${t}-inner`]:{position:"relative",lineHeight:1,backgroundColor:"transparent"},[`&${t}-circle ${t}-text`]:{position:"absolute",insetBlockStart:"50%",insetInlineStart:0,width:"100%",margin:0,padding:0,color:e.circleTextColor,fontSize:e.circleTextFontSize,lineHeight:1,whiteSpace:"normal",textAlign:"center",transform:"translateY(-50%)",[r]:{fontSize:e.circleIconFontSize}},[`${t}-circle&-status-exception`]:{[`${t}-text`]:{color:e.colorError}},[`${t}-circle&-status-success`]:{[`${t}-text`]:{color:e.colorSuccess}}},[`${t}-inline-circle`]:{lineHeight:1,[`${t}-inner`]:{verticalAlign:"bottom"}}}})(r),(e=>{let{componentCls:t}=e;return{[t]:{[`${t}-steps`]:{display:"inline-block","&-outer":{display:"flex",flexDirection:"row",alignItems:"center"},"&-item":{flexShrink:0,minWidth:e.progressStepMinWidth,marginInlineEnd:e.progressStepMarginInlineEnd,backgroundColor:e.remainingColor,transition:`all ${e.motionDurationSlow}`,"&-active":{backgroundColor:e.defaultColor}}}}}})(r),(e=>{let{componentCls:t,iconCls:r}=e;return{[t]:{[`${t}-small&-line, ${t}-small&-line ${t}-text ${r}`]:{fontSize:e.fontSizeSM}}}})(r)]},e=>({circleTextColor:e.colorText,defaultColor:e.colorInfo,remainingColor:e.colorFillSecondary,lineBorderRadius:100,circleTextFontSize:"1em",circleIconFontSize:`${e.fontSize/e.fontSizeSM}em`}));var V=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&0>t.indexOf(n)&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var i=0,n=Object.getOwnPropertySymbols(e);it.indexOf(n[i])&&Object.prototype.propertyIsEnumerable.call(e,n[i])&&(r[n[i]]=e[n[i]]);return r};let H=e=>{let{prefixCls:r,direction:n,percent:i,size:s,strokeWidth:a,strokeColor:o,strokeLinecap:c="round",children:u,trailColor:d=null,percentPosition:m,success:f}=e,{align:h,type:p}=m,g=o&&"string"!=typeof o?((e,t)=>{let{from:r=N.presetPrimaryColors.blue,to:n=N.presetPrimaryColors.blue,direction:i="rtl"===t?"to left":"to right"}=e,s=V(e,["from","to","direction"]);if(0!==Object.keys(s).length){let e,t=(e=[],Object.keys(s).forEach(t=>{let r=Number.parseFloat(t.replace(/%/g,""));Number.isNaN(r)||e.push({key:r,value:s[t]})}),(e=e.sort((e,t)=>e.key-t.key)).map(({key:e,value:t})=>`${t} ${e}%`).join(", ")),r=`linear-gradient(${i}, ${t})`;return{background:r,[M]:r}}let a=`linear-gradient(${i}, ${r}, ${n})`;return{background:a,[M]:a}})(o,n):{[M]:o,background:o},x="square"===c||"butt"===c?0:void 0,[v,y]=R(null!=s?s:[-1,a||("small"===s?6:8)],"line",{strokeWidth:a}),b=Object.assign(Object.assign({width:`${I(i)}%`,height:y,borderRadius:x},g),{[B]:I(i)/100}),_=T(e),j={width:`${I(_)}%`,height:y,borderRadius:x,backgroundColor:null==f?void 0:f.strokeColor},w=t.createElement("div",{className:`${r}-inner`,style:{backgroundColor:d||void 0,borderRadius:x}},t.createElement("div",{className:(0,l.default)(`${r}-bg`,`${r}-bg-${p}`),style:b},"inner"===p&&u),void 0!==_&&t.createElement("div",{className:`${r}-success-bg`,style:j})),k="outer"===p&&"start"===h,C="outer"===p&&"end"===h;return"outer"===p&&"center"===h?t.createElement("div",{className:`${r}-layout-bottom`},w,u):t.createElement("div",{className:`${r}-outer`,style:{width:v<0?"100%":v}},k&&u,w,C&&u)},W=e=>{let{size:r,steps:n,rounding:i=Math.round,percent:s=0,strokeWidth:a=8,strokeColor:o,trailColor:c=null,prefixCls:u,children:d}=e,m=i(s/100*n),[f,h]=R(null!=r?r:["small"===r?2:14,a],"step",{steps:n,strokeWidth:a}),p=f/n,g=Array.from({length:n});for(let e=0;et.indexOf(n)&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var i=0,n=Object.getOwnPropertySymbols(e);it.indexOf(n[i])&&Object.prototype.propertyIsEnumerable.call(e,n[i])&&(r[n[i]]=e[n[i]]);return r};let q=["normal","exception","active","success"],X=t.forwardRef((e,u)=>{let d,{prefixCls:m,className:f,rootClassName:h,steps:p,strokeColor:g,percent:x=0,size:v="default",showInfo:y=!0,type:b="line",status:_,format:j,style:w,percentPosition:k={}}=e,C=K(e,["prefixCls","className","rootClassName","steps","strokeColor","percent","size","showInfo","type","status","format","style","percentPosition"]),{align:S="end",type:E="outer"}=k,O=Array.isArray(g)?g[0]:g,N="string"==typeof g||Array.isArray(g)?g:void 0,D=t.useMemo(()=>{if(O){let e="string"==typeof O?O:Object.values(O)[0];return new r.FastColor(e).isLight()}return!1},[g]),$=t.useMemo(()=>{var t,r;let n=T(e);return Number.parseInt(void 0!==n?null==(t=null!=n?n:0)?void 0:t.toString():null==(r=null!=x?x:0)?void 0:r.toString(),10)},[x,e.success,e.successPercent]),A=t.useMemo(()=>!q.includes(_)&&$>=100?"success":_||"normal",[_,$]),{getPrefixCls:F,direction:L,progress:M}=t.useContext(c.ConfigContext),B=F("progress",m),[U,V,X]=z(B),Q="line"===b,J=Q&&!p,Y=t.useMemo(()=>{let r;if(!y)return null;let o=T(e),c=j||(e=>`${e}%`),u=Q&&D&&"inner"===E;return"inner"===E||j||"exception"!==A&&"success"!==A?r=c(I(x),I(o)):"exception"===A?r=Q?t.createElement(s.default,null):t.createElement(a.default,null):"success"===A&&(r=Q?t.createElement(n.default,null):t.createElement(i.default,null)),t.createElement("span",{className:(0,l.default)(`${B}-text`,{[`${B}-text-bright`]:u,[`${B}-text-${S}`]:J,[`${B}-text-${E}`]:J}),title:"string"==typeof r?r:void 0},r)},[y,x,$,A,b,B,j]);"line"===b?d=p?t.createElement(W,Object.assign({},e,{strokeColor:N,prefixCls:B,steps:"object"==typeof p?p.count:p}),Y):t.createElement(H,Object.assign({},e,{strokeColor:O,prefixCls:B,direction:L,percentPosition:{align:S,type:E}}),Y):("circle"===b||"dashboard"===b)&&(d=t.createElement(P,Object.assign({},e,{strokeColor:O,prefixCls:B,progressStatus:A}),Y));let G=(0,l.default)(B,`${B}-status-${A}`,{[`${B}-${"dashboard"===b&&"circle"||b}`]:"line"!==b,[`${B}-inline-circle`]:"circle"===b&&R(v,"circle")[0]<=20,[`${B}-line`]:J,[`${B}-line-align-${S}`]:J,[`${B}-line-position-${E}`]:J,[`${B}-steps`]:p,[`${B}-show-info`]:y,[`${B}-${v}`]:"string"==typeof v,[`${B}-rtl`]:"rtl"===L},null==M?void 0:M.className,f,h,V,X);return U(t.createElement("div",Object.assign({ref:u,style:Object.assign(Object.assign({},null==M?void 0:M.style),w),className:G,role:"progressbar","aria-valuenow":$,"aria-valuemin":0,"aria-valuemax":100},(0,o.default)(C,["trailColor","strokeWidth","width","gapDegree","gapPosition","strokeLinecap","success","successPercent"])),d))});e.s(["default",0,X],309821)},519756,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let n={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M400 317.7h73.9V656c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V317.7H624c6.7 0 10.4-7.7 6.3-12.9L518.3 163a8 8 0 00-12.6 0l-112 141.7c-4.1 5.3-.4 13 6.3 13zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"}}]},name:"upload",theme:"outlined"};var i=e.i(9583),s=r.forwardRef(function(e,s){return r.createElement(i.default,(0,t.default)({},e,{ref:s,icon:n}))});e.s(["UploadOutlined",0,s],519756)},233538,e=>{"use strict";e.s(["isDisabledReactIssue7711",0,function(e){let t=e.parentElement,r=null;for(;t&&!(t instanceof HTMLFieldSetElement);)t instanceof HTMLLegendElement&&(r=t),t=t.parentElement;let n=(null==t?void 0:t.getAttribute("disabled"))==="";return!(n&&function(e){if(!e)return!1;let t=e.previousElementSibling;for(;null!==t;){if(t instanceof HTMLLegendElement)return!1;t=t.previousElementSibling}return!0}(r))&&n}])},83733,233137,e=>{"use strict";let t,r;var n,i,s=e.i(247167),a=e.i(271645),l=e.i(544508),o=e.i(746725),c=e.i(835696);void 0!==s.default&&"u">typeof globalThis&&"u">typeof Element&&(null==(n=null==s.default?void 0:s.default.env)?void 0:n.NODE_ENV)==="test"&&void 0===(null==(i=null==Element?void 0:Element.prototype)?void 0:i.getAnimations)&&(Element.prototype.getAnimations=function(){return console.warn(["Headless UI has polyfilled `Element.prototype.getAnimations` for your tests.","Please install a proper polyfill e.g. `jsdom-testing-mocks`, to silence these warnings.","","Example usage:","```js","import { mockAnimationsApi } from 'jsdom-testing-mocks'","mockAnimationsApi()","```"].join(` +`)),[]});var u=((t=u||{})[t.None=0]="None",t[t.Closed=1]="Closed",t[t.Enter=2]="Enter",t[t.Leave=4]="Leave",t);e.s(["transitionDataAttributes",0,function(e){let t={};for(let r in e)!0===e[r]&&(t[`data-${r}`]="");return t},"useTransition",0,function(e,t,r,n){let[i,s]=(0,a.useState)(r),{hasFlag:u,addFlag:d,removeFlag:m}=function(e=0){let[t,r]=(0,a.useState)(e),n=(0,a.useCallback)(e=>r(e),[t]),i=(0,a.useCallback)(e=>r(t=>t|e),[t]),s=(0,a.useCallback)(e=>(t&e)===e,[t]);return{flags:t,setFlag:n,addFlag:i,hasFlag:s,removeFlag:(0,a.useCallback)(e=>r(t=>t&~e),[r]),toggleFlag:(0,a.useCallback)(e=>r(t=>t^e),[r])}}(e&&i?3:0),f=(0,a.useRef)(!1),h=(0,a.useRef)(!1),p=(0,o.useDisposables)();return(0,c.useIsoMorphicEffect)(()=>{var i;if(e){if(r&&s(!0),!t){r&&d(3);return}return null==(i=null==n?void 0:n.start)||i.call(n,r),function(e,{prepare:t,run:r,done:n,inFlight:i}){let s=(0,l.disposables)();return function(e,{inFlight:t,prepare:r}){if(null!=t&&t.current)return r();let n=e.style.transition;e.style.transition="none",r(),e.offsetHeight,e.style.transition=n}(e,{prepare:t,inFlight:i}),s.nextFrame(()=>{r(),s.requestAnimationFrame(()=>{s.add(function(e,t){var r,n;let i=(0,l.disposables)();if(!e)return i.dispose;let s=!1;i.add(()=>{s=!0});let a=null!=(n=null==(r=e.getAnimations)?void 0:r.call(e).filter(e=>e instanceof CSSTransition))?n:[];return 0===a.length?t():Promise.allSettled(a.map(e=>e.finished)).then(()=>{s||t()}),i.dispose}(e,n))})}),s.dispose}(t,{inFlight:f,prepare(){h.current?h.current=!1:h.current=f.current,f.current=!0,h.current||(r?(d(3),m(4)):(d(4),m(2)))},run(){h.current?r?(m(3),d(4)):(m(4),d(3)):r?m(1):d(1)},done(){var e;h.current&&"function"==typeof t.getAnimations&&t.getAnimations().length>0||(f.current=!1,m(7),r||s(!1),null==(e=null==n?void 0:n.end)||e.call(n,r))}})}},[e,r,t,p]),e?[i,{closed:u(1),enter:u(2),leave:u(4),transition:u(2)||u(4)}]:[r,{closed:void 0,enter:void 0,leave:void 0,transition:void 0}]}],83733);let d=(0,a.createContext)(null);d.displayName="OpenClosedContext";var m=((r=m||{})[r.Open=1]="Open",r[r.Closed=2]="Closed",r[r.Closing=4]="Closing",r[r.Opening=8]="Opening",r);e.s(["OpenClosedProvider",0,function({value:e,children:t}){return a.default.createElement(d.Provider,{value:e},t)},"ResetOpenClosedProvider",0,function({children:e}){return a.default.createElement(d.Provider,{value:null},e)},"State",0,m,"useOpenClosed",0,function(){return(0,a.useContext)(d)}],233137)},677667,674175,886148,543086,e=>{"use strict";let t,r;var n,i=e.i(290571),s=e.i(783222),a=e.i(433336),l=e.i(271645),o=e.i(394487),c=e.i(914189),u=e.i(144279),d=e.i(294316),m=e.i(83733);let f=(0,l.createContext)(()=>{});function h({value:e,children:t}){return l.default.createElement(f.Provider,{value:e},t)}e.s(["CloseProvider",0,h],674175);var p=e.i(233137),g=e.i(233538),x=e.i(397701),v=e.i(402155),y=e.i(700020);let b=null!=(n=l.default.startTransition)?n:function(e){e()};var _=e.i(998348),j=((t=j||{})[t.Open=0]="Open",t[t.Closed=1]="Closed",t),w=((r=w||{})[r.ToggleDisclosure=0]="ToggleDisclosure",r[r.CloseDisclosure=1]="CloseDisclosure",r[r.SetButtonId=2]="SetButtonId",r[r.SetPanelId=3]="SetPanelId",r[r.SetButtonElement=4]="SetButtonElement",r[r.SetPanelElement=5]="SetPanelElement",r);let k={0:e=>({...e,disclosureState:(0,x.match)(e.disclosureState,{0:1,1:0})}),1:e=>1===e.disclosureState?e:{...e,disclosureState:1},2:(e,t)=>e.buttonId===t.buttonId?e:{...e,buttonId:t.buttonId},3:(e,t)=>e.panelId===t.panelId?e:{...e,panelId:t.panelId},4:(e,t)=>e.buttonElement===t.element?e:{...e,buttonElement:t.element},5:(e,t)=>e.panelElement===t.element?e:{...e,panelElement:t.element}},C=(0,l.createContext)(null);function S(e){let t=(0,l.useContext)(C);if(null===t){let t=Error(`<${e} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,S),t}return t}C.displayName="DisclosureContext";let E=(0,l.createContext)(null);E.displayName="DisclosureAPIContext";let O=(0,l.createContext)(null);function N(e,t){return(0,x.match)(t.type,k,e,t)}O.displayName="DisclosurePanelContext";let I=l.Fragment,T=y.RenderFeatures.RenderStrategy|y.RenderFeatures.Static,R=Object.assign((0,y.forwardRefWithAs)(function(e,t){let{defaultOpen:r=!1,...n}=e,i=(0,l.useRef)(null),s=(0,d.useSyncRefs)(t,(0,d.optionalRef)(e=>{i.current=e},void 0===e.as||e.as===l.Fragment)),a=(0,l.useReducer)(N,{disclosureState:+!r,buttonElement:null,panelElement:null,buttonId:null,panelId:null}),[{disclosureState:o,buttonId:u},m]=a,f=(0,c.useEvent)(e=>{m({type:1});let t=(0,v.getOwnerDocument)(i);if(!t||!u)return;let r=e?e instanceof HTMLElement?e:e.current instanceof HTMLElement?e.current:t.getElementById(u):t.getElementById(u);null==r||r.focus()}),g=(0,l.useMemo)(()=>({close:f}),[f]),b=(0,l.useMemo)(()=>({open:0===o,close:f}),[o,f]),_=(0,y.useRender)();return l.default.createElement(C.Provider,{value:a},l.default.createElement(E.Provider,{value:g},l.default.createElement(h,{value:f},l.default.createElement(p.OpenClosedProvider,{value:(0,x.match)(o,{0:p.State.Open,1:p.State.Closed})},_({ourProps:{ref:s},theirProps:n,slot:b,defaultTag:I,name:"Disclosure"})))))}),{Button:(0,y.forwardRefWithAs)(function(e,t){let r=(0,l.useId)(),{id:n=`headlessui-disclosure-button-${r}`,disabled:i=!1,autoFocus:m=!1,...f}=e,[h,p]=S("Disclosure.Button"),x=(0,l.useContext)(O),v=null!==x&&x===h.panelId,b=(0,l.useRef)(null),j=(0,d.useSyncRefs)(b,t,(0,c.useEvent)(e=>{if(!v)return p({type:4,element:e})}));(0,l.useEffect)(()=>{if(!v)return p({type:2,buttonId:n}),()=>{p({type:2,buttonId:null})}},[n,p,v]);let w=(0,c.useEvent)(e=>{var t;if(v){if(1===h.disclosureState)return;switch(e.key){case _.Keys.Space:case _.Keys.Enter:e.preventDefault(),e.stopPropagation(),p({type:0}),null==(t=h.buttonElement)||t.focus()}}else switch(e.key){case _.Keys.Space:case _.Keys.Enter:e.preventDefault(),e.stopPropagation(),p({type:0})}}),k=(0,c.useEvent)(e=>{e.key===_.Keys.Space&&e.preventDefault()}),C=(0,c.useEvent)(e=>{var t;(0,g.isDisabledReactIssue7711)(e.currentTarget)||i||(v?(p({type:0}),null==(t=h.buttonElement)||t.focus()):p({type:0}))}),{isFocusVisible:E,focusProps:N}=(0,s.useFocusRing)({autoFocus:m}),{isHovered:I,hoverProps:T}=(0,a.useHover)({isDisabled:i}),{pressed:R,pressProps:P}=(0,o.useActivePress)({disabled:i}),D=(0,l.useMemo)(()=>({open:0===h.disclosureState,hover:I,active:R,disabled:i,focus:E,autofocus:m}),[h,I,R,E,i,m]),$=(0,u.useResolveButtonType)(e,h.buttonElement),A=v?(0,y.mergeProps)({ref:j,type:$,disabled:i||void 0,autoFocus:m,onKeyDown:w,onClick:C},N,T,P):(0,y.mergeProps)({ref:j,id:n,type:$,"aria-expanded":0===h.disclosureState,"aria-controls":h.panelElement?h.panelId:void 0,disabled:i||void 0,autoFocus:m,onKeyDown:w,onKeyUp:k,onClick:C},N,T,P);return(0,y.useRender)()({ourProps:A,theirProps:f,slot:D,defaultTag:"button",name:"Disclosure.Button"})}),Panel:(0,y.forwardRefWithAs)(function(e,t){let r=(0,l.useId)(),{id:n=`headlessui-disclosure-panel-${r}`,transition:i=!1,...s}=e,[a,o]=S("Disclosure.Panel"),{close:u}=function e(t){let r=(0,l.useContext)(E);if(null===r){let r=Error(`<${t} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(r,e),r}return r}("Disclosure.Panel"),[f,h]=(0,l.useState)(null),g=(0,d.useSyncRefs)(t,(0,c.useEvent)(e=>{b(()=>o({type:5,element:e}))}),h);(0,l.useEffect)(()=>(o({type:3,panelId:n}),()=>{o({type:3,panelId:null})}),[n,o]);let x=(0,p.useOpenClosed)(),[v,_]=(0,m.useTransition)(i,f,null!==x?(x&p.State.Open)===p.State.Open:0===a.disclosureState),j=(0,l.useMemo)(()=>({open:0===a.disclosureState,close:u}),[a.disclosureState,u]),w={ref:g,id:n,...(0,m.transitionDataAttributes)(_)},k=(0,y.useRender)();return l.default.createElement(p.ResetOpenClosedProvider,null,l.default.createElement(O.Provider,{value:a.panelId},k({ourProps:w,theirProps:s,slot:j,defaultTag:"div",features:T,visible:v,name:"Disclosure.Panel"})))})});e.s(["Disclosure",0,R],886148);let P=(0,l.createContext)(void 0);var D=e.i(444755);let $=(0,e.i(673706).makeClassName)("Accordion"),A=(0,l.createContext)({isOpen:!1}),F=l.default.forwardRef((e,t)=>{var r;let{defaultOpen:n=!1,children:s,className:a}=e,o=(0,i.__rest)(e,["defaultOpen","children","className"]),c=null!=(r=(0,l.useContext)(P))?r:(0,D.tremorTwMerge)("rounded-tremor-default border");return l.default.createElement(R,Object.assign({as:"div",ref:t,className:(0,D.tremorTwMerge)($("root"),"overflow-hidden","bg-tremor-background border-tremor-border","dark:bg-dark-tremor-background dark:border-dark-tremor-border",c,a),defaultOpen:n},o),({open:e})=>l.default.createElement(A.Provider,{value:{isOpen:e}},s))});F.displayName="Accordion",e.s(["OpenContext",0,A,"default",0,F],543086),e.s(["Accordion",0,F],677667)},130643,e=>{"use strict";var t=e.i(290571),r=e.i(271645),n=e.i(886148),i=e.i(444755);let s=(0,e.i(673706).makeClassName)("AccordionBody"),a=r.default.forwardRef((e,a)=>{let{children:l,className:o}=e,c=(0,t.__rest)(e,["children","className"]);return r.default.createElement(n.Disclosure.Panel,Object.assign({ref:a,className:(0,i.tremorTwMerge)(s("root"),"w-full text-tremor-default px-4 pb-3","text-tremor-content","dark:text-dark-tremor-content",o)},c),l)});a.displayName="AccordionBody",e.s(["AccordionBody",0,a],130643)},898667,e=>{"use strict";var t=e.i(290571),r=e.i(271645),n=e.i(886148);let i=e=>{var n=(0,t.__rest)(e,[]);return r.default.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"},n),r.default.createElement("path",{d:"M11.9999 10.8284L7.0502 15.7782L5.63599 14.364L11.9999 8L18.3639 14.364L16.9497 15.7782L11.9999 10.8284Z"}))};var s=e.i(543086),a=e.i(444755);let l=(0,e.i(673706).makeClassName)("AccordionHeader"),o=r.default.forwardRef((e,o)=>{let{children:c,className:u}=e,d=(0,t.__rest)(e,["children","className"]),{isOpen:m}=(0,r.useContext)(s.OpenContext);return r.default.createElement(n.Disclosure.Button,Object.assign({ref:o,className:(0,a.tremorTwMerge)(l("root"),"w-full flex items-center justify-between px-4 py-3","text-tremor-content-emphasis","dark:text-dark-tremor-content-emphasis",u)},d),r.default.createElement("div",{className:(0,a.tremorTwMerge)(l("children"),"flex flex-1 text-inherit mr-4")},c),r.default.createElement("div",null,r.default.createElement(i,{className:(0,a.tremorTwMerge)(l("arrowIcon"),"h-5 w-5 -mr-1","text-tremor-content-subtle","dark:text-dark-tremor-content-subtle",m?"transition-all":"transition-all -rotate-180")})))});o.displayName="AccordionHeader",e.s(["AccordionHeader",0,o],898667)},220508,e=>{"use strict";var t=e.i(271645);let r=t.forwardRef(function(e,r){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:r},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"}))});e.s(["CheckCircleIcon",0,r],220508)},503269,214520,601893,694421,140721,942803,35889,722678,e=>{"use strict";var t=e.i(271645),r=e.i(914189);e.s(["useControllable",0,function(e,n,i){let[s,a]=(0,t.useState)(i),l=void 0!==e,o=(0,t.useRef)(l),c=(0,t.useRef)(!1),u=(0,t.useRef)(!1);return!l||o.current||c.current?l||!o.current||u.current||(u.current=!0,o.current=l,console.error("A component is changing from controlled to uncontrolled. This may be caused by the value changing from a defined value to undefined, which should not happen.")):(c.current=!0,o.current=l,console.error("A component is changing from uncontrolled to controlled. This may be caused by the value changing from undefined to a defined value, which should not happen.")),[l?e:s,(0,r.useEvent)(e=>(l||a(e),null==n?void 0:n(e)))]}],503269),e.s(["useDefaultValue",0,function(e){let[r]=(0,t.useState)(e);return r}],214520);let n=(0,t.createContext)(void 0);function i(){return(0,t.useContext)(n)}e.s(["useDisabled",0,i],601893);var s=e.i(174080),a=e.i(746725);function l(e={},t=null,r=[]){for(let[n,i]of Object.entries(e))!function e(t,r,n){if(Array.isArray(n))for(let[i,s]of n.entries())e(t,o(r,i.toString()),s);else n instanceof Date?t.push([r,n.toISOString()]):"boolean"==typeof n?t.push([r,n?"1":"0"]):"string"==typeof n?t.push([r,n]):"number"==typeof n?t.push([r,`${n}`]):null==n?t.push([r,""]):l(n,r,t)}(r,o(t,n),i);return r}function o(e,t){return e?e+"["+t+"]":t}e.s(["attemptSubmit",0,function(e){var t,r;let n=null!=(t=null==e?void 0:e.form)?t:e.closest("form");if(n){for(let t of n.elements)if(t!==e&&("INPUT"===t.tagName&&"submit"===t.type||"BUTTON"===t.tagName&&"submit"===t.type||"INPUT"===t.nodeName&&"image"===t.type))return void t.click();null==(r=n.requestSubmit)||r.call(n)}},"objectToFormEntries",0,l],694421);var c=e.i(700020),u=e.i(2788);let d=(0,t.createContext)(null);function m({children:e}){let r=(0,t.useContext)(d);if(!r)return t.default.createElement(t.default.Fragment,null,e);let{target:n}=r;return n?(0,s.createPortal)(t.default.createElement(t.default.Fragment,null,e),n):null}function f({setForm:e,formId:r}){return(0,t.useEffect)(()=>{if(r){let t=document.getElementById(r);t&&e(t)}},[e,r]),r?null:t.default.createElement(u.Hidden,{features:u.HiddenFeatures.Hidden,as:"input",type:"hidden",hidden:!0,readOnly:!0,ref:t=>{if(!t)return;let r=t.closest("form");r&&e(r)}})}e.s(["FormFields",0,function({data:e,form:r,disabled:n,onReset:i,overrides:s}){let[o,d]=(0,t.useState)(null),h=(0,a.useDisposables)();return(0,t.useEffect)(()=>{if(i&&o)return h.addEventListener(o,"reset",i)},[o,r,i]),t.default.createElement(m,null,t.default.createElement(f,{setForm:d,formId:r}),l(e).map(([e,i])=>t.default.createElement(u.Hidden,{features:u.HiddenFeatures.Hidden,...(0,c.compact)({key:e,as:"input",type:"hidden",hidden:!0,readOnly:!0,form:r,disabled:n,name:e,value:i,...s})})))}],140721);let h=(0,t.createContext)(void 0);function p(){return(0,t.useContext)(h)}e.s(["useProvidedId",0,p],942803);var g=e.i(835696),x=e.i(294316);let v=(0,t.createContext)(null);v.displayName="DescriptionContext";let y=Object.assign((0,c.forwardRefWithAs)(function(e,r){let n=(0,t.useId)(),s=i(),{id:a=`headlessui-description-${n}`,...l}=e,o=function e(){let r=(0,t.useContext)(v);if(null===r){let t=Error("You used a component, but it is not inside a relevant parent.");throw Error.captureStackTrace&&Error.captureStackTrace(t,e),t}return r}(),u=(0,x.useSyncRefs)(r);(0,g.useIsoMorphicEffect)(()=>o.register(a),[a,o.register]);let d=s||!1,m=(0,t.useMemo)(()=>({...o.slot,disabled:d}),[o.slot,d]),f={ref:u,...o.props,id:a};return(0,c.useRender)()({ourProps:f,theirProps:l,slot:m,defaultTag:"p",name:o.name||"Description"})}),{});e.s(["Description",0,y,"useDescribedBy",0,function(){var e,r;return null!=(r=null==(e=(0,t.useContext)(v))?void 0:e.value)?r:void 0},"useDescriptions",0,function(){let[e,n]=(0,t.useState)([]);return[e.length>0?e.join(" "):void 0,(0,t.useMemo)(()=>function(e){let i=(0,r.useEvent)(e=>(n(t=>[...t,e]),()=>n(t=>{let r=t.slice(),n=r.indexOf(e);return -1!==n&&r.splice(n,1),r}))),s=(0,t.useMemo)(()=>({register:i,slot:e.slot,name:e.name,props:e.props,value:e.value}),[i,e.slot,e.name,e.props,e.value]);return t.default.createElement(v.Provider,{value:s},e.children)},[n])]}],35889);let b=(0,t.createContext)(null);function _(e){var r,n,i;let s=null!=(n=null==(r=(0,t.useContext)(b))?void 0:r.value)?n:void 0;return(null!=(i=null==e?void 0:e.length)?i:0)>0?[s,...e].filter(Boolean).join(" "):s}b.displayName="LabelContext";let j=Object.assign((0,c.forwardRefWithAs)(function(e,n){var s;let a=(0,t.useId)(),l=function e(){let r=(0,t.useContext)(b);if(null===r){let t=Error("You used a
+ + + + ${null!==t.daily_cost?"":""} + ${null!==t.monthly_cost?"":""} + + + + + ${null!==t.daily_cost?``:""} + ${null!==t.monthly_cost?``:""} + + + + + ${null!==t.daily_cost?``:""} + ${null!==t.monthly_cost?``:""} + + + + + ${null!==t.daily_cost?``:""} + ${null!==t.monthly_cost?``:""} + + + + + ${null!==t.daily_cost?``:""} + ${null!==t.monthly_cost?``:""} + +
Cost TypePer RequestDailyMonthly
Input Cost${eT(t.input_cost_per_request)}${eT(t.daily_input_cost)}${eT(t.monthly_input_cost)}
Output Cost${eT(t.output_cost_per_request)}${eT(t.daily_output_cost)}${eT(t.monthly_output_cost)}
Margin/Fee${eT(t.margin_cost_per_request)}${eT(t.daily_margin_cost)}${eT(t.monthly_margin_cost)}
Total${eT(t.cost_per_request)}${eT(t.daily_cost)}${eT(t.monthly_cost)}
+
+ `}).join("")} + + + + + `;t.document.write(a),t.document.close(),t.onload=()=>{t.print()}})(e),a(!1)},children:[(0,t.jsx)(e_.FilePdfOutlined,{className:"mr-3 text-red-500"}),"Export as PDF"]}),(0,t.jsxs)("button",{className:"flex items-center w-full px-4 py-2 text-sm text-gray-700 hover:bg-gray-50 transition-colors",onClick:()=>{(e=>{let t=e.entries.filter(e=>null!==e.result),s=[["LLM Multi-Model Cost Estimate Report"],["Generated",new Date().toLocaleString()],[""]];for(let r of(s.push(["COMBINED TOTALS"],["Total Per Request",e.totals.cost_per_request.toString()],["Total Daily",e.totals.daily_cost?.toString()||"-"],["Total Monthly",e.totals.monthly_cost?.toString()||"-"],["Margin Per Request",e.totals.margin_per_request.toString()],["Daily Margin",e.totals.daily_margin?.toString()||"-"],["Monthly Margin",e.totals.monthly_margin?.toString()||"-"],[""]),s.push(["Model","Provider","Input Tokens","Output Tokens","Requests/Day","Requests/Month","Cost/Request","Daily Cost","Monthly Cost","Input Cost/Req","Output Cost/Req","Margin/Req"]),t)){let e=r.result;s.push([e.model,e.provider||"-",e.input_tokens.toString(),e.output_tokens.toString(),e.num_requests_per_day?.toString()||"-",e.num_requests_per_month?.toString()||"-",e.cost_per_request.toString(),e.daily_cost?.toString()||"-",e.monthly_cost?.toString()||"-",e.input_cost_per_request.toString(),e.output_cost_per_request.toString(),e.margin_cost_per_request.toString()])}let r=new Blob([s.map(e=>e.map(e=>`"${e}"`).join(",")).join("\n")],{type:"text/csv;charset=utf-8;"}),a=window.URL.createObjectURL(r),l=document.createElement("a");l.href=a,l.download=`cost_estimate_multi_model_${new Date().toISOString().split("T")[0]}.csv`,document.body.appendChild(l),l.click(),document.body.removeChild(l),window.URL.revokeObjectURL(a)})(e),a(!1)},children:[(0,t.jsx)(eC,{className:"mr-3 text-green-600"}),"Export as CSV"]})]})]}):null},eP=e=>null==e?"-":0===e?"$0":e<1e-4?`$${e.toExponential(2)}`:e<1?`$${e.toFixed(4)}`:`$${(0,ej.formatNumberWithCommas)(e,2,!0)}`,eM=({result:e,loading:s,timePeriod:r})=>{let l="day"===r?"Daily":"Monthly",n="day"===r?e.daily_cost:e.monthly_cost,o="day"===r?e.daily_input_cost:e.monthly_input_cost,i="day"===r?e.daily_output_cost:e.monthly_output_cost,d="day"===r?e.daily_margin_cost:e.monthly_margin_cost,c="day"===r?e.num_requests_per_day:e.num_requests_per_month;return(0,t.jsxs)("div",{className:"space-y-3 bg-gray-50 p-4 rounded-lg",children:[s&&(0,t.jsxs)("div",{className:"flex items-center gap-2 text-gray-500 text-sm",children:[(0,t.jsx)(eg.Spin,{indicator:(0,t.jsx)(ef.LoadingOutlined,{spin:!0}),size:"small"}),(0,t.jsx)("span",{children:"Updating..."})]}),(0,t.jsxs)("div",{className:"grid grid-cols-4 gap-4",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)(a.Text,{className:"text-xs text-gray-500 block",children:"Total/Request"}),(0,t.jsx)(a.Text,{className:"text-base font-semibold text-blue-600",children:eP(e.cost_per_request)})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)(a.Text,{className:"text-xs text-gray-500 block",children:"Input Cost"}),(0,t.jsx)(a.Text,{className:"text-sm",children:eP(e.input_cost_per_request)})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)(a.Text,{className:"text-xs text-gray-500 block",children:"Output Cost"}),(0,t.jsx)(a.Text,{className:"text-sm",children:eP(e.output_cost_per_request)})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)(a.Text,{className:"text-xs text-gray-500 block",children:"Margin Fee"}),(0,t.jsx)(a.Text,{className:`text-sm ${e.margin_cost_per_request>0?"text-amber-600":""}`,children:eP(e.margin_cost_per_request)})]})]}),null!==n&&(0,t.jsxs)("div",{className:"grid grid-cols-4 gap-4 pt-2 border-t border-gray-200",children:[(0,t.jsxs)("div",{children:[(0,t.jsxs)(a.Text,{className:"text-xs text-gray-500 block",children:[l," Total (",null==c?"-":(0,ej.formatNumberWithCommas)(c,0,!0)," req)"]}),(0,t.jsx)(a.Text,{className:`text-base font-semibold ${"day"===r?"text-green-600":"text-purple-600"}`,children:eP(n)})]}),(0,t.jsxs)("div",{children:[(0,t.jsxs)(a.Text,{className:"text-xs text-gray-500 block",children:[l," Input"]}),(0,t.jsx)(a.Text,{className:"text-sm",children:eP(o)})]}),(0,t.jsxs)("div",{children:[(0,t.jsxs)(a.Text,{className:"text-xs text-gray-500 block",children:[l," Output"]}),(0,t.jsx)(a.Text,{className:"text-sm",children:eP(i)})]}),(0,t.jsxs)("div",{children:[(0,t.jsxs)(a.Text,{className:"text-xs text-gray-500 block",children:[l," Margin Fee"]}),(0,t.jsx)(a.Text,{className:`text-sm ${(d??0)>0?"text-amber-600":""}`,children:eP(d)})]})]}),(e.input_cost_per_token||e.output_cost_per_token)&&(0,t.jsxs)("div",{className:"text-xs text-gray-400 pt-2 border-t border-gray-200",children:["Token Pricing:"," ",e.input_cost_per_token&&(0,t.jsxs)("span",{children:["Input $",(0,ej.formatNumberWithCommas)(1e6*e.input_cost_per_token,2),"/1M"]}),e.input_cost_per_token&&e.output_cost_per_token&&" | ",e.output_cost_per_token&&(0,t.jsxs)("span",{children:["Output $",(0,ej.formatNumberWithCommas)(1e6*e.output_cost_per_token,2),"/1M"]})]})]})},eq=({multiResult:e,timePeriod:r})=>{let[n,o]=(0,s.useState)(new Set),i=e.entries.filter(e=>null!==e.result),d=e.entries.filter(e=>e.loading),c=e.entries.filter(e=>null!==e.error),m=i.length>0,u=d.length>0,x=c.length>0;if(!m&&!u&&!x)return(0,t.jsx)("div",{className:"py-6 text-center border border-dashed border-gray-300 rounded-lg bg-gray-50",children:(0,t.jsx)(a.Text,{className:"text-gray-500",children:"Select models above to see cost estimates"})});if(!m&&u&&!x)return(0,t.jsxs)("div",{className:"py-6 text-center",children:[(0,t.jsx)(eg.Spin,{indicator:(0,t.jsx)(ef.LoadingOutlined,{spin:!0})}),(0,t.jsx)(a.Text,{className:"text-gray-500 block mt-2",children:"Calculating costs..."})]});if(!m&&x)return(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsx)(ep.Divider,{className:"my-4"}),(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsx)(a.Text,{className:"text-base font-semibold text-gray-900",children:"Cost Estimates"}),u&&(0,t.jsx)(eg.Spin,{indicator:(0,t.jsx)(ef.LoadingOutlined,{spin:!0}),size:"small"})]}),c.map(e=>(0,t.jsxs)("div",{className:"text-sm text-red-600 bg-red-50 p-3 rounded-lg border border-red-200",children:[(0,t.jsxs)("span",{className:"font-medium",children:[e.entry.model||"Unknown model",": "]}),e.error]},e.entry.id))]});let p=e.totals.margin_per_request>0,g="day"===r?"Daily":"Monthly",h=[{title:"Model",dataIndex:"model",key:"model",render:(e,s)=>(0,t.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("span",{className:"font-medium text-sm",children:e}),s.provider&&(0,t.jsx)(eh.Tag,{color:"blue",className:"text-xs",children:s.provider}),s.loading&&(0,t.jsx)(eg.Spin,{indicator:(0,t.jsx)(ef.LoadingOutlined,{spin:!0}),size:"small"})]}),s.error&&(0,t.jsxs)("div",{className:"text-xs text-red-600 bg-red-50 px-2 py-1 rounded",children:["⚠️ ",s.error]}),s.hasZeroCost&&!s.error&&(0,t.jsx)("div",{className:"text-xs text-amber-600 bg-amber-50 px-2 py-1 rounded",children:"⚠️ No pricing data found for this model. Set base_model in config."})]})},{title:"Per Request",dataIndex:"cost_per_request",key:"cost_per_request",align:"right",render:(e,s)=>s.error?(0,t.jsx)("span",{className:"text-gray-400",children:"-"}):(0,t.jsx)("span",{className:"font-mono text-sm",children:eP(e)})},{title:"Margin Fee",dataIndex:"margin_cost_per_request",key:"margin_cost_per_request",align:"right",render:(e,s)=>s.error?(0,t.jsx)("span",{className:"text-gray-400",children:"-"}):(0,t.jsx)("span",{className:`font-mono text-sm ${(e??0)>0?"text-amber-600":"text-gray-400"}`,children:eP(e)})},{title:g,dataIndex:"day"===r?"daily_cost":"monthly_cost",key:"period_cost",align:"right",render:(e,s)=>s.error?(0,t.jsx)("span",{className:"text-gray-400",children:"-"}):(0,t.jsx)("span",{className:"font-mono text-sm",children:eP(e)})},{title:"",key:"expand",width:40,render:(e,s)=>s.error?null:(0,t.jsx)(l.Button,{size:"xs",variant:"light",onClick:()=>{var e;return e=s.id,void o(t=>{let s=new Set(t);return s.has(e)?s.delete(e):s.add(e),s})},className:"text-gray-400 hover:text-gray-600",children:n.has(s.id)?(0,t.jsx)(ey.DownOutlined,{}):(0,t.jsx)(ev.RightOutlined,{})})}],f=e.entries.filter(e=>e.entry.model).map(e=>({key:e.entry.id,id:e.entry.id,model:e.result?.model||e.entry.model,provider:e.result?.provider,cost_per_request:e.result?.cost_per_request??null,margin_cost_per_request:e.result?.margin_cost_per_request??null,daily_cost:e.result?.daily_cost??null,monthly_cost:e.result?.monthly_cost??null,error:e.error,loading:e.loading,hasZeroCost:e.result&&0===e.result.cost_per_request}));return(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsx)(ep.Divider,{className:"my-4"}),(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsx)(a.Text,{className:"text-base font-semibold text-gray-900",children:"Cost Estimates"}),(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[u&&(0,t.jsx)(eg.Spin,{indicator:(0,t.jsx)(ef.LoadingOutlined,{spin:!0}),size:"small"}),(0,t.jsx)(e$,{multiResult:e})]})]}),(0,t.jsxs)(W.Card,{size:"small",className:"bg-gradient-to-r from-slate-50 to-blue-50 border-slate-200",children:[(0,t.jsxs)(eu.Row,{gutter:[16,8],children:[(0,t.jsx)(ex.Col,{xs:24,sm:12,children:(0,t.jsx)(eo,{title:(0,t.jsx)("span",{className:"text-xs",children:"Total Per Request"}),value:eP(e.totals.cost_per_request),valueStyle:{color:"#1890ff",fontSize:"18px",fontFamily:"monospace"}})}),(0,t.jsx)(ex.Col,{xs:24,sm:12,children:(0,t.jsx)(eo,{title:(0,t.jsxs)("span",{className:"text-xs",children:["Total ",g]}),value:eP("day"===r?e.totals.daily_cost:e.totals.monthly_cost),valueStyle:{color:"day"===r?"#52c41a":"#722ed1",fontSize:"18px",fontFamily:"monospace"}})})]}),p&&(0,t.jsxs)(eu.Row,{gutter:[16,8],className:"mt-3 pt-3 border-t border-slate-200",children:[(0,t.jsxs)(ex.Col,{xs:24,sm:12,children:[(0,t.jsx)("div",{className:"text-xs text-gray-500",children:"Margin Fee/Request"}),(0,t.jsx)("div",{className:"text-sm font-mono text-amber-600",children:eP(e.totals.margin_per_request)})]}),(0,t.jsxs)(ex.Col,{xs:24,sm:12,children:[(0,t.jsxs)("div",{className:"text-xs text-gray-500",children:[g," Margin Fee"]}),(0,t.jsx)("div",{className:"text-sm font-mono text-amber-600",children:eP("day"===r?e.totals.daily_margin:e.totals.monthly_margin)})]})]})]}),f.length>0&&(0,t.jsx)(z.Table,{columns:h,dataSource:f,pagination:!1,size:"small",className:"border border-gray-200 rounded-lg",expandable:{expandedRowKeys:Array.from(n),expandedRowRender:e=>{let s=i.find(t=>t.entry.id===e.id);return s?.result?(0,t.jsx)("div",{className:"py-2",children:(0,t.jsx)(eM,{result:s.result,loading:s.loading,timePeriod:r})}):null},showExpandColumn:!1}})]})};var eO=e.i(602869);let eE=()=>({id:`entry-${Date.now()}-${Math.random().toString(36).substr(2,9)}`,model:"",input_tokens:1e3,output_tokens:500,num_requests_per_day:void 0,num_requests_per_month:void 0}),eF=({accessToken:e,models:r})=>{let[a,l]=(0,s.useState)([eE()]),[n,o]=(0,s.useState)("month"),{debouncedFetchForEntry:i,removeEntry:d,getMultiModelResult:c}=function(e){let[t,r]=(0,s.useState)(new Map),a=(0,s.useRef)(new Map),l=(0,s.useCallback)(async t=>{if(!e||!t.model)return void r(e=>{let s=new Map(e);return s.set(t.id,{entry:t,result:null,loading:!1,error:null}),s});r(e=>{let s=new Map(e),r=s.get(t.id);return s.set(t.id,{entry:t,result:r?.result??null,loading:!0,error:null}),s});try{let s=(0,eO.getProxyBaseUrl)(),a=s?`${s}/cost/estimate`:"/cost/estimate",l={model:t.model,input_tokens:t.input_tokens||0,output_tokens:t.output_tokens||0,num_requests_per_day:t.num_requests_per_day||null,num_requests_per_month:t.num_requests_per_month||null},n=await fetch(a,{method:"POST",headers:{[(0,eO.getGlobalLitellmHeaderName)()]:`Bearer ${e}`,"Content-Type":"application/json"},body:JSON.stringify(l)});if(n.ok){let e=await n.json();r(s=>{let r=new Map(s);return r.set(t.id,{entry:t,result:e,loading:!1,error:null}),r})}else{let e=await n.json(),s=e.detail?.error||e.detail||"Failed to estimate cost";r(e=>{let r=new Map(e);return r.set(t.id,{entry:t,result:null,loading:!1,error:s}),r})}}catch(e){console.error("Error estimating cost:",e),r(e=>{let s=new Map(e);return s.set(t.id,{entry:t,result:null,loading:!1,error:"Network error"}),s})}},[e]),n=(0,s.useCallback)(e=>{let t=a.current.get(e.id);t&&clearTimeout(t);let s=setTimeout(()=>{l(e)},500);a.current.set(e.id,s)},[l]),o=(0,s.useCallback)(e=>{let t=a.current.get(e);t&&(clearTimeout(t),a.current.delete(e)),r(t=>{let s=new Map(t);return s.delete(e),s})},[]);return(0,s.useEffect)(()=>{let e=a.current;return()=>{e.forEach(e=>clearTimeout(e)),e.clear()}},[]),{debouncedFetchForEntry:n,removeEntry:o,getMultiModelResult:(0,s.useCallback)(e=>{let s=e.map(e=>{let s=t.get(e.id);return{entry:e,result:s?.result??null,loading:s?.loading??!1,error:s?.error??null}}),r=0,a=null,l=null,n=0,o=null,i=null;for(let e of s)e.result&&(r+=e.result.cost_per_request,n+=e.result.margin_cost_per_request,null!==e.result.daily_cost&&(a=(a??0)+e.result.daily_cost),null!==e.result.daily_margin_cost&&(o=(o??0)+e.result.daily_margin_cost),null!==e.result.monthly_cost&&(l=(l??0)+e.result.monthly_cost),null!==e.result.monthly_margin_cost&&(i=(i??0)+e.result.monthly_margin_cost));return{entries:s,totals:{cost_per_request:r,daily_cost:a,monthly_cost:l,margin_per_request:n,daily_margin:o,monthly_margin:i}}},[t])}}(e),m=(0,s.useCallback)((e,t,s)=>{l(r=>{let a=r.map(r=>r.id===e?{...r,[t]:s}:r),l=a.find(t=>t.id===e);return l&&l.model&&i(l),a})},[i]),u=(0,s.useCallback)(e=>{o(e),l(t=>t.map(t=>({...t,num_requests_per_day:"day"===e?t.num_requests_per_day:void 0,num_requests_per_month:"month"===e?t.num_requests_per_month:void 0})))},[]),x=(0,s.useCallback)(()=>{l(e=>[...e,eE()])},[]),p=(0,s.useCallback)(e=>{l(t=>t.filter(t=>t.id!==e)),d(e)},[d]),g=c(a),h=[{title:"Model",dataIndex:"model",key:"model",width:"35%",render:(e,s)=>(0,t.jsx)(F.Select,{showSearch:!0,placeholder:"Select a model",value:s.model||void 0,onChange:e=>m(s.id,"model",e),optionFilterProp:"label",filterOption:(e,t)=>String(t?.label??"").toLowerCase().includes(e.toLowerCase()),options:r.map(e=>({value:e,label:e})),style:{width:"100%"},size:"small"})},{title:"Input Tokens",dataIndex:"input_tokens",key:"input_tokens",width:"18%",render:(e,s)=>(0,t.jsx)(H.InputNumber,{min:0,value:s.input_tokens,onChange:e=>m(s.id,"input_tokens",e??0),style:{width:"100%"},size:"small",formatter:e=>`${e}`.replace(/\B(?=(\d{3})+(?!\d))/g,",")})},{title:"Output Tokens",dataIndex:"output_tokens",key:"output_tokens",width:"18%",render:(e,s)=>(0,t.jsx)(H.InputNumber,{min:0,value:s.output_tokens,onChange:e=>m(s.id,"output_tokens",e??0),style:{width:"100%"},size:"small",formatter:e=>`${e}`.replace(/\B(?=(\d{3})+(?!\d))/g,",")})},{title:`Requests/${"day"===n?"Day":"Month"}`,dataIndex:"day"===n?"num_requests_per_day":"num_requests_per_month",key:"num_requests",width:"20%",render:(e,s)=>(0,t.jsx)(H.InputNumber,{min:0,value:"day"===n?s.num_requests_per_day:s.num_requests_per_month,onChange:e=>m(s.id,"day"===n?"num_requests_per_day":"num_requests_per_month",e??void 0),style:{width:"100%"},size:"small",placeholder:"-",formatter:e=>e?`${e}`.replace(/\B(?=(\d{3})+(?!\d))/g,","):""})},{title:"",key:"actions",width:50,render:(e,s)=>(0,t.jsx)(G.Button,{type:"text",icon:(0,t.jsx)(V.DeleteOutlined,{}),onClick:()=>p(s.id),disabled:1===a.length,danger:!0,size:"small"})}];return(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsx)("div",{className:"flex items-center justify-end mb-2",children:(0,t.jsxs)(A.Radio.Group,{value:n,onChange:e=>u(e.target.value),size:"small",optionType:"button",buttonStyle:"solid",children:[(0,t.jsx)(A.Radio.Button,{value:"day",children:"Per Day"}),(0,t.jsx)(A.Radio.Button,{value:"month",children:"Per Month"})]})}),(0,t.jsx)(z.Table,{columns:h,dataSource:a,rowKey:"id",pagination:!1,size:"small",footer:()=>(0,t.jsx)(G.Button,{type:"dashed",onClick:x,icon:(0,t.jsx)(U.PlusOutlined,{}),className:"w-full",children:"Add Another Model"})}),(0,t.jsx)(eq,{multiResult:g,timePeriod:n})]})};var eR=e.i(270377),eL=e.i(778917),eI=e.i(664659);let eD=({items:e,children:r="Docs",className:a=""})=>{let[l,n]=(0,s.useState)(!1),o=(0,s.useRef)(null);return(0,s.useEffect)(()=>{let e=e=>{o.current&&!o.current.contains(e.target)&&n(!1)};return l&&document.addEventListener("mousedown",e),()=>{document.removeEventListener("mousedown",e)}},[l]),(0,t.jsxs)("div",{className:`relative inline-block ${a}`,ref:o,children:[(0,t.jsxs)("button",{type:"button",onClick:()=>n(!l),className:"inline-flex items-center gap-1 text-gray-500 hover:text-gray-700 text-xs transition-colors focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-1 rounded px-2 py-1","aria-expanded":l,"aria-haspopup":"true",children:[(0,t.jsx)("span",{children:r}),(0,t.jsx)(eI.ChevronDown,{className:`h-3 w-3 transition-transform ${l?"rotate-180":""}`,"aria-hidden":"true"})]}),l&&(0,t.jsx)("div",{className:"absolute right-0 mt-1 w-56 bg-white rounded-lg shadow-lg border border-gray-200 py-1 z-50",children:e.map((e,s)=>(0,t.jsxs)("a",{href:e.href,target:"_blank",rel:"noopener noreferrer",className:"flex items-center justify-between px-4 py-2 text-sm text-gray-700 hover:bg-gray-50 transition-colors",onClick:()=>n(!1),children:[(0,t.jsx)("span",{children:e.label}),(0,t.jsx)(eL.ExternalLink,{className:"h-3.5 w-3.5 text-gray-400 flex-shrink-0 ml-2","aria-hidden":"true"})]},s))})]})};var eA=e.i(673709);let eB=()=>{let[e,r]=(0,s.useState)(""),[l,n]=(0,s.useState)(""),o=(0,s.useMemo)(()=>{let t=parseFloat(e),s=parseFloat(l);if(isNaN(t)||isNaN(s)||0===t||0===s)return null;let r=t+s,a=s/r*100;return{originalCost:r.toFixed(10),finalCost:t.toFixed(10),discountAmount:s.toFixed(10),discountPercentage:a.toFixed(2)}},[e,l]);return(0,t.jsxs)("div",{className:"space-y-4 pt-2",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)(a.Text,{className:"font-medium text-gray-900 text-sm mb-1",children:"Cost Calculation"}),(0,t.jsxs)(a.Text,{className:"text-xs text-gray-600",children:["Discounts are applied to provider costs:"," ",(0,t.jsx)("code",{className:"bg-gray-100 px-1.5 py-0.5 rounded text-xs",children:"final_cost = base_cost × (1 - discount%/100)"})]})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)(a.Text,{className:"font-medium text-gray-900 text-sm mb-1",children:"Example"}),(0,t.jsx)(a.Text,{className:"text-xs text-gray-600",children:"A 5% discount on a $10.00 request results in: $10.00 × (1 - 0.05) = $9.50"})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)(a.Text,{className:"font-medium text-gray-900 text-sm mb-1",children:"Valid Range"}),(0,t.jsx)(a.Text,{className:"text-xs text-gray-600",children:"Discount percentages must be between 0% and 100%"})]}),(0,t.jsxs)("div",{className:"pt-4 border-t border-gray-200",children:[(0,t.jsx)(a.Text,{className:"font-medium text-gray-900 text-sm mb-2",children:"Validating Discounts"}),(0,t.jsx)(a.Text,{className:"text-xs text-gray-600 mb-3",children:"Make a test request and check the response headers to verify discounts are applied:"}),(0,t.jsx)(eA.default,{language:"bash",code:`curl -X POST -i http://your-proxy:4000/chat/completions \\ + -H "Content-Type: application/json" \\ + -H "Authorization: Bearer sk-1234" \\ + -d '{ + "model": "gemini/gemini-2.5-pro", + "messages": [{"role": "user", "content": "Hello"}] + }'`}),(0,t.jsx)(a.Text,{className:"text-xs text-gray-600 mt-3 mb-2",children:"Look for these headers in the response:"}),(0,t.jsxs)("div",{className:"space-y-1.5",children:[(0,t.jsxs)("div",{className:"flex items-start gap-3",children:[(0,t.jsx)("code",{className:"bg-gray-100 px-2 py-1 rounded text-xs font-mono text-gray-800 whitespace-nowrap",children:"x-litellm-response-cost"}),(0,t.jsx)(a.Text,{className:"text-xs text-gray-600",children:"Final cost after discount"})]}),(0,t.jsxs)("div",{className:"flex items-start gap-3",children:[(0,t.jsx)("code",{className:"bg-gray-100 px-2 py-1 rounded text-xs font-mono text-gray-800 whitespace-nowrap",children:"x-litellm-response-cost-original"}),(0,t.jsx)(a.Text,{className:"text-xs text-gray-600",children:"Original cost before discount"})]}),(0,t.jsxs)("div",{className:"flex items-start gap-3",children:[(0,t.jsx)("code",{className:"bg-gray-100 px-2 py-1 rounded text-xs font-mono text-gray-800 whitespace-nowrap",children:"x-litellm-response-cost-discount-amount"}),(0,t.jsx)(a.Text,{className:"text-xs text-gray-600",children:"Amount discounted"})]})]})]}),(0,t.jsxs)("div",{className:"pt-4 border-t border-gray-200",children:[(0,t.jsx)(a.Text,{className:"font-medium text-gray-900 text-sm mb-3",children:"Discount Calculator"}),(0,t.jsx)(a.Text,{className:"text-xs text-gray-600 mb-3",children:"Enter values from your response headers to verify the discount:"}),(0,t.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 mb-4",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"block text-xs font-medium text-gray-700 mb-1",children:"Response Cost (x-litellm-response-cost)"}),(0,t.jsx)(h.TextInput,{placeholder:"0.0171938125",value:e,onValueChange:r,className:"text-sm"})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"block text-xs font-medium text-gray-700 mb-1",children:"Discount Amount (x-litellm-response-cost-discount-amount)"}),(0,t.jsx)(h.TextInput,{placeholder:"0.0009049375",value:l,onValueChange:n,className:"text-sm"})]})]}),o&&(0,t.jsxs)("div",{className:"bg-blue-50 border border-blue-200 rounded-lg p-4",children:[(0,t.jsx)(a.Text,{className:"text-sm font-medium text-blue-900 mb-2",children:"Calculated Results"}),(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsx)(a.Text,{className:"text-xs text-blue-800",children:"Original Cost:"}),(0,t.jsxs)("code",{className:"text-xs font-mono text-blue-900",children:["$",o.originalCost]})]}),(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsx)(a.Text,{className:"text-xs text-blue-800",children:"Final Cost:"}),(0,t.jsxs)("code",{className:"text-xs font-mono text-blue-900",children:["$",o.finalCost]})]}),(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsx)(a.Text,{className:"text-xs text-blue-800",children:"Discount Amount:"}),(0,t.jsxs)("code",{className:"text-xs font-mono text-blue-900",children:["$",o.discountAmount]})]}),(0,t.jsxs)("div",{className:"flex items-center justify-between pt-2 border-t border-blue-300",children:[(0,t.jsx)(a.Text,{className:"text-xs font-semibold text-blue-900",children:"Discount Applied:"}),(0,t.jsxs)(a.Text,{className:"text-sm font-bold text-blue-900",children:[o.discountPercentage,"%"]})]})]})]})]})]})};var ez=e.i(727749),eH=e.i(695411);let eG=[{label:"Custom pricing for models",href:"https://docs.litellm.ai/docs/proxy/custom_pricing"},{label:"Spend tracking",href:"https://docs.litellm.ai/docs/proxy/cost_tracking"}],eV=({userID:e,userRole:h,accessToken:f})=>{let[y,v]=(0,s.useState)(void 0),[j,b]=(0,s.useState)(""),[_,N]=(0,s.useState)(!0),[w,k]=(0,s.useState)(!1),[C,T]=(0,s.useState)(!1),[S,P]=(0,s.useState)(void 0),[M,O]=(0,s.useState)("percentage"),[F,R]=(0,s.useState)(""),[L,A]=(0,s.useState)(""),[z,H]=(0,s.useState)([]),[G]=g.Form.useForm(),[V]=g.Form.useForm(),[U,W]=p.Modal.useModal(),K="proxy_admin"===h||"Admin"===h,{discountConfig:J,fetchDiscountConfig:X,handleAddProvider:Y,handleRemoveProvider:Z,handleDiscountChange:Q}=function({accessToken:e}){let[t,r]=(0,s.useState)({}),a=(0,s.useCallback)(async()=>{try{let t=(0,eO.getProxyBaseUrl)(),s=t?`${t}/config/cost_discount_config`:"/config/cost_discount_config",a=await fetch(s,{method:"GET",headers:{[(0,eO.getGlobalLitellmHeaderName)()]:`Bearer ${e}`,"Content-Type":"application/json"}});if(a.ok){let e=await a.json();r(e.values||{})}else console.error("Failed to fetch discount config")}catch(e){console.error("Error fetching discount config:",e),ez.default.fromBackend("Failed to fetch discount configuration")}},[e]),l=(0,s.useCallback)(async t=>{try{let s=(0,eO.getProxyBaseUrl)(),r=s?`${s}/config/cost_discount_config`:"/config/cost_discount_config",l=await fetch(r,{method:"PATCH",headers:{[(0,eO.getGlobalLitellmHeaderName)()]:`Bearer ${e}`,"Content-Type":"application/json"},body:JSON.stringify(t)});if(l.ok)ez.default.success("Discount configuration updated successfully"),await a();else{let e=await l.json(),t=e.detail?.error||e.detail||"Failed to update settings";ez.default.fromBackend(t)}}catch(e){console.error("Error updating discount config:",e),ez.default.fromBackend("Failed to update discount configuration")}},[e,a]),n=(0,s.useCallback)(async(e,s)=>{if(!e||!s)return ez.default.fromBackend("Please select a provider and enter discount percentage"),!1;let a=parseFloat(s);if(isNaN(a)||a<0||a>100)return ez.default.fromBackend("Discount must be between 0% and 100%"),!1;let n=q(e);if(!n)return ez.default.fromBackend("Invalid provider selected"),!1;if(t[n])return ez.default.fromBackend(`Discount for ${$.Providers[e]} already exists. Edit it in the table above.`),!1;let o={...t,[n]:a/100};return r(o),await l(o),!0},[t,l]),o=(0,s.useCallback)(async e=>{let s={...t};delete s[e],r(s),await l(s)},[t,l]),i=(0,s.useCallback)(async(e,s)=>{let a=parseFloat(s);if(!isNaN(a)&&a>=0&&a<=1){let s={...t,[e]:a};r(s),await l(s)}},[t,l]);return{discountConfig:t,setDiscountConfig:r,fetchDiscountConfig:a,saveDiscountConfig:l,handleAddProvider:n,handleRemoveProvider:o,handleDiscountChange:i}}({accessToken:f}),{marginConfig:ee,fetchMarginConfig:et,handleAddMargin:es,handleRemoveMargin:er,handleMarginChange:ea}=function({accessToken:e}){let[t,r]=(0,s.useState)({}),a=(0,s.useCallback)(async()=>{try{let t=(0,eO.getProxyBaseUrl)(),s=t?`${t}/config/cost_margin_config`:"/config/cost_margin_config",a=await fetch(s,{method:"GET",headers:{[(0,eO.getGlobalLitellmHeaderName)()]:`Bearer ${e}`,"Content-Type":"application/json"}});if(a.ok){let e=await a.json();r(e.values||{})}else console.error("Failed to fetch margin config")}catch(e){console.error("Error fetching margin config:",e),ez.default.fromBackend("Failed to fetch margin configuration")}},[e]),l=(0,s.useCallback)(async t=>{try{let s=(0,eO.getProxyBaseUrl)(),r=s?`${s}/config/cost_margin_config`:"/config/cost_margin_config",l=await fetch(r,{method:"PATCH",headers:{[(0,eO.getGlobalLitellmHeaderName)()]:`Bearer ${e}`,"Content-Type":"application/json"},body:JSON.stringify(t)});if(l.ok)ez.default.success("Margin configuration updated successfully"),await a();else{let e=await l.json(),t=e.detail?.error||e.detail||"Failed to update settings";ez.default.fromBackend(t)}}catch(e){console.error("Error updating margin config:",e),ez.default.fromBackend("Failed to update margin configuration")}},[e,a]),n=(0,s.useCallback)(async e=>{let s,a,{selectedProvider:n,marginType:o,percentageValue:i,fixedAmountValue:d}=e;if(!n)return ez.default.fromBackend("Please select a provider"),!1;if("global"===n)s="global";else{let e=q(n);if(!e)return ez.default.fromBackend("Invalid provider selected"),!1;s=e}if(t[s]){let e="global"===s?"Global":$.Providers[n];return ez.default.fromBackend(`Margin for ${e} already exists. Edit it in the table above.`),!1}if("percentage"===o){let e=parseFloat(i);if(isNaN(e)||e<0||e>1e3)return ez.default.fromBackend("Percentage must be between 0% and 1000%"),!1;a=e/100}else{let e=parseFloat(d);if(isNaN(e)||e<0)return ez.default.fromBackend("Fixed amount must be non-negative"),!1;a={fixed_amount:e}}let c={...t,[s]:a};return r(c),await l(c),!0},[t,l]),o=(0,s.useCallback)(async e=>{let s={...t};delete s[e],r(s),await l(s)},[t,l]),i=(0,s.useCallback)(async(e,s)=>{let a={...t,[e]:s};r(a),await l(a)},[t,l]);return{marginConfig:t,setMarginConfig:r,fetchMarginConfig:a,saveMarginConfig:l,handleAddMargin:n,handleRemoveMargin:o,handleMarginChange:i}}({accessToken:f});(0,s.useEffect)(()=>{f&&(Promise.all([X(),et()]).finally(()=>{N(!1)}),(async()=>{try{let e=await (0,eH.fetchAvailableModels)(f);H(e.map(e=>e.model_group))}catch(e){console.error("Error fetching models:",e)}})())},[f,X,et]);let el=async()=>{await Y(y,j)&&(v(void 0),b(""),k(!1))},en=async(e,s)=>{U.confirm({title:"Remove Provider Discount",icon:(0,t.jsx)(eR.ExclamationCircleOutlined,{}),content:`Are you sure you want to remove the discount for ${s}?`,okText:"Remove",okType:"danger",cancelText:"Cancel",onOk:()=>Z(e)})},eo=async()=>{await es({selectedProvider:S,marginType:M,percentageValue:F,fixedAmountValue:L})&&(P(void 0),R(""),A(""),O("percentage"),T(!1))},ei=async(e,s)=>{U.confirm({title:"Remove Provider Margin",icon:(0,t.jsx)(eR.ExclamationCircleOutlined,{}),content:`Are you sure you want to remove the margin for ${s}?`,okText:"Remove",okType:"danger",cancelText:"Cancel",onOk:()=>er(e)})};return f?(0,t.jsxs)("div",{className:"w-full p-8",children:[W,(0,t.jsx)("div",{className:"flex flex-col md:flex-row items-start md:items-center justify-between mb-6",children:(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(r.Title,{children:"Cost Tracking Settings"}),(0,t.jsx)(eD,{items:eG})]}),(0,t.jsx)(a.Text,{className:"text-gray-500 mt-1",children:"Configure cost discounts and margins for different LLM providers. Changes are saved automatically."})]})}),(0,t.jsxs)("div",{className:"bg-white rounded-lg shadow w-full max-w-full space-y-4",children:[K&&(0,t.jsxs)(n.Accordion,{children:[(0,t.jsx)(o.AccordionHeader,{className:"px-6 py-4",children:(0,t.jsxs)("div",{className:"flex flex-col items-start w-full",children:[(0,t.jsx)(a.Text,{className:"text-lg font-semibold text-gray-900",children:"Provider Discounts"}),(0,t.jsx)(a.Text,{className:"text-sm text-gray-500 mt-1",children:"Apply percentage-based discounts to reduce costs for specific providers"})]})}),(0,t.jsx)(i.AccordionBody,{className:"px-0",children:(0,t.jsxs)(d.TabGroup,{children:[(0,t.jsxs)(c.TabList,{className:"px-6 pt-4",children:[(0,t.jsx)(m.Tab,{children:"Discounts"}),(0,t.jsx)(m.Tab,{children:"Test It"})]}),(0,t.jsxs)(u.TabPanels,{children:[(0,t.jsx)(x.TabPanel,{children:(0,t.jsxs)("div",{className:"p-6",children:[(0,t.jsx)("div",{className:"flex justify-end mb-4",children:(0,t.jsx)(l.Button,{onClick:()=>k(!0),children:"+ Add Provider Discount"})}),_?(0,t.jsx)("div",{className:"py-12 text-center",children:(0,t.jsx)(a.Text,{className:"text-gray-500",children:"Loading configuration..."})}):Object.keys(J).length>0?(0,t.jsx)(E,{discountConfig:J,onDiscountChange:Q,onRemoveProvider:en}):(0,t.jsxs)("div",{className:"py-16 px-6 text-center",children:[(0,t.jsx)("svg",{className:"mx-auto h-12 w-12 text-gray-400 mb-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})}),(0,t.jsx)(a.Text,{className:"text-gray-700 font-medium mb-2",children:"No provider discounts configured"}),(0,t.jsx)(a.Text,{className:"text-gray-500 text-sm",children:'Click "Add Provider Discount" to get started'})]})]})}),(0,t.jsx)(x.TabPanel,{children:(0,t.jsx)("div",{className:"px-6 pb-4",children:(0,t.jsx)(eB,{})})})]})]})})]}),K&&(0,t.jsxs)(n.Accordion,{children:[(0,t.jsx)(o.AccordionHeader,{className:"px-6 py-4",children:(0,t.jsxs)("div",{className:"flex flex-col items-start w-full",children:[(0,t.jsx)(a.Text,{className:"text-lg font-semibold text-gray-900",children:"Fee/Price Margin"}),(0,t.jsx)(a.Text,{className:"text-sm text-gray-500 mt-1",children:"Add fees or margins to LLM costs for internal billing and cost recovery"})]})}),(0,t.jsx)(i.AccordionBody,{className:"px-0",children:(0,t.jsxs)("div",{className:"p-6",children:[(0,t.jsx)("div",{className:"flex justify-end mb-4",children:(0,t.jsx)(l.Button,{onClick:()=>T(!0),children:"+ Add Provider Margin"})}),_?(0,t.jsx)("div",{className:"py-12 text-center",children:(0,t.jsx)(a.Text,{className:"text-gray-500",children:"Loading configuration..."})}):Object.keys(ee).length>0?(0,t.jsx)(D,{marginConfig:ee,onMarginChange:ea,onRemoveProvider:ei}):(0,t.jsxs)("div",{className:"py-16 px-6 text-center",children:[(0,t.jsx)("svg",{className:"mx-auto h-12 w-12 text-gray-400 mb-4",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:1.5,d:"M12 8c-1.657 0-3 .895-3 2s1.343 2 3 2 3 .895 3 2-1.343 2-3 2m0-8c1.11 0 2.08.402 2.599 1M12 8V7m0 1v8m0 0v1m0-1c-1.11 0-2.08-.402-2.599-1M21 12a9 9 0 11-18 0 9 9 0 0118 0z"})}),(0,t.jsx)(a.Text,{className:"text-gray-700 font-medium mb-2",children:"No provider margins configured"}),(0,t.jsx)(a.Text,{className:"text-gray-500 text-sm",children:'Click "Add Provider Margin" to get started'})]})]})})]}),(0,t.jsxs)(n.Accordion,{defaultOpen:!0,children:[(0,t.jsx)(o.AccordionHeader,{className:"px-6 py-4",children:(0,t.jsxs)("div",{className:"flex flex-col items-start w-full",children:[(0,t.jsx)(a.Text,{className:"text-lg font-semibold text-gray-900",children:"Pricing Calculator"}),(0,t.jsx)(a.Text,{className:"text-sm text-gray-500 mt-1",children:"Estimate LLM costs based on expected token usage and request volume"})]})}),(0,t.jsx)(i.AccordionBody,{className:"px-0",children:(0,t.jsx)("div",{className:"p-6",children:(0,t.jsx)(eF,{accessToken:f,models:z})})})]})]}),(0,t.jsx)(p.Modal,{title:(0,t.jsx)("div",{className:"flex items-center space-x-3 pb-4 border-b border-gray-100",children:(0,t.jsx)("h2",{className:"text-xl font-semibold text-gray-900",children:"Add Provider Discount"})}),open:w,width:1e3,onCancel:()=>{k(!1),G.resetFields(),v(void 0),b("")},footer:null,className:"top-8",styles:{body:{padding:"24px"},header:{padding:"24px 24px 0 24px",border:"none"}},children:(0,t.jsxs)("div",{className:"mt-6",children:[(0,t.jsx)(a.Text,{className:"text-sm text-gray-600 mb-6",children:"Select a provider and set its discount percentage. Enter a value between 0% and 100% (e.g., 5 for a 5% discount)."}),(0,t.jsx)(g.Form,{form:G,onFinish:()=>{el()},layout:"vertical",className:"space-y-6",children:(0,t.jsx)(I,{discountConfig:J,selectedProvider:y,newDiscount:j,onProviderChange:v,onDiscountChange:b,onAddProvider:el})})]})}),(0,t.jsx)(p.Modal,{title:(0,t.jsx)("div",{className:"flex items-center space-x-3 pb-4 border-b border-gray-100",children:(0,t.jsx)("h2",{className:"text-xl font-semibold text-gray-900",children:"Add Provider Margin"})}),open:C,width:1e3,onCancel:()=>{T(!1),V.resetFields(),P(void 0),R(""),A(""),O("percentage")},footer:null,className:"top-8",styles:{body:{padding:"24px"},header:{padding:"24px 24px 0 24px",border:"none"}},children:(0,t.jsxs)("div",{className:"mt-6",children:[(0,t.jsx)(a.Text,{className:"text-sm text-gray-600 mb-6",children:'Select a provider (or "Global" for all providers) and configure the margin. You can use percentage-based or fixed amount.'}),(0,t.jsx)(g.Form,{form:V,layout:"vertical",className:"space-y-6",children:(0,t.jsx)(B,{marginConfig:ee,selectedProvider:S,marginType:M,percentageValue:F,fixedAmountValue:L,onProviderChange:P,onMarginTypeChange:O,onPercentageChange:R,onFixedAmountChange:A,onAddProvider:eo})})]})})]}):null};var eU=e.i(135214);e.s(["default",0,function(){let{accessToken:e,userRole:s,userId:r}=(0,eU.default)();return(0,t.jsx)(eV,{userID:r,userRole:s,accessToken:e})}],193317)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0hzdsr8t0ksq..js b/litellm/proxy/_experimental/out/_next/static/chunks/0hzdsr8t0ksq..js new file mode 100644 index 00000000000..7827eed004d --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0hzdsr8t0ksq..js @@ -0,0 +1,2 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,184163,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let n={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M505.7 661a8 8 0 0012.6 0l112-141.7c4.1-5.2.4-12.9-6.3-12.9h-74.1V168c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v338.3H400c-6.7 0-10.4 7.7-6.3 12.9l112 141.8zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"}}]},name:"download",theme:"outlined"};var i=e.i(9583),s=r.forwardRef(function(e,s){return r.createElement(i.default,(0,t.default)({},e,{ref:s,icon:n}))});e.s(["default",0,s],184163)},309821,e=>{"use strict";e.i(247167);var t=e.i(271645),r=e.i(135551),n=e.i(201072),i=e.i(121229),s=e.i(726289),a=e.i(864517),l=e.i(343794),o=e.i(529681),u=e.i(242064),c=e.i(931067),d=e.i(209428),m=e.i(703923),f={percent:0,prefixCls:"rc-progress",strokeColor:"#2db7f5",strokeLinecap:"round",strokeWidth:1,trailColor:"#D9D9D9",trailWidth:1,gapPosition:"bottom"},p=function(){var e=(0,t.useRef)([]),r=(0,t.useRef)(null);return(0,t.useEffect)(function(){var t=Date.now(),n=!1;e.current.forEach(function(e){if(e){n=!0;var i=e.style;i.transitionDuration=".3s, .3s, .3s, .06s",r.current&&t-r.current<100&&(i.transitionDuration="0s, 0s")}}),n&&(r.current=Date.now())}),e.current},h=e.i(410160),g=e.i(392221),x=e.i(654310),v=0,y=(0,x.default)();let b=function(e){var r=t.useState(),n=(0,g.default)(r,2),i=n[0],s=n[1];return t.useEffect(function(){var e;s("rc_progress_".concat((y?(e=v,v+=1):e="TEST_OR_SSR",e)))},[]),e||i};var _=function(e){var r=e.bg,n=e.children;return t.createElement("div",{style:{width:"100%",height:"100%",background:r}},n)};function w(e,t){return Object.keys(e).map(function(r){var n=parseFloat(r),i="".concat(Math.floor(n*t),"%");return"".concat(e[r]," ").concat(i)})}var j=t.forwardRef(function(e,r){var n=e.prefixCls,i=e.color,s=e.gradientId,a=e.radius,l=e.style,o=e.ptg,u=e.strokeLinecap,c=e.strokeWidth,d=e.size,m=e.gapDegree,f=i&&"object"===(0,h.default)(i),p=d/2,g=t.createElement("circle",{className:"".concat(n,"-circle-path"),r:a,cx:p,cy:p,stroke:f?"#FFF":void 0,strokeLinecap:u,strokeWidth:c,opacity:+(0!==o),style:l,ref:r});if(!f)return g;var x="".concat(s,"-conic"),v=w(i,(360-m)/360),y=w(i,1),b="conic-gradient(from ".concat(m?"".concat(180+m/2,"deg"):"0deg",", ").concat(v.join(", "),")"),j="linear-gradient(to ".concat(m?"bottom":"top",", ").concat(y.join(", "),")");return t.createElement(t.Fragment,null,t.createElement("mask",{id:x},g),t.createElement("foreignObject",{x:0,y:0,width:d,height:d,mask:"url(#".concat(x,")")},t.createElement(_,{bg:j},t.createElement(_,{bg:b}))))}),k=function(e,t,r,n,i,s,a,l,o,u){var c=arguments.length>10&&void 0!==arguments[10]?arguments[10]:0,d=(100-n)/100*t;return"round"===o&&100!==n&&(d+=u/2)>=t&&(d=t-.01),{stroke:"string"==typeof l?l:void 0,strokeDasharray:"".concat(t,"px ").concat(e),strokeDashoffset:d+c,transform:"rotate(".concat(i+r/100*360*((360-s)/360)+(0===s?0:({bottom:0,top:180,left:90,right:-90})[a]),"deg)"),transformOrigin:"".concat(50,"px ").concat(50,"px"),transition:"stroke-dashoffset .3s ease 0s, stroke-dasharray .3s ease 0s, stroke .3s, stroke-width .06s ease .3s, opacity .3s ease 0s",fillOpacity:0}},C=["id","prefixCls","steps","strokeWidth","trailWidth","gapDegree","gapPosition","trailColor","strokeLinecap","style","className","strokeColor","percent"];function S(e){var t=null!=e?e:[];return Array.isArray(t)?t:[t]}let E=function(e){var r,n,i,s,a=(0,d.default)((0,d.default)({},f),e),o=a.id,u=a.prefixCls,g=a.steps,x=a.strokeWidth,v=a.trailWidth,y=a.gapDegree,_=void 0===y?0:y,w=a.gapPosition,E=a.trailColor,O=a.strokeLinecap,N=a.style,I=a.className,T=a.strokeColor,R=a.percent,P=(0,m.default)(a,C),$=b(o),D="".concat($,"-gradient"),F=50-x/2,A=2*Math.PI*F,L=_>0?90+_/2:-90,M=(360-_)/360*A,B="object"===(0,h.default)(g)?g:{count:g,gap:2},U=B.count,z=B.gap,V=S(R),H=S(T),W=H.find(function(e){return e&&"object"===(0,h.default)(e)}),K=W&&"object"===(0,h.default)(W)?"butt":O,q=k(A,M,0,100,L,_,w,E,K,x),X=p();return t.createElement("svg",(0,c.default)({className:(0,l.default)("".concat(u,"-circle"),I),viewBox:"0 0 ".concat(100," ").concat(100),style:N,id:o,role:"presentation"},P),!U&&t.createElement("circle",{className:"".concat(u,"-circle-trail"),r:F,cx:50,cy:50,stroke:E,strokeLinecap:K,strokeWidth:v||x,style:q}),U?(r=Math.round(U*(V[0]/100)),n=100/U,i=0,Array(U).fill(null).map(function(e,s){var a=s<=r-1?H[0]:E,l=a&&"object"===(0,h.default)(a)?"url(#".concat(D,")"):void 0,o=k(A,M,i,n,L,_,w,a,"butt",x,z);return i+=(M-o.strokeDashoffset+z)*100/M,t.createElement("circle",{key:s,className:"".concat(u,"-circle-path"),r:F,cx:50,cy:50,stroke:l,strokeWidth:x,opacity:1,style:o,ref:function(e){X[s]=e}})})):(s=0,V.map(function(e,r){var n=H[r]||H[H.length-1],i=k(A,M,s,e,L,_,w,n,K,x);return s+=e,t.createElement(j,{key:r,color:n,ptg:e,radius:F,prefixCls:u,gradientId:D,style:i,strokeLinecap:K,strokeWidth:x,gapDegree:_,ref:function(e){X[r]=e},size:100})}).reverse()))};var O=e.i(491816);e.i(765846);var N=e.i(896091);function I(e){return!e||e<0?0:e>100?100:e}function T({success:e,successPercent:t}){let r=t;return e&&"progress"in e&&(r=e.progress),e&&"percent"in e&&(r=e.percent),r}let R=(e,t,r)=>{var n,i,s,a;let l=-1,o=-1;if("step"===t){let t=r.steps,n=r.strokeWidth;"string"==typeof e||void 0===e?(l="small"===e?2:14,o=null!=n?n:8):"number"==typeof e?[l,o]=[e,e]:[l=14,o=8]=Array.isArray(e)?e:[e.width,e.height],l*=t}else if("line"===t){let t=null==r?void 0:r.strokeWidth;"string"==typeof e||void 0===e?o=t||("small"===e?6:8):"number"==typeof e?[l,o]=[e,e]:[l=-1,o=8]=Array.isArray(e)?e:[e.width,e.height]}else("circle"===t||"dashboard"===t)&&("string"==typeof e||void 0===e?[l,o]="small"===e?[60,60]:[120,120]:"number"==typeof e?[l,o]=[e,e]:Array.isArray(e)&&(l=null!=(i=null!=(n=e[0])?n:e[1])?i:120,o=null!=(a=null!=(s=e[0])?s:e[1])?a:120));return[l,o]},P=e=>{let{prefixCls:r,trailColor:n=null,strokeLinecap:i="round",gapPosition:s,gapDegree:a,width:o=120,type:u,children:c,success:d,size:m=o,steps:f}=e,[p,h]=R(m,"circle"),{strokeWidth:g}=e;void 0===g&&(g=Math.max(3/p*100,6));let x=t.useMemo(()=>a||0===a?a:"dashboard"===u?75:void 0,[a,u]),v=(({percent:e,success:t,successPercent:r})=>{let n=I(T({success:t,successPercent:r}));return[n,I(I(e)-n)]})(e),y="[object Object]"===Object.prototype.toString.call(e.strokeColor),b=(({success:e={},strokeColor:t})=>{let{strokeColor:r}=e;return[r||N.presetPrimaryColors.green,t||null]})({success:d,strokeColor:e.strokeColor}),_=(0,l.default)(`${r}-inner`,{[`${r}-circle-gradient`]:y}),w=t.createElement(E,{steps:f,percent:f?v[1]:v,strokeWidth:g,trailWidth:g,strokeColor:f?b[1]:b,strokeLinecap:i,trailColor:n,prefixCls:r,gapDegree:x,gapPosition:s||"dashboard"===u&&"bottom"||void 0}),j=p<=20,k=t.createElement("div",{className:_,style:{width:p,height:h,fontSize:.15*p+6}},w,!j&&c);return j?t.createElement(O.default,{title:c},k):k};e.i(296059);var $=e.i(694758),D=e.i(915654),F=e.i(183293),A=e.i(246422),L=e.i(838378);let M="--progress-line-stroke-color",B="--progress-percent",U=e=>{let t=e?"100%":"-100%";return new $.Keyframes(`antProgress${e?"RTL":"LTR"}Active`,{"0%":{transform:`translateX(${t}) scaleX(0)`,opacity:.1},"20%":{transform:`translateX(${t}) scaleX(0)`,opacity:.5},to:{transform:"translateX(0) scaleX(1)",opacity:0}})},z=(0,A.genStyleHooks)("Progress",e=>{let t=e.calc(e.marginXXS).div(2).equal(),r=(0,L.mergeToken)(e,{progressStepMarginInlineEnd:t,progressStepMinWidth:t,progressActiveMotionDuration:"2.4s"});return[(e=>{let{componentCls:t,iconCls:r}=e;return{[t]:Object.assign(Object.assign({},(0,F.resetComponent)(e)),{display:"inline-block","&-rtl":{direction:"rtl"},"&-line":{position:"relative",width:"100%",fontSize:e.fontSize},[`${t}-outer`]:{display:"inline-flex",alignItems:"center",width:"100%"},[`${t}-inner`]:{position:"relative",display:"inline-block",width:"100%",flex:1,overflow:"hidden",verticalAlign:"middle",backgroundColor:e.remainingColor,borderRadius:e.lineBorderRadius},[`${t}-inner:not(${t}-circle-gradient)`]:{[`${t}-circle-path`]:{stroke:e.defaultColor}},[`${t}-success-bg, ${t}-bg`]:{position:"relative",background:e.defaultColor,borderRadius:e.lineBorderRadius,transition:`all ${e.motionDurationSlow} ${e.motionEaseInOutCirc}`},[`${t}-layout-bottom`]:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",[`${t}-text`]:{width:"max-content",marginInlineStart:0,marginTop:e.marginXXS}},[`${t}-bg`]:{overflow:"hidden","&::after":{content:'""',background:{_multi_value_:!0,value:["inherit",`var(${M})`]},height:"100%",width:`calc(1 / var(${B}) * 100%)`,display:"block"},[`&${t}-bg-inner`]:{minWidth:"max-content","&::after":{content:"none"},[`${t}-text-inner`]:{color:e.colorWhite,[`&${t}-text-bright`]:{color:"rgba(0, 0, 0, 0.45)"}}}},[`${t}-success-bg`]:{position:"absolute",insetBlockStart:0,insetInlineStart:0,backgroundColor:e.colorSuccess},[`${t}-text`]:{display:"inline-block",marginInlineStart:e.marginXS,color:e.colorText,lineHeight:1,width:"2em",whiteSpace:"nowrap",textAlign:"start",verticalAlign:"middle",wordBreak:"normal",[r]:{fontSize:e.fontSize},[`&${t}-text-outer`]:{width:"max-content"},[`&${t}-text-outer${t}-text-start`]:{width:"max-content",marginInlineStart:0,marginInlineEnd:e.marginXS}},[`${t}-text-inner`]:{display:"flex",justifyContent:"center",alignItems:"center",width:"100%",height:"100%",marginInlineStart:0,padding:`0 ${(0,D.unit)(e.paddingXXS)}`,[`&${t}-text-start`]:{justifyContent:"start"},[`&${t}-text-end`]:{justifyContent:"end"}},[`&${t}-status-active`]:{[`${t}-bg::before`]:{position:"absolute",inset:0,backgroundColor:e.colorBgContainer,borderRadius:e.lineBorderRadius,opacity:0,animationName:U(),animationDuration:e.progressActiveMotionDuration,animationTimingFunction:e.motionEaseOutQuint,animationIterationCount:"infinite",content:'""'}},[`&${t}-rtl${t}-status-active`]:{[`${t}-bg::before`]:{animationName:U(!0)}},[`&${t}-status-exception`]:{[`${t}-bg`]:{backgroundColor:e.colorError},[`${t}-text`]:{color:e.colorError}},[`&${t}-status-exception ${t}-inner:not(${t}-circle-gradient)`]:{[`${t}-circle-path`]:{stroke:e.colorError}},[`&${t}-status-success`]:{[`${t}-bg`]:{backgroundColor:e.colorSuccess},[`${t}-text`]:{color:e.colorSuccess}},[`&${t}-status-success ${t}-inner:not(${t}-circle-gradient)`]:{[`${t}-circle-path`]:{stroke:e.colorSuccess}}})}})(r),(e=>{let{componentCls:t,iconCls:r}=e;return{[t]:{[`${t}-circle-trail`]:{stroke:e.remainingColor},[`&${t}-circle ${t}-inner`]:{position:"relative",lineHeight:1,backgroundColor:"transparent"},[`&${t}-circle ${t}-text`]:{position:"absolute",insetBlockStart:"50%",insetInlineStart:0,width:"100%",margin:0,padding:0,color:e.circleTextColor,fontSize:e.circleTextFontSize,lineHeight:1,whiteSpace:"normal",textAlign:"center",transform:"translateY(-50%)",[r]:{fontSize:e.circleIconFontSize}},[`${t}-circle&-status-exception`]:{[`${t}-text`]:{color:e.colorError}},[`${t}-circle&-status-success`]:{[`${t}-text`]:{color:e.colorSuccess}}},[`${t}-inline-circle`]:{lineHeight:1,[`${t}-inner`]:{verticalAlign:"bottom"}}}})(r),(e=>{let{componentCls:t}=e;return{[t]:{[`${t}-steps`]:{display:"inline-block","&-outer":{display:"flex",flexDirection:"row",alignItems:"center"},"&-item":{flexShrink:0,minWidth:e.progressStepMinWidth,marginInlineEnd:e.progressStepMarginInlineEnd,backgroundColor:e.remainingColor,transition:`all ${e.motionDurationSlow}`,"&-active":{backgroundColor:e.defaultColor}}}}}})(r),(e=>{let{componentCls:t,iconCls:r}=e;return{[t]:{[`${t}-small&-line, ${t}-small&-line ${t}-text ${r}`]:{fontSize:e.fontSizeSM}}}})(r)]},e=>({circleTextColor:e.colorText,defaultColor:e.colorInfo,remainingColor:e.colorFillSecondary,lineBorderRadius:100,circleTextFontSize:"1em",circleIconFontSize:`${e.fontSize/e.fontSizeSM}em`}));var V=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&0>t.indexOf(n)&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var i=0,n=Object.getOwnPropertySymbols(e);it.indexOf(n[i])&&Object.prototype.propertyIsEnumerable.call(e,n[i])&&(r[n[i]]=e[n[i]]);return r};let H=e=>{let{prefixCls:r,direction:n,percent:i,size:s,strokeWidth:a,strokeColor:o,strokeLinecap:u="round",children:c,trailColor:d=null,percentPosition:m,success:f}=e,{align:p,type:h}=m,g=o&&"string"!=typeof o?((e,t)=>{let{from:r=N.presetPrimaryColors.blue,to:n=N.presetPrimaryColors.blue,direction:i="rtl"===t?"to left":"to right"}=e,s=V(e,["from","to","direction"]);if(0!==Object.keys(s).length){let e,t=(e=[],Object.keys(s).forEach(t=>{let r=Number.parseFloat(t.replace(/%/g,""));Number.isNaN(r)||e.push({key:r,value:s[t]})}),(e=e.sort((e,t)=>e.key-t.key)).map(({key:e,value:t})=>`${t} ${e}%`).join(", ")),r=`linear-gradient(${i}, ${t})`;return{background:r,[M]:r}}let a=`linear-gradient(${i}, ${r}, ${n})`;return{background:a,[M]:a}})(o,n):{[M]:o,background:o},x="square"===u||"butt"===u?0:void 0,[v,y]=R(null!=s?s:[-1,a||("small"===s?6:8)],"line",{strokeWidth:a}),b=Object.assign(Object.assign({width:`${I(i)}%`,height:y,borderRadius:x},g),{[B]:I(i)/100}),_=T(e),w={width:`${I(_)}%`,height:y,borderRadius:x,backgroundColor:null==f?void 0:f.strokeColor},j=t.createElement("div",{className:`${r}-inner`,style:{backgroundColor:d||void 0,borderRadius:x}},t.createElement("div",{className:(0,l.default)(`${r}-bg`,`${r}-bg-${h}`),style:b},"inner"===h&&c),void 0!==_&&t.createElement("div",{className:`${r}-success-bg`,style:w})),k="outer"===h&&"start"===p,C="outer"===h&&"end"===p;return"outer"===h&&"center"===p?t.createElement("div",{className:`${r}-layout-bottom`},j,c):t.createElement("div",{className:`${r}-outer`,style:{width:v<0?"100%":v}},k&&c,j,C&&c)},W=e=>{let{size:r,steps:n,rounding:i=Math.round,percent:s=0,strokeWidth:a=8,strokeColor:o,trailColor:u=null,prefixCls:c,children:d}=e,m=i(s/100*n),[f,p]=R(null!=r?r:["small"===r?2:14,a],"step",{steps:n,strokeWidth:a}),h=f/n,g=Array.from({length:n});for(let e=0;et.indexOf(n)&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var i=0,n=Object.getOwnPropertySymbols(e);it.indexOf(n[i])&&Object.prototype.propertyIsEnumerable.call(e,n[i])&&(r[n[i]]=e[n[i]]);return r};let q=["normal","exception","active","success"],X=t.forwardRef((e,c)=>{let d,{prefixCls:m,className:f,rootClassName:p,steps:h,strokeColor:g,percent:x=0,size:v="default",showInfo:y=!0,type:b="line",status:_,format:w,style:j,percentPosition:k={}}=e,C=K(e,["prefixCls","className","rootClassName","steps","strokeColor","percent","size","showInfo","type","status","format","style","percentPosition"]),{align:S="end",type:E="outer"}=k,O=Array.isArray(g)?g[0]:g,N="string"==typeof g||Array.isArray(g)?g:void 0,$=t.useMemo(()=>{if(O){let e="string"==typeof O?O:Object.values(O)[0];return new r.FastColor(e).isLight()}return!1},[g]),D=t.useMemo(()=>{var t,r;let n=T(e);return Number.parseInt(void 0!==n?null==(t=null!=n?n:0)?void 0:t.toString():null==(r=null!=x?x:0)?void 0:r.toString(),10)},[x,e.success,e.successPercent]),F=t.useMemo(()=>!q.includes(_)&&D>=100?"success":_||"normal",[_,D]),{getPrefixCls:A,direction:L,progress:M}=t.useContext(u.ConfigContext),B=A("progress",m),[U,V,X]=z(B),Q="line"===b,J=Q&&!h,Y=t.useMemo(()=>{let r;if(!y)return null;let o=T(e),u=w||(e=>`${e}%`),c=Q&&$&&"inner"===E;return"inner"===E||w||"exception"!==F&&"success"!==F?r=u(I(x),I(o)):"exception"===F?r=Q?t.createElement(s.default,null):t.createElement(a.default,null):"success"===F&&(r=Q?t.createElement(n.default,null):t.createElement(i.default,null)),t.createElement("span",{className:(0,l.default)(`${B}-text`,{[`${B}-text-bright`]:c,[`${B}-text-${S}`]:J,[`${B}-text-${E}`]:J}),title:"string"==typeof r?r:void 0},r)},[y,x,D,F,b,B,w]);"line"===b?d=h?t.createElement(W,Object.assign({},e,{strokeColor:N,prefixCls:B,steps:"object"==typeof h?h.count:h}),Y):t.createElement(H,Object.assign({},e,{strokeColor:O,prefixCls:B,direction:L,percentPosition:{align:S,type:E}}),Y):("circle"===b||"dashboard"===b)&&(d=t.createElement(P,Object.assign({},e,{strokeColor:O,prefixCls:B,progressStatus:F}),Y));let G=(0,l.default)(B,`${B}-status-${F}`,{[`${B}-${"dashboard"===b&&"circle"||b}`]:"line"!==b,[`${B}-inline-circle`]:"circle"===b&&R(v,"circle")[0]<=20,[`${B}-line`]:J,[`${B}-line-align-${S}`]:J,[`${B}-line-position-${E}`]:J,[`${B}-steps`]:h,[`${B}-show-info`]:y,[`${B}-${v}`]:"string"==typeof v,[`${B}-rtl`]:"rtl"===L},null==M?void 0:M.className,f,p,V,X);return U(t.createElement("div",Object.assign({ref:c,style:Object.assign(Object.assign({},null==M?void 0:M.style),j),className:G,role:"progressbar","aria-valuenow":D,"aria-valuemin":0,"aria-valuemax":100},(0,o.default)(C,["trailColor","strokeWidth","width","gapDegree","gapPosition","strokeLinecap","success","successPercent"])),d))});e.s(["default",0,X],309821)},519756,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let n={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M400 317.7h73.9V656c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V317.7H624c6.7 0 10.4-7.7 6.3-12.9L518.3 163a8 8 0 00-12.6 0l-112 141.7c-4.1 5.3-.4 13 6.3 13zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"}}]},name:"upload",theme:"outlined"};var i=e.i(9583),s=r.forwardRef(function(e,s){return r.createElement(i.default,(0,t.default)({},e,{ref:s,icon:n}))});e.s(["UploadOutlined",0,s],519756)},233538,e=>{"use strict";e.s(["isDisabledReactIssue7711",0,function(e){let t=e.parentElement,r=null;for(;t&&!(t instanceof HTMLFieldSetElement);)t instanceof HTMLLegendElement&&(r=t),t=t.parentElement;let n=(null==t?void 0:t.getAttribute("disabled"))==="";return!(n&&function(e){if(!e)return!1;let t=e.previousElementSibling;for(;null!==t;){if(t instanceof HTMLLegendElement)return!1;t=t.previousElementSibling}return!0}(r))&&n}])},83733,233137,e=>{"use strict";let t,r;var n,i,s=e.i(247167),a=e.i(271645),l=e.i(544508),o=e.i(746725),u=e.i(835696);void 0!==s.default&&"u">typeof globalThis&&"u">typeof Element&&(null==(n=null==s.default?void 0:s.default.env)?void 0:n.NODE_ENV)==="test"&&void 0===(null==(i=null==Element?void 0:Element.prototype)?void 0:i.getAnimations)&&(Element.prototype.getAnimations=function(){return console.warn(["Headless UI has polyfilled `Element.prototype.getAnimations` for your tests.","Please install a proper polyfill e.g. `jsdom-testing-mocks`, to silence these warnings.","","Example usage:","```js","import { mockAnimationsApi } from 'jsdom-testing-mocks'","mockAnimationsApi()","```"].join(` +`)),[]});var c=((t=c||{})[t.None=0]="None",t[t.Closed=1]="Closed",t[t.Enter=2]="Enter",t[t.Leave=4]="Leave",t);e.s(["transitionDataAttributes",0,function(e){let t={};for(let r in e)!0===e[r]&&(t[`data-${r}`]="");return t},"useTransition",0,function(e,t,r,n){let[i,s]=(0,a.useState)(r),{hasFlag:c,addFlag:d,removeFlag:m}=function(e=0){let[t,r]=(0,a.useState)(e),n=(0,a.useCallback)(e=>r(e),[t]),i=(0,a.useCallback)(e=>r(t=>t|e),[t]),s=(0,a.useCallback)(e=>(t&e)===e,[t]);return{flags:t,setFlag:n,addFlag:i,hasFlag:s,removeFlag:(0,a.useCallback)(e=>r(t=>t&~e),[r]),toggleFlag:(0,a.useCallback)(e=>r(t=>t^e),[r])}}(e&&i?3:0),f=(0,a.useRef)(!1),p=(0,a.useRef)(!1),h=(0,o.useDisposables)();return(0,u.useIsoMorphicEffect)(()=>{var i;if(e){if(r&&s(!0),!t){r&&d(3);return}return null==(i=null==n?void 0:n.start)||i.call(n,r),function(e,{prepare:t,run:r,done:n,inFlight:i}){let s=(0,l.disposables)();return function(e,{inFlight:t,prepare:r}){if(null!=t&&t.current)return r();let n=e.style.transition;e.style.transition="none",r(),e.offsetHeight,e.style.transition=n}(e,{prepare:t,inFlight:i}),s.nextFrame(()=>{r(),s.requestAnimationFrame(()=>{s.add(function(e,t){var r,n;let i=(0,l.disposables)();if(!e)return i.dispose;let s=!1;i.add(()=>{s=!0});let a=null!=(n=null==(r=e.getAnimations)?void 0:r.call(e).filter(e=>e instanceof CSSTransition))?n:[];return 0===a.length?t():Promise.allSettled(a.map(e=>e.finished)).then(()=>{s||t()}),i.dispose}(e,n))})}),s.dispose}(t,{inFlight:f,prepare(){p.current?p.current=!1:p.current=f.current,f.current=!0,p.current||(r?(d(3),m(4)):(d(4),m(2)))},run(){p.current?r?(m(3),d(4)):(m(4),d(3)):r?m(1):d(1)},done(){var e;p.current&&"function"==typeof t.getAnimations&&t.getAnimations().length>0||(f.current=!1,m(7),r||s(!1),null==(e=null==n?void 0:n.end)||e.call(n,r))}})}},[e,r,t,h]),e?[i,{closed:c(1),enter:c(2),leave:c(4),transition:c(2)||c(4)}]:[r,{closed:void 0,enter:void 0,leave:void 0,transition:void 0}]}],83733);let d=(0,a.createContext)(null);d.displayName="OpenClosedContext";var m=((r=m||{})[r.Open=1]="Open",r[r.Closed=2]="Closed",r[r.Closing=4]="Closing",r[r.Opening=8]="Opening",r);e.s(["OpenClosedProvider",0,function({value:e,children:t}){return a.default.createElement(d.Provider,{value:e},t)},"ResetOpenClosedProvider",0,function({children:e}){return a.default.createElement(d.Provider,{value:null},e)},"State",0,m,"useOpenClosed",0,function(){return(0,a.useContext)(d)}],233137)},677667,674175,886148,543086,e=>{"use strict";let t,r;var n,i=e.i(290571),s=e.i(783222),a=e.i(433336),l=e.i(271645),o=e.i(394487),u=e.i(914189),c=e.i(144279),d=e.i(294316),m=e.i(83733);let f=(0,l.createContext)(()=>{});function p({value:e,children:t}){return l.default.createElement(f.Provider,{value:e},t)}e.s(["CloseProvider",0,p],674175);var h=e.i(233137),g=e.i(233538),x=e.i(397701),v=e.i(402155),y=e.i(700020);let b=null!=(n=l.default.startTransition)?n:function(e){e()};var _=e.i(998348),w=((t=w||{})[t.Open=0]="Open",t[t.Closed=1]="Closed",t),j=((r=j||{})[r.ToggleDisclosure=0]="ToggleDisclosure",r[r.CloseDisclosure=1]="CloseDisclosure",r[r.SetButtonId=2]="SetButtonId",r[r.SetPanelId=3]="SetPanelId",r[r.SetButtonElement=4]="SetButtonElement",r[r.SetPanelElement=5]="SetPanelElement",r);let k={0:e=>({...e,disclosureState:(0,x.match)(e.disclosureState,{0:1,1:0})}),1:e=>1===e.disclosureState?e:{...e,disclosureState:1},2:(e,t)=>e.buttonId===t.buttonId?e:{...e,buttonId:t.buttonId},3:(e,t)=>e.panelId===t.panelId?e:{...e,panelId:t.panelId},4:(e,t)=>e.buttonElement===t.element?e:{...e,buttonElement:t.element},5:(e,t)=>e.panelElement===t.element?e:{...e,panelElement:t.element}},C=(0,l.createContext)(null);function S(e){let t=(0,l.useContext)(C);if(null===t){let t=Error(`<${e} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,S),t}return t}C.displayName="DisclosureContext";let E=(0,l.createContext)(null);E.displayName="DisclosureAPIContext";let O=(0,l.createContext)(null);function N(e,t){return(0,x.match)(t.type,k,e,t)}O.displayName="DisclosurePanelContext";let I=l.Fragment,T=y.RenderFeatures.RenderStrategy|y.RenderFeatures.Static,R=Object.assign((0,y.forwardRefWithAs)(function(e,t){let{defaultOpen:r=!1,...n}=e,i=(0,l.useRef)(null),s=(0,d.useSyncRefs)(t,(0,d.optionalRef)(e=>{i.current=e},void 0===e.as||e.as===l.Fragment)),a=(0,l.useReducer)(N,{disclosureState:+!r,buttonElement:null,panelElement:null,buttonId:null,panelId:null}),[{disclosureState:o,buttonId:c},m]=a,f=(0,u.useEvent)(e=>{m({type:1});let t=(0,v.getOwnerDocument)(i);if(!t||!c)return;let r=e?e instanceof HTMLElement?e:e.current instanceof HTMLElement?e.current:t.getElementById(c):t.getElementById(c);null==r||r.focus()}),g=(0,l.useMemo)(()=>({close:f}),[f]),b=(0,l.useMemo)(()=>({open:0===o,close:f}),[o,f]),_=(0,y.useRender)();return l.default.createElement(C.Provider,{value:a},l.default.createElement(E.Provider,{value:g},l.default.createElement(p,{value:f},l.default.createElement(h.OpenClosedProvider,{value:(0,x.match)(o,{0:h.State.Open,1:h.State.Closed})},_({ourProps:{ref:s},theirProps:n,slot:b,defaultTag:I,name:"Disclosure"})))))}),{Button:(0,y.forwardRefWithAs)(function(e,t){let r=(0,l.useId)(),{id:n=`headlessui-disclosure-button-${r}`,disabled:i=!1,autoFocus:m=!1,...f}=e,[p,h]=S("Disclosure.Button"),x=(0,l.useContext)(O),v=null!==x&&x===p.panelId,b=(0,l.useRef)(null),w=(0,d.useSyncRefs)(b,t,(0,u.useEvent)(e=>{if(!v)return h({type:4,element:e})}));(0,l.useEffect)(()=>{if(!v)return h({type:2,buttonId:n}),()=>{h({type:2,buttonId:null})}},[n,h,v]);let j=(0,u.useEvent)(e=>{var t;if(v){if(1===p.disclosureState)return;switch(e.key){case _.Keys.Space:case _.Keys.Enter:e.preventDefault(),e.stopPropagation(),h({type:0}),null==(t=p.buttonElement)||t.focus()}}else switch(e.key){case _.Keys.Space:case _.Keys.Enter:e.preventDefault(),e.stopPropagation(),h({type:0})}}),k=(0,u.useEvent)(e=>{e.key===_.Keys.Space&&e.preventDefault()}),C=(0,u.useEvent)(e=>{var t;(0,g.isDisabledReactIssue7711)(e.currentTarget)||i||(v?(h({type:0}),null==(t=p.buttonElement)||t.focus()):h({type:0}))}),{isFocusVisible:E,focusProps:N}=(0,s.useFocusRing)({autoFocus:m}),{isHovered:I,hoverProps:T}=(0,a.useHover)({isDisabled:i}),{pressed:R,pressProps:P}=(0,o.useActivePress)({disabled:i}),$=(0,l.useMemo)(()=>({open:0===p.disclosureState,hover:I,active:R,disabled:i,focus:E,autofocus:m}),[p,I,R,E,i,m]),D=(0,c.useResolveButtonType)(e,p.buttonElement),F=v?(0,y.mergeProps)({ref:w,type:D,disabled:i||void 0,autoFocus:m,onKeyDown:j,onClick:C},N,T,P):(0,y.mergeProps)({ref:w,id:n,type:D,"aria-expanded":0===p.disclosureState,"aria-controls":p.panelElement?p.panelId:void 0,disabled:i||void 0,autoFocus:m,onKeyDown:j,onKeyUp:k,onClick:C},N,T,P);return(0,y.useRender)()({ourProps:F,theirProps:f,slot:$,defaultTag:"button",name:"Disclosure.Button"})}),Panel:(0,y.forwardRefWithAs)(function(e,t){let r=(0,l.useId)(),{id:n=`headlessui-disclosure-panel-${r}`,transition:i=!1,...s}=e,[a,o]=S("Disclosure.Panel"),{close:c}=function e(t){let r=(0,l.useContext)(E);if(null===r){let r=Error(`<${t} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(r,e),r}return r}("Disclosure.Panel"),[f,p]=(0,l.useState)(null),g=(0,d.useSyncRefs)(t,(0,u.useEvent)(e=>{b(()=>o({type:5,element:e}))}),p);(0,l.useEffect)(()=>(o({type:3,panelId:n}),()=>{o({type:3,panelId:null})}),[n,o]);let x=(0,h.useOpenClosed)(),[v,_]=(0,m.useTransition)(i,f,null!==x?(x&h.State.Open)===h.State.Open:0===a.disclosureState),w=(0,l.useMemo)(()=>({open:0===a.disclosureState,close:c}),[a.disclosureState,c]),j={ref:g,id:n,...(0,m.transitionDataAttributes)(_)},k=(0,y.useRender)();return l.default.createElement(h.ResetOpenClosedProvider,null,l.default.createElement(O.Provider,{value:a.panelId},k({ourProps:j,theirProps:s,slot:w,defaultTag:"div",features:T,visible:v,name:"Disclosure.Panel"})))})});e.s(["Disclosure",0,R],886148);let P=(0,l.createContext)(void 0);var $=e.i(444755);let D=(0,e.i(673706).makeClassName)("Accordion"),F=(0,l.createContext)({isOpen:!1}),A=l.default.forwardRef((e,t)=>{var r;let{defaultOpen:n=!1,children:s,className:a}=e,o=(0,i.__rest)(e,["defaultOpen","children","className"]),u=null!=(r=(0,l.useContext)(P))?r:(0,$.tremorTwMerge)("rounded-tremor-default border");return l.default.createElement(R,Object.assign({as:"div",ref:t,className:(0,$.tremorTwMerge)(D("root"),"overflow-hidden","bg-tremor-background border-tremor-border","dark:bg-dark-tremor-background dark:border-dark-tremor-border",u,a),defaultOpen:n},o),({open:e})=>l.default.createElement(F.Provider,{value:{isOpen:e}},s))});A.displayName="Accordion",e.s(["OpenContext",0,F,"default",0,A],543086),e.s(["Accordion",0,A],677667)},130643,e=>{"use strict";var t=e.i(290571),r=e.i(271645),n=e.i(886148),i=e.i(444755);let s=(0,e.i(673706).makeClassName)("AccordionBody"),a=r.default.forwardRef((e,a)=>{let{children:l,className:o}=e,u=(0,t.__rest)(e,["children","className"]);return r.default.createElement(n.Disclosure.Panel,Object.assign({ref:a,className:(0,i.tremorTwMerge)(s("root"),"w-full text-tremor-default px-4 pb-3","text-tremor-content","dark:text-dark-tremor-content",o)},u),l)});a.displayName="AccordionBody",e.s(["AccordionBody",0,a],130643)},898667,e=>{"use strict";var t=e.i(290571),r=e.i(271645),n=e.i(886148);let i=e=>{var n=(0,t.__rest)(e,[]);return r.default.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"},n),r.default.createElement("path",{d:"M11.9999 10.8284L7.0502 15.7782L5.63599 14.364L11.9999 8L18.3639 14.364L16.9497 15.7782L11.9999 10.8284Z"}))};var s=e.i(543086),a=e.i(444755);let l=(0,e.i(673706).makeClassName)("AccordionHeader"),o=r.default.forwardRef((e,o)=>{let{children:u,className:c}=e,d=(0,t.__rest)(e,["children","className"]),{isOpen:m}=(0,r.useContext)(s.OpenContext);return r.default.createElement(n.Disclosure.Button,Object.assign({ref:o,className:(0,a.tremorTwMerge)(l("root"),"w-full flex items-center justify-between px-4 py-3","text-tremor-content-emphasis","dark:text-dark-tremor-content-emphasis",c)},d),r.default.createElement("div",{className:(0,a.tremorTwMerge)(l("children"),"flex flex-1 text-inherit mr-4")},u),r.default.createElement("div",null,r.default.createElement(i,{className:(0,a.tremorTwMerge)(l("arrowIcon"),"h-5 w-5 -mr-1","text-tremor-content-subtle","dark:text-dark-tremor-content-subtle",m?"transition-all":"transition-all -rotate-180")})))});o.displayName="AccordionHeader",e.s(["AccordionHeader",0,o],898667)},220508,e=>{"use strict";var t=e.i(271645);let r=t.forwardRef(function(e,r){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:r},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"}))});e.s(["CheckCircleIcon",0,r],220508)},503269,214520,601893,694421,140721,942803,35889,722678,e=>{"use strict";var t=e.i(271645),r=e.i(914189);e.s(["useControllable",0,function(e,n,i){let[s,a]=(0,t.useState)(i),l=void 0!==e,o=(0,t.useRef)(l),u=(0,t.useRef)(!1),c=(0,t.useRef)(!1);return!l||o.current||u.current?l||!o.current||c.current||(c.current=!0,o.current=l,console.error("A component is changing from controlled to uncontrolled. This may be caused by the value changing from a defined value to undefined, which should not happen.")):(u.current=!0,o.current=l,console.error("A component is changing from uncontrolled to controlled. This may be caused by the value changing from undefined to a defined value, which should not happen.")),[l?e:s,(0,r.useEvent)(e=>(l||a(e),null==n?void 0:n(e)))]}],503269),e.s(["useDefaultValue",0,function(e){let[r]=(0,t.useState)(e);return r}],214520);let n=(0,t.createContext)(void 0);function i(){return(0,t.useContext)(n)}e.s(["useDisabled",0,i],601893);var s=e.i(174080),a=e.i(746725);function l(e={},t=null,r=[]){for(let[n,i]of Object.entries(e))!function e(t,r,n){if(Array.isArray(n))for(let[i,s]of n.entries())e(t,o(r,i.toString()),s);else n instanceof Date?t.push([r,n.toISOString()]):"boolean"==typeof n?t.push([r,n?"1":"0"]):"string"==typeof n?t.push([r,n]):"number"==typeof n?t.push([r,`${n}`]):null==n?t.push([r,""]):l(n,r,t)}(r,o(t,n),i);return r}function o(e,t){return e?e+"["+t+"]":t}e.s(["attemptSubmit",0,function(e){var t,r;let n=null!=(t=null==e?void 0:e.form)?t:e.closest("form");if(n){for(let t of n.elements)if(t!==e&&("INPUT"===t.tagName&&"submit"===t.type||"BUTTON"===t.tagName&&"submit"===t.type||"INPUT"===t.nodeName&&"image"===t.type))return void t.click();null==(r=n.requestSubmit)||r.call(n)}},"objectToFormEntries",0,l],694421);var u=e.i(700020),c=e.i(2788);let d=(0,t.createContext)(null);function m({children:e}){let r=(0,t.useContext)(d);if(!r)return t.default.createElement(t.default.Fragment,null,e);let{target:n}=r;return n?(0,s.createPortal)(t.default.createElement(t.default.Fragment,null,e),n):null}function f({setForm:e,formId:r}){return(0,t.useEffect)(()=>{if(r){let t=document.getElementById(r);t&&e(t)}},[e,r]),r?null:t.default.createElement(c.Hidden,{features:c.HiddenFeatures.Hidden,as:"input",type:"hidden",hidden:!0,readOnly:!0,ref:t=>{if(!t)return;let r=t.closest("form");r&&e(r)}})}e.s(["FormFields",0,function({data:e,form:r,disabled:n,onReset:i,overrides:s}){let[o,d]=(0,t.useState)(null),p=(0,a.useDisposables)();return(0,t.useEffect)(()=>{if(i&&o)return p.addEventListener(o,"reset",i)},[o,r,i]),t.default.createElement(m,null,t.default.createElement(f,{setForm:d,formId:r}),l(e).map(([e,i])=>t.default.createElement(c.Hidden,{features:c.HiddenFeatures.Hidden,...(0,u.compact)({key:e,as:"input",type:"hidden",hidden:!0,readOnly:!0,form:r,disabled:n,name:e,value:i,...s})})))}],140721);let p=(0,t.createContext)(void 0);function h(){return(0,t.useContext)(p)}e.s(["useProvidedId",0,h],942803);var g=e.i(835696),x=e.i(294316);let v=(0,t.createContext)(null);v.displayName="DescriptionContext";let y=Object.assign((0,u.forwardRefWithAs)(function(e,r){let n=(0,t.useId)(),s=i(),{id:a=`headlessui-description-${n}`,...l}=e,o=function e(){let r=(0,t.useContext)(v);if(null===r){let t=Error("You used a component, but it is not inside a relevant parent.");throw Error.captureStackTrace&&Error.captureStackTrace(t,e),t}return r}(),c=(0,x.useSyncRefs)(r);(0,g.useIsoMorphicEffect)(()=>o.register(a),[a,o.register]);let d=s||!1,m=(0,t.useMemo)(()=>({...o.slot,disabled:d}),[o.slot,d]),f={ref:c,...o.props,id:a};return(0,u.useRender)()({ourProps:f,theirProps:l,slot:m,defaultTag:"p",name:o.name||"Description"})}),{});e.s(["Description",0,y,"useDescribedBy",0,function(){var e,r;return null!=(r=null==(e=(0,t.useContext)(v))?void 0:e.value)?r:void 0},"useDescriptions",0,function(){let[e,n]=(0,t.useState)([]);return[e.length>0?e.join(" "):void 0,(0,t.useMemo)(()=>function(e){let i=(0,r.useEvent)(e=>(n(t=>[...t,e]),()=>n(t=>{let r=t.slice(),n=r.indexOf(e);return -1!==n&&r.splice(n,1),r}))),s=(0,t.useMemo)(()=>({register:i,slot:e.slot,name:e.name,props:e.props,value:e.value}),[i,e.slot,e.name,e.props,e.value]);return t.default.createElement(v.Provider,{value:s},e.children)},[n])]}],35889);let b=(0,t.createContext)(null);function _(e){var r,n,i;let s=null!=(n=null==(r=(0,t.useContext)(b))?void 0:r.value)?n:void 0;return(null!=(i=null==e?void 0:e.length)?i:0)>0?[s,...e].filter(Boolean).join(" "):s}b.displayName="LabelContext";let w=Object.assign((0,u.forwardRefWithAs)(function(e,n){var s;let a=(0,t.useId)(),l=function e(){let r=(0,t.useContext)(b);if(null===r){let t=Error("You used a ` tag."),"__NEXT_ERROR_CODE",{value:"E863",enumerable:!1,configurable:!0});l=s.default.Children.only(n)}let V=B?l&&"object"==typeof l&&l.ref:z,G=s.default.useCallback(e=>(null!==U&&(w.current=(0,g.mountLinkInstance)(e,$,U,H,D,b)),()=>{w.current&&((0,g.unmountLinkForCurrentNavigation)(w.current),w.current=null),(0,g.unmountPrefetchableInstance)(e)}),[D,$,U,H,b]),K={ref:(0,d.useMergedRef)(G,V),onClick(t){B||"function"!=typeof T||T(t),B&&l.props&&"function"==typeof l.props.onClick&&l.props.onClick(t),!U||t.defaultPrevented||function(t,r,a,n,l,i,o){if("u">typeof window){let c,{nodeName:d}=t.currentTarget;if("A"===d.toUpperCase()&&((c=t.currentTarget.getAttribute("target"))&&"_self"!==c||t.metaKey||t.ctrlKey||t.shiftKey||t.altKey||t.nativeEvent&&2===t.nativeEvent.which)||t.currentTarget.hasAttribute("download"))return;if(!(0,p.isLocalURL)(r)){n&&(t.preventDefault(),location.replace(r));return}if(t.preventDefault(),i){let e=!1;if(i({preventDefault:()=>{e=!0}}),e)return}let{dispatchNavigateAction:u}=e.r(699781);s.default.startTransition(()=>{u(r,n?"replace":"push",!1===l?m.ScrollBehavior.NoScroll:m.ScrollBehavior.Default,a.current,o)})}}(t,$,w,_,N,I,A)},onMouseEnter(e){B||"function"!=typeof O||O(e),B&&l.props&&"function"==typeof l.props.onMouseEnter&&l.props.onMouseEnter(e),U&&D&&(0,g.onNavigationIntent)(e.currentTarget,!0===R)},onTouchStart:function(e){B||"function"!=typeof P||P(e),B&&l.props&&"function"==typeof l.props.onTouchStart&&l.props.onTouchStart(e),U&&D&&(0,g.onNavigationIntent)(e.currentTarget,!0===R)}};return(0,u.isAbsoluteUrl)($)?K.href=$:B&&!C&&("a"!==l.type||"href"in l.props)||(K.href=(0,h.addBasePath)($)),x=B?s.default.cloneElement(l,K):(0,i.jsx)("a",{...M,...K,children:n}),(0,i.jsx)(y.Provider,{value:v,children:x})}e.r(284508);let y=(0,s.createContext)(g.IDLE_LINK_STATUS),v=()=>(0,s.useContext)(y);("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},402874,143488,658140,e=>{"use strict";var t=e.i(843476),r=e.i(266027),a=e.i(602869);let n=(0,e.i(243652).createQueryKeys)("healthReadinessDetails"),l=async e=>{let t=(0,a.getProxyBaseUrl)(),r=await fetch(`${t}/health/readiness/details`,{method:"GET",headers:{[(0,a.getGlobalLitellmHeaderName)()]:`Bearer ${e}`,"Content-Type":"application/json"}});if(!r.ok)throw Error(`Failed to fetch health readiness details: ${r.statusText}`);return r.json()},i=e=>(0,r.useQuery)({queryKey:n.detail("readiness"),queryFn:()=>l(e),enabled:!!e,staleTime:3e5,retry:!1});e.s(["useHealthReadinessDetails",0,i],143488);var s=e.i(115571),o=e.i(271645);function c(e){let t=t=>{"disableBouncingIcon"===t.key&&e()},r=t=>{let{key:r}=t.detail;"disableBouncingIcon"===r&&e()};return window.addEventListener("storage",t),window.addEventListener(s.LOCAL_STORAGE_EVENT,r),()=>{window.removeEventListener("storage",t),window.removeEventListener(s.LOCAL_STORAGE_EVENT,r)}}function d(){return"true"===(0,s.getLocalStorageItem)("disableBouncingIcon")}function u(){return(0,o.useSyncExternalStore)(c,d)}function h(e){let t=t=>{"disableShowPrompts"===t.key&&e()},r=t=>{let{key:r}=t.detail;"disableShowPrompts"===r&&e()};return window.addEventListener("storage",t),window.addEventListener(s.LOCAL_STORAGE_EVENT,r),()=>{window.removeEventListener("storage",t),window.removeEventListener(s.LOCAL_STORAGE_EVENT,r)}}function m(){return"true"===(0,s.getLocalStorageItem)("disableShowPrompts")}function g(){return(0,o.useSyncExternalStore)(h,m)}var p=e.i(283713),f=e.i(275144),x=e.i(268004),y=e.i(321836),v=e.i(592392),b=e.i(755151);e.i(247167);var w=e.i(931067);let j={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 000 13.8z"}}]},name:"menu-fold",theme:"outlined"};var S=e.i(9583),L=o.forwardRef(function(e,t){return o.createElement(S.default,(0,w.default)({},e,{ref:t,icon:j}))});let k={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM142.4 642.1L298.7 519a8.84 8.84 0 000-13.9L142.4 381.9c-5.8-4.6-14.4-.5-14.4 6.9v246.3a8.9 8.9 0 0014.4 7z"}}]},name:"menu-unfold",theme:"outlined"};var C=o.forwardRef(function(e,t){return o.createElement(S.default,(0,w.default)({},e,{ref:t,icon:k}))}),_=e.i(262218),E=e.i(522016);function N(e){let t=t=>{"disableBlogPosts"===t.key&&e()},r=t=>{let{key:r}=t.detail;"disableBlogPosts"===r&&e()};return window.addEventListener("storage",t),window.addEventListener(s.LOCAL_STORAGE_EVENT,r),()=>{window.removeEventListener("storage",t),window.removeEventListener(s.LOCAL_STORAGE_EVENT,r)}}function T(){return"true"===(0,s.getLocalStorageItem)("disableBlogPosts")}function O(){return(0,o.useSyncExternalStore)(N,T)}async function P(){let e=(0,a.getProxyBaseUrl)(),t=await fetch(`${e}/public/litellm_blog_posts`);if(!t.ok)throw Error(`Failed to fetch blog posts: ${t.statusText}`);return t.json()}let B="inline-flex h-9 shrink-0 items-center justify-center gap-1 rounded-md px-2 text-sm font-medium leading-none text-gray-800 transition-colors hover:bg-gray-100 hover:text-gray-950";var I=e.i(56456),A=e.i(464571),z=e.i(326373),R=e.i(770914),M=e.i(898586);let{Text:U,Title:D,Paragraph:H}=M.Typography,$=()=>{let e,a=O(),{data:n,isLoading:l,isError:i,refetch:s}=(0,r.useQuery)({queryKey:["blogPosts"],queryFn:P,staleTime:36e5,retry:1,retryDelay:0});return a?null:(e=l?[{key:"loading",label:(0,t.jsx)(I.LoadingOutlined,{}),disabled:!0}]:i?[{key:"error",label:(0,t.jsxs)(R.Space,{children:[(0,t.jsx)(U,{type:"danger",children:"Failed to load posts"}),(0,t.jsx)(A.Button,{size:"small",onClick:()=>s(),children:"Retry"})]}),disabled:!0}]:n&&0!==n.posts.length?[...n.posts.slice(0,5).map(e=>({key:e.url,label:(0,t.jsxs)("a",{href:e.url,target:"_blank",rel:"noopener noreferrer",style:{display:"block",width:380},children:[(0,t.jsx)(D,{level:5,style:{marginBottom:2},children:e.title}),(0,t.jsx)(U,{type:"secondary",style:{fontSize:11},children:new Date(e.date+"T00:00:00").toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"})}),(0,t.jsx)(H,{ellipsis:{rows:2},children:e.description})]})})),{type:"divider"},{key:"view-all",label:(0,t.jsx)("a",{href:"https://docs.litellm.ai/blog",target:"_blank",rel:"noopener noreferrer",children:"View all posts"})}]:[{key:"empty",label:(0,t.jsx)(U,{type:"secondary",children:"No posts available"}),disabled:!0}],(0,t.jsx)(z.Dropdown,{menu:{items:e},trigger:["hover"],placement:"bottomRight",children:(0,t.jsxs)(A.Button,{type:"text",className:`${B} !border-0 !bg-transparent`,children:["Blog",(0,t.jsx)(b.DownOutlined,{className:"text-[10px] text-gray-500","aria-hidden":!0})]})}))},V={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M511.6 76.3C264.3 76.2 64 276.4 64 523.5 64 718.9 189.3 885 363.8 946c23.5 5.9 19.9-10.8 19.9-22.2v-77.5c-135.7 15.9-141.2-73.9-150.3-88.9C215 726 171.5 718 184.5 703c30.9-15.9 62.4 4 98.9 57.9 26.4 39.1 77.9 32.5 104 26 5.7-23.5 17.9-44.5 34.7-60.8-140.6-25.2-199.2-111-199.2-213 0-49.5 16.3-95 48.3-131.7-20.4-60.5 1.9-112.3 4.9-120 58.1-5.2 118.5 41.6 123.2 45.3 33-8.9 70.7-13.6 112.9-13.6 42.4 0 80.2 4.9 113.5 13.9 11.3-8.6 67.3-48.8 121.3-43.9 2.9 7.7 24.7 58.3 5.5 118 32.4 36.8 48.9 82.7 48.9 132.3 0 102.2-59 188.1-200 212.9a127.5 127.5 0 0138.1 91v112.5c.8 9 0 17.9 15 17.9 177.1-59.7 304.6-227 304.6-424.1 0-247.2-200.4-447.3-447.5-447.3z"}}]},name:"github",theme:"outlined"};var G=o.forwardRef(function(e,t){return o.createElement(S.default,(0,w.default)({},e,{ref:t,icon:V}))});let K={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M409.4 128c-42.4 0-76.7 34.4-76.7 76.8 0 20.3 8.1 39.9 22.4 54.3a76.74 76.74 0 0054.3 22.5h76.7v-76.8c0-42.3-34.3-76.7-76.7-76.8zm0 204.8H204.7c-42.4 0-76.7 34.4-76.7 76.8s34.4 76.8 76.7 76.8h204.6c42.4 0 76.7-34.4 76.7-76.8.1-42.4-34.3-76.8-76.6-76.8zM614 486.4c42.4 0 76.8-34.4 76.7-76.8V204.8c0-42.4-34.3-76.8-76.7-76.8-42.4 0-76.7 34.4-76.7 76.8v204.8c0 42.5 34.3 76.8 76.7 76.8zm281.4-76.8c0-42.4-34.4-76.8-76.7-76.8S742 367.2 742 409.6v76.8h76.7c42.3 0 76.7-34.4 76.7-76.8zm-76.8 128H614c-42.4 0-76.7 34.4-76.7 76.8 0 20.3 8.1 39.9 22.4 54.3a76.74 76.74 0 0054.3 22.5h204.6c42.4 0 76.7-34.4 76.7-76.8.1-42.4-34.3-76.7-76.7-76.8zM614 742.4h-76.7v76.8c0 42.4 34.4 76.8 76.7 76.8 42.4 0 76.8-34.4 76.7-76.8.1-42.4-34.3-76.7-76.7-76.8zM409.4 537.6c-42.4 0-76.7 34.4-76.7 76.8v204.8c0 42.4 34.4 76.8 76.7 76.8 42.4 0 76.8-34.4 76.7-76.8V614.4c0-20.3-8.1-39.9-22.4-54.3a76.92 76.92 0 00-54.3-22.5zM128 614.4c0 20.3 8.1 39.9 22.4 54.3a76.74 76.74 0 0054.3 22.5c42.4 0 76.8-34.4 76.7-76.8v-76.8h-76.7c-42.3 0-76.7 34.4-76.7 76.8z"}}]},name:"slack",theme:"outlined"};var F=o.forwardRef(function(e,t){return o.createElement(S.default,(0,w.default)({},e,{ref:t,icon:K}))}),W=e.i(592968);let q="inline-flex h-9 w-9 shrink-0 items-center justify-center rounded-md border-0 bg-transparent text-gray-500 transition-colors hover:bg-gray-100 hover:text-gray-700 cursor-pointer",Q=()=>g()?null:(0,t.jsxs)("div",{className:"flex items-center gap-0.5 rounded-md border border-gray-200/80 bg-gray-50 px-0.5 py-0","aria-label":"Community links",children:[(0,t.jsx)(W.Tooltip,{title:"LiteLLM Slack community",children:(0,t.jsx)("a",{href:"https://www.litellm.ai/support",target:"_blank",rel:"noopener noreferrer",className:q,"aria-label":"Join Slack",children:(0,t.jsx)(F,{className:"text-lg"})})}),(0,t.jsx)(W.Tooltip,{title:"LiteLLM on GitHub",children:(0,t.jsx)("a",{href:"https://github.com/BerriAI/litellm",target:"_blank",rel:"noopener noreferrer",className:q,"aria-label":"LiteLLM on GitHub",children:(0,t.jsx)(G,{className:"text-lg"})})})]}),X="litellmHideAgentPlatformBanner";function J(e){let t=t=>{t.key===X&&e()},r=t=>{let{key:r}=t.detail;r===X&&e()};return window.addEventListener("storage",t),window.addEventListener(s.LOCAL_STORAGE_EVENT,r),()=>{window.removeEventListener("storage",t),window.removeEventListener(s.LOCAL_STORAGE_EVENT,r)}}function Y(){return"true"===(0,s.getLocalStorageItem)(X)}let Z={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M816 768h-24V428c0-141.1-104.3-257.7-240-277.1V112c0-22.1-17.9-40-40-40s-40 17.9-40 40v38.9c-135.7 19.4-240 136-240 277.1v340h-24c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h216c0 61.8 50.2 112 112 112s112-50.2 112-112h216c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM512 888c-26.5 0-48-21.5-48-48h96c0 26.5-21.5 48-48 48zM304 768V428c0-55.6 21.6-107.8 60.9-147.1S456.4 220 512 220c55.6 0 107.8 21.6 147.1 60.9S720 372.4 720 428v340H304z"}}]},name:"bell",theme:"outlined"};var ee=o.forwardRef(function(e,t){return o.createElement(S.default,(0,w.default)({},e,{ref:t,icon:Z}))}),et=e.i(906579),er=e.i(282786);let ea=()=>{let e=!(0,o.useSyncExternalStore)(J,Y),[r,a]=(0,o.useState)(!1),n=(0,t.jsxs)("div",{className:"max-w-[280px]",children:[(0,t.jsx)(M.Typography.Title,{level:5,className:"!mt-0 !mb-2",children:"LiteLLM Agent Platform"}),(0,t.jsx)(M.Typography.Paragraph,{type:"secondary",className:"!mb-3 text-sm leading-snug",children:"Open-source agent infra — sandboxes, durable sessions, and workers on AWS Fargate."}),(0,t.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,t.jsx)(A.Button,{type:"primary",size:"small",href:"https://github.com/BerriAI/litellm-agent-platform",target:"_blank",rel:"noopener noreferrer",children:"GitHub"}),e?(0,t.jsx)(A.Button,{type:"link",size:"small",className:"!px-1",onClick:()=>{(0,s.setLocalStorageItem)(X,"true"),(0,s.emitLocalStorageChange)(X),a(!1)},children:"Mark as read"}):null]})]});return(0,t.jsx)(er.Popover,{content:n,trigger:"click",open:r,onOpenChange:a,placement:"bottomRight",children:(0,t.jsx)(A.Button,{type:"text",className:"!flex !h-9 !w-9 items-center justify-center !rounded-md text-gray-600 transition-colors hover:!bg-gray-100 hover:!text-gray-900","aria-label":"Notifications",children:(0,t.jsx)(et.Badge,{dot:e,color:"#1677ff",size:"small",offset:[8,2],children:(0,t.jsx)(ee,{className:"text-base","aria-hidden":!0})})})})};var en=e.i(135214),el=e.i(371401),ei=e.i(100486);let es={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M868 732h-70.3c-4.8 0-9.3 2.1-12.3 5.8-7 8.5-14.5 16.7-22.4 24.5a353.84 353.84 0 01-112.7 75.9A352.8 352.8 0 01512.4 866c-47.9 0-94.3-9.4-137.9-27.8a353.84 353.84 0 01-112.7-75.9 353.28 353.28 0 01-76-112.5C167.3 606.2 158 559.9 158 512s9.4-94.2 27.8-137.8c17.8-42.1 43.4-80 76-112.5s70.5-58.1 112.7-75.9c43.6-18.4 90-27.8 137.9-27.8 47.9 0 94.3 9.3 137.9 27.8 42.2 17.8 80.1 43.4 112.7 75.9 7.9 7.9 15.3 16.1 22.4 24.5 3 3.7 7.6 5.8 12.3 5.8H868c6.3 0 10.2-7 6.7-12.3C798 160.5 663.8 81.6 511.3 82 271.7 82.6 79.6 277.1 82 516.4 84.4 751.9 276.2 942 512.4 942c152.1 0 285.7-78.8 362.3-197.7 3.4-5.3-.4-12.3-6.7-12.3zm88.9-226.3L815 393.7c-5.3-4.2-13-.4-13 6.3v76H488c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h314v76c0 6.7 7.8 10.5 13 6.3l141.9-112a8 8 0 000-12.6z"}}]},name:"logout",theme:"outlined"};var eo=o.forwardRef(function(e,t){return o.createElement(S.default,(0,w.default)({},e,{ref:t,icon:es}))});let ec={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M928 160H96c-17.7 0-32 14.3-32 32v640c0 17.7 14.3 32 32 32h832c17.7 0 32-14.3 32-32V192c0-17.7-14.3-32-32-32zm-40 110.8V792H136V270.8l-27.6-21.5 39.3-50.5 42.8 33.3h643.1l42.8-33.3 39.3 50.5-27.7 21.5zM833.6 232L512 482 190.4 232l-42.8-33.3-39.3 50.5 27.6 21.5 341.6 265.6a55.99 55.99 0 0068.7 0L888 270.8l27.6-21.5-39.3-50.5-42.7 33.2z"}}]},name:"mail",theme:"outlined"};var ed=o.forwardRef(function(e,t){return o.createElement(S.default,(0,w.default)({},e,{ref:t,icon:ec}))}),eu=e.i(602073),eh=e.i(771674),em=e.i(312361),eg=e.i(790848);let{Text:ep}=M.Typography,ef=({onLogout:e})=>{let{userId:r,userEmail:a,userRole:n,premiumUser:l}=(0,en.default)(),i=g(),c=(0,el.useDisableUsageIndicator)(),d=O(),h=u(),[m,p]=(0,o.useState)(!1);(0,o.useEffect)(()=>{p("true"===(0,s.getLocalStorageItem)("disableShowNewBadge"))},[]);let f=[{key:"logout",label:(0,t.jsxs)(R.Space,{children:[(0,t.jsx)(eo,{}),"Logout"]}),onClick:e}],x=a||r||"user",y=function(e,t){let r=e?.split("@")[0]?.trim();if(r){let e=r.replace(/[^a-zA-Z0-9]+/g," ").trim().split(/\s+/).filter(Boolean);if(e.length>=2)return`${e[0].charAt(0)}${e[1].charAt(0)}`.toUpperCase();if(1===e.length){let t=e[0];return t.length>=2?t.slice(0,2).toUpperCase():`${t.charAt(0)}`.toUpperCase()}}return t&&t.length>=2?t.slice(0,2).toUpperCase():t&&1===t.length?`${t.toUpperCase()}•`:"?"}(a,r),v=function(e){let t=0;for(let r=0;r(0,t.jsxs)("div",{className:"rounded-lg bg-white shadow-lg","data-testid":"user-dropdown-panel",children:[(0,t.jsxs)(R.Space,{direction:"vertical",size:"small",style:{width:"100%",padding:"12px"},children:[(0,t.jsxs)(R.Space,{style:{width:"100%",justifyContent:"space-between"},children:[(0,t.jsxs)(R.Space,{children:[(0,t.jsx)(ed,{}),(0,t.jsx)(ep,{type:"secondary",children:a||"-"})]}),l?(0,t.jsx)(_.Tag,{icon:(0,t.jsx)(ei.CrownOutlined,{}),color:"gold",children:"Premium"}):(0,t.jsx)(W.Tooltip,{title:"Upgrade to Premium for advanced features",placement:"left",children:(0,t.jsx)(_.Tag,{icon:(0,t.jsx)(ei.CrownOutlined,{}),children:"Standard"})})]}),(0,t.jsx)(em.Divider,{style:{margin:"8px 0"}}),(0,t.jsxs)(R.Space,{style:{width:"100%",justifyContent:"space-between"},children:[(0,t.jsxs)(R.Space,{children:[(0,t.jsx)(eh.UserOutlined,{}),(0,t.jsx)(ep,{type:"secondary",children:"User ID"})]}),(0,t.jsx)(ep,{copyable:!0,ellipsis:!0,style:{maxWidth:"150px"},title:r||"-",children:r||"-"})]}),(0,t.jsxs)(R.Space,{style:{width:"100%",justifyContent:"space-between"},children:[(0,t.jsxs)(R.Space,{children:[(0,t.jsx)(eu.SafetyOutlined,{}),(0,t.jsx)(ep,{type:"secondary",children:"Role"})]}),(0,t.jsx)(ep,{children:n})]}),(0,t.jsx)(em.Divider,{style:{margin:"8px 0"}}),(0,t.jsxs)(R.Space,{style:{width:"100%",justifyContent:"space-between"},children:[(0,t.jsx)(ep,{type:"secondary",children:"Hide New Feature Indicators"}),(0,t.jsx)(eg.Switch,{size:"small",checked:m,onChange:e=>{p(e),e?(0,s.setLocalStorageItem)("disableShowNewBadge","true"):(0,s.removeLocalStorageItem)("disableShowNewBadge"),(0,s.emitLocalStorageChange)("disableShowNewBadge")},"aria-label":"Toggle hide new feature indicators"})]}),(0,t.jsxs)(R.Space,{style:{width:"100%",justifyContent:"space-between"},children:[(0,t.jsx)(ep,{type:"secondary",children:"Hide All Prompts"}),(0,t.jsx)(eg.Switch,{size:"small",checked:i,onChange:e=>{e?(0,s.setLocalStorageItem)("disableShowPrompts","true"):(0,s.removeLocalStorageItem)("disableShowPrompts"),(0,s.emitLocalStorageChange)("disableShowPrompts")},"aria-label":"Toggle hide all prompts"})]}),(0,t.jsxs)(R.Space,{style:{width:"100%",justifyContent:"space-between"},children:[(0,t.jsx)(ep,{type:"secondary",children:"Hide Usage Indicator"}),(0,t.jsx)(eg.Switch,{size:"small",checked:c,onChange:e=>{e?(0,s.setLocalStorageItem)("disableUsageIndicator","true"):(0,s.removeLocalStorageItem)("disableUsageIndicator"),(0,s.emitLocalStorageChange)("disableUsageIndicator")},"aria-label":"Toggle hide usage indicator"})]}),(0,t.jsxs)(R.Space,{style:{width:"100%",justifyContent:"space-between"},children:[(0,t.jsx)(ep,{type:"secondary",children:"Hide Blog Posts"}),(0,t.jsx)(eg.Switch,{size:"small",checked:d,onChange:e=>{e?(0,s.setLocalStorageItem)("disableBlogPosts","true"):(0,s.removeLocalStorageItem)("disableBlogPosts"),(0,s.emitLocalStorageChange)("disableBlogPosts")},"aria-label":"Toggle hide blog posts"})]}),(0,t.jsxs)(R.Space,{style:{width:"100%",justifyContent:"space-between"},children:[(0,t.jsx)(ep,{type:"secondary",children:"Hide Bouncing Icon"}),(0,t.jsx)(eg.Switch,{size:"small",checked:h,onChange:e=>{e?(0,s.setLocalStorageItem)("disableBouncingIcon","true"):(0,s.removeLocalStorageItem)("disableBouncingIcon"),(0,s.emitLocalStorageChange)("disableBouncingIcon")},"aria-label":"Toggle hide bouncing icon"})]})]}),(0,t.jsx)(em.Divider,{style:{margin:0}}),o.default.cloneElement(e,{style:{boxShadow:"none"}})]}),children:(0,t.jsxs)(A.Button,{type:"text",className:"!flex max-w-[min(200px,34vw)] items-center gap-2 !rounded-md !py-0.5 !pl-1 !pr-2 transition-colors hover:!bg-gray-100","aria-label":`Account menu — ${n??"Unknown role"} — signed in as ${a||r||"unknown"}`,"aria-haspopup":"menu",children:[(0,t.jsx)("span",{className:"flex h-8 w-8 shrink-0 items-center justify-center rounded-full text-xs font-semibold text-white shadow-inner ring-1 ring-black/5",style:{backgroundColor:`hsl(${v} 46% 38%)`},"aria-hidden":!0,children:y}),(0,t.jsx)("span",{className:"hidden min-w-0 truncate text-left text-sm font-medium leading-none text-gray-900 md:inline",children:w}),(0,t.jsx)(b.DownOutlined,{className:"hidden shrink-0 text-[10px] text-gray-400 md:inline","aria-hidden":!0})]})})};var ex=e.i(477189),ey=e.i(492030),ev=e.i(431703);let eb=(0,o.createContext)({mode:"ai-gateway",setMode:()=>{},plugins:[],activePlugin:null}),ew="litellm_plugin_mode",ej=(0,ev.createApiClient)({getBaseUrl:()=>(0,a.getProxyBaseUrl)()??""});function eS(){return localStorage.getItem(ew)??"ai-gateway"}function eL(){return(0,o.useContext)(eb)}function ek(){let{mode:e,setMode:r,plugins:a}=eL();if(0===a.length)return null;let n=a.find(t=>t.name===e)?.display_name??"AI Gateway",l=[{value:"ai-gateway",label:"AI Gateway"},...a.map(e=>({value:e.name,label:e.display_name}))].map(r=>({key:r.value,label:(0,t.jsxs)("div",{className:"flex items-center justify-between gap-6 py-0.5",children:[(0,t.jsx)("span",{className:"font-medium",children:r.label}),r.value===e&&(0,t.jsx)(ey.CheckOutlined,{className:"text-blue-600"})]})}));return(0,t.jsx)(z.Dropdown,{menu:{items:l,onClick:({key:e})=>r(e),selectedKeys:[e]},trigger:["click"],children:(0,t.jsxs)("button",{type:"button",className:"flex items-center gap-2 rounded-md border border-gray-200 px-2.5 py-1.5 text-sm font-medium text-gray-700 transition-colors hover:bg-gray-50",children:[(0,t.jsx)(ex.AppstoreOutlined,{className:"text-gray-500"}),(0,t.jsx)("span",{children:n}),(0,t.jsx)(b.DownOutlined,{className:"text-[10px] text-gray-400"})]})})}e.s(["PluginModeProvider",0,function({children:e,accessToken:r}){let[a,n]=(0,o.useState)(eS),[l,i]=(0,o.useState)([]),[s,c]=(0,o.useState)(!1);(0,o.useEffect)(()=>{r&&ej.get("/api/plugins",{accessToken:r}).then(e=>{i(Array.isArray(e)?e:[])}).catch(()=>{}).finally(()=>c(!0))},[r]);let d="ai-gateway"!==a&&s&&!l.some(e=>e.name===a)?"ai-gateway":a,u=l.find(e=>e.name===d)??null;return(0,t.jsx)(eb.Provider,{value:{mode:d,setMode:e=>{n(e),localStorage.setItem(ew,e)},plugins:l,activePlugin:u},children:e})},"usePluginMode",0,eL],658140);var eC=e.i(199133),e_=e.i(295320);let eE=({onWorkerSwitch:e})=>{let{isControlPlane:r,selectedWorker:a,workers:n}=(0,p.useWorker)();return r&&a?(0,t.jsx)(eC.Select,{showSearch:!0,filterOption:(e,t)=>(t?.label??"").toLowerCase().includes(e.toLowerCase()),value:a.worker_id,style:{minWidth:180},suffixIcon:(0,t.jsx)(e_.CloudServerOutlined,{}),options:n.map(e=>({label:e.name,value:e.worker_id,disabled:e.worker_id===a.worker_id})),onChange:t=>{e(t)}}):null};e.s(["default",0,({accessToken:e,isPublicPage:r=!1,sidebarCollapsed:n=!1,onToggleSidebar:l})=>{let s=(0,a.getProxyBaseUrl)(),o=(0,v.default)(e),{logoUrl:c}=(0,f.useTheme)(),{data:d}=i(e),h=d?.litellm_version,m=u(),w=g(),{isControlPlane:j,selectedWorker:S}=(0,p.useWorker)(),k=j&&null!==S,N=c||`${s}/get_image`;return(0,t.jsx)("nav",{className:"sticky top-0 z-10 border-b border-gray-200 bg-white",children:(0,t.jsx)("div",{className:"w-full",children:(0,t.jsxs)("div",{className:"flex h-14 items-center px-4",children:[(0,t.jsxs)("div",{className:"flex flex-shrink-0 items-center",children:[l&&(0,t.jsx)("button",{onClick:l,className:"mr-2 flex h-9 w-9 items-center justify-center rounded-md text-gray-600 transition-colors hover:bg-gray-100 hover:text-gray-900",title:n?"Expand sidebar":"Collapse sidebar",children:(0,t.jsx)("span",{className:"text-lg",children:n?(0,t.jsx)(C,{}):(0,t.jsx)(L,{})})}),(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(E.default,{href:s||"/",className:"flex items-center",children:(0,t.jsx)("div",{className:"relative",children:(0,t.jsx)("div",{className:"flex h-10 max-w-48 items-center justify-center overflow-hidden",children:(0,t.jsx)("img",{src:N,alt:"LiteLLM Brand",className:"h-auto max-h-full w-auto max-w-full object-contain"})})})}),h&&(0,t.jsxs)("div",{className:"relative",children:[!m&&(0,t.jsx)("span",{className:"absolute -left-2 -top-1 animate-bounce text-lg",style:{animationDuration:"2s"},title:"Thanks for using LiteLLM!",children:"🌑"}),(0,t.jsx)(_.Tag,{className:"relative z-10 cursor-pointer text-xs font-medium",children:(0,t.jsxs)("a",{href:"https://docs.litellm.ai/release_notes",target:"_blank",rel:"noopener noreferrer",className:"flex-shrink-0",children:["v",h]})})]})]})]}),!r&&(0,t.jsx)("div",{className:"ml-4 flex shrink-0 items-center border-l border-gray-200 pl-4",children:(0,t.jsx)(ek,{})}),(0,t.jsxs)("div",{className:"ml-auto flex min-w-0 flex-1 items-center justify-end gap-4",children:[k&&(0,t.jsx)("div",{className:"flex shrink-0 items-center",children:(0,t.jsx)(eE,{onWorkerSwitch:e=>{(0,x.clearTokenCookies)(),(0,y.clearStoredReturnUrl)(),localStorage.removeItem("litellm_selected_worker_id"),localStorage.removeItem("litellm_worker_url"),window.location.href=`/ui/login?worker=${encodeURIComponent(e)}`}})}),(0,t.jsxs)("nav",{"aria-label":"Product documentation",className:`flex min-w-0 items-center gap-2 ${k?"border-l border-gray-200 pl-4":""}`,children:[(0,t.jsxs)("a",{href:"https://docs.litellm.ai/docs/",target:"_blank",rel:"noopener noreferrer",className:B,children:["Docs",(0,t.jsx)(b.DownOutlined,{className:"pointer-events-none text-[10px] opacity-0","aria-hidden":!0})]}),(0,t.jsx)($,{})]}),!w&&(0,t.jsx)("div",{className:"flex shrink-0 items-center border-l border-gray-200 pl-4",children:(0,t.jsx)(Q,{})}),!r&&(0,t.jsx)("div",{className:"flex shrink-0 items-center border-l border-gray-200 pl-4",children:(0,t.jsxs)("div",{className:"flex items-center gap-0.5 rounded-lg bg-gray-50 px-1 py-0 transition-colors hover:bg-gray-100",children:[(0,t.jsx)(ea,{}),(0,t.jsx)("span",{className:"mx-0.5 h-6 w-px shrink-0 bg-gray-200","aria-hidden":!0}),(0,t.jsx)(ef,{onLogout:()=>{(0,x.clearTokenCookies)(),localStorage.removeItem("litellm_selected_worker_id"),localStorage.removeItem("litellm_worker_url"),window.location.href=o.PROXY_LOGOUT_URL||""}})]})})]})]})})})}],402874)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0pidya1qvuvx8.js b/litellm/proxy/_experimental/out/_next/static/chunks/0pidya1qvuvx8.js new file mode 100644 index 00000000000..b547129cba4 --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0pidya1qvuvx8.js @@ -0,0 +1 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,491915,(e,t,r)=>{"use strict";function n(e,t={}){if(t.onlyHashChange)return void e();let r=document.documentElement;if("smooth"!==r.dataset.scrollBehavior)return void e();let a=r.style.scrollBehavior;r.style.scrollBehavior="auto",t.dontForceLayout||r.getClientRects(),e(),r.style.scrollBehavior=a}Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"disableSmoothScrollDuringRouteTransition",{enumerable:!0,get:function(){return n}}),e.r(233525)},768017,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"HTTPAccessFallbackBoundary",{enumerable:!0,get:function(){return u}});let n=e.r(151836),a=e.r(843476),o=n._(e.r(271645)),i=e.r(590373),s=e.r(754394);e.r(233525);let l=e.r(8372);class c extends o.default.Component{constructor(e){super(e),this.state={triggeredStatus:void 0,previousPathname:e.pathname}}componentDidCatch(){}static getDerivedStateFromError(e){if((0,s.isHTTPAccessFallbackError)(e))return{triggeredStatus:(0,s.getAccessFallbackHTTPStatus)(e)};throw e}static getDerivedStateFromProps(e,t){return e.pathname!==t.previousPathname&&t.triggeredStatus?{triggeredStatus:void 0,previousPathname:e.pathname}:{triggeredStatus:t.triggeredStatus,previousPathname:e.pathname}}render(){let{notFound:e,forbidden:t,unauthorized:r,children:n}=this.props,{triggeredStatus:o}=this.state,i={[s.HTTPAccessErrorStatus.NOT_FOUND]:e,[s.HTTPAccessErrorStatus.FORBIDDEN]:t,[s.HTTPAccessErrorStatus.UNAUTHORIZED]:r};if(o){let l=o===s.HTTPAccessErrorStatus.NOT_FOUND&&e,c=o===s.HTTPAccessErrorStatus.FORBIDDEN&&t,u=o===s.HTTPAccessErrorStatus.UNAUTHORIZED&&r;return l||c||u?(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("meta",{name:"robots",content:"noindex"}),!1,i[o]]}):n}return n}}function u({notFound:e,forbidden:t,unauthorized:r,children:n}){let s=(0,i.useUntrackedPathname)(),d=(0,o.useContext)(l.MissingSlotContext);return e||t||r?(0,a.jsx)(c,{pathname:s,notFound:e,forbidden:t,unauthorized:r,missingSlots:d,children:n}):(0,a.jsx)(a.Fragment,{children:n})}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},728298,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"useRouterBFCache",{enumerable:!0,get:function(){return a}});let n=e.r(271645);function a(e,t,r){let[a,o]=(0,n.useState)(()=>({tree:e,cacheNode:t,stateKey:r,next:null}));if(a.tree===e)return a;let i={tree:e,cacheNode:t,stateKey:r,next:null},s=1,l=a,c=i;for(;null!==l&&s<1;){if(l.stateKey===r){c.next=l.next;break}{s++;let e={tree:l.tree,cacheNode:l.cacheNode,stateKey:l.stateKey,next:null};c.next=e,c=e}l=l.next}return o(i),i}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},339756,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={LoadingBoundaryProvider:function(){return j},default:function(){return A}};for(var a in n)Object.defineProperty(r,a,{enumerable:!0,get:n[a]});let o=e.r(563141),i=e.r(151836),s=e.r(843476),l=i._(e.r(271645)),c=o._(e.r(174080)),u=e.r(8372),d=e.r(201244),f=e.r(972383),p=e.r(491915),m=e.r(358442),h=e.r(768017),g=e.r(270725),y=e.r(728298);e.r(174180);let b=e.r(261994),P=e.r(33906),_=e.r(595871),v=c.default.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,E=["bottom","height","left","right","top","width","x","y"];function R(e,t){let r=e.getClientRects();if(0===r.length)return!1;let n=1/0;for(let e=0;e=0&&n<=t}class O extends l.default.Component{componentDidMount(){this.handlePotentialScroll()}componentDidUpdate(){this.handlePotentialScroll()}render(){return this.props.children}constructor(...e){super(...e),this.handlePotentialScroll=()=>{let{focusAndScrollRef:e,cacheNode:t}=this.props,r=e.forceScroll?e.scrollRef:t.scrollRef;if(null===r||!r.current)return;let n=null,a=e.hashFragment;if(a&&(n="top"===a?document.body:document.getElementById(a)??document.getElementsByName(a)[0]),n||(n="u"0===t[e])}(n);){if(null===n.nextElementSibling)return;n=n.nextElementSibling}r.current=!1,(0,p.disableSmoothScrollDuringRouteTransition)(()=>{if(a)return void n.scrollIntoView();let e=document.documentElement,t=e.clientHeight;!R(n,t)&&(e.scrollTop=0,R(n,t)||n.scrollIntoView())},{dontForceLayout:!0,onlyHashChange:e.onlyHashChange}),e.onlyHashChange=!1,e.hashFragment=null,n.focus()}}}}function w({children:e,cacheNode:t}){let r=(0,l.useContext)(u.GlobalLayoutRouterContext);if(!r)throw Object.defineProperty(Error("invariant global layout router not mounted"),"__NEXT_ERROR_CODE",{value:"E473",enumerable:!1,configurable:!0});return(0,s.jsx)(O,{focusAndScrollRef:r.focusAndScrollRef,cacheNode:t,children:e})}function S({tree:e,segmentPath:t,debugNameContext:r,cacheNode:n,params:a,url:o,isActive:i}){let c,f=(0,l.useContext)(u.GlobalLayoutRouterContext);if((0,l.useContext)(b.NavigationPromisesContext),!f)throw Object.defineProperty(Error("invariant global layout router not mounted"),"__NEXT_ERROR_CODE",{value:"E473",enumerable:!1,configurable:!0});let p=null!==n?n:(0,l.use)(d.unresolvedThenable),m=null!==p.prefetchRsc?p.prefetchRsc:p.rsc,h=(0,l.useDeferredValue)(p.rsc,m);if((0,_.isDeferredRsc)(h)){let e=(0,l.use)(h);null===e&&(0,l.use)(d.unresolvedThenable),c=e}else null===h&&(0,l.use)(d.unresolvedThenable),c=h;let g=c;return(0,s.jsx)(u.LayoutRouterContext.Provider,{value:{parentTree:e,parentCacheNode:p,parentSegmentPath:t,parentParams:a,parentLoadingData:null,debugNameContext:r,url:o,isActive:i},children:g})}function j({loading:e,children:t}){let r=(0,l.use)(u.LayoutRouterContext);return null===r?t:(0,s.jsx)(u.LayoutRouterContext.Provider,{value:{parentTree:r.parentTree,parentCacheNode:r.parentCacheNode,parentSegmentPath:r.parentSegmentPath,parentParams:r.parentParams,parentLoadingData:e,debugNameContext:r.debugNameContext,url:r.url,isActive:r.isActive},children:t})}function C({name:e,loading:t,children:r}){if(null!==t){let n=t[0],a=t[1],o=t[2];return(0,s.jsx)(l.Suspense,{name:e,fallback:(0,s.jsxs)(s.Fragment,{children:[a,o,n]}),children:r})}return(0,s.jsx)(s.Fragment,{children:r})}function A({parallelRouterKey:e,error:t,errorStyles:r,errorScripts:n,templateStyles:a,templateScripts:o,template:i,notFound:c,forbidden:p,unauthorized:b,segmentViewBoundaries:_}){let v=(0,l.useContext)(u.LayoutRouterContext);if(!v)throw Object.defineProperty(Error("invariant expected layout router to be mounted"),"__NEXT_ERROR_CODE",{value:"E56",enumerable:!1,configurable:!0});let{parentTree:E,parentCacheNode:R,parentSegmentPath:O,parentParams:j,parentLoadingData:x,url:k,isActive:T,debugNameContext:N}=v,D=E[0],M=null===O?[e]:O.concat([D,e]),I=E[1][e],F=R.slots;(void 0===I||null===F)&&(0,l.use)(d.unresolvedThenable);let $=I[0],L=F[e]??null,U=(0,g.createRouterCacheKey)($,!0),X=(0,y.useRouterBFCache)(I,L,U),H=[];do{let e=X.tree,l=X.cacheNode,d=X.stateKey,g=e[0],y=j;if(Array.isArray(g)){let e=g[0],t=g[1],r=g[2],n=(0,P.getParamValueFromCacheKey)(t,r);null!==n&&(y={...j,[e]:n})}let _=function(e){if("/"===e)return"/";if("string"==typeof e)if("(__SLOT__)"===e)return;else return e+"/";return e[1]+"/"}(g),v=_??N,E=void 0===_?void 0:N,R=(0,s.jsxs)(w,{cacheNode:l,children:[(0,s.jsx)(f.ErrorBoundary,{errorComponent:t,errorStyles:r,errorScripts:n,children:(0,s.jsx)(C,{name:E,loading:x,children:(0,s.jsx)(h.HTTPAccessFallbackBoundary,{notFound:c,forbidden:p,unauthorized:b,children:(0,s.jsxs)(m.RedirectBoundary,{children:[(0,s.jsx)(S,{url:k,tree:e,params:y,cacheNode:l,segmentPath:M,debugNameContext:v,isActive:T&&d===U}),null]})})})}),null]}),O=(0,s.jsxs)(u.TemplateContext.Provider,{value:R,children:[a,o,i]},d);H.push(O),X=X.next}while(null!==X)return H}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},837457,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"default",{enumerable:!0,get:function(){return s}});let n=e.r(151836),a=e.r(843476),o=n._(e.r(271645)),i=e.r(8372);function s(){let e=(0,o.useContext)(i.TemplateContext);return(0,a.jsx)(a.Fragment,{children:e})}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},793504,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"createRenderSearchParamsFromClient",{enumerable:!0,get:function(){return a}});let n=new WeakMap;function a(e){let t=n.get(e);if(t)return t;let r=Promise.resolve(e);return n.set(e,r),r}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},266996,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"createRenderSearchParamsFromClient",{enumerable:!0,get:function(){return n}});let n=e.r(793504).createRenderSearchParamsFromClient;("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},806831,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"createRenderParamsFromClient",{enumerable:!0,get:function(){return a}});let n=new WeakMap;function a(e){let t=n.get(e);if(t)return t;let r=Promise.resolve(e);return n.set(e,r),r}("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},797689,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"createRenderParamsFromClient",{enumerable:!0,get:function(){return n}});let n=e.r(806831).createRenderParamsFromClient;("function"==typeof r.default||"object"==typeof r.default&&null!==r.default)&&void 0===r.default.__esModule&&(Object.defineProperty(r.default,"__esModule",{value:!0}),Object.assign(r.default,r),t.exports=r.default)},66373,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={accumulateRootVaryParam:function(){return y},accumulateVaryParam:function(){return g},createResponseVaryParamsAccumulator:function(){return c},createVaryParamsAccumulator:function(){return u},createVaryingParams:function(){return b},createVaryingSearchParams:function(){return P},emptyVaryParamsAccumulator:function(){return l},finishAccumulatingVaryParams:function(){return _},getMetadataVaryParamsAccumulator:function(){return d},getMetadataVaryParamsThenable:function(){return p},getRootParamsVaryParamsAccumulator:function(){return h},getVaryParamsThenable:function(){return f},getViewportVaryParamsAccumulator:function(){return m}};for(var a in n)Object.defineProperty(r,a,{enumerable:!0,get:n[a]});let o=e.r(662141);function i(){let e={varyParams:new Set,status:"pending",value:new Set,then(t){t&&("pending"===e.status?e.resolvers.push(t):t(e.value))},resolvers:[]};return e}let s=new Set,l={varyParams:s,status:"fulfilled",value:s,then(e){e&&e(s)},resolvers:[]};function c(){let e=i();return{head:e,rootParams:i(),segments:new Set}}function u(){let e=o.workUnitAsyncStorage.getStore();if(e)switch(e.type){case"prerender":case"prerender-runtime":{let t=e.varyParamsAccumulator;if(null!==t){let e=i();return t.segments.add(e),e}}}return null}function d(){let e=o.workUnitAsyncStorage.getStore();if(e)switch(e.type){case"prerender":case"prerender-runtime":{let t=e.varyParamsAccumulator;if(null!==t)return t.head}}return null}function f(e){return e}function p(){let e=d();return null!==e?e:null}let m=d;function h(){let e=o.workUnitAsyncStorage.getStore();if(e)switch(e.type){case"prerender":case"prerender-runtime":{let t=e.varyParamsAccumulator;if(null!==t)return t.rootParams}}return null}function g(e,t){e.varyParams.add(t)}function y(e){let t=h();null!==t&&g(t,e)}function b(e,t,r){if(null!==r)return new Proxy(t,{get:(t,n,a)=>("string"==typeof n&&(n===r||Object.prototype.hasOwnProperty.call(t,n))&&g(e,n),Reflect.get(t,n,a)),has:(t,n)=>(n===r&&g(e,r),Reflect.has(t,n)),ownKeys:t=>(g(e,r),Reflect.ownKeys(t))});let n={};for(let r in t)Object.defineProperty(n,r,{get:()=>(g(e,r),t[r]),enumerable:!0});return n}function P(e,t){let r={};for(let n in t)Object.defineProperty(r,n,{get:()=>(g(e,"?"),t[n]),enumerable:!0});return r}async function _(e){let t=e.rootParams.varyParams;for(let r of(v(e.head,t),e.segments))v(r,t);await Promise.resolve(),await Promise.resolve(),await Promise.resolve()}function v(e,t){if("pending"!==e.status)return;let r=new Set(e.varyParams);for(let e of t)r.add(e);for(let t of(e.value=r,e.status="fulfilled",e.resolvers))t(r);e.resolvers=[]}},242715,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"ReflectAdapter",{enumerable:!0,get:function(){return n}});class n{static get(e,t,r){let n=Reflect.get(e,t,r);return"function"==typeof n?n.bind(e):n}static set(e,t,r,n){return Reflect.set(e,t,r,n)}static has(e,t){return Reflect.has(e,t)}static deleteProperty(e,t){return Reflect.deleteProperty(e,t)}}},364146,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"createDedupedByCallsiteServerErrorLoggerDev",{enumerable:!0,get:function(){return l}});let n=function(e){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var t=a(void 0);if(t&&t.has(e))return t.get(e);var r={__proto__:null},n=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&Object.prototype.hasOwnProperty.call(e,o)){var i=n?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(r,o,i):r[o]=e[o]}return r.default=e,t&&t.set(e,r),r}(e.r(271645));function a(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(a=function(e){return e?r:t})(e)}let o={current:null},i="function"==typeof n.cache?n.cache:e=>e,s=console.warn;function l(e){return function(...t){s(e(...t))}}i(e=>{try{s(o.current)}finally{o.current=null}})},565932,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={describeHasCheckingStringProperty:function(){return s},describeStringPropertyAccess:function(){return i},wellKnownProperties:function(){return l}};for(var a in n)Object.defineProperty(r,a,{enumerable:!0,get:n[a]});let o=/^[A-Za-z_$][A-Za-z0-9_$]*$/;function i(e,t){return o.test(t)?`\`${e}.${t}\``:`\`${e}[${JSON.stringify(t)}]\``}function s(e,t){let r=JSON.stringify(t);return`\`Reflect.has(${e}, ${r})\`, \`${r} in ${e}\`, or similar`}let l=new Set(["hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toString","valueOf","toLocaleString","then","catch","finally","status","displayName","_debugInfo","toJSON","$$typeof","__esModule","@@iterator"])},783066,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"afterTaskAsyncStorageInstance",{enumerable:!0,get:function(){return n}});let n=(0,e.r(90317).createAsyncLocalStorage)()},341643,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"afterTaskAsyncStorage",{enumerable:!0,get:function(){return n.afterTaskAsyncStorageInstance}});let n=e.r(783066)},850999,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={isRequestAPICallableInsideAfter:function(){return c},throwForSearchParamsAccessInUseCache:function(){return l},throwWithStaticGenerationBailoutErrorWithDynamicError:function(){return s}};for(var a in n)Object.defineProperty(r,a,{enumerable:!0,get:n[a]});let o=e.r(643248),i=e.r(341643);function s(e,t){throw Object.defineProperty(new o.StaticGenBailoutError(`Route ${e} with \`dynamic = "error"\` couldn't be rendered statically because it used ${t}. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E543",enumerable:!1,configurable:!0})}function l(e,t){let r=Object.defineProperty(Error(`Route ${e.route} used \`searchParams\` inside "use cache". Accessing dynamic request data inside a cache scope is not supported. If you need some search params inside a cached function await \`searchParams\` outside of the cached function and pass only the required search params as arguments to the cached function. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E842",enumerable:!1,configurable:!0});throw Error.captureStackTrace(r,t),e.invalidDynamicUsageError??=r,r}function c(){let e=i.afterTaskAsyncStorage.getStore();return(null==e?void 0:e.rootTaskSpawnPhase)==="action"}},928649,(e,t,r)=>{"use strict";var n=Object.defineProperty,a=Object.getOwnPropertyDescriptor,o=Object.getOwnPropertyNames,i=Object.prototype.hasOwnProperty,s={},l={RequestCookies:()=>h,ResponseCookies:()=>g,parseCookie:()=>d,parseSetCookie:()=>f,stringifyCookie:()=>u};for(var c in l)n(s,c,{get:l[c],enumerable:!0});function u(e){var t;let r=["path"in e&&e.path&&`Path=${e.path}`,"expires"in e&&(e.expires||0===e.expires)&&`Expires=${("number"==typeof e.expires?new Date(e.expires):e.expires).toUTCString()}`,"maxAge"in e&&"number"==typeof e.maxAge&&`Max-Age=${e.maxAge}`,"domain"in e&&e.domain&&`Domain=${e.domain}`,"secure"in e&&e.secure&&"Secure","httpOnly"in e&&e.httpOnly&&"HttpOnly","sameSite"in e&&e.sameSite&&`SameSite=${e.sameSite}`,"partitioned"in e&&e.partitioned&&"Partitioned","priority"in e&&e.priority&&`Priority=${e.priority}`].filter(Boolean),n=`${e.name}=${encodeURIComponent(null!=(t=e.value)?t:"")}`;return 0===r.length?n:`${n}; ${r.join("; ")}`}function d(e){let t=new Map;for(let r of e.split(/; */)){if(!r)continue;let e=r.indexOf("=");if(-1===e){t.set(r,"true");continue}let[n,a]=[r.slice(0,e),r.slice(e+1)];try{t.set(n,decodeURIComponent(null!=a?a:"true"))}catch{}}return t}function f(e){if(!e)return;let[[t,r],...n]=d(e),{domain:a,expires:o,httponly:i,maxage:s,path:l,samesite:c,secure:u,partitioned:f,priority:h}=Object.fromEntries(n.map(([e,t])=>[e.toLowerCase().replace(/-/g,""),t]));{var g,y,b={name:t,value:decodeURIComponent(r),domain:a,...o&&{expires:new Date(o)},...i&&{httpOnly:!0},..."string"==typeof s&&{maxAge:Number(s)},path:l,...c&&{sameSite:p.includes(g=(g=c).toLowerCase())?g:void 0},...u&&{secure:!0},...h&&{priority:m.includes(y=(y=h).toLowerCase())?y:void 0},...f&&{partitioned:!0}};let e={};for(let t in b)b[t]&&(e[t]=b[t]);return e}}t.exports=((e,t,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let s of o(t))i.call(e,s)||void 0===s||n(e,s,{get:()=>t[s],enumerable:!(r=a(t,s))||r.enumerable});return e})(n({},"__esModule",{value:!0}),s);var p=["strict","lax","none"],m=["low","medium","high"],h=class{constructor(e){this._parsed=new Map,this._headers=e;const t=e.get("cookie");if(t)for(const[e,r]of d(t))this._parsed.set(e,{name:e,value:r})}[Symbol.iterator](){return this._parsed[Symbol.iterator]()}get size(){return this._parsed.size}get(...e){let t="string"==typeof e[0]?e[0]:e[0].name;return this._parsed.get(t)}getAll(...e){var t;let r=Array.from(this._parsed);if(!e.length)return r.map(([e,t])=>t);let n="string"==typeof e[0]?e[0]:null==(t=e[0])?void 0:t.name;return r.filter(([e])=>e===n).map(([e,t])=>t)}has(e){return this._parsed.has(e)}set(...e){let[t,r]=1===e.length?[e[0].name,e[0].value]:e,n=this._parsed;return n.set(t,{name:t,value:r}),this._headers.set("cookie",Array.from(n).map(([e,t])=>u(t)).join("; ")),this}delete(e){let t=this._parsed,r=Array.isArray(e)?e.map(e=>t.delete(e)):t.delete(e);return this._headers.set("cookie",Array.from(t).map(([e,t])=>u(t)).join("; ")),r}clear(){return this.delete(Array.from(this._parsed.keys())),this}[Symbol.for("edge-runtime.inspect.custom")](){return`RequestCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`}toString(){return[...this._parsed.values()].map(e=>`${e.name}=${encodeURIComponent(e.value)}`).join("; ")}},g=class{constructor(e){var t,r,n;this._parsed=new Map,this._headers=e;const a=null!=(n=null!=(r=null==(t=e.getSetCookie)?void 0:t.call(e))?r:e.get("set-cookie"))?n:[];for(const e of Array.isArray(a)?a:function(e){if(!e)return[];var t,r,n,a,o,i=[],s=0;function l(){for(;s=e.length)&&i.push(e.substring(t,e.length))}return i}(a)){const t=f(e);t&&this._parsed.set(t.name,t)}}get(...e){let t="string"==typeof e[0]?e[0]:e[0].name;return this._parsed.get(t)}getAll(...e){var t;let r=Array.from(this._parsed.values());if(!e.length)return r;let n="string"==typeof e[0]?e[0]:null==(t=e[0])?void 0:t.name;return r.filter(e=>e.name===n)}has(e){return this._parsed.has(e)}set(...e){let[t,r,n]=1===e.length?[e[0].name,e[0].value,e[0]]:e,a=this._parsed;return a.set(t,function(e={name:"",value:""}){return"number"==typeof e.expires&&(e.expires=new Date(e.expires)),e.maxAge&&(e.expires=new Date(Date.now()+1e3*e.maxAge)),(null===e.path||void 0===e.path)&&(e.path="/"),e}({name:t,value:r,...n})),function(e,t){for(let[,r]of(t.delete("set-cookie"),e)){let e=u(r);t.append("set-cookie",e)}}(a,this._headers),this}delete(...e){let[t,r]="string"==typeof e[0]?[e[0]]:[e[0].name,e[0]];return this.set({...r,name:t,value:"",expires:new Date(0)})}[Symbol.for("edge-runtime.inspect.custom")](){return`ResponseCookies ${JSON.stringify(Object.fromEntries(this._parsed))}`}toString(){return[...this._parsed.values()].map(u).join("; ")}}},196883,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={RequestCookies:function(){return o.RequestCookies},ResponseCookies:function(){return o.ResponseCookies},stringifyCookie:function(){return o.stringifyCookie}};for(var a in n)Object.defineProperty(r,a,{enumerable:!0,get:n[a]});let o=e.r(928649)},397270,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={MutableRequestCookiesAdapter:function(){return m},ReadonlyRequestCookiesError:function(){return c},RequestCookiesAdapter:function(){return u},appendMutableCookies:function(){return p},areCookiesMutableInCurrentPhase:function(){return g},createCookiesWithMutableAccessCheck:function(){return h},getModifiedCookieValues:function(){return f},responseCookiesToRequestCookies:function(){return b}};for(var a in n)Object.defineProperty(r,a,{enumerable:!0,get:n[a]});let o=e.r(196883),i=e.r(242715),s=e.r(563599),l=e.r(339146);class c extends Error{constructor(){super("Cookies can only be modified in a Server Action or Route Handler. Read more: https://nextjs.org/docs/app/api-reference/functions/cookies#options")}static callable(){throw new c}}class u{static seal(e){return new Proxy(e,{get(e,t,r){switch(t){case"clear":case"delete":case"set":return c.callable;default:return i.ReflectAdapter.get(e,t,r)}}})}}let d=Symbol.for("next.mutated.cookies");function f(e){let t=e[d];return t&&Array.isArray(t)&&0!==t.length?t:[]}function p(e,t){let r=f(t);if(0===r.length)return!1;let n=new o.ResponseCookies(e),a=n.getAll();for(let e of r)n.set(e);for(let e of a)n.set(e);return!0}class m{static wrap(e,t){let r=new o.ResponseCookies(new Headers);for(let t of e.getAll())r.set(t);let n=[],a=new Set,c=()=>{let e=s.workAsyncStorage.getStore();if(e&&(e.pathWasRevalidated=l.ActionDidRevalidateStaticAndDynamic),n=r.getAll().filter(e=>a.has(e.name)),t){let e=[];for(let t of n){let r=new o.ResponseCookies(new Headers);r.set(t),e.push(r.toString())}t(e)}},u=new Proxy(r,{get(e,t,r){switch(t){case d:return n;case"delete":return function(...t){a.add("string"==typeof t[0]?t[0]:t[0].name);try{return e.delete(...t),u}finally{c()}};case"set":return function(...t){a.add("string"==typeof t[0]?t[0]:t[0].name);try{return e.set(...t),u}finally{c()}};default:return i.ReflectAdapter.get(e,t,r)}}});return u}}function h(e){let t=new Proxy(e.mutableCookies,{get(r,n,a){switch(n){case"delete":return function(...n){return y(e,"cookies().delete"),r.delete(...n),t};case"set":return function(...n){return y(e,"cookies().set"),r.set(...n),t};default:return i.ReflectAdapter.get(r,n,a)}}});return t}function g(e){return"action"===e.phase}function y(e,t){if(!g(e))throw new c}function b(e){let t=new o.RequestCookies(new Headers);for(let r of e.getAll())t.set(r);return t}},687720,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={HeadersAdapter:function(){return s},ReadonlyHeadersError:function(){return i}};for(var a in n)Object.defineProperty(r,a,{enumerable:!0,get:n[a]});let o=e.r(242715);class i extends Error{constructor(){super("Headers cannot be modified. Read more: https://nextjs.org/docs/app/api-reference/functions/headers")}static callable(){throw new i}}class s extends Headers{constructor(e){super(),this.headers=new Proxy(e,{get(t,r,n){if("symbol"==typeof r)return o.ReflectAdapter.get(t,r,n);let a=r.toLowerCase(),i=Object.keys(e).find(e=>e.toLowerCase()===a);if(void 0!==i)return o.ReflectAdapter.get(t,i,n)},set(t,r,n,a){if("symbol"==typeof r)return o.ReflectAdapter.set(t,r,n,a);let i=r.toLowerCase(),s=Object.keys(e).find(e=>e.toLowerCase()===i);return o.ReflectAdapter.set(t,s??r,n,a)},has(t,r){if("symbol"==typeof r)return o.ReflectAdapter.has(t,r);let n=r.toLowerCase(),a=Object.keys(e).find(e=>e.toLowerCase()===n);return void 0!==a&&o.ReflectAdapter.has(t,a)},deleteProperty(t,r){if("symbol"==typeof r)return o.ReflectAdapter.deleteProperty(t,r);let n=r.toLowerCase(),a=Object.keys(e).find(e=>e.toLowerCase()===n);return void 0===a||o.ReflectAdapter.deleteProperty(t,a)}})}static seal(e){return new Proxy(e,{get(e,t,r){switch(t){case"append":case"delete":case"set":return i.callable;default:return o.ReflectAdapter.get(e,t,r)}}})}merge(e){return Array.isArray(e)?e.join(", "):e}static from(e){return e instanceof Headers?e:new s(e)}append(e,t){let r=this.headers[e];"string"==typeof r?this.headers[e]=[r,t]:Array.isArray(r)?r.push(t):this.headers[e]=t}delete(e){delete this.headers[e]}get(e){let t=this.headers[e];return void 0!==t?this.merge(t):null}has(e){return void 0!==this.headers[e]}set(e,t){this.headers[e]=t}forEach(e,t){for(let[r,n]of this.entries())e.call(t,n,r,this)}*entries(){for(let e of Object.keys(this.headers)){let t=e.toLowerCase(),r=this.get(t);yield[t,r]}}*keys(){for(let e of Object.keys(this.headers)){let t=e.toLowerCase();yield t}}*values(){for(let e of Object.keys(this.headers)){let t=this.get(e);yield t}}[Symbol.iterator](){return this.entries()}}},401643,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={getParamProperties:function(){return l},getSegmentParam:function(){return i},isCatchAll:function(){return s}};for(var a in n)Object.defineProperty(r,a,{enumerable:!0,get:n[a]});let o=e.r(591463);function i(e){let t=o.INTERCEPTION_ROUTE_MARKERS.find(t=>e.startsWith(t));return(t&&(e=e.slice(t.length)),e.startsWith("[[...")&&e.endsWith("]]"))?{paramType:"optional-catchall",paramName:e.slice(5,-2)}:e.startsWith("[...")&&e.endsWith("]")?{paramType:t?`catchall-intercepted-${t}`:"catchall",paramName:e.slice(4,-1)}:e.startsWith("[")&&e.endsWith("]")?{paramType:t?`dynamic-intercepted-${t}`:"dynamic",paramName:e.slice(1,-1)}:null}function s(e){return"catchall"===e||"catchall-intercepted-(..)(..)"===e||"catchall-intercepted-(.)"===e||"catchall-intercepted-(..)"===e||"catchall-intercepted-(...)"===e||"optional-catchall"===e}function l(e){let t=!1,r=!1;switch(e){case"catchall":case"catchall-intercepted-(..)(..)":case"catchall-intercepted-(.)":case"catchall-intercepted-(..)":case"catchall-intercepted-(...)":t=!0;break;case"optional-catchall":t=!0,r=!0}return{repeat:t,optional:r}}},722783,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"parseRelativeUrl",{enumerable:!0,get:function(){return o}});let n=e.r(718967),a=e.r(998183);function o(e,t,r=!0){let i=new URL("u"{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={InstantValidationError:function(){return s},isInstantValidationError:function(){return i}};for(var a in n)Object.defineProperty(r,a,{enumerable:!0,get:n[a]});let o="INSTANT_VALIDATION_ERROR";function i(e){return!!(e&&"object"==typeof e&&e instanceof Error&&e.digest===o)}class s extends Error{constructor(...e){super(...e),this.digest=o}}},918450,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={assertRootParamInSamples:function(){return S},createCookiesFromSample:function(){return y},createDraftModeForValidation:function(){return _},createExhaustiveParamsProxy:function(){return v},createExhaustiveSearchParamsProxy:function(){return E},createExhaustiveURLSearchParamsProxy:function(){return R},createHeadersFromSample:function(){return P},createRelativeURLFromSamples:function(){return w},createValidationSampleTracking:function(){return m},trackMissingSampleError:function(){return h},trackMissingSampleErrorAndThrow:function(){return g}};for(var a in n)Object.defineProperty(r,a,{enumerable:!0,get:n[a]});let o=e.r(196883),i=e.r(397270),s=e.r(687720),l=e.r(401643),c=e.r(722783),u=e.r(312718),d=e.r(513770),f=e.r(662141),p=e.r(565932);function m(){return{missingSampleErrors:[]}}function h(e){(function(){let e=null,t=f.workUnitAsyncStorage.getStore();if(t)switch(t.type){case"request":case"validation-client":e=t.validationSampleTracking??null}if(!e)throw Object.defineProperty(new u.InvariantError("Expected to have a workUnitStore that provides validationSampleTracking"),"__NEXT_ERROR_CODE",{value:"E1110",enumerable:!1,configurable:!0});return e})().missingSampleErrors.push(e)}function g(e){throw h(e),e}function y(e,t){let r=new Set,n=new o.RequestCookies(new Headers);if(e)for(let t of e)r.add(t.name),null!==t.value&&n.set(t.name,t.value);return new Proxy(i.RequestCookiesAdapter.seal(n),{get(e,n,a){if("has"===n){let o=Reflect.get(e,n,a);return function(n){return r.has(n)||g(b(t,n)),o.call(e,n)}}if("get"===n){let o=Reflect.get(e,n,a);return function(n){let a;if("string"==typeof n)a=n;else{if(!n||"object"!=typeof n||"string"!=typeof n.name)return o.call(e,n);a=n.name}return r.has(a)||g(b(t,a)),o.call(e,a)}}return Reflect.get(e,n,a)}})}function b(e,t){return Object.defineProperty(new d.InstantValidationError(`Route "${e}" accessed cookie "${t}" which is not defined in the \`samples\` of \`unstable_instant\`. Add it to the sample's \`cookies\` array, or \`{ name: "${t}", value: null }\` if it should be absent.`),"__NEXT_ERROR_CODE",{value:"E1115",enumerable:!1,configurable:!0})}function P(e,t,r){let n=e?[...e]:[];if(n.find(([e])=>"cookie"===e.toLowerCase()))throw Object.defineProperty(new d.InstantValidationError('Invalid sample: Defining cookies via a "cookie" header is not supported. Use `cookies: [{ name: ..., value: ... }]` instead.'),"__NEXT_ERROR_CODE",{value:"E1111",enumerable:!1,configurable:!0});if(t){let e=t.toString();n.push(["cookie",""!==e?e:null])}let a=new Set,o={};for(let[e,t]of n)a.add(e.toLowerCase()),null!==t&&(o[e.toLowerCase()]=t);return new Proxy(s.HeadersAdapter.seal(s.HeadersAdapter.from(o)),{get(e,t,n){if("get"===t||"has"===t){let o=Reflect.get(e,t,n);return function(t){let n=t.toLowerCase();return a.has(n)||g(Object.defineProperty(new d.InstantValidationError(`Route "${r}" accessed header "${n}" which is not defined in the \`samples\` of \`unstable_instant\`. Add it to the sample's \`headers\` array, or \`["${n}", null]\` if it should be absent.`),"__NEXT_ERROR_CODE",{value:"E1116",enumerable:!1,configurable:!0})),o.call(e,n)}}return Reflect.get(e,t,n)}})}function _(){return{get isEnabled(){return!1},enable(){throw Object.defineProperty(Error("Draft mode cannot be enabled during build-time instant validation."),"__NEXT_ERROR_CODE",{value:"E1092",enumerable:!1,configurable:!0})},disable(){throw Object.defineProperty(Error("Draft mode cannot be disabled during build-time instant validation."),"__NEXT_ERROR_CODE",{value:"E1094",enumerable:!1,configurable:!0})}}}function v(e,t,r){return new Proxy(e,{get:(n,a,o)=>("string"==typeof a&&!p.wellKnownProperties.has(a)&&a in e&&!t.has(a)&&g(Object.defineProperty(new d.InstantValidationError(`Route "${r}" accessed param "${a}" which is not defined in the \`samples\` of \`unstable_instant\`. Add it to the sample's \`params\` object.`),"__NEXT_ERROR_CODE",{value:"E1095",enumerable:!1,configurable:!0})),Reflect.get(n,a,o))})}function E(e,t,r){return new Proxy(e,{get:(e,n,a)=>("string"!=typeof n||p.wellKnownProperties.has(n)||t.has(n)||g(O(r,n)),Reflect.get(e,n,a)),has:(e,n)=>("string"!=typeof n||p.wellKnownProperties.has(n)||t.has(n)||g(O(r,n)),Reflect.has(e,n))})}function R(e,t,r){return new Proxy(e,{get(e,n,a){if("get"===n||"getAll"===n||"has"===n){let o=Reflect.get(e,n,a);return n=>("string"!=typeof n||t.has(n)||g(O(r,n)),o.call(e,n))}let o=Reflect.get(e,n,a);return"function"!=typeof o||Object.hasOwn(e,n)?o:o.bind(e)}})}function O(e,t){return Object.defineProperty(new d.InstantValidationError(`Route "${e}" accessed searchParam "${t}" which is not defined in the \`samples\` of \`unstable_instant\`. Add it to the sample's \`searchParams\` object, or \`{ "${t}": null }\` if it should be absent.`),"__NEXT_ERROR_CODE",{value:"E1098",enumerable:!1,configurable:!0})}function w(e,t,r){let n=function(e,t){let r=[];for(let n of e.split("/")){let e=(0,l.getSegmentParam)(n);if(e)switch(e.paramType){case"catchall":case"optional-catchall":{let a=t[e.paramName];if(void 0===a)a=[n];else if(!Array.isArray(a))throw Object.defineProperty(new d.InstantValidationError(`Expected sample param value for segment '${n}' to be an array of strings, got ${typeof a}`),"__NEXT_ERROR_CODE",{value:"E1104",enumerable:!1,configurable:!0});r.push(...a.map(e=>encodeURIComponent(e)));break}case"dynamic":{let a=t[e.paramName];if(void 0===a)a=n;else if("string"!=typeof a)throw Object.defineProperty(new d.InstantValidationError(`Expected sample param value for segment '${n}' to be a string, got ${typeof a}`),"__NEXT_ERROR_CODE",{value:"E1108",enumerable:!1,configurable:!0});r.push(encodeURIComponent(a));break}case"catchall-intercepted-(..)(..)":case"catchall-intercepted-(.)":case"catchall-intercepted-(..)":case"catchall-intercepted-(...)":case"dynamic-intercepted-(..)(..)":case"dynamic-intercepted-(.)":case"dynamic-intercepted-(..)":case"dynamic-intercepted-(...)":throw Object.defineProperty(new u.InvariantError("Not implemented: Validation of interception routes"),"__NEXT_ERROR_CODE",{value:"E1106",enumerable:!1,configurable:!0});default:e.paramType}else r.push(n)}return r.join("/")}(e,t??{}),a="";if(r){let e=(function(e){let t=new URLSearchParams;if(e){for(let[r,n]of Object.entries(e))if(null!=n)if(Array.isArray(n))for(let e of n)t.append(r,e);else t.set(r,n)}return t})(r).toString();e&&(a="?"+e)}return(0,c.parseRelativeUrl)(n+a,void 0,!0)}function S(e,t,r){if(t&&r in t);else{let t=e.route;g(Object.defineProperty(new d.InstantValidationError(`Route "${t}" accessed root param "${r}" which is not defined in the \`samples\` of \`unstable_instant\`. Add it to the sample's \`params\` object.`),"__NEXT_ERROR_CODE",{value:"E1114",enumerable:!1,configurable:!0}))}}},269882,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={createPrerenderSearchParamsForClientPage:function(){return P},createSearchParamsFromClient:function(){return g},createServerSearchParamsForMetadata:function(){return y},createServerSearchParamsForServerPage:function(){return b},makeErroringSearchParamsForUseCache:function(){return O}};for(var a in n)Object.defineProperty(r,a,{enumerable:!0,get:n[a]});let o=e.r(563599),i=e.r(66373),s=e.r(242715),l=e.r(67673),c=e.r(662141),u=e.r(312718),d=e.r(963138),f=e.r(364146),p=e.r(565932),m=e.r(850999),h=e.r(142852);function g(t){let r=o.workAsyncStorage.getStore();if(!r)throw Object.defineProperty(new u.InvariantError("Expected workStore to be initialized"),"__NEXT_ERROR_CODE",{value:"E1068",enumerable:!1,configurable:!0});let n=c.workUnitAsyncStorage.getStore();if(n)switch(n.type){case"prerender":case"prerender-client":case"prerender-ppr":case"prerender-legacy":return _(r,n);case"validation-client":return function(t,r,n){var a;let{createExhaustiveSearchParamsProxy:o}=e.r(918450);return Promise.resolve(t=o(t,new Set(Object.keys((null==(a=n.validationSamples)?void 0:a.searchParams)??{})),r.route))}(t,r,n);case"prerender-runtime":throw Object.defineProperty(new u.InvariantError("createSearchParamsFromClient should not be called in a runtime prerender."),"__NEXT_ERROR_CODE",{value:"E769",enumerable:!1,configurable:!0});case"cache":case"private-cache":case"unstable-cache":throw Object.defineProperty(new u.InvariantError("createSearchParamsFromClient should not be called in cache contexts."),"__NEXT_ERROR_CODE",{value:"E739",enumerable:!1,configurable:!0});case"generate-static-params":throw Object.defineProperty(new u.InvariantError("createSearchParamsFromClient should not be called inside generateStaticParams."),"__NEXT_ERROR_CODE",{value:"E1133",enumerable:!1,configurable:!0});case"request":return v(t,r,n,!1)}(0,c.throwInvariantForMissingStore)()}function y(e,t){return b(e,(0,i.getMetadataVaryParamsAccumulator)(),t)}function b(e,t,r){let n=o.workAsyncStorage.getStore();if(!n)throw Object.defineProperty(new u.InvariantError("Expected workStore to be initialized"),"__NEXT_ERROR_CODE",{value:"E1068",enumerable:!1,configurable:!0});let a=c.workUnitAsyncStorage.getStore();if(a)switch(a.type){case"prerender":case"prerender-client":case"prerender-ppr":case"prerender-legacy":return _(n,a);case"validation-client":throw Object.defineProperty(new u.InvariantError("createServerSearchParamsForServerPage should not be called in a client validation."),"__NEXT_ERROR_CODE",{value:"E1066",enumerable:!1,configurable:!0});case"cache":case"private-cache":case"unstable-cache":throw Object.defineProperty(new u.InvariantError("createServerSearchParamsForServerPage should not be called in cache contexts."),"__NEXT_ERROR_CODE",{value:"E747",enumerable:!1,configurable:!0});case"generate-static-params":throw Object.defineProperty(new u.InvariantError("createServerSearchParamsForServerPage should not be called inside generateStaticParams."),"__NEXT_ERROR_CODE",{value:"E1128",enumerable:!1,configurable:!0});case"prerender-runtime":return function(e,t,r,n){let a=w(null!==r?(0,i.createVaryingSearchParams)(r,e):e),{stagedRendering:o}=t;if(!o)return a;let s=n?h.RenderStage.EarlyRuntime:h.RenderStage.Runtime;return o.waitForStage(s).then(()=>a)}(e,a,t,r);case"request":return v(e,n,a,r)}(0,c.throwInvariantForMissingStore)()}function P(){let e=o.workAsyncStorage.getStore();if(!e)throw Object.defineProperty(new u.InvariantError("Expected workStore to be initialized"),"__NEXT_ERROR_CODE",{value:"E1068",enumerable:!1,configurable:!0});if(e.forceStatic)return Promise.resolve({});let t=c.workUnitAsyncStorage.getStore();if(t)switch(t.type){case"prerender":case"prerender-client":return(0,d.makeHangingPromise)(t.renderSignal,e.route,"`searchParams`");case"validation-client":throw Object.defineProperty(new u.InvariantError("createPrerenderSearchParamsForClientPage should not be called in a client validation."),"__NEXT_ERROR_CODE",{value:"E1061",enumerable:!1,configurable:!0});case"prerender-runtime":throw Object.defineProperty(new u.InvariantError("createPrerenderSearchParamsForClientPage should not be called in a runtime prerender."),"__NEXT_ERROR_CODE",{value:"E768",enumerable:!1,configurable:!0});case"cache":case"private-cache":case"unstable-cache":throw Object.defineProperty(new u.InvariantError("createPrerenderSearchParamsForClientPage should not be called in cache contexts."),"__NEXT_ERROR_CODE",{value:"E746",enumerable:!1,configurable:!0});case"generate-static-params":throw Object.defineProperty(new u.InvariantError("createPrerenderSearchParamsForClientPage should not be called inside generateStaticParams."),"__NEXT_ERROR_CODE",{value:"E1124",enumerable:!1,configurable:!0});case"prerender-ppr":case"prerender-legacy":case"request":return Promise.resolve({})}(0,c.throwInvariantForMissingStore)()}function _(e,t){if(e.forceStatic)return Promise.resolve({});switch(t.type){case"prerender":case"prerender-client":var r=e,n=t;let a=E.get(n);if(a)return a;let o=(0,d.makeHangingPromise)(n.renderSignal,r.route,"`searchParams`"),i=new Proxy(o,{get(e,t,r){if(Object.hasOwn(o,t))return s.ReflectAdapter.get(e,t,r);switch(t){case"then":return(0,l.annotateDynamicAccess)("`await searchParams`, `searchParams.then`, or similar",n),s.ReflectAdapter.get(e,t,r);case"status":return(0,l.annotateDynamicAccess)("`use(searchParams)`, `searchParams.status`, or similar",n),s.ReflectAdapter.get(e,t,r);default:return s.ReflectAdapter.get(e,t,r)}}});return E.set(n,i),i;case"prerender-ppr":case"prerender-legacy":var c=e,u=t;let f=E.get(c);if(f)return f;let p=Promise.resolve({}),h=new Proxy(p,{get(e,t,r){if(Object.hasOwn(p,t))return s.ReflectAdapter.get(e,t,r);if("string"==typeof t&&"then"===t){let e="`await searchParams`, `searchParams.then`, or similar";c.dynamicShouldError?(0,m.throwWithStaticGenerationBailoutErrorWithDynamicError)(c.route,e):"prerender-ppr"===u.type?(0,l.postponeWithTracking)(c.route,e,u.dynamicTracking):(0,l.throwToInterruptStaticGeneration)(e,c,u)}return s.ReflectAdapter.get(e,t,r)}});return E.set(c,h),h;default:return t}}function v(t,r,n,a){if(r.forceStatic)return Promise.resolve({});if(!n.asyncApiPromises)return w(t);if(n.validationSamples){let{createExhaustiveSearchParamsProxy:a}=e.r(918450),o=new Set(Object.keys(n.validationSamples.searchParams??{}));t=a(t,o,r.route)}return(a?n.asyncApiPromises.earlySharedSearchParamsParent:n.asyncApiPromises.sharedSearchParamsParent).then(()=>t)}let E=new WeakMap,R=new WeakMap;function O(){let e=o.workAsyncStorage.getStore();if(!e)throw Object.defineProperty(new u.InvariantError("Expected workStore to be initialized"),"__NEXT_ERROR_CODE",{value:"E1068",enumerable:!1,configurable:!0});let t=R.get(e);if(t)return t;let r=Promise.resolve({}),n=new Proxy(r,{get:function t(n,a,o){return Object.hasOwn(r,a)||"string"!=typeof a||"then"!==a&&p.wellKnownProperties.has(a)||(0,m.throwForSearchParamsAccessInUseCache)(e,t),s.ReflectAdapter.get(n,a,o)}});return R.set(e,n),n}function w(e){let t=E.get(e);if(t)return t;let r=Promise.resolve(e);return E.set(e,r),r}(0,f.createDedupedByCallsiteServerErrorLoggerDev)(function(e,t){let r=e?`Route "${e}" `:"This route ";return Object.defineProperty(Error(`${r}used ${t}. \`searchParams\` is a Promise and must be unwrapped with \`await\` or \`React.use()\` before accessing its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`),"__NEXT_ERROR_CODE",{value:"E848",enumerable:!1,configurable:!0})})},74804,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"dynamicAccessAsyncStorageInstance",{enumerable:!0,get:function(){return n}});let n=(0,e.r(90317).createAsyncLocalStorage)()},288276,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"dynamicAccessAsyncStorage",{enumerable:!0,get:function(){return n.dynamicAccessAsyncStorageInstance}});let n=e.r(74804)},541489,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n={createParamsFromClient:function(){return g},createPrerenderParamsForClientSegment:function(){return _},createServerParamsForMetadata:function(){return y},createServerParamsForRoute:function(){return b},createServerParamsForServerSegment:function(){return P}};for(var a in n)Object.defineProperty(r,a,{enumerable:!0,get:n[a]});let o=e.r(563599),i=e.r(66373),s=e.r(242715),l=e.r(67673),c=e.r(662141),u=e.r(312718),d=e.r(565932),f=e.r(963138),p=e.r(364146),m=e.r(288276),h=e.r(142852);function g(e){let t=o.workAsyncStorage.getStore();if(!t)throw Object.defineProperty(new u.InvariantError("Expected workStore to be initialized"),"__NEXT_ERROR_CODE",{value:"E1068",enumerable:!1,configurable:!0});let r=c.workUnitAsyncStorage.getStore();if(r)switch(r.type){case"prerender":case"prerender-client":case"prerender-ppr":case"prerender-legacy":return v(e,null,t,r,null);case"validation-client":return R(e,t,r.validationSamples);case"cache":case"private-cache":case"unstable-cache":throw Object.defineProperty(new u.InvariantError("createParamsFromClient should not be called in cache contexts."),"__NEXT_ERROR_CODE",{value:"E736",enumerable:!1,configurable:!0});case"prerender-runtime":throw Object.defineProperty(new u.InvariantError("createParamsFromClient should not be called in a runtime prerender."),"__NEXT_ERROR_CODE",{value:"E770",enumerable:!1,configurable:!0});case"generate-static-params":throw Object.defineProperty(new u.InvariantError("createParamsFromClient should not be called inside generateStaticParams."),"__NEXT_ERROR_CODE",{value:"E1122",enumerable:!1,configurable:!0});case"request":if(r.validationSamples)return R(e,t,r.validationSamples);return S(e)}(0,c.throwInvariantForMissingStore)()}function y(e,t,r){return P(e,t,(0,i.getMetadataVaryParamsAccumulator)(),r)}function b(e,t=null){let r=o.workAsyncStorage.getStore();if(!r)throw Object.defineProperty(new u.InvariantError("Expected workStore to be initialized"),"__NEXT_ERROR_CODE",{value:"E1068",enumerable:!1,configurable:!0});let n=c.workUnitAsyncStorage.getStore();if(n)switch(n.type){case"prerender":case"prerender-ppr":case"prerender-legacy":return v(e,null,r,n,t);case"prerender-client":case"validation-client":throw Object.defineProperty(new u.InvariantError("createServerParamsForRoute should not be called in client contexts."),"__NEXT_ERROR_CODE",{value:"E1064",enumerable:!1,configurable:!0});case"cache":case"private-cache":case"unstable-cache":throw Object.defineProperty(new u.InvariantError("createServerParamsForRoute should not be called in cache contexts."),"__NEXT_ERROR_CODE",{value:"E738",enumerable:!1,configurable:!0});case"generate-static-params":throw Object.defineProperty(new u.InvariantError("createServerParamsForRoute should not be called inside generateStaticParams."),"__NEXT_ERROR_CODE",{value:"E1131",enumerable:!1,configurable:!0});case"prerender-runtime":return E(e,null,n,t,!1);case"request":return S(e)}(0,c.throwInvariantForMissingStore)()}function P(t,r,n,a){let i=o.workAsyncStorage.getStore();if(!i)throw Object.defineProperty(new u.InvariantError("Expected workStore to be initialized"),"__NEXT_ERROR_CODE",{value:"E1068",enumerable:!1,configurable:!0});let s=c.workUnitAsyncStorage.getStore();if(s)switch(s.type){case"prerender":case"prerender-client":case"prerender-ppr":case"prerender-legacy":return v(t,r,i,s,n);case"validation-client":throw Object.defineProperty(new u.InvariantError("createServerParamsForServerSegment should not be called in client contexts."),"__NEXT_ERROR_CODE",{value:"E1101",enumerable:!1,configurable:!0});case"cache":case"private-cache":case"unstable-cache":throw Object.defineProperty(new u.InvariantError("createServerParamsForServerSegment should not be called in cache contexts."),"__NEXT_ERROR_CODE",{value:"E743",enumerable:!1,configurable:!0});case"generate-static-params":throw Object.defineProperty(new u.InvariantError("createServerParamsForServerSegment should not be called inside generateStaticParams."),"__NEXT_ERROR_CODE",{value:"E1120",enumerable:!1,configurable:!0});case"prerender-runtime":return E(t,r,s,n,a);case"request":if(s.asyncApiPromises&&s.validationSamples)return function(t,r,n,a,o){let{createExhaustiveParamsProxy:i}=e.r(918450),s=i(t,new Set(Object.keys(n.params??{})),r.route);return(o?a.earlySharedParamsParent:a.sharedParamsParent).then(()=>s)}(t,i,s.validationSamples,s.asyncApiPromises,a);if(s.asyncApiPromises&&function(e,t){if(t){for(let r in e)if(t.has(r))return!0}return!1}(t,s.fallbackParams))return(a?s.asyncApiPromises.earlySharedParamsParent:s.asyncApiPromises.sharedParamsParent).then(()=>t);return S(t)}(0,c.throwInvariantForMissingStore)()}function _(e){let t=o.workAsyncStorage.getStore();if(!t)throw Object.defineProperty(new u.InvariantError("Missing workStore in createPrerenderParamsForClientSegment"),"__NEXT_ERROR_CODE",{value:"E773",enumerable:!1,configurable:!0});let r=c.workUnitAsyncStorage.getStore();if(r)switch(r.type){case"prerender":case"prerender-client":let n=r.fallbackRouteParams;if(n){for(let a in e)if(n.has(a))return(0,f.makeHangingPromise)(r.renderSignal,t.route,"`params`")}break;case"validation-client":throw Object.defineProperty(new u.InvariantError("createPrerenderParamsForClientSegment should not be called in validation contexts."),"__NEXT_ERROR_CODE",{value:"E1099",enumerable:!1,configurable:!0});case"cache":case"private-cache":case"unstable-cache":throw Object.defineProperty(new u.InvariantError("createPrerenderParamsForClientSegment should not be called in cache contexts."),"__NEXT_ERROR_CODE",{value:"E734",enumerable:!1,configurable:!0});case"generate-static-params":throw Object.defineProperty(new u.InvariantError("createPrerenderParamsForClientSegment should not be called inside generateStaticParams."),"__NEXT_ERROR_CODE",{value:"E1126",enumerable:!1,configurable:!0})}return Promise.resolve(e)}function v(e,t,r,n,a){let o=null!==a?(0,i.createVaryingParams)(a,e,t):e;switch(n.type){case"prerender":case"prerender-client":{let t=n.fallbackRouteParams;if(t){for(let a in e)if(t.has(a))return function(e,t,r){let n=O.get(e);if(n)return n;let a=new Proxy((0,f.makeHangingPromise)(r.renderSignal,t.route,"`params`"),w);return O.set(e,a),a}(o,r,n)}break}case"prerender-ppr":{let t=n.fallbackRouteParams;if(t){for(let a in e)if(t.has(a))return function(e,t,r,n){let a=O.get(e);if(a)return a;let o={...e},i=Promise.resolve(o);return O.set(e,i),Object.keys(e).forEach(e=>{d.wellKnownProperties.has(e)||t.has(e)&&Object.defineProperty(o,e,{get(){let t=(0,d.describeStringPropertyAccess)("params",e);"prerender-ppr"===n.type?(0,l.postponeWithTracking)(r.route,t,n.dynamicTracking):(0,l.throwToInterruptStaticGeneration)(t,r,n)},enumerable:!0})}),i}(o,t,r,n)}}}return S(o)}function E(e,t,r,n,a){let o=S(null!==n?(0,i.createVaryingParams)(n,e,t):e),{stagedRendering:s}=r;if(!s)return o;let l=a?h.RenderStage.EarlyRuntime:h.RenderStage.Runtime;return s.waitForStage(l).then(()=>o)}function R(t,r,n){let{createExhaustiveParamsProxy:a}=e.r(918450);return Promise.resolve(a(t,new Set(Object.keys((null==n?void 0:n.params)??{})),r.route))}let O=new WeakMap,w={get:function(e,t,r){if("then"===t||"catch"===t||"finally"===t){let n=s.ReflectAdapter.get(e,t,r);return({[t]:(...t)=>{let r=m.dynamicAccessAsyncStorage.getStore();return r&&r.abortController.abort(Object.defineProperty(Error("Accessed fallback `params` during prerendering."),"__NEXT_ERROR_CODE",{value:"E691",enumerable:!1,configurable:!0})),new Proxy(n.apply(e,t),w)}})[t]}return s.ReflectAdapter.get(e,t,r)}};function S(e){let t=O.get(e);if(t)return t;let r=Promise.resolve(e);return O.set(e,r),r}(0,p.createDedupedByCallsiteServerErrorLoggerDev)(function(e,t){let r=e?`Route "${e}" `:"This route ";return Object.defineProperty(Error(`${r}used ${t}. \`params\` is a Promise and must be unwrapped with \`await\` or \`React.use()\` before accessing its properties. Learn more: https://nextjs.org/docs/messages/sync-dynamic-apis`),"__NEXT_ERROR_CODE",{value:"E834",enumerable:!1,configurable:!0})})},347257,(e,t,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"ClientPageRoot",{enumerable:!0,get:function(){return l}});let n=e.r(843476),a=e.r(8372),o=e.r(271645),i=e.r(33906),s=e.r(261994);function l({Component:t,serverProvidedParams:r}){let c,u;if(null!==r)c=r.searchParams,u=r.params;else{let e=(0,o.use)(a.LayoutRouterContext);u=null!==e?e.parentParams:{},c=(0,i.urlSearchParamsToParsedUrlQuery)((0,o.use)(s.SearchParamsContext))}if("u"{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"ClientSegmentRoot",{enumerable:!0,get:function(){return i}});let n=e.r(843476),a=e.r(8372),o=e.r(271645);function i({Component:t,slots:r,serverProvidedParams:s}){let l;if(null!==s)l=s.params;else{let e=(0,o.use)(a.LayoutRouterContext);l=null!==e?e.parentParams:{}}if("u"{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"IconMark",{enumerable:!0,get:function(){return a}});let n=e.r(843476),a=()=>"u">typeof window?null:(0,n.jsx)("meta",{name:"«nxt-icon»"})}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0pu3ltw1cci2~.js b/litellm/proxy/_experimental/out/_next/static/chunks/0pu3ltw1cci2~.js new file mode 100644 index 00000000000..481b9e60300 --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0pu3ltw1cci2~.js @@ -0,0 +1,35 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,629569,e=>{"use strict";var t=e.i(290571),r=e.i(95779),s=e.i(444755),o=e.i(673706),i=e.i(271645);let l=i.default.forwardRef((e,l)=>{let{color:a,children:n,className:d}=e,c=(0,t.__rest)(e,["color","children","className"]);return i.default.createElement("p",Object.assign({ref:l,className:(0,s.tremorTwMerge)("font-medium text-tremor-title",a?(0,o.getColorClassNames)(a,r.colorPalette.darkText).textColor:"text-tremor-content-strong dark:text-dark-tremor-content-strong",d)},c),n)});l.displayName="Title",e.s(["Title",0,l],629569)},166406,e=>{"use strict";var t=e.i(190144);e.s(["CopyOutlined",()=>t.default])},411929,e=>{"use strict";var t=e.i(843476),r=e.i(271645),s=e.i(464571),o=e.i(166406),i=e.i(629569),l=e.i(602869),a=e.i(727749);let n=({accessToken:e})=>{let[n,d]=(0,r.useState)(`{ + "model": "openai/gpt-4o", + "messages": [ + { + "role": "system", + "content": "You are a helpful assistant." + }, + { + "role": "user", + "content": "Explain quantum computing in simple terms" + } + ], + "temperature": 0.7, + "max_tokens": 500, + "stream": true +}`),[c,p]=(0,r.useState)(""),[u,m]=(0,r.useState)(!1),x=async()=>{m(!0);try{let o;try{o=JSON.parse(n)}catch(e){a.default.fromBackend("Invalid JSON in request body"),m(!1);return}let i={call_type:"completion",request_body:o};if(!e){a.default.fromBackend("No access token found"),m(!1);return}let d=await (0,l.transformRequestCall)(e,i);if(d.raw_request_api_base&&d.raw_request_body){var t,r,s;let e,o,i=(t=d.raw_request_api_base,r=d.raw_request_body,s=d.raw_request_headers||{},e=JSON.stringify(r,null,2).split("\n").map(e=>` ${e}`).join("\n"),o=Object.entries(s).map(([e,t])=>`-H '${e}: ${t}'`).join(" \\\n "),`curl -X POST \\ + ${t} \\ + ${o?`${o} \\ + `:""}-H 'Content-Type: application/json' \\ + -d '{ +${e} + }'`);p(i),a.default.success("Request transformed successfully")}else{let e="string"==typeof d?d:JSON.stringify(d);p(e),a.default.info("Transformed request received in unexpected format")}}catch(e){console.error("Error transforming request:",e),a.default.fromBackend("Failed to transform request")}finally{m(!1)}};return(0,t.jsxs)("div",{className:"w-full m-2",style:{overflow:"hidden"},children:[(0,t.jsx)(i.Title,{children:"Playground"}),(0,t.jsx)("p",{className:"text-sm text-gray-500",children:"See how LiteLLM transforms your request for the specified provider."}),(0,t.jsxs)("div",{style:{display:"flex",gap:"16px",width:"100%",minWidth:0,overflow:"hidden"},className:"mt-4",children:[(0,t.jsxs)("div",{style:{flex:"1 1 50%",display:"flex",flexDirection:"column",border:"1px solid #e8e8e8",borderRadius:"8px",padding:"24px",overflow:"hidden",maxHeight:"600px",minWidth:0},children:[(0,t.jsxs)("div",{style:{marginBottom:"24px"},children:[(0,t.jsx)("h2",{style:{fontSize:"24px",fontWeight:"bold",margin:"0 0 4px 0"},children:"Original Request"}),(0,t.jsx)("p",{style:{color:"#666",margin:0},children:"The request you would send to LiteLLM /chat/completions endpoint."})]}),(0,t.jsx)("textarea",{style:{flex:"1 1 auto",width:"100%",minHeight:"240px",padding:"16px",border:"1px solid #e8e8e8",borderRadius:"6px",fontFamily:"monospace",fontSize:"14px",resize:"none",marginBottom:"24px",overflow:"auto"},value:n,onChange:e=>d(e.target.value),onKeyDown:e=>{(e.metaKey||e.ctrlKey)&&"Enter"===e.key&&(e.preventDefault(),x())},placeholder:"Press Cmd/Ctrl + Enter to transform"}),(0,t.jsx)("div",{style:{display:"flex",justifyContent:"flex-end",marginTop:"auto"},children:(0,t.jsxs)(s.Button,{type:"primary",style:{backgroundColor:"#000",display:"flex",alignItems:"center",gap:"8px"},onClick:x,loading:u,children:[(0,t.jsx)("span",{children:"Transform"}),(0,t.jsx)("span",{children:"→"})]})})]}),(0,t.jsxs)("div",{style:{flex:"1 1 50%",display:"flex",flexDirection:"column",border:"1px solid #e8e8e8",borderRadius:"8px",padding:"24px",overflow:"hidden",maxHeight:"800px",minWidth:0},children:[(0,t.jsxs)("div",{style:{marginBottom:"24px"},children:[(0,t.jsx)("h2",{style:{fontSize:"24px",fontWeight:"bold",margin:"0 0 4px 0"},children:"Transformed Request"}),(0,t.jsx)("p",{style:{color:"#666",margin:0},children:"How LiteLLM transforms your request for the specified provider."}),(0,t.jsx)("br",{}),(0,t.jsx)("p",{style:{color:"#666",margin:0},className:"text-xs",children:"Note: Sensitive headers are not shown."})]}),(0,t.jsxs)("div",{style:{position:"relative",backgroundColor:"#f5f5f5",borderRadius:"6px",flex:"1 1 auto",display:"flex",flexDirection:"column",overflow:"hidden"},children:[(0,t.jsx)("pre",{style:{padding:"16px",fontFamily:"monospace",fontSize:"14px",margin:0,overflow:"auto",flex:"1 1 auto"},children:c||`curl -X POST \\ + https://api.openai.com/v1/chat/completions \\ + -H 'Authorization: Bearer sk-xxx' \\ + -H 'Content-Type: application/json' \\ + -d '{ + "model": "gpt-4", + "messages": [ + { + "role": "system", + "content": "You are a helpful assistant." + } + ], + "temperature": 0.7 + }'`}),(0,t.jsx)(s.Button,{type:"text",icon:(0,t.jsx)(o.CopyOutlined,{}),style:{position:"absolute",right:"8px",top:"8px"},size:"small",onClick:()=>{navigator.clipboard.writeText(c||""),a.default.success("Copied to clipboard")}})]})]})]}),(0,t.jsx)("div",{className:"mt-4 text-right w-full",children:(0,t.jsxs)("p",{className:"text-sm text-gray-500",children:["Found an error? File an issue"," ",(0,t.jsx)("a",{href:"https://github.com/BerriAI/litellm/issues",target:"_blank",rel:"noopener noreferrer",children:"here"}),"."]})})]})};var d=e.i(135214);e.s(["default",0,function(){let{accessToken:e}=(0,d.default)();return(0,t.jsx)(n,{accessToken:e})}],411929)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0pwkd9r.mc_ee.js b/litellm/proxy/_experimental/out/_next/static/chunks/0pwkd9r.mc_ee.js new file mode 100644 index 00000000000..f8cc4c0e79d --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0pwkd9r.mc_ee.js @@ -0,0 +1 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,326373,e=>{"use strict";var t=e.i(21539);e.s(["Dropdown",()=>t.default])},207670,e=>{"use strict";function t(){for(var e,t,a=0,r="",n=arguments.length;a{"use strict";e.i(247167);var t=e.i(271645),a=e.i(343794),r=e.i(361275),n=e.i(702779),l=e.i(763731),o=e.i(242064);e.i(296059);var i=e.i(915654),s=e.i(694758),c=e.i(183293),u=e.i(403541),d=e.i(246422),f=e.i(838378);let m=new s.Keyframes("antStatusProcessing",{"0%":{transform:"scale(0.8)",opacity:.5},"100%":{transform:"scale(2.4)",opacity:0}}),g=new s.Keyframes("antZoomBadgeIn",{"0%":{transform:"scale(0) translate(50%, -50%)",opacity:0},"100%":{transform:"scale(1) translate(50%, -50%)"}}),h=new s.Keyframes("antZoomBadgeOut",{"0%":{transform:"scale(1) translate(50%, -50%)"},"100%":{transform:"scale(0) translate(50%, -50%)",opacity:0}}),v=new s.Keyframes("antNoWrapperZoomBadgeIn",{"0%":{transform:"scale(0)",opacity:0},"100%":{transform:"scale(1)"}}),p=new s.Keyframes("antNoWrapperZoomBadgeOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0)",opacity:0}}),b=new s.Keyframes("antBadgeLoadingCircle",{"0%":{transformOrigin:"50%"},"100%":{transform:"translate(50%, -50%) rotate(360deg)",transformOrigin:"50%"}}),y=e=>{let{fontHeight:t,lineWidth:a,marginXS:r,colorBorderBg:n}=e,l=e.colorTextLightSolid,o=e.colorError,i=e.colorErrorHover;return(0,f.mergeToken)(e,{badgeFontHeight:t,badgeShadowSize:a,badgeTextColor:l,badgeColor:o,badgeColorHover:i,badgeShadowColor:n,badgeProcessingDuration:"1.2s",badgeRibbonOffset:r,badgeRibbonCornerTransform:"scaleY(0.75)",badgeRibbonCornerFilter:"brightness(75%)"})},x=e=>{let{fontSize:t,lineHeight:a,fontSizeSM:r,lineWidth:n}=e;return{indicatorZIndex:"auto",indicatorHeight:Math.round(t*a)-2*n,indicatorHeightSM:t,dotSize:r/2,textFontSize:r,textFontSizeSM:r,textFontWeight:"normal",statusSize:r/2}},w=(0,d.genStyleHooks)("Badge",e=>(e=>{let{componentCls:t,iconCls:a,antCls:r,badgeShadowSize:n,textFontSize:l,textFontSizeSM:o,statusSize:s,dotSize:d,textFontWeight:f,indicatorHeight:y,indicatorHeightSM:x,marginXS:w,calc:S}=e,O=`${r}-scroll-number`,C=(0,u.genPresetColor)(e,(e,{darkColor:a})=>({[`&${t} ${t}-color-${e}`]:{background:a,[`&:not(${t}-count)`]:{color:a},"a:hover &":{background:a}}}));return{[t]:Object.assign(Object.assign(Object.assign(Object.assign({},(0,c.resetComponent)(e)),{position:"relative",display:"inline-block",width:"fit-content",lineHeight:1,[`${t}-count`]:{display:"inline-flex",justifyContent:"center",zIndex:e.indicatorZIndex,minWidth:y,height:y,color:e.badgeTextColor,fontWeight:f,fontSize:l,lineHeight:(0,i.unit)(y),whiteSpace:"nowrap",textAlign:"center",background:e.badgeColor,borderRadius:S(y).div(2).equal(),boxShadow:`0 0 0 ${(0,i.unit)(n)} ${e.badgeShadowColor}`,transition:`background ${e.motionDurationMid}`,a:{color:e.badgeTextColor},"a:hover":{color:e.badgeTextColor},"a:hover &":{background:e.badgeColorHover}},[`${t}-count-sm`]:{minWidth:x,height:x,fontSize:o,lineHeight:(0,i.unit)(x),borderRadius:S(x).div(2).equal()},[`${t}-multiple-words`]:{padding:`0 ${(0,i.unit)(e.paddingXS)}`,bdi:{unicodeBidi:"plaintext"}},[`${t}-dot`]:{zIndex:e.indicatorZIndex,width:d,minWidth:d,height:d,background:e.badgeColor,borderRadius:"100%",boxShadow:`0 0 0 ${(0,i.unit)(n)} ${e.badgeShadowColor}`},[`${t}-count, ${t}-dot, ${O}-custom-component`]:{position:"absolute",top:0,insetInlineEnd:0,transform:"translate(50%, -50%)",transformOrigin:"100% 0%",[`&${a}-spin`]:{animationName:b,animationDuration:"1s",animationIterationCount:"infinite",animationTimingFunction:"linear"}},[`&${t}-status`]:{lineHeight:"inherit",verticalAlign:"baseline",[`${t}-status-dot`]:{position:"relative",top:-1,display:"inline-block",width:s,height:s,verticalAlign:"middle",borderRadius:"50%"},[`${t}-status-success`]:{backgroundColor:e.colorSuccess},[`${t}-status-processing`]:{overflow:"visible",color:e.colorInfo,backgroundColor:e.colorInfo,borderColor:"currentcolor","&::after":{position:"absolute",top:0,insetInlineStart:0,width:"100%",height:"100%",borderWidth:n,borderStyle:"solid",borderColor:"inherit",borderRadius:"50%",animationName:m,animationDuration:e.badgeProcessingDuration,animationIterationCount:"infinite",animationTimingFunction:"ease-in-out",content:'""'}},[`${t}-status-default`]:{backgroundColor:e.colorTextPlaceholder},[`${t}-status-error`]:{backgroundColor:e.colorError},[`${t}-status-warning`]:{backgroundColor:e.colorWarning},[`${t}-status-text`]:{marginInlineStart:w,color:e.colorText,fontSize:e.fontSize}}}),C),{[`${t}-zoom-appear, ${t}-zoom-enter`]:{animationName:g,animationDuration:e.motionDurationSlow,animationTimingFunction:e.motionEaseOutBack,animationFillMode:"both"},[`${t}-zoom-leave`]:{animationName:h,animationDuration:e.motionDurationSlow,animationTimingFunction:e.motionEaseOutBack,animationFillMode:"both"},[`&${t}-not-a-wrapper`]:{[`${t}-zoom-appear, ${t}-zoom-enter`]:{animationName:v,animationDuration:e.motionDurationSlow,animationTimingFunction:e.motionEaseOutBack},[`${t}-zoom-leave`]:{animationName:p,animationDuration:e.motionDurationSlow,animationTimingFunction:e.motionEaseOutBack},[`&:not(${t}-status)`]:{verticalAlign:"middle"},[`${O}-custom-component, ${t}-count`]:{transform:"none"},[`${O}-custom-component, ${O}`]:{position:"relative",top:"auto",display:"block",transformOrigin:"50% 50%"}},[O]:{overflow:"hidden",transition:`all ${e.motionDurationMid} ${e.motionEaseOutBack}`,[`${O}-only`]:{position:"relative",display:"inline-block",height:y,transition:`all ${e.motionDurationSlow} ${e.motionEaseOutBack}`,WebkitTransformStyle:"preserve-3d",WebkitBackfaceVisibility:"hidden",[`> p${O}-only-unit`]:{height:y,margin:0,WebkitTransformStyle:"preserve-3d",WebkitBackfaceVisibility:"hidden"}},[`${O}-symbol`]:{verticalAlign:"top"}},"&-rtl":{direction:"rtl",[`${t}-count, ${t}-dot, ${O}-custom-component`]:{transform:"translate(-50%, -50%)"}}})}})(y(e)),x),S=(0,d.genStyleHooks)(["Badge","Ribbon"],e=>(e=>{let{antCls:t,badgeFontHeight:a,marginXS:r,badgeRibbonOffset:n,calc:l}=e,o=`${t}-ribbon`,s=`${t}-ribbon-wrapper`,d=(0,u.genPresetColor)(e,(e,{darkColor:t})=>({[`&${o}-color-${e}`]:{background:t,color:t}}));return{[s]:{position:"relative"},[o]:Object.assign(Object.assign(Object.assign(Object.assign({},(0,c.resetComponent)(e)),{position:"absolute",top:r,padding:`0 ${(0,i.unit)(e.paddingXS)}`,color:e.colorPrimary,lineHeight:(0,i.unit)(a),whiteSpace:"nowrap",backgroundColor:e.colorPrimary,borderRadius:e.borderRadiusSM,[`${o}-text`]:{color:e.badgeTextColor},[`${o}-corner`]:{position:"absolute",top:"100%",width:n,height:n,color:"currentcolor",border:`${(0,i.unit)(l(n).div(2).equal())} solid`,transform:e.badgeRibbonCornerTransform,transformOrigin:"top",filter:e.badgeRibbonCornerFilter}}),d),{[`&${o}-placement-end`]:{insetInlineEnd:l(n).mul(-1).equal(),borderEndEndRadius:0,[`${o}-corner`]:{insetInlineEnd:0,borderInlineEndColor:"transparent",borderBlockEndColor:"transparent"}},[`&${o}-placement-start`]:{insetInlineStart:l(n).mul(-1).equal(),borderEndStartRadius:0,[`${o}-corner`]:{insetInlineStart:0,borderBlockEndColor:"transparent",borderInlineStartColor:"transparent"}},"&-rtl":{direction:"rtl"}})}})(y(e)),x),O=e=>{let r,{prefixCls:n,value:l,current:o,offset:i=0}=e;return i&&(r={position:"absolute",top:`${i}00%`,left:0}),t.createElement("span",{style:r,className:(0,a.default)(`${n}-only-unit`,{current:o})},l)},C=e=>{let a,r,{prefixCls:n,count:l,value:o}=e,i=Number(o),s=Math.abs(l),[c,u]=t.useState(i),[d,f]=t.useState(s),m=()=>{u(i),f(s)};if(t.useEffect(()=>{let e=setTimeout(m,1e3);return()=>clearTimeout(e)},[i]),c===i||Number.isNaN(i)||Number.isNaN(c))a=[t.createElement(O,Object.assign({},e,{key:i,current:!0}))],r={transition:"none"};else{a=[];let n=i+10,l=[];for(let e=i;e<=n;e+=1)l.push(e);let o=de%10===c);a=(o<0?l.slice(0,u+1):l.slice(u)).map((a,r)=>t.createElement(O,Object.assign({},e,{key:a,value:a%10,offset:o<0?r-u:r,current:r===u}))),r={transform:`translateY(${-function(e,t,a){let r=e,n=0;for(;(r+10)%10!==t;)r+=a,n+=a;return n}(c,i,o)}00%)`}}return t.createElement("span",{className:`${n}-only`,style:r,onTransitionEnd:m},a)};var E=function(e,t){var a={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(a[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var n=0,r=Object.getOwnPropertySymbols(e);nt.indexOf(r[n])&&Object.prototype.propertyIsEnumerable.call(e,r[n])&&(a[r[n]]=e[r[n]]);return a};let j=t.forwardRef((e,r)=>{let{prefixCls:n,count:i,className:s,motionClassName:c,style:u,title:d,show:f,component:m="sup",children:g}=e,h=E(e,["prefixCls","count","className","motionClassName","style","title","show","component","children"]),{getPrefixCls:v}=t.useContext(o.ConfigContext),p=v("scroll-number",n),b=Object.assign(Object.assign({},h),{"data-show":f,style:u,className:(0,a.default)(p,s,c),title:d}),y=i;if(i&&Number(i)%1==0){let e=String(i).split("");y=t.createElement("bdi",null,e.map((a,r)=>t.createElement(C,{prefixCls:p,count:Number(i),value:a,key:e.length-r})))}return((null==u?void 0:u.borderColor)&&(b.style=Object.assign(Object.assign({},u),{boxShadow:`0 0 0 1px ${u.borderColor} inset`})),g)?(0,l.cloneElement)(g,e=>({className:(0,a.default)(`${p}-custom-component`,null==e?void 0:e.className,c)})):t.createElement(m,Object.assign({},b,{ref:r}),y)});var $=function(e,t){var a={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(a[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var n=0,r=Object.getOwnPropertySymbols(e);nt.indexOf(r[n])&&Object.prototype.propertyIsEnumerable.call(e,r[n])&&(a[r[n]]=e[r[n]]);return a};let _=t.forwardRef((e,i)=>{var s,c,u,d,f;let{prefixCls:m,scrollNumberPrefixCls:g,children:h,status:v,text:p,color:b,count:y=null,overflowCount:x=99,dot:S=!1,size:O="default",title:C,offset:E,style:_,className:k,rootClassName:N,classNames:z,styles:L,showZero:P=!1}=e,M=$(e,["prefixCls","scrollNumberPrefixCls","children","status","text","color","count","overflowCount","dot","size","title","offset","style","className","rootClassName","classNames","styles","showZero"]),{getPrefixCls:R,direction:T,badge:I}=t.useContext(o.ConfigContext),A=R("badge",m),[B,H,V]=w(A),U=y>x?`${x}+`:y,F="0"===U||0===U||"0"===p||0===p,D=null===y||F&&!P,W=(null!=v||null!=b)&&D,K=null!=v||!F,q=S&&!F,G=q?"":U,Z=(0,t.useMemo)(()=>((null==G||""===G)&&(null==p||""===p)||F&&!P)&&!q,[G,F,P,q,p]),X=(0,t.useRef)(y);Z||(X.current=y);let Y=X.current,Q=(0,t.useRef)(G);Z||(Q.current=G);let J=Q.current,ee=(0,t.useRef)(q);Z||(ee.current=q);let et=(0,t.useMemo)(()=>{if(!E)return Object.assign(Object.assign({},null==I?void 0:I.style),_);let e={marginTop:E[1]};return"rtl"===T?e.left=Number.parseInt(E[0],10):e.right=-Number.parseInt(E[0],10),Object.assign(Object.assign(Object.assign({},e),null==I?void 0:I.style),_)},[T,E,_,null==I?void 0:I.style]),ea=null!=C?C:"string"==typeof Y||"number"==typeof Y?Y:void 0,er=!Z&&(0===p?P:!!p&&!0!==p),en=er?t.createElement("span",{className:`${A}-status-text`},p):null,el=Y&&"object"==typeof Y?(0,l.cloneElement)(Y,e=>({style:Object.assign(Object.assign({},et),e.style)})):void 0,eo=(0,n.isPresetColor)(b,!1),ei=(0,a.default)(null==z?void 0:z.indicator,null==(s=null==I?void 0:I.classNames)?void 0:s.indicator,{[`${A}-status-dot`]:W,[`${A}-status-${v}`]:!!v,[`${A}-color-${b}`]:eo}),es={};b&&!eo&&(es.color=b,es.background=b);let ec=(0,a.default)(A,{[`${A}-status`]:W,[`${A}-not-a-wrapper`]:!h,[`${A}-rtl`]:"rtl"===T},k,N,null==I?void 0:I.className,null==(c=null==I?void 0:I.classNames)?void 0:c.root,null==z?void 0:z.root,H,V);if(!h&&W&&(p||K||!D)){let e=et.color;return B(t.createElement("span",Object.assign({},M,{className:ec,style:Object.assign(Object.assign(Object.assign({},null==L?void 0:L.root),null==(u=null==I?void 0:I.styles)?void 0:u.root),et)}),t.createElement("span",{className:ei,style:Object.assign(Object.assign(Object.assign({},null==L?void 0:L.indicator),null==(d=null==I?void 0:I.styles)?void 0:d.indicator),es)}),er&&t.createElement("span",{style:{color:e},className:`${A}-status-text`},p)))}return B(t.createElement("span",Object.assign({ref:i},M,{className:ec,style:Object.assign(Object.assign({},null==(f=null==I?void 0:I.styles)?void 0:f.root),null==L?void 0:L.root)}),h,t.createElement(r.default,{visible:!Z,motionName:`${A}-zoom`,motionAppear:!1,motionDeadline:1e3},({className:e})=>{var r,n;let l=R("scroll-number",g),o=ee.current,i=(0,a.default)(null==z?void 0:z.indicator,null==(r=null==I?void 0:I.classNames)?void 0:r.indicator,{[`${A}-dot`]:o,[`${A}-count`]:!o,[`${A}-count-sm`]:"small"===O,[`${A}-multiple-words`]:!o&&J&&J.toString().length>1,[`${A}-status-${v}`]:!!v,[`${A}-color-${b}`]:eo}),s=Object.assign(Object.assign(Object.assign({},null==L?void 0:L.indicator),null==(n=null==I?void 0:I.styles)?void 0:n.indicator),et);return b&&!eo&&((s=s||{}).background=b),t.createElement(j,{prefixCls:l,show:!Z,motionClassName:e,className:i,count:J,title:ea,style:s,key:"scrollNumber"},el)}),en))});_.Ribbon=e=>{let{className:r,prefixCls:l,style:i,color:s,children:c,text:u,placement:d="end",rootClassName:f}=e,{getPrefixCls:m,direction:g}=t.useContext(o.ConfigContext),h=m("ribbon",l),v=`${h}-wrapper`,[p,b,y]=S(h,v),x=(0,n.isPresetColor)(s,!1),w=(0,a.default)(h,`${h}-placement-${d}`,{[`${h}-rtl`]:"rtl"===g,[`${h}-color-${s}`]:x},r),O={},C={};return s&&!x&&(O.background=s,C.color=s),p(t.createElement("div",{className:(0,a.default)(v,f,b,y)},c,t.createElement("div",{className:(0,a.default)(w,b),style:Object.assign(Object.assign({},O),i)},t.createElement("span",{className:`${h}-text`},u),t.createElement("div",{className:`${h}-corner`,style:C}))))},e.s(["Badge",0,_],906579)},100486,e=>{"use strict";e.i(247167);var t=e.i(931067),a=e.i(271645);let r={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M899.6 276.5L705 396.4 518.4 147.5a8.06 8.06 0 00-12.9 0L319 396.4 124.3 276.5c-5.7-3.5-13.1 1.2-12.2 7.9L188.5 865c1.1 7.9 7.9 14 16 14h615.1c8 0 14.9-6 15.9-14l76.4-580.6c.8-6.7-6.5-11.4-12.3-7.9zm-126 534.1H250.3l-53.8-409.4 139.8 86.1L512 252.9l175.7 234.4 139.8-86.1-53.9 409.4zM512 509c-62.1 0-112.6 50.5-112.6 112.6S449.9 734.2 512 734.2s112.6-50.5 112.6-112.6S574.1 509 512 509zm0 160.9c-26.6 0-48.2-21.6-48.2-48.3 0-26.6 21.6-48.3 48.2-48.3s48.2 21.6 48.2 48.3c0 26.6-21.6 48.3-48.2 48.3z"}}]},name:"crown",theme:"outlined"};var n=e.i(9583),l=a.forwardRef(function(e,l){return a.createElement(n.default,(0,t.default)({},e,{ref:l,icon:r}))});e.s(["CrownOutlined",0,l],100486)},372943,e=>{"use strict";e.i(247167);var t=e.i(8211),a=e.i(271645),r=e.i(343794),n=e.i(529681),l=e.i(242064),o=e.i(704914),i=e.i(876556),s=e.i(290224),c=e.i(251224),u=function(e,t){var a={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(a[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var n=0,r=Object.getOwnPropertySymbols(e);nt.indexOf(r[n])&&Object.prototype.propertyIsEnumerable.call(e,r[n])&&(a[r[n]]=e[r[n]]);return a};function d({suffixCls:e,tagName:t,displayName:r}){return r=>a.forwardRef((n,l)=>a.createElement(r,Object.assign({ref:l,suffixCls:e,tagName:t},n)))}let f=a.forwardRef((e,t)=>{let{prefixCls:n,suffixCls:o,className:i,tagName:s}=e,d=u(e,["prefixCls","suffixCls","className","tagName"]),{getPrefixCls:f}=a.useContext(l.ConfigContext),m=f("layout",n),[g,h,v]=(0,c.default)(m),p=o?`${m}-${o}`:m;return g(a.createElement(s,Object.assign({className:(0,r.default)(n||p,i,h,v),ref:t},d)))}),m=a.forwardRef((e,d)=>{let{direction:f}=a.useContext(l.ConfigContext),[m,g]=a.useState([]),{prefixCls:h,className:v,rootClassName:p,children:b,hasSider:y,tagName:x,style:w}=e,S=u(e,["prefixCls","className","rootClassName","children","hasSider","tagName","style"]),O=(0,n.default)(S,["suffixCls"]),{getPrefixCls:C,className:E,style:j}=(0,l.useComponentConfig)("layout"),$=C("layout",h),_="boolean"==typeof y?y:!!m.length||(0,i.default)(b).some(e=>e.type===s.default),[k,N,z]=(0,c.default)($),L=(0,r.default)($,{[`${$}-has-sider`]:_,[`${$}-rtl`]:"rtl"===f},E,v,p,N,z),P=a.useMemo(()=>({siderHook:{addSider:e=>{g(a=>[].concat((0,t.default)(a),[e]))},removeSider:e=>{g(t=>t.filter(t=>t!==e))}}}),[]);return k(a.createElement(o.LayoutContext.Provider,{value:P},a.createElement(x,Object.assign({ref:d,className:L,style:Object.assign(Object.assign({},j),w)},O),b)))}),g=d({tagName:"div",displayName:"Layout"})(m),h=d({suffixCls:"header",tagName:"header",displayName:"Header"})(f),v=d({suffixCls:"footer",tagName:"footer",displayName:"Footer"})(f),p=d({suffixCls:"content",tagName:"main",displayName:"Content"})(f);g.Header=h,g.Footer=v,g.Content=p,g.Sider=s.default,g._InternalSiderContext=s.SiderContext,e.s(["Layout",0,g],372943)},98740,e=>{"use strict";let t=(0,e.i(475254).default)("users",[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]]);e.s(["default",0,t])},571303,e=>{"use strict";var t=e.i(843476),a=e.i(271645),r=e.i(115504);e.s(["UiLoadingSpinner",0,function({className:e="",...n}){var l,o;let i=(0,a.useId)();return l=()=>{let e=document.getAnimations().filter(e=>e instanceof CSSAnimation&&"spin"===e.animationName),t=e.find(e=>e.effect.target?.getAttribute("data-spinner-id")===i),a=e.find(e=>e.effect instanceof KeyframeEffect&&e.effect.target?.getAttribute("data-spinner-id")!==i);t&&a&&(t.currentTime=a.currentTime)},o=[i],(0,a.useLayoutEffect)(l,o),(0,t.jsxs)("svg",{"data-spinner-id":i,className:(0,r.cx)("pointer-events-none size-12 animate-spin text-current",e),fill:"none",viewBox:"0 0 24 24",...n,children:[(0,t.jsx)("circle",{className:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"4"}),(0,t.jsx)("path",{className:"opacity-75",fill:"currentColor",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})]})}],571303)},936578,e=>{"use strict";var t=e.i(843476),a=e.i(115504),r=e.i(571303);e.s(["default",0,function(){return(0,t.jsxs)("div",{className:(0,a.cx)("h-screen","flex items-center justify-center gap-4"),children:[(0,t.jsx)("div",{className:"text-lg font-medium py-2 pr-4 border-r border-r-gray-200",children:"🚅 LiteLLM"}),(0,t.jsxs)("div",{className:"flex items-center justify-center gap-2",children:[(0,t.jsx)(r.UiLoadingSpinner,{className:"size-4"}),(0,t.jsx)("span",{className:"text-gray-600 text-sm",children:"Loading..."})]})]})}])},62478,e=>{"use strict";var t=e.i(602869);let a=async e=>{if(!e)return null;try{return await (0,t.getProxyUISettings)(e)}catch(e){return console.error("Error fetching proxy settings:",e),null}};e.s(["fetchProxySettings",0,a])},592392,e=>{"use strict";var t=e.i(62478),a=e.i(266027);let r=(0,e.i(243652).createQueryKeys)("proxySettings"),n={PROXY_BASE_URL:"",PROXY_LOGOUT_URL:"",LITELLM_UI_API_DOC_BASE_URL:null};e.s(["default",0,function(e){let{data:l}=(0,a.useQuery)({queryKey:[...r.all,e],queryFn:()=>(0,t.fetchProxySettings)(e),enabled:!!e});return l??n}])},477189,e=>{"use strict";e.i(247167);var t=e.i(931067),a=e.i(271645);let r={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M464 144H160c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V160c0-8.8-7.2-16-16-16zm-52 268H212V212h200v200zm452-268H560c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V160c0-8.8-7.2-16-16-16zm-52 268H612V212h200v200zM464 544H160c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V560c0-8.8-7.2-16-16-16zm-52 268H212V612h200v200zm452-268H560c-8.8 0-16 7.2-16 16v304c0 8.8 7.2 16 16 16h304c8.8 0 16-7.2 16-16V560c0-8.8-7.2-16-16-16zm-52 268H612V612h200v200z"}}]},name:"appstore",theme:"outlined"};var n=e.i(9583),l=a.forwardRef(function(e,l){return a.createElement(n.default,(0,t.default)({},e,{ref:l,icon:r}))});e.s(["AppstoreOutlined",0,l],477189)},928685,e=>{"use strict";var t=e.i(38953);e.s(["SearchOutlined",()=>t.default])},115571,e=>{"use strict";let t="local-storage-change";e.s(["LOCAL_STORAGE_EVENT",0,t,"emitLocalStorageChange",0,function(e){window.dispatchEvent(new CustomEvent(t,{detail:{key:e}}))},"getLocalStorageItem",0,function(e){try{return window.localStorage.getItem(e)}catch(t){return console.warn(`Error reading localStorage key "${e}":`,t),null}},"removeLocalStorageItem",0,function(e){try{window.localStorage.removeItem(e)}catch(t){console.warn(`Error removing localStorage key "${e}":`,t)}},"setLocalStorageItem",0,function(e,t){try{window.localStorage.setItem(e,t)}catch(t){console.warn(`Error setting localStorage key "${e}":`,t)}}])},371401,e=>{"use strict";var t=e.i(115571),a=e.i(271645);function r(e){let a=t=>{"disableUsageIndicator"===t.key&&e()},r=t=>{let{key:a}=t.detail;"disableUsageIndicator"===a&&e()};return window.addEventListener("storage",a),window.addEventListener(t.LOCAL_STORAGE_EVENT,r),()=>{window.removeEventListener("storage",a),window.removeEventListener(t.LOCAL_STORAGE_EVENT,r)}}function n(){return"true"===(0,t.getLocalStorageItem)("disableUsageIndicator")}e.s(["useDisableUsageIndicator",0,function(){return(0,a.useSyncExternalStore)(r,n)}])},283713,e=>{"use strict";var t=e.i(271645),a=e.i(602869),r=e.i(612256);let n="litellm_selected_worker_id";e.s(["useWorker",0,()=>{let{data:e}=(0,r.useUIConfig)(),l=e?.is_control_plane??!1,o=e?.workers??[],[i,s]=(0,t.useState)(()=>localStorage.getItem(n));(0,t.useEffect)(()=>{if(!i||0===o.length)return;let e=o.find(e=>e.worker_id===i);e&&(0,a.switchToWorkerUrl)(e.url)},[i,o]);let c=o.find(e=>e.worker_id===i)??null,u=(0,t.useCallback)(e=>{let t=o.find(t=>t.worker_id===e);t&&(s(e),localStorage.setItem(n,e),(0,a.switchToWorkerUrl)(t.url))},[o]);return{isControlPlane:l,workers:o,selectedWorkerId:i,selectedWorker:c,selectWorker:u,disconnectFromWorker:(0,t.useCallback)(()=>{s(null),localStorage.removeItem(n),(0,a.switchToWorkerUrl)(null)},[])}}])},295320,e=>{"use strict";e.i(247167);var t=e.i(931067),a=e.i(271645);let r={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M704 446H320c-4.4 0-8 3.6-8 8v402c0 4.4 3.6 8 8 8h384c4.4 0 8-3.6 8-8V454c0-4.4-3.6-8-8-8zm-328 64h272v117H376V510zm272 290H376V683h272v117z"}},{tag:"path",attrs:{d:"M424 748a32 32 0 1064 0 32 32 0 10-64 0zm0-178a32 32 0 1064 0 32 32 0 10-64 0z"}},{tag:"path",attrs:{d:"M811.4 368.9C765.6 248 648.9 162 512.2 162S258.8 247.9 213 368.8C126.9 391.5 63.5 470.2 64 563.6 64.6 668 145.6 752.9 247.6 762c4.7.4 8.7-3.3 8.7-8v-60.4c0-4-3-7.4-7-7.9-27-3.4-52.5-15.2-72.1-34.5-24-23.5-37.2-55.1-37.2-88.6 0-28 9.1-54.4 26.2-76.4 16.7-21.4 40.2-36.9 66.1-43.7l37.9-10 13.9-36.7c8.6-22.8 20.6-44.2 35.7-63.5 14.9-19.2 32.6-36 52.4-50 41.1-28.9 89.5-44.2 140-44.2s98.9 15.3 140 44.3c19.9 14 37.5 30.8 52.4 50 15.1 19.3 27.1 40.7 35.7 63.5l13.8 36.6 37.8 10c54.2 14.4 92.1 63.7 92.1 120 0 33.6-13.2 65.1-37.2 88.6-19.5 19.2-44.9 31.1-71.9 34.5-4 .5-6.9 3.9-6.9 7.9V754c0 4.7 4.1 8.4 8.8 8 101.7-9.2 182.5-94 183.2-198.2.6-93.4-62.7-172.1-148.6-194.9z"}}]},name:"cloud-server",theme:"outlined"};var n=e.i(9583),l=a.forwardRef(function(e,l){return a.createElement(n.default,(0,t.default)({},e,{ref:l,icon:r}))});e.s(["CloudServerOutlined",0,l],295320)},275144,e=>{"use strict";var t=e.i(843476),a=e.i(271645),r=e.i(602869);let n=(0,a.createContext)(void 0);e.s(["ThemeProvider",0,({children:e,accessToken:l})=>{let[o,i]=(0,a.useState)(null),[s,c]=(0,a.useState)(null);return(0,a.useEffect)(()=>{(async()=>{try{let e=(0,r.getProxyBaseUrl)(),t=e?`${e}/get/ui_theme_settings`:"/get/ui_theme_settings",a=await fetch(t,{method:"GET",headers:{"Content-Type":"application/json"}});if(a.ok){let e=await a.json();e.values?.logo_url&&i(e.values.logo_url),e.values?.favicon_url&&c(e.values.favicon_url)}}catch(e){console.warn("Failed to load theme settings from backend:",e)}})()},[]),(0,a.useEffect)(()=>{if(s){let e=document.querySelectorAll("link[rel*='icon']");if(e.length>0)e.forEach(e=>{e.href=s});else{let e=document.createElement("link");e.rel="icon",e.href=s,document.head.appendChild(e)}}},[s]),(0,t.jsx)(n.Provider,{value:{logoUrl:o,setLogoUrl:i,faviconUrl:s,setFaviconUrl:c},children:e})},"useTheme",0,()=>{let e=(0,a.useContext)(n);if(!e)throw Error("useTheme must be used within a ThemeProvider");return e}])},755151,e=>{"use strict";var t=e.i(247153);e.s(["DownOutlined",()=>t.default])},602073,e=>{"use strict";e.i(247167);var t=e.i(931067),a=e.i(271645);let r={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64L128 192v384c0 212.1 171.9 384 384 384s384-171.9 384-384V192L512 64zm312 512c0 172.3-139.7 312-312 312S200 748.3 200 576V246l312-110 312 110v330z"}},{tag:"path",attrs:{d:"M378.4 475.1a35.91 35.91 0 00-50.9 0 35.91 35.91 0 000 50.9l129.4 129.4 2.1 2.1a33.98 33.98 0 0048.1 0L730.6 434a33.98 33.98 0 000-48.1l-2.8-2.8a33.98 33.98 0 00-48.1 0L483 579.7 378.4 475.1z"}}]},name:"safety",theme:"outlined"};var n=e.i(9583),l=a.forwardRef(function(e,l){return a.createElement(n.default,(0,t.default)({},e,{ref:l,icon:r}))});e.s(["SafetyOutlined",0,l],602073)},818581,(e,t,a)=>{"use strict";Object.defineProperty(a,"__esModule",{value:!0}),Object.defineProperty(a,"useMergedRef",{enumerable:!0,get:function(){return n}});let r=e.r(271645);function n(e,t){let a=(0,r.useRef)(null),n=(0,r.useRef)(null);return(0,r.useCallback)(r=>{if(null===r){let e=a.current;e&&(a.current=null,e());let t=n.current;t&&(n.current=null,t())}else e&&(a.current=l(e,r)),t&&(n.current=l(t,r))},[e,t])}function l(e,t){if("function"!=typeof e)return e.current=t,()=>{e.current=null};{let a=e(t);return"function"==typeof a?a:()=>e(null)}}("function"==typeof a.default||"object"==typeof a.default&&null!==a.default)&&void 0===a.default.__esModule&&(Object.defineProperty(a.default,"__esModule",{value:!0}),Object.assign(a.default,a),t.exports=a.default)},571353,e=>{"use strict";e.i(602869);var t=e.i(221688);let a={"api-keys":"api-keys",models:"models-and-endpoints",api_ref:"api-reference","api-reference":"api-reference","llm-playground":"playground",projects:"projects","access-groups":"access-groups",budgets:"budgets",workflows:"workflows","guardrails-monitor":"guardrails-monitor","mcp-servers":"mcp-servers","search-tools":"search-tools","tag-management":"tag-management","vector-stores":"vector-stores",memory:"memory",policies:"policies",guardrails:"guardrails",prompts:"prompts","tool-policies":"tool-policies",skills:"skills","claude-code-plugins":"skills",caching:"caching","cost-tracking":"cost-tracking","transform-request":"transform-request","ui-theme":"ui-theme",logs:"logs","admin-panel":"admin-panel","logging-and-alerts":"logging-and-alerts","model-hub-table":"model-hub-table",new_usage:"usage",usage:"old-usage",agents:"agents","router-settings":"router-settings",users:"users",teams:"teams",organizations:"organizations"};function r(){let e=t.serverRootPath&&"/"!==t.serverRootPath?`/${t.serverRootPath.replace(/^\/+|\/+$/g,"")}`:"";return`${e}/ui`}e.s(["MIGRATED_PAGES",0,a,"legacyKeyForPathname",0,function(e){let t=r(),n=(e.startsWith(t)?e.slice(t.length):e).replace(/^\/+|\/+$/g,"");for(let[e,t]of Object.entries(a))if(n===t)return e;return null},"legacyPageHref",0,function(e){return`${r()}/?page=${e}`},"migratedHref",0,function(e){return`${r()}/${e.replace(/^\/+/,"")}`}])},438957,e=>{"use strict";e.i(247167);var t=e.i(931067),a=e.i(271645);let r={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M608 112c-167.9 0-304 136.1-304 304 0 70.3 23.9 135 63.9 186.5l-41.1 41.1-62.3-62.3a8.15 8.15 0 00-11.4 0l-39.8 39.8a8.15 8.15 0 000 11.4l62.3 62.3-44.9 44.9-62.3-62.3a8.15 8.15 0 00-11.4 0l-39.8 39.8a8.15 8.15 0 000 11.4l62.3 62.3-65.3 65.3a8.03 8.03 0 000 11.3l42.3 42.3c3.1 3.1 8.2 3.1 11.3 0l253.6-253.6A304.06 304.06 0 00608 720c167.9 0 304-136.1 304-304S775.9 112 608 112zm161.2 465.2C726.2 620.3 668.9 644 608 644c-60.9 0-118.2-23.7-161.2-66.8-43.1-43-66.8-100.3-66.8-161.2 0-60.9 23.7-118.2 66.8-161.2 43-43.1 100.3-66.8 161.2-66.8 60.9 0 118.2 23.7 161.2 66.8 43.1 43 66.8 100.3 66.8 161.2 0 60.9-23.7 118.2-66.8 161.2z"}}]},name:"key",theme:"outlined"};var n=e.i(9583),l=a.forwardRef(function(e,l){return a.createElement(n.default,(0,t.default)({},e,{ref:l,icon:r}))});e.s(["KeyOutlined",0,l],438957)},788191,e=>{"use strict";e.i(247167);var t=e.i(931067),a=e.i(271645);let r={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M719.4 499.1l-296.1-215A15.9 15.9 0 00398 297v430c0 13.1 14.8 20.5 25.3 12.9l296.1-215a15.9 15.9 0 000-25.8zm-257.6 134V390.9L628.5 512 461.8 633.1z"}}]},name:"play-circle",theme:"outlined"};var n=e.i(9583),l=a.forwardRef(function(e,l){return a.createElement(n.default,(0,t.default)({},e,{ref:l,icon:r}))});e.s(["PlayCircleOutlined",0,l],788191)},399219,e=>{"use strict";let t=(0,e.i(475254).default)("chevron-up",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]);e.s(["default",0,t])},844444,e=>{"use strict";var t=e.i(843476),a=e.i(906579),r=e.i(271645),n=e.i(115571);function l(e){let t=t=>{"disableShowNewBadge"===t.key&&e()},a=t=>{let{key:a}=t.detail;"disableShowNewBadge"===a&&e()};return window.addEventListener("storage",t),window.addEventListener(n.LOCAL_STORAGE_EVENT,a),()=>{window.removeEventListener("storage",t),window.removeEventListener(n.LOCAL_STORAGE_EVENT,a)}}function o(){return"true"===(0,n.getLocalStorageItem)("disableShowNewBadge")}e.s(["default",0,function({children:e,dot:n=!1}){return(0,r.useSyncExternalStore)(l,o)?e?(0,t.jsx)(t.Fragment,{children:e}):null:e?(0,t.jsx)(a.Badge,{color:"blue",count:n?void 0:"New",dot:n,children:e}):(0,t.jsx)(a.Badge,{color:"blue",count:n?void 0:"New",dot:n})}],844444)},299251,153702,777579,e=>{"use strict";e.i(247167);var t=e.i(931067),a=e.i(271645);let r={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M894 462c30.9 0 43.8-39.7 18.7-58L530.8 126.2a31.81 31.81 0 00-37.6 0L111.3 404c-25.1 18.2-12.2 58 18.8 58H192v374h-72c-4.4 0-8 3.6-8 8v52c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-52c0-4.4-3.6-8-8-8h-72V462h62zM512 196.7l271.1 197.2H240.9L512 196.7zM264 462h117v374H264V462zm189 0h117v374H453V462zm307 374H642V462h118v374z"}}]},name:"bank",theme:"outlined"};var n=e.i(9583),l=a.forwardRef(function(e,l){return a.createElement(n.default,(0,t.default)({},e,{ref:l,icon:r}))});e.s(["BankOutlined",0,l],299251);let o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M888 792H200V168c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v688c0 4.4 3.6 8 8 8h752c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm-600-80h56c4.4 0 8-3.6 8-8V560c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v144c0 4.4 3.6 8 8 8zm152 0h56c4.4 0 8-3.6 8-8V384c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v320c0 4.4 3.6 8 8 8zm152 0h56c4.4 0 8-3.6 8-8V462c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v242c0 4.4 3.6 8 8 8zm152 0h56c4.4 0 8-3.6 8-8V304c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v400c0 4.4 3.6 8 8 8z"}}]},name:"bar-chart",theme:"outlined"};var i=a.forwardRef(function(e,r){return a.createElement(n.default,(0,t.default)({},e,{ref:r,icon:o}))});e.s(["BarChartOutlined",0,i],153702);let s={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M888 792H200V168c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v688c0 4.4 3.6 8 8 8h752c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM305.8 637.7c3.1 3.1 8.1 3.1 11.3 0l138.3-137.6L583 628.5c3.1 3.1 8.2 3.1 11.3 0l275.4-275.3c3.1-3.1 3.1-8.2 0-11.3l-39.6-39.6a8.03 8.03 0 00-11.3 0l-230 229.9L461.4 404a8.03 8.03 0 00-11.3 0L266.3 586.7a8.03 8.03 0 000 11.3l39.5 39.7z"}}]},name:"line-chart",theme:"outlined"};var c=a.forwardRef(function(e,r){return a.createElement(n.default,(0,t.default)({},e,{ref:r,icon:s}))});e.s(["LineChartOutlined",0,c],777579)},366308,e=>{"use strict";e.i(247167);var t=e.i(931067),a=e.i(271645);let r={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M876.6 239.5c-.5-.9-1.2-1.8-2-2.5-5-5-13.1-5-18.1 0L684.2 409.3l-67.9-67.9L788.7 169c.8-.8 1.4-1.6 2-2.5 3.6-6.1 1.6-13.9-4.5-17.5-98.2-58-226.8-44.7-311.3 39.7-67 67-89.2 162-66.5 247.4l-293 293c-3 3-2.8 7.9.3 11l169.7 169.7c3.1 3.1 8.1 3.3 11 .3l292.9-292.9c85.5 22.8 180.5.7 247.6-66.4 84.4-84.5 97.7-213.1 39.7-311.3zM786 499.8c-58.1 58.1-145.3 69.3-214.6 33.6l-8.8 8.8-.1-.1-274 274.1-79.2-79.2 230.1-230.1s0 .1.1.1l52.8-52.8c-35.7-69.3-24.5-156.5 33.6-214.6a184.2 184.2 0 01144-53.5L537 318.9a32.05 32.05 0 000 45.3l124.5 124.5a32.05 32.05 0 0045.3 0l132.8-132.8c3.7 51.8-14.4 104.8-53.6 143.9z"}}]},name:"tool",theme:"outlined"};var n=e.i(9583),l=a.forwardRef(function(e,l){return a.createElement(n.default,(0,t.default)({},e,{ref:l,icon:r}))});e.s(["ToolOutlined",0,l],366308)},19732,e=>{"use strict";e.i(247167);var t=e.i(931067),a=e.i(271645);let r={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 472a40 40 0 1080 0 40 40 0 10-80 0zm367 352.9L696.3 352V178H768v-68H256v68h71.7v174L145 824.9c-2.8 7.4-4.3 15.2-4.3 23.1 0 35.3 28.7 64 64 64h614.6c7.9 0 15.7-1.5 23.1-4.3 33-12.7 49.4-49.8 36.6-82.8zM395.7 364.7V180h232.6v184.7L719.2 600c-20.7-5.3-42.1-8-63.9-8-61.2 0-119.2 21.5-165.3 60a188.78 188.78 0 01-121.3 43.9c-32.7 0-64.1-8.3-91.8-23.7l118.8-307.5zM210.5 844l41.7-107.8c35.7 18.1 75.4 27.8 116.6 27.8 61.2 0 119.2-21.5 165.3-60 33.9-28.2 76.3-43.9 121.3-43.9 35 0 68.4 9.5 97.6 27.1L813.5 844h-603z"}}]},name:"experiment",theme:"outlined"};var n=e.i(9583),l=a.forwardRef(function(e,l){return a.createElement(n.default,(0,t.default)({},e,{ref:l,icon:r}))});e.s(["ExperimentOutlined",0,l],19732)},313603,e=>{"use strict";e.i(247167);var t=e.i(931067),a=e.i(271645);let r={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M924.8 625.7l-65.5-56c3.1-19 4.7-38.4 4.7-57.8s-1.6-38.8-4.7-57.8l65.5-56a32.03 32.03 0 009.3-35.2l-.9-2.6a443.74 443.74 0 00-79.7-137.9l-1.8-2.1a32.12 32.12 0 00-35.1-9.5l-81.3 28.9c-30-24.6-63.5-44-99.7-57.6l-15.7-85a32.05 32.05 0 00-25.8-25.7l-2.7-.5c-52.1-9.4-106.9-9.4-159 0l-2.7.5a32.05 32.05 0 00-25.8 25.7l-15.8 85.4a351.86 351.86 0 00-99 57.4l-81.9-29.1a32 32 0 00-35.1 9.5l-1.8 2.1a446.02 446.02 0 00-79.7 137.9l-.9 2.6c-4.5 12.5-.8 26.5 9.3 35.2l66.3 56.6c-3.1 18.8-4.6 38-4.6 57.1 0 19.2 1.5 38.4 4.6 57.1L99 625.5a32.03 32.03 0 00-9.3 35.2l.9 2.6c18.1 50.4 44.9 96.9 79.7 137.9l1.8 2.1a32.12 32.12 0 0035.1 9.5l81.9-29.1c29.8 24.5 63.1 43.9 99 57.4l15.8 85.4a32.05 32.05 0 0025.8 25.7l2.7.5a449.4 449.4 0 00159 0l2.7-.5a32.05 32.05 0 0025.8-25.7l15.7-85a350 350 0 0099.7-57.6l81.3 28.9a32 32 0 0035.1-9.5l1.8-2.1c34.8-41.1 61.6-87.5 79.7-137.9l.9-2.6c4.5-12.3.8-26.3-9.3-35zM788.3 465.9c2.5 15.1 3.8 30.6 3.8 46.1s-1.3 31-3.8 46.1l-6.6 40.1 74.7 63.9a370.03 370.03 0 01-42.6 73.6L721 702.8l-31.4 25.8c-23.9 19.6-50.5 35-79.3 45.8l-38.1 14.3-17.9 97a377.5 377.5 0 01-85 0l-17.9-97.2-37.8-14.5c-28.5-10.8-55-26.2-78.7-45.7l-31.4-25.9-93.4 33.2c-17-22.9-31.2-47.6-42.6-73.6l75.5-64.5-6.5-40c-2.4-14.9-3.7-30.3-3.7-45.5 0-15.3 1.2-30.6 3.7-45.5l6.5-40-75.5-64.5c11.3-26.1 25.6-50.7 42.6-73.6l93.4 33.2 31.4-25.9c23.7-19.5 50.2-34.9 78.7-45.7l37.9-14.3 17.9-97.2c28.1-3.2 56.8-3.2 85 0l17.9 97 38.1 14.3c28.7 10.8 55.4 26.2 79.3 45.8l31.4 25.8 92.8-32.9c17 22.9 31.2 47.6 42.6 73.6L781.8 426l6.5 39.9zM512 326c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm79.2 255.2A111.6 111.6 0 01512 614c-29.9 0-58-11.7-79.2-32.8A111.6 111.6 0 01400 502c0-29.9 11.7-58 32.8-79.2C454 401.6 482.1 390 512 390c29.9 0 58 11.6 79.2 32.8A111.6 111.6 0 01624 502c0 29.9-11.7 58-32.8 79.2z"}}]},name:"setting",theme:"outlined"};var n=e.i(9583),l=a.forwardRef(function(e,l){return a.createElement(n.default,(0,t.default)({},e,{ref:l,icon:r}))});e.s(["SettingOutlined",0,l],313603)},210612,e=>{"use strict";e.i(247167);var t=e.i(931067),a=e.i(271645);let r={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M832 64H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V96c0-17.7-14.3-32-32-32zm-600 72h560v208H232V136zm560 480H232V408h560v208zm0 272H232V680h560v208zM304 240a40 40 0 1080 0 40 40 0 10-80 0zm0 272a40 40 0 1080 0 40 40 0 10-80 0zm0 272a40 40 0 1080 0 40 40 0 10-80 0z"}}]},name:"database",theme:"outlined"};var n=e.i(9583),l=a.forwardRef(function(e,l){return a.createElement(n.default,(0,t.default)({},e,{ref:l,icon:r}))});e.s(["DatabaseOutlined",0,l],210612)},218129,e=>{"use strict";e.i(247167);var t=e.i(931067),a=e.i(271645);let r={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M917.7 148.8l-42.4-42.4c-1.6-1.6-3.6-2.3-5.7-2.3s-4.1.8-5.7 2.3l-76.1 76.1a199.27 199.27 0 00-112.1-34.3c-51.2 0-102.4 19.5-141.5 58.6L432.3 308.7a8.03 8.03 0 000 11.3L704 591.7c1.6 1.6 3.6 2.3 5.7 2.3 2 0 4.1-.8 5.7-2.3l101.9-101.9c68.9-69 77-175.7 24.3-253.5l76.1-76.1c3.1-3.2 3.1-8.3 0-11.4zM769.1 441.7l-59.4 59.4-186.8-186.8 59.4-59.4c24.9-24.9 58.1-38.7 93.4-38.7 35.3 0 68.4 13.7 93.4 38.7 24.9 24.9 38.7 58.1 38.7 93.4 0 35.3-13.8 68.4-38.7 93.4zm-190.2 105a8.03 8.03 0 00-11.3 0L501 613.3 410.7 523l66.7-66.7c3.1-3.1 3.1-8.2 0-11.3L441 408.6a8.03 8.03 0 00-11.3 0L363 475.3l-43-43a7.85 7.85 0 00-5.7-2.3c-2 0-4.1.8-5.7 2.3L206.8 534.2c-68.9 69-77 175.7-24.3 253.5l-76.1 76.1a8.03 8.03 0 000 11.3l42.4 42.4c1.6 1.6 3.6 2.3 5.7 2.3s4.1-.8 5.7-2.3l76.1-76.1c33.7 22.9 72.9 34.3 112.1 34.3 51.2 0 102.4-19.5 141.5-58.6l101.9-101.9c3.1-3.1 3.1-8.2 0-11.3l-43-43 66.7-66.7c3.1-3.1 3.1-8.2 0-11.3l-36.6-36.2zM441.7 769.1a131.32 131.32 0 01-93.4 38.7c-35.3 0-68.4-13.7-93.4-38.7a131.32 131.32 0 01-38.7-93.4c0-35.3 13.7-68.4 38.7-93.4l59.4-59.4 186.8 186.8-59.4 59.4z"}}]},name:"api",theme:"outlined"};var n=e.i(9583),l=a.forwardRef(function(e,l){return a.createElement(n.default,(0,t.default)({},e,{ref:l,icon:r}))});e.s(["ApiOutlined",0,l],218129)},872934,e=>{"use strict";e.i(247167);var t=e.i(931067),a=e.i(271645);let r={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M880 912H144c-17.7 0-32-14.3-32-32V144c0-17.7 14.3-32 32-32h360c4.4 0 8 3.6 8 8v56c0 4.4-3.6 8-8 8H184v656h656V520c0-4.4 3.6-8 8-8h56c4.4 0 8 3.6 8 8v360c0 17.7-14.3 32-32 32zM770.87 199.13l-52.2-52.2a8.01 8.01 0 014.7-13.6l179.4-21c5.1-.6 9.5 3.7 8.9 8.9l-21 179.4c-.8 6.6-8.9 9.4-13.6 4.7l-52.4-52.4-256.2 256.2a8.03 8.03 0 01-11.3 0l-42.4-42.4a8.03 8.03 0 010-11.3l256.1-256.3z"}}]},name:"export",theme:"outlined"};var n=e.i(9583),l=a.forwardRef(function(e,l){return a.createElement(n.default,(0,t.default)({},e,{ref:l,icon:r}))});e.s(["ExportOutlined",0,l],872934)},232164,e=>{"use strict";e.i(247167);var t=e.i(931067),a=e.i(271645);let r={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M483.2 790.3L861.4 412c1.7-1.7 2.5-4 2.3-6.3l-25.5-301.4c-.7-7.8-6.8-13.9-14.6-14.6L522.2 64.3c-2.3-.2-4.7.6-6.3 2.3L137.7 444.8a8.03 8.03 0 000 11.3l334.2 334.2c3.1 3.2 8.2 3.2 11.3 0zm62.6-651.7l224.6 19 19 224.6L477.5 694 233.9 450.5l311.9-311.9zm60.16 186.23a48 48 0 1067.88-67.89 48 48 0 10-67.88 67.89zM889.7 539.8l-39.6-39.5a8.03 8.03 0 00-11.3 0l-362 361.3-237.6-237a8.03 8.03 0 00-11.3 0l-39.6 39.5a8.03 8.03 0 000 11.3l243.2 242.8 39.6 39.5c3.1 3.1 8.2 3.1 11.3 0l407.3-406.6c3.1-3.1 3.1-8.2 0-11.3z"}}]},name:"tags",theme:"outlined"};var n=e.i(9583),l=a.forwardRef(function(e,l){return a.createElement(n.default,(0,t.default)({},e,{ref:l,icon:r}))});e.s(["TagsOutlined",0,l],232164)},664659,e=>{"use strict";var t=e.i(631171);e.s(["ChevronDown",()=>t.default])},878894,531278,e=>{"use strict";var t=e.i(475254);let a=(0,t.default)("triangle-alert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);e.s(["AlertTriangle",0,a],878894);let r=(0,t.default)("loader-circle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);e.s(["Loader2",0,r],531278)},216370,e=>{"use strict";var t=e.i(843476),a=e.i(271645),r=e.i(402874),n=e.i(936578),l=e.i(275144),o=e.i(557951),i=e.i(111672),s=e.i(602869),c=e.i(135214);let u=({setPage:e,defaultSelectedKey:r,sidebarCollapsed:n})=>{let{accessToken:l}=(0,c.default)(),[o,u]=(0,a.useState)(null),[d,f]=(0,a.useState)(!1),[m,g]=(0,a.useState)(!1),[h,v]=(0,a.useState)(!1),[p,b]=(0,a.useState)(!1),[y,x]=(0,a.useState)(!1);return(0,a.useEffect)(()=>{(async()=>{if(!l)return console.log("[SidebarProvider] No access token, skipping UI settings fetch");try{console.log("[SidebarProvider] Fetching UI settings from /get/ui_settings");let e=await (0,s.getUISettings)(l);console.log("[SidebarProvider] UI settings response:",e),e?.values?.enabled_ui_pages_internal_users!==void 0?(console.log("[SidebarProvider] Setting enabled pages:",e.values.enabled_ui_pages_internal_users),u(e.values.enabled_ui_pages_internal_users)):console.log("[SidebarProvider] No enabled_ui_pages_internal_users in response (all pages visible by default)"),e?.values?.enable_projects_ui!==void 0&&f(!!e.values.enable_projects_ui),e?.values?.disable_agents_for_internal_users!==void 0&&g(!!e.values.disable_agents_for_internal_users),e?.values?.allow_agents_for_team_admins!==void 0&&v(!!e.values.allow_agents_for_team_admins),e?.values?.disable_vector_stores_for_internal_users!==void 0&&b(!!e.values.disable_vector_stores_for_internal_users),e?.values?.allow_vector_stores_for_team_admins!==void 0&&x(!!e.values.allow_vector_stores_for_team_admins)}catch(e){console.error("[SidebarProvider] Failed to fetch UI settings:",e)}})()},[l]),(0,t.jsx)(i.default,{setPage:e,defaultSelectedKey:r,collapsed:n,enabledPagesInternalUsers:o,enableProjectsUI:d,disableAgentsForInternalUsers:m,allowAgentsForTeamAdmins:h,disableVectorStoresForInternalUsers:p,allowVectorStoresForTeamAdmins:y})};var d=e.i(618566),f=e.i(560445),m=e.i(143488);let g=({accessToken:e})=>{let{data:a}=(0,m.useHealthReadinessDetails)(e);return a?.is_detailed_debug?(0,t.jsx)(f.Alert,{message:"Performance Warning: Detailed Debug Mode Active",description:(0,t.jsxs)(t.Fragment,{children:["Detailed debug logging (",(0,t.jsx)("code",{children:"LITELLM_LOG=DEBUG"}),") is currently enabled. This mode logs extensive diagnostic information and will significantly degrade performance. It should only be used for troubleshooting and disabled in production environments."]}),type:"warning",showIcon:!0,banner:!0,style:{marginBottom:0,borderRadius:0}}):null};var h=e.i(571353),v=e.i(658140);let p=(0,e.i(431703).createApiClient)({getBaseUrl:()=>(0,s.getProxyBaseUrl)()??""});function b({children:e}){let{accessToken:a}=(0,o.useAuth)();return(0,t.jsx)(v.PluginModeProvider,{accessToken:a,children:e})}function y(){let{activePlugin:e}=(0,v.usePluginMode)(),r=e?.name,n=e?.url??"",{accessToken:l}=(0,o.useAuth)(),i=(0,a.useRef)(null),[s,c]=(0,a.useState)(null);return((0,a.useEffect)(()=>{if(!l||!r)return;let e=!1;return p.get("/api/plugins/auth-token",{accessToken:l,query:{plugin_name:r}}).then(t=>{!e&&t?.session_claim&&c({plugin:r,claim:t.session_claim})}).catch(()=>{}),()=>{e=!0}},[l,r]),(0,a.useEffect)(()=>{let e=i.current;if(!e||!s||s.plugin!==r||!n)return;let t=()=>{e.contentWindow?.postMessage({type:"litellm-auth",session_claim:s.claim},n)};return t(),e.addEventListener("load",t),()=>e.removeEventListener("load",t)},[s,r,n]),n)?(0,t.jsx)("iframe",{ref:i,src:`${n.replace(/\/$/,"")}/`,style:{width:"100%",height:"100%",border:"none",flex:1,minHeight:"calc(100vh - 56px)"},title:e?.display_name??"Plugin",allow:"clipboard-write"}):(0,t.jsx)("div",{className:"flex flex-1 items-center justify-center text-gray-500",children:(0,t.jsxs)("div",{className:"text-center",children:[(0,t.jsx)("p",{className:"text-lg font-medium mb-2",children:"Plugin"}),(0,t.jsx)("p",{className:"text-sm",children:"Configure the plugin URL in settings"})]})})}function x({children:e}){let n=(0,d.useRouter)(),l=(0,d.useSearchParams)(),i=(0,d.usePathname)(),{accessToken:s}=(0,o.useAuth)(),[c,f]=(0,a.useState)(!1),{mode:m}=(0,v.usePluginMode)(),p=(0,h.legacyKeyForPathname)(i)||l.get("page")||"api-keys";return(0,t.jsxs)("div",{className:"flex flex-col min-h-screen",children:[(0,t.jsx)(r.default,{accessToken:s,isPublicPage:!1,sidebarCollapsed:c,onToggleSidebar:()=>f(e=>!e)}),(0,t.jsx)(g,{accessToken:s}),(0,t.jsx)("div",{className:"flex flex-1",children:"ai-gateway"!==m?(0,t.jsx)("div",{className:"flex-1 flex",children:(0,t.jsx)(y,{})}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("div",{className:"mt-2",children:(0,t.jsx)(u,{setPage:e=>{let t=h.MIGRATED_PAGES[e];n.push(t?(0,h.migratedHref)(t):(0,h.legacyPageHref)(e))},defaultSelectedKey:p,sidebarCollapsed:c})}),(0,t.jsx)("main",{className:"flex-1",children:e})]})})]})}function w({children:e}){let a=(0,d.useSearchParams)(),{accessToken:r,authLoading:i}=(0,o.useAuth)(),s=!!a.get("invitation_id");return i?(0,t.jsx)(n.default,{}):(0,t.jsx)(l.ThemeProvider,{accessToken:r,children:s?e:(0,t.jsx)(x,{children:e})})}e.s(["AgentControlPlaneView",0,y,"default",0,function({children:e}){return(0,t.jsx)(a.Suspense,{fallback:(0,t.jsx)(n.default,{}),children:(0,t.jsx)(b,{children:(0,t.jsx)(w,{children:e})})})}],216370)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0pwrfxkkt~qfh.js b/litellm/proxy/_experimental/out/_next/static/chunks/0pwrfxkkt~qfh.js new file mode 100644 index 00000000000..af4b48c3395 --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0pwrfxkkt~qfh.js @@ -0,0 +1,50 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,934879,e=>{"use strict";var s=e.i(843476),l=e.i(994388),t=e.i(389083),a=e.i(599724),i=e.i(592968),r=e.i(262218),n=e.i(166406),c=e.i(827252),d=e.i(271645),o=e.i(212931),x=e.i(808613),m=e.i(280898),h=e.i(464571),u=e.i(536916),p=e.i(629569),g=e.i(602869),j=e.i(727749);let{Step:b}=m.Steps,f=({visible:e,onClose:l,accessToken:i,agentHubData:r,onSuccess:n})=>{let[c,f]=(0,d.useState)(0),[v,N]=(0,d.useState)(new Set),[y,k]=(0,d.useState)(!1),[T]=x.Form.useForm(),_=()=>{f(0),N(new Set),T.resetFields(),l()};(0,d.useEffect)(()=>{e&&r.length>0&&N(new Set(r.filter(e=>!0===e.is_public).map(e=>e.agent_id||e.name)))},[e,r]);let w=async()=>{if(0===v.size)return void j.default.fromBackend("Please select at least one agent to make public");k(!0);try{let e=Array.from(v);await (0,g.makeAgentsPublicCall)(i,e),j.default.success(`Successfully made ${e.length} agent(s) public!`),_(),n()}catch(e){console.error("Error making agents public:",e),j.default.fromBackend("Failed to make agents public. Please try again.")}finally{k(!1)}};return(0,s.jsx)(o.Modal,{title:"Make Agents Public",open:e,onCancel:_,footer:null,width:1200,maskClosable:!1,children:(0,s.jsxs)(x.Form,{form:T,layout:"vertical",children:[(0,s.jsxs)(m.Steps,{current:c,className:"mb-6",children:[(0,s.jsx)(b,{title:"Select Agents"}),(0,s.jsx)(b,{title:"Confirm"})]}),(()=>{switch(c){case 0:let e,l;return e=r.length>0&&r.every(e=>v.has(e.agent_id||e.name)),l=v.size>0&&!e,(0,s.jsxs)("div",{className:"space-y-4",children:[(0,s.jsxs)("div",{className:"flex items-center justify-between",children:[(0,s.jsx)(p.Title,{children:"Select Agents to Make Public"}),(0,s.jsx)("div",{className:"flex items-center space-x-2",children:(0,s.jsxs)(u.Checkbox,{checked:e,indeterminate:l,onChange:e=>{e.target.checked?N(new Set(r.map(e=>e.agent_id||e.name))):N(new Set)},disabled:0===r.length,children:["Select All ",r.length>0&&`(${r.length})`]})})]}),(0,s.jsx)(a.Text,{className:"text-sm text-gray-600",children:"Select the agents you want to be visible on the public model hub. Users will still require a valid Virtual Key to use these agents."}),(0,s.jsx)("div",{className:"max-h-96 overflow-y-auto border rounded-lg p-4",children:(0,s.jsx)("div",{className:"space-y-3",children:0===r.length?(0,s.jsx)("div",{className:"text-center py-8 text-gray-500",children:(0,s.jsx)(a.Text,{children:"No agents available."})}):r.map(e=>{let l=e.agent_id||e.name;return(0,s.jsxs)("div",{className:"flex items-center space-x-3 p-3 border rounded-lg hover:bg-gray-50",children:[(0,s.jsx)(u.Checkbox,{checked:v.has(l),onChange:e=>{var s;let t;return s=e.target.checked,t=new Set(v),void(s?t.add(l):t.delete(l),N(t))}}),(0,s.jsxs)("div",{className:"flex-1",children:[(0,s.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,s.jsx)(a.Text,{className:"font-medium",children:e.name}),(0,s.jsxs)(t.Badge,{color:"blue",size:"sm",children:["v",e.version]})]}),(0,s.jsx)(a.Text,{className:"text-xs text-gray-600 mt-1",children:e.description}),e.skills&&e.skills.length>0&&(0,s.jsxs)("div",{className:"flex flex-wrap gap-1 mt-1",children:[e.skills.slice(0,3).map(e=>(0,s.jsx)(t.Badge,{color:"purple",size:"xs",children:e.name},e.id)),e.skills.length>3&&(0,s.jsxs)(a.Text,{className:"text-xs text-gray-500",children:["+",e.skills.length-3," more"]})]})]})]},l)})})}),v.size>0&&(0,s.jsx)("div",{className:"bg-blue-50 border border-blue-200 rounded-lg p-3",children:(0,s.jsxs)(a.Text,{className:"text-sm text-blue-800",children:[(0,s.jsx)("strong",{children:v.size})," agent",1!==v.size?"s":""," selected"]})})]});case 1:return(0,s.jsxs)("div",{className:"space-y-4",children:[(0,s.jsx)(p.Title,{children:"Confirm Making Agents Public"}),(0,s.jsx)("div",{className:"bg-yellow-50 border border-yellow-200 rounded-lg p-4",children:(0,s.jsxs)(a.Text,{className:"text-sm text-yellow-800",children:[(0,s.jsx)("strong",{children:"Warning:"})," Once you make these agents public, anyone who can go to the"," ",(0,s.jsx)("code",{children:"/ui/model_hub_table"})," will be able to know they exist on the proxy."]})}),(0,s.jsxs)("div",{className:"space-y-3",children:[(0,s.jsx)(a.Text,{className:"font-medium",children:"Agents to be made public:"}),(0,s.jsx)("div",{className:"max-h-48 overflow-y-auto border rounded-lg p-3",children:(0,s.jsx)("div",{className:"space-y-2",children:Array.from(v).map(e=>{let l=r.find(s=>(s.agent_id||s.name)===e);return(0,s.jsx)("div",{className:"flex items-center justify-between p-2 bg-gray-50 rounded",children:(0,s.jsxs)("div",{className:"flex-1",children:[(0,s.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,s.jsx)(a.Text,{className:"font-medium",children:l?.name||e}),l&&(0,s.jsxs)(t.Badge,{color:"blue",size:"xs",children:["v",l.version]})]}),l?.description&&(0,s.jsx)(a.Text,{className:"text-xs text-gray-600 mt-1",children:l.description})]})},e)})})})]}),(0,s.jsx)("div",{className:"bg-blue-50 border border-blue-200 rounded-lg p-3",children:(0,s.jsxs)(a.Text,{className:"text-sm text-blue-800",children:["Total: ",(0,s.jsx)("strong",{children:v.size})," agent",1!==v.size?"s":""," will be made public"]})})]});default:return null}})(),(0,s.jsxs)("div",{className:"flex justify-between mt-6",children:[(0,s.jsx)(h.Button,{onClick:0===c?_:()=>{1===c&&f(0)},children:0===c?"Cancel":"Previous"}),(0,s.jsxs)("div",{className:"flex space-x-2",children:[0===c&&(0,s.jsx)(h.Button,{onClick:()=>{if(0===c){if(0===v.size)return void j.default.fromBackend("Please select at least one agent to make public");f(1)}},disabled:0===v.size,children:"Next"}),1===c&&(0,s.jsx)(h.Button,{onClick:w,loading:y,children:"Make Public"})]})]})]})})},{Step:v}=m.Steps,N=({visible:e,onClose:l,accessToken:i,mcpHubData:r,onSuccess:n})=>{let[c,b]=(0,d.useState)(0),[f,N]=(0,d.useState)(new Set),[y,k]=(0,d.useState)(!1),[T]=x.Form.useForm(),_=()=>{b(0),N(new Set),T.resetFields(),l()};(0,d.useEffect)(()=>{e&&r.length>0&&N(new Set(r.filter(e=>e.mcp_info?.is_public===!0).map(e=>e.server_id)))},[e]);let w=async()=>{if(0===f.size)return void j.default.fromBackend("Please select at least one MCP server to make public");k(!0);try{let e=Array.from(f);await (0,g.makeMCPPublicCall)(i,e),j.default.success(`Successfully made ${e.length} MCP server(s) public!`),_(),n()}catch(e){console.error("Error making MCP servers public:",e),j.default.fromBackend("Failed to make MCP servers public. Please try again.")}finally{k(!1)}};return(0,s.jsx)(o.Modal,{title:"Make MCP Servers Public",open:e,onCancel:_,footer:null,width:1200,maskClosable:!1,children:(0,s.jsxs)(x.Form,{form:T,layout:"vertical",children:[(0,s.jsxs)(m.Steps,{current:c,className:"mb-6",children:[(0,s.jsx)(v,{title:"Select Servers"}),(0,s.jsx)(v,{title:"Confirm"})]}),(()=>{switch(c){case 0:let e,l;return e=r.length>0&&r.every(e=>f.has(e.server_id)),l=f.size>0&&!e,(0,s.jsxs)("div",{className:"space-y-4",children:[(0,s.jsxs)("div",{className:"flex items-center justify-between",children:[(0,s.jsx)(p.Title,{children:"Select MCP Servers to Make Public"}),(0,s.jsx)("div",{className:"flex items-center space-x-2",children:(0,s.jsxs)(u.Checkbox,{checked:e,indeterminate:l,onChange:e=>{e.target.checked?N(new Set(r.map(e=>e.server_id))):N(new Set)},disabled:0===r.length,children:["Select All ",r.length>0&&`(${r.length})`]})})]}),(0,s.jsx)(a.Text,{className:"text-sm text-gray-600",children:"Select the MCP servers you want to be visible on the public model hub. Users will still require a valid Virtual Key to use these servers."}),(0,s.jsx)("div",{className:"max-h-96 overflow-y-auto border rounded-lg p-4",children:(0,s.jsx)("div",{className:"space-y-3",children:0===r.length?(0,s.jsx)("div",{className:"text-center py-8 text-gray-500",children:(0,s.jsx)(a.Text,{children:"No MCP servers available."})}):r.map(e=>{let l=e.mcp_info?.is_public===!0;return(0,s.jsxs)("div",{className:"flex items-center space-x-3 p-3 border rounded-lg hover:bg-gray-50",children:[(0,s.jsx)(u.Checkbox,{checked:f.has(e.server_id),onChange:s=>{var l,t;let a;return l=e.server_id,t=s.target.checked,a=new Set(f),void(t?a.add(l):a.delete(l),N(a))}}),(0,s.jsxs)("div",{className:"flex-1",children:[(0,s.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,s.jsx)(a.Text,{className:"font-medium",children:e.server_name}),l&&(0,s.jsx)(t.Badge,{color:"emerald",size:"sm",children:"Public"}),(0,s.jsx)(t.Badge,{color:"blue",size:"sm",children:e.transport}),(0,s.jsx)(t.Badge,{color:"active"===e.status||"healthy"===e.status?"green":"inactive"===e.status||"unhealthy"===e.status?"red":"gray",size:"sm",children:e.status||"unknown"})]}),(0,s.jsx)(a.Text,{className:"text-xs text-gray-600 mt-1",children:e.description||e.url}),e.allowed_tools&&e.allowed_tools.length>0&&(0,s.jsxs)("div",{className:"flex flex-wrap gap-1 mt-1",children:[e.allowed_tools.slice(0,3).map((e,l)=>(0,s.jsx)(t.Badge,{color:"purple",size:"xs",children:e},l)),e.allowed_tools.length>3&&(0,s.jsxs)(a.Text,{className:"text-xs text-gray-500",children:["+",e.allowed_tools.length-3," more"]})]})]})]},e.server_id)})})}),f.size>0&&(0,s.jsx)("div",{className:"bg-blue-50 border border-blue-200 rounded-lg p-3",children:(0,s.jsxs)(a.Text,{className:"text-sm text-blue-800",children:[(0,s.jsx)("strong",{children:f.size})," MCP server",1!==f.size?"s":""," selected"]})})]});case 1:return(0,s.jsxs)("div",{className:"space-y-4",children:[(0,s.jsx)(p.Title,{children:"Confirm Making MCP Servers Public"}),(0,s.jsx)("div",{className:"bg-yellow-50 border border-yellow-200 rounded-lg p-4",children:(0,s.jsxs)(a.Text,{className:"text-sm text-yellow-800",children:[(0,s.jsx)("strong",{children:"Warning:"})," Once you make these MCP servers public, anyone who can go to the"," ",(0,s.jsx)("code",{children:"/ui/model_hub_table"})," will be able to know they exist on the proxy."]})}),(0,s.jsxs)("div",{className:"space-y-3",children:[(0,s.jsx)(a.Text,{className:"font-medium",children:"MCP Servers to be made public:"}),(0,s.jsx)("div",{className:"max-h-48 overflow-y-auto border rounded-lg p-3",children:(0,s.jsx)("div",{className:"space-y-2",children:Array.from(f).map(e=>{let l=r.find(s=>s.server_id===e);return(0,s.jsx)("div",{className:"flex items-center justify-between p-2 bg-gray-50 rounded",children:(0,s.jsxs)("div",{className:"flex-1",children:[(0,s.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,s.jsx)(a.Text,{className:"font-medium",children:l?.server_name||e}),l&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.Badge,{color:"blue",size:"xs",children:l.transport}),(0,s.jsx)(t.Badge,{color:"active"===l.status||"healthy"===l.status?"green":"inactive"===l.status||"unhealthy"===l.status?"red":"gray",size:"xs",children:l.status||"unknown"})]})]}),l?.description&&(0,s.jsx)(a.Text,{className:"text-xs text-gray-600 mt-1",children:l.description}),l?.url&&(0,s.jsx)(a.Text,{className:"text-xs text-gray-500 mt-1",children:l.url})]})},e)})})})]}),(0,s.jsx)("div",{className:"bg-blue-50 border border-blue-200 rounded-lg p-3",children:(0,s.jsxs)(a.Text,{className:"text-sm text-blue-800",children:["Total: ",(0,s.jsx)("strong",{children:f.size})," MCP server",1!==f.size?"s":""," will be made public"]})})]});default:return null}})(),(0,s.jsxs)("div",{className:"flex justify-between mt-6",children:[(0,s.jsx)(h.Button,{onClick:0===c?_:()=>{1===c&&b(0)},children:0===c?"Cancel":"Previous"}),(0,s.jsxs)("div",{className:"flex space-x-2",children:[0===c&&(0,s.jsx)(h.Button,{onClick:()=>{if(0===c){if(0===f.size)return void j.default.fromBackend("Please select at least one MCP server to make public");b(1)}},disabled:0===f.size,children:"Next"}),1===c&&(0,s.jsx)(h.Button,{onClick:w,loading:y,children:"Make Public"})]})]})]})})};var y=e.i(304967);let k=({modelHubData:e,onFilteredDataChange:l,showFiltersCard:t=!0,className:i=""})=>{let r,n,c,[o,x]=(0,d.useState)(""),[m,h]=(0,d.useState)(""),[u,p]=(0,d.useState)(""),[g,j]=(0,d.useState)(""),b=(0,d.useRef)([]),f=(0,d.useMemo)(()=>e?.filter(e=>{let s=e.model_group.toLowerCase().includes(o.toLowerCase()),l=""===m||e.providers.includes(m),t=""===u||e.mode===u,a=""===g||Object.entries(e).filter(([e,s])=>e.startsWith("supports_")&&!0===s).some(([e])=>e.replace(/^supports_/,"").split("_").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ")===g);return s&&l&&t&&a})||[],[e,o,m,u,g]);(0,d.useEffect)(()=>{(f.length!==b.current.length||f.some((e,s)=>e.model_group!==b.current[s]?.model_group))&&(b.current=f,l(f))},[f,l]);let v=(0,s.jsxs)("div",{className:"flex flex-wrap gap-4 items-center",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"text-sm font-medium mb-2",children:"Search Models:"}),(0,s.jsx)("input",{type:"text",placeholder:"Search model names...",value:o,onChange:e=>x(e.target.value),className:"border rounded px-3 py-2 w-64 h-10 text-sm"})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"text-sm font-medium mb-2",children:"Provider:"}),(0,s.jsxs)("select",{value:m,onChange:e=>h(e.target.value),className:"border rounded px-3 py-2 text-sm text-gray-600 w-40 h-10",children:[(0,s.jsx)("option",{value:"",className:"text-sm text-gray-600",children:"All Providers"}),e&&(r=new Set,e.forEach(e=>{e.providers.forEach(e=>r.add(e))}),Array.from(r)).map(e=>(0,s.jsx)("option",{value:e,className:"text-sm text-gray-800",children:e},e))]})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"text-sm font-medium mb-2",children:"Mode:"}),(0,s.jsxs)("select",{value:u,onChange:e=>p(e.target.value),className:"border rounded px-3 py-2 text-sm text-gray-600 w-32 h-10",children:[(0,s.jsx)("option",{value:"",className:"text-sm text-gray-600",children:"All Modes"}),e&&(n=new Set,e.forEach(e=>{e.mode&&n.add(e.mode)}),Array.from(n)).map(e=>(0,s.jsx)("option",{value:e,className:"text-sm text-gray-800",children:e},e))]})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"text-sm font-medium mb-2",children:"Features:"}),(0,s.jsxs)("select",{value:g,onChange:e=>j(e.target.value),className:"border rounded px-3 py-2 text-sm text-gray-600 w-48 h-10",children:[(0,s.jsx)("option",{value:"",className:"text-sm text-gray-600",children:"All Features"}),e&&(c=new Set,e.forEach(e=>{Object.entries(e).filter(([e,s])=>e.startsWith("supports_")&&!0===s).forEach(([e])=>{let s=e.replace(/^supports_/,"").split("_").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ");c.add(s)})}),Array.from(c).sort()).map(e=>(0,s.jsx)("option",{value:e,className:"text-sm text-gray-800",children:e},e))]})]}),(o||m||u||g)&&(0,s.jsx)("div",{className:"flex items-end",children:(0,s.jsx)("button",{onClick:()=>{x(""),h(""),p(""),j("")},className:"text-blue-600 hover:text-blue-800 text-sm underline h-10 flex items-center",children:"Clear Filters"})})]});return t?(0,s.jsx)(y.Card,{className:`mb-6 ${i}`,children:v}):(0,s.jsx)("div",{className:i,children:v})},{Step:T}=m.Steps,_=({visible:e,onClose:l,accessToken:i,modelHubData:r,onSuccess:n})=>{let[c,b]=(0,d.useState)(0),[f,v]=(0,d.useState)(new Set),[N,y]=(0,d.useState)([]),[_,w]=(0,d.useState)(!1),[C]=x.Form.useForm(),S=()=>{b(0),v(new Set),y([]),C.resetFields(),l()},P=(0,d.useCallback)(e=>{y(e)},[]);(0,d.useEffect)(()=>{e&&r.length>0&&(y(r),v(new Set(r.filter(e=>!0===e.is_public_model_group).map(e=>e.model_group))))},[e,r]);let M=async()=>{if(0===f.size)return void j.default.fromBackend("Please select at least one model to make public");w(!0);try{let e=Array.from(f);await (0,g.makeModelGroupPublic)(i,e),j.default.success(`Successfully made ${e.length} model group(s) public!`),S(),n()}catch(e){console.error("Error making model groups public:",e),j.default.fromBackend("Failed to make model groups public. Please try again.")}finally{w(!1)}};return(0,s.jsx)(o.Modal,{title:"Make Models Public",open:e,onCancel:S,footer:null,width:1200,maskClosable:!1,children:(0,s.jsxs)(x.Form,{form:C,layout:"vertical",children:[(0,s.jsxs)(m.Steps,{current:c,className:"mb-6",children:[(0,s.jsx)(T,{title:"Select Models"}),(0,s.jsx)(T,{title:"Confirm"})]}),(()=>{switch(c){case 0:let e,l;return e=N.length>0&&N.every(e=>f.has(e.model_group)),l=f.size>0&&!e,(0,s.jsxs)("div",{className:"space-y-4",children:[(0,s.jsxs)("div",{className:"flex items-center justify-between",children:[(0,s.jsx)(p.Title,{children:"Select Models to Make Public"}),(0,s.jsx)("div",{className:"flex items-center space-x-2",children:(0,s.jsxs)(u.Checkbox,{checked:e,indeterminate:l,onChange:e=>{e.target.checked?v(new Set(N.map(e=>e.model_group))):v(new Set)},disabled:0===N.length,children:["Select All ",N.length>0&&`(${N.length})`]})})]}),(0,s.jsx)(a.Text,{className:"text-sm text-gray-600",children:"Select the models you want to be visible on the public model hub. Users will still require a valid Virtual Key to use these models."}),(0,s.jsx)(k,{modelHubData:r,onFilteredDataChange:P,showFiltersCard:!1,className:"border rounded-lg p-4 bg-gray-50"}),(0,s.jsx)("div",{className:"max-h-96 overflow-y-auto border rounded-lg p-4",children:(0,s.jsx)("div",{className:"space-y-3",children:0===N.length?(0,s.jsx)("div",{className:"text-center py-8 text-gray-500",children:(0,s.jsx)(a.Text,{children:"No models match the current filters."})}):N.map(e=>(0,s.jsxs)("div",{className:"flex items-center space-x-3 p-3 border rounded-lg hover:bg-gray-50",children:[(0,s.jsx)(u.Checkbox,{checked:f.has(e.model_group),onChange:s=>{var l,t;let a;return l=e.model_group,t=s.target.checked,a=new Set(f),void(t?a.add(l):a.delete(l),v(a))}}),(0,s.jsxs)("div",{className:"flex-1",children:[(0,s.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,s.jsx)(a.Text,{className:"font-medium",children:e.model_group}),e.mode&&(0,s.jsx)(t.Badge,{color:"green",size:"sm",children:e.mode})]}),(0,s.jsx)("div",{className:"flex flex-wrap gap-1 mt-1",children:e.providers.map(e=>(0,s.jsx)(t.Badge,{color:"blue",size:"xs",children:e},e))})]})]},e.model_group))})}),f.size>0&&(0,s.jsx)("div",{className:"bg-blue-50 border border-blue-200 rounded-lg p-3",children:(0,s.jsxs)(a.Text,{className:"text-sm text-blue-800",children:[(0,s.jsx)("strong",{children:f.size})," model",1!==f.size?"s":""," selected"]})})]});case 1:return(0,s.jsxs)("div",{className:"space-y-4",children:[(0,s.jsx)(p.Title,{children:"Confirm Making Models Public"}),(0,s.jsx)("div",{className:"bg-yellow-50 border border-yellow-200 rounded-lg p-4",children:(0,s.jsxs)(a.Text,{className:"text-sm text-yellow-800",children:[(0,s.jsx)("strong",{children:"Warning:"})," Once you make these models public, anyone who can go to the"," ",(0,s.jsx)("code",{children:"/ui/model_hub_table"})," will be able to know they exist on the proxy."]})}),(0,s.jsxs)("div",{className:"space-y-3",children:[(0,s.jsx)(a.Text,{className:"font-medium",children:"Models to be made public:"}),(0,s.jsx)("div",{className:"max-h-48 overflow-y-auto border rounded-lg p-3",children:(0,s.jsx)("div",{className:"space-y-2",children:Array.from(f).map(e=>{let l=r.find(s=>s.model_group===e);return(0,s.jsx)("div",{className:"flex items-center justify-between p-2 bg-gray-50 rounded",children:(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"font-medium",children:e}),l&&(0,s.jsx)("div",{className:"flex flex-wrap gap-1 mt-1",children:l.providers.map(e=>(0,s.jsx)(t.Badge,{color:"blue",size:"xs",children:e},e))})]})},e)})})})]}),(0,s.jsx)("div",{className:"bg-blue-50 border border-blue-200 rounded-lg p-3",children:(0,s.jsxs)(a.Text,{className:"text-sm text-blue-800",children:["Total: ",(0,s.jsx)("strong",{children:f.size})," model",1!==f.size?"s":""," will be made public"]})})]});default:return null}})(),(0,s.jsxs)("div",{className:"flex justify-between mt-6",children:[(0,s.jsx)(h.Button,{onClick:0===c?S:()=>{1===c&&b(0)},children:0===c?"Cancel":"Previous"}),(0,s.jsxs)("div",{className:"flex space-x-2",children:[0===c&&(0,s.jsx)(h.Button,{onClick:()=>{if(0===c){if(0===f.size)return void j.default.fromBackend("Please select at least one model to make public");b(1)}},disabled:0===f.size,children:"Next"}),1===c&&(0,s.jsx)(h.Button,{onClick:M,loading:_,children:"Make Public"})]})]})]})})},w=e=>`$${(1e6*e).toFixed(2)}`,C=e=>e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(1)}K`:e.toString();var S=e.i(902555),P=e.i(708347),M=e.i(871943),B=e.i(502547),z=e.i(434626),A=e.i(250980),F=e.i(269200),L=e.i(942232),O=e.i(977572),$=e.i(427612),D=e.i(64848),E=e.i(496020),H=e.i(522016);let U=({accessToken:e,userRole:l})=>{let[t,i]=(0,d.useState)([]),[r,n]=(0,d.useState)({url:"",displayName:""}),[c,o]=(0,d.useState)(null),[x,m]=(0,d.useState)(!1),[h,u]=(0,d.useState)(!0),[b,f]=(0,d.useState)(!1),[v,N]=(0,d.useState)([]),k=async()=>{if(e)try{m(!0);let e=await (0,g.getPublicModelHubInfo)();if(e&&e.useful_links){let s=e.useful_links||{},l=Object.entries(s).map(([e,s])=>"object"==typeof s&&null!==s&&"url"in s?{id:`${s.index??0}-${e}`,displayName:e,url:s.url,index:s.index??0}:{id:`0-${e}`,displayName:e,url:s,index:0}).sort((e,s)=>(e.index??0)-(s.index??0)).map((e,s)=>({...e,id:`${s}-${e.displayName}`}));i(l)}else i([])}catch(e){console.error("Error fetching useful links:",e),i([])}finally{m(!1)}};if((0,d.useEffect)(()=>{k()},[e]),!(0,P.isAdminRole)(l||""))return null;let T=async s=>{if(!e)return!1;try{let l={};return s.forEach((e,s)=>{l[e.displayName]={url:e.url,index:s}}),await (0,g.updateUsefulLinksCall)(e,l),!0}catch(e){return console.error("Error saving links:",e),j.default.fromBackend(`Failed to save links - ${e}`),!1}},_=async()=>{if(!r.url||!r.displayName)return;try{new URL(r.url)}catch{j.default.fromBackend("Please enter a valid URL");return}if(t.some(e=>e.displayName===r.displayName))return void j.default.fromBackend("A link with this display name already exists");let e=[...t,{id:`${Date.now()}-${r.displayName}`,displayName:r.displayName,url:r.url}];await T(e)&&(i(e),n({url:"",displayName:""}),j.default.success("Link added successfully"))},w=async()=>{if(!c)return;try{new URL(c.url)}catch{j.default.fromBackend("Please enter a valid URL");return}if(t.some(e=>e.id!==c.id&&e.displayName===c.displayName))return void j.default.fromBackend("A link with this display name already exists");let e=t.map(e=>e.id===c.id?c:e);await T(e)&&(i(e),o(null),j.default.success("Link updated successfully"))},C=()=>{o(null)},U=async e=>{let s=t.filter(s=>s.id!==e);await T(s)&&(i(s),j.default.success("Link deleted successfully"))},I=async()=>{await T(t)&&(f(!1),N([]),j.default.success("Link order saved successfully"))};return(0,s.jsxs)(y.Card,{className:"mb-6",children:[(0,s.jsxs)("div",{className:"flex items-center justify-between cursor-pointer",onClick:()=>u(!h),children:[(0,s.jsxs)("div",{className:"flex flex-col",children:[(0,s.jsx)(p.Title,{className:"mb-0",children:"Link Management"}),(0,s.jsx)("p",{className:"text-sm text-gray-500",children:"Manage the links that are displayed under 'Useful Links' on the public model hub."})]}),(0,s.jsx)("div",{className:"flex items-center",children:h?(0,s.jsx)(M.ChevronDownIcon,{className:"w-5 h-5 text-gray-500"}):(0,s.jsx)(B.ChevronRightIcon,{className:"w-5 h-5 text-gray-500"})})]}),h&&(0,s.jsxs)("div",{className:"mt-4",children:[(0,s.jsxs)("div",{className:"mb-6",children:[(0,s.jsx)(a.Text,{className:"text-sm font-medium text-gray-700 mb-2",children:"Add New Link"}),(0,s.jsxs)("div",{className:"grid grid-cols-3 gap-4",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{className:"block text-xs text-gray-500 mb-1",children:"Display Name"}),(0,s.jsx)("input",{type:"text",value:r.displayName,onChange:e=>n({...r,displayName:e.target.value}),placeholder:"Friendly name",className:"w-full px-3 py-2 border border-gray-300 rounded-md text-sm"})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{className:"block text-xs text-gray-500 mb-1",children:"URL"}),(0,s.jsx)("input",{type:"text",value:r.url,onChange:e=>n({...r,url:e.target.value}),placeholder:"https://example.com",className:"w-full px-3 py-2 border border-gray-300 rounded-md text-sm"})]}),(0,s.jsx)("div",{className:"flex items-end",children:(0,s.jsxs)("button",{onClick:_,disabled:!r.url||!r.displayName,className:`flex items-center px-4 py-2 rounded-md text-sm ${!r.url||!r.displayName?"bg-gray-300 text-gray-500 cursor-not-allowed":"bg-green-600 text-white hover:bg-green-700"}`,children:[(0,s.jsx)(A.PlusCircleIcon,{className:"w-4 h-4 mr-1"}),"Add Link"]})})]})]}),(0,s.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,s.jsx)(a.Text,{className:"text-sm font-medium text-gray-700",children:"Manage Existing Links"}),(0,s.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,s.jsxs)(H.default,{href:`${(0,g.getProxyBaseUrl)()}/ui/model_hub_table`,target:"_blank",rel:"noopener noreferrer",className:"text-xs bg-blue-50 text-blue-600 px-3 py-1.5 rounded hover:bg-blue-100 flex items-center",title:"Open Public Model Hub",children:["Public Model Hub",(0,s.jsx)(z.ExternalLinkIcon,{className:"w-4 h-4 ml-1"})]}),b?(0,s.jsxs)("div",{className:"flex space-x-2",children:[(0,s.jsx)("button",{onClick:I,className:"text-xs bg-green-600 text-white px-3 py-1.5 rounded hover:bg-green-700",children:"Save Order"}),(0,s.jsx)("button",{onClick:()=>{i([...v]),f(!1),N([])},className:"text-xs bg-gray-50 text-gray-600 px-3 py-1.5 rounded hover:bg-gray-100",children:"Cancel"})]}):(0,s.jsx)("button",{onClick:()=>{c&&o(null),N([...t]),f(!0)},className:"text-xs bg-purple-50 text-purple-600 px-3 py-1.5 rounded hover:bg-purple-100 flex items-center",children:"Rearrange Order"})]})]}),(0,s.jsx)("div",{className:"rounded-lg custom-border relative",children:(0,s.jsx)("div",{className:"overflow-x-auto",children:(0,s.jsxs)(F.Table,{className:"[&_td]:py-0.5 [&_th]:py-1",children:[(0,s.jsx)($.TableHead,{children:(0,s.jsxs)(E.TableRow,{children:[(0,s.jsx)(D.TableHeaderCell,{className:"py-1 h-8",children:"Display Name"}),(0,s.jsx)(D.TableHeaderCell,{className:"py-1 h-8",children:"URL"}),(0,s.jsx)(D.TableHeaderCell,{className:"py-1 h-8",children:"Actions"})]})}),(0,s.jsxs)(L.TableBody,{children:[t.map((e,l)=>(0,s.jsx)(E.TableRow,{className:"h-8",children:c&&c.id===e.id?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(O.TableCell,{className:"py-0.5",children:(0,s.jsx)("input",{type:"text",value:c.displayName,onChange:e=>o({...c,displayName:e.target.value}),className:"w-full px-2 py-1 border border-gray-300 rounded-md text-sm"})}),(0,s.jsx)(O.TableCell,{className:"py-0.5",children:(0,s.jsx)("input",{type:"text",value:c.url,onChange:e=>o({...c,url:e.target.value}),className:"w-full px-2 py-1 border border-gray-300 rounded-md text-sm"})}),(0,s.jsx)(O.TableCell,{className:"py-0.5 whitespace-nowrap",children:(0,s.jsxs)("div",{className:"flex space-x-2",children:[(0,s.jsx)("button",{onClick:w,className:"text-xs bg-blue-50 text-blue-600 px-2 py-1 rounded hover:bg-blue-100",children:"Save"}),(0,s.jsx)("button",{onClick:C,className:"text-xs bg-gray-50 text-gray-600 px-2 py-1 rounded hover:bg-gray-100",children:"Cancel"})]})})]}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(O.TableCell,{className:"py-0.5 text-sm text-gray-900",children:e.displayName}),(0,s.jsx)(O.TableCell,{className:"py-0.5 text-sm text-gray-500",children:e.url}),(0,s.jsx)(O.TableCell,{className:"py-0.5 whitespace-nowrap",children:b?(0,s.jsxs)("div",{className:"flex space-x-2",children:[(0,s.jsx)(S.default,{variant:"Up",onClick:()=>(e=>{if(0===e)return;let s=[...t];[s[e-1],s[e]]=[s[e],s[e-1]],i(s)})(l),tooltipText:"Move up",disabled:0===l,disabledTooltipText:"Already at the top",dataTestId:`move-up-${e.id}`}),(0,s.jsx)(S.default,{variant:"Down",onClick:()=>(e=>{if(e===t.length-1)return;let s=[...t];[s[e],s[e+1]]=[s[e+1],s[e]],i(s)})(l),tooltipText:"Move down",disabled:l===t.length-1,disabledTooltipText:"Already at the bottom",dataTestId:`move-down-${e.id}`})]}):(0,s.jsxs)("div",{className:"flex space-x-2",children:[(0,s.jsx)(S.default,{variant:"Open",onClick:()=>{var s;return s=e.url,void window.open(s,"_blank")},tooltipText:"Open link",dataTestId:`open-link-${e.id}`}),(0,s.jsx)(S.default,{variant:"Edit",onClick:()=>{o({...e})},tooltipText:"Edit link",dataTestId:`edit-link-${e.id}`}),(0,s.jsx)(S.default,{variant:"Delete",onClick:()=>U(e.id),tooltipText:"Delete link",dataTestId:`delete-link-${e.id}`})]})})]})},e.id)),0===t.length&&(0,s.jsx)(E.TableRow,{children:(0,s.jsx)(O.TableCell,{colSpan:3,className:"py-0.5 text-sm text-gray-500 text-center",children:"No links added yet. Add a new link above."})})]})]})})})]})]})};var I=e.i(737033);let{Step:K}=m.Steps,R=({visible:e,onClose:l,accessToken:i,skillsList:r,onSuccess:n})=>{let[c,b]=(0,d.useState)(0),[f,v]=(0,d.useState)(new Set),[N,y]=(0,d.useState)(!1),[k]=x.Form.useForm(),T=()=>{b(0),v(new Set),k.resetFields(),l()};(0,d.useEffect)(()=>{e&&r.length>0&&v(new Set(r.filter(e=>e.enabled).map(e=>e.name)))},[e,r]);let _=async()=>{if(0===f.size)return void j.default.fromBackend("Please select at least one skill");y(!0);try{await Promise.all(r.map(e=>{let s=f.has(e.name);return s&&!e.enabled?(0,g.enableClaudeCodePlugin)(i,e.name):!s&&e.enabled?(0,g.disableClaudeCodePlugin)(i,e.name):Promise.resolve()})),j.default.success(`Skill Hub updated — ${f.size} skill(s) published`),T(),n()}catch(e){console.error("Error publishing skills:",e),j.default.fromBackend("Failed to update skills. Please try again.")}finally{y(!1)}},w=r.length>0&&r.every(e=>f.has(e.name)),C=f.size>0&&!w;return(0,s.jsx)(o.Modal,{title:"Publish to Skill Hub",open:e,onCancel:T,footer:null,width:700,maskClosable:!1,children:(0,s.jsxs)(x.Form,{form:k,layout:"vertical",children:[(0,s.jsxs)(m.Steps,{current:c,className:"mb-6",children:[(0,s.jsx)(K,{title:"Select Skills"}),(0,s.jsx)(K,{title:"Confirm"})]}),0===c?(0,s.jsxs)("div",{className:"space-y-4",children:[(0,s.jsxs)("div",{className:"flex items-center justify-between",children:[(0,s.jsx)(p.Title,{children:"Select Skills to Publish"}),(0,s.jsxs)(u.Checkbox,{checked:w,indeterminate:C,onChange:e=>{e.target.checked?v(new Set(r.map(e=>e.name))):v(new Set)},disabled:0===r.length,children:["Select All (",r.length,")"]})]}),(0,s.jsx)(a.Text,{className:"text-sm text-gray-600",children:"Selected skills will be visible to all users in the Skill Hub. Deselected skills will be unpublished."}),(0,s.jsx)("div",{className:"max-h-96 overflow-y-auto border rounded-lg p-4",children:(0,s.jsx)("div",{className:"space-y-3",children:0===r.length?(0,s.jsx)("div",{className:"text-center py-8 text-gray-500",children:(0,s.jsx)(a.Text,{children:"No skills registered yet."})}):r.map(e=>(0,s.jsxs)("div",{className:"flex items-center space-x-3 p-3 border rounded-lg hover:bg-gray-50",children:[(0,s.jsx)(u.Checkbox,{checked:f.has(e.name),onChange:s=>{var l,t;let a;return l=e.name,t=s.target.checked,a=new Set(f),void(t?a.add(l):a.delete(l),v(a))}}),(0,s.jsxs)("div",{className:"flex-1",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)(a.Text,{className:"font-medium font-mono text-sm",children:e.name}),e.enabled&&(0,s.jsx)(t.Badge,{color:"green",size:"xs",children:"Public"})]}),e.description&&(0,s.jsx)(a.Text,{className:"text-xs text-gray-500 truncate max-w-sm",children:e.description})]}),e.domain&&(0,s.jsx)(t.Badge,{color:"blue",size:"xs",children:e.domain})]},e.name))})}),f.size>0&&(0,s.jsx)("div",{className:"bg-blue-50 border border-blue-200 rounded-lg p-3",children:(0,s.jsxs)(a.Text,{className:"text-sm text-blue-800",children:[(0,s.jsx)("strong",{children:f.size})," skill",1!==f.size?"s":""," will be published"]})})]}):(0,s.jsxs)("div",{className:"space-y-4",children:[(0,s.jsx)(p.Title,{children:"Confirm Publish to Skill Hub"}),(0,s.jsx)("div",{className:"bg-yellow-50 border border-yellow-200 rounded-lg p-4",children:(0,s.jsxs)(a.Text,{className:"text-sm text-yellow-800",children:[(0,s.jsx)("strong",{children:"Note:"})," Published skills will be visible to all users in the Skill Hub tab. Skills not in the list below will be unpublished."]})}),(0,s.jsxs)("div",{className:"space-y-3",children:[(0,s.jsx)(a.Text,{className:"font-medium",children:"Skills to be published:"}),(0,s.jsx)("div",{className:"max-h-48 overflow-y-auto border rounded-lg p-3",children:(0,s.jsx)("div",{className:"space-y-2",children:Array.from(f).map(e=>{let l=r.find(s=>s.name===e);return(0,s.jsxs)("div",{className:"flex items-center justify-between p-2 bg-gray-50 rounded",children:[(0,s.jsx)(a.Text,{className:"font-mono text-sm",children:e}),l?.domain&&(0,s.jsx)(t.Badge,{color:"blue",size:"xs",children:l.domain})]},e)})})})]}),(0,s.jsx)("div",{className:"bg-blue-50 border border-blue-200 rounded-lg p-3",children:(0,s.jsxs)(a.Text,{className:"text-sm text-blue-800",children:["Total: ",(0,s.jsx)("strong",{children:f.size})," skill",1!==f.size?"s":""," will be published"]})})]}),(0,s.jsxs)("div",{className:"flex justify-between mt-6",children:[(0,s.jsx)(h.Button,{onClick:0===c?T:()=>b(0),children:0===c?"Cancel":"Previous"}),(0,s.jsxs)("div",{className:"flex space-x-2",children:[0===c&&(0,s.jsx)(h.Button,{onClick:()=>{0===f.size?j.default.fromBackend("Please select at least one skill"):b(1)},disabled:0===f.size,children:"Next"}),1===c&&(0,s.jsx)(h.Button,{onClick:_,loading:N,children:"Publish to Hub"})]})]})]})})};var V=e.i(798496),W=e.i(976883),q=e.i(197647),G=e.i(653824),Y=e.i(881073),J=e.i(404206),Q=e.i(723731),X=e.i(174886),Z=e.i(618566),ee=e.i(650056),es=e.i(292639),el=e.i(161281),et=e.i(268004);e.s(["default",0,({accessToken:e,publicPage:x,premiumUser:m,userRole:h})=>{let u,b,v=(0,P.isProxyAdminRole)(h||""),[T,S]=(0,d.useState)(!1),[M,B]=(0,d.useState)(null),[z,A]=(0,d.useState)(!0),[F,L]=(0,d.useState)(!1),[O,$]=(0,d.useState)(!1),[D,E]=(0,d.useState)(null),[H,K]=(0,d.useState)([]),[ea,ei]=(0,d.useState)(!1),[er,en]=(0,d.useState)(null),[ec,ed]=(0,d.useState)(!1),[eo,ex]=(0,d.useState)(!0),[em,eh]=(0,d.useState)(null),[eu,ep]=(0,d.useState)(!1),[eg,ej]=(0,d.useState)(null),[eb,ef]=(0,d.useState)(!0),[ev,eN]=(0,d.useState)(null),[ey,ek]=(0,d.useState)(!1),[eT,e_]=(0,d.useState)(!1),[ew,eC]=(0,d.useState)([]),[eS,eP]=(0,d.useState)(!1),[eM,eB]=(0,d.useState)(!1),ez=(0,Z.useRouter)(),{data:eA,isLoading:eF}=(0,es.useUISettings)();(0,d.useEffect)(()=>{if(!eF&&x&&!0===eA?.values?.require_auth_for_public_ai_hub){let e=(0,et.getCookie)("token");if(!(0,el.checkTokenValidity)(e))return void ez.replace(`${(0,g.getProxyBaseUrl)()}/ui/login`)}},[eF,x,eA,ez]),(0,d.useEffect)(()=>{let s=async e=>{try{A(!0);let s=await (0,g.modelHubCall)(e);console.log("ModelHubData:",s),B(s.data),(0,g.getConfigFieldSetting)(e,"enable_public_model_hub").then(e=>{console.log(`data: ${JSON.stringify(e)}`),!0==e.field_value&&S(!0)}).catch(e=>{})}catch(e){console.error("There was an error fetching the model data",e)}finally{A(!1)}},l=async()=>{try{A(!0),await (0,g.getUiConfig)();let e=await (0,g.modelHubPublicModelsCall)();console.log("ModelHubData:",e),console.log("First model structure:",e[0]),console.log("Model has model_group?",e[0]?.model_group),console.log("Model has providers?",e[0]?.providers),B(e),S(!0)}catch(e){console.error("There was an error fetching the public model data",e)}finally{A(!1)}};e?s(e):x&&l()},[e,x]),(0,d.useEffect)(()=>{let s=async()=>{if(e)try{ex(!0);let s=await (0,g.getAgentsList)(e);console.log("AgentHubData:",s);let l=s.agents.map(e=>({agent_id:e.agent_id,...e.agent_card_params,is_public:e.litellm_params.is_public}));en(l)}catch(e){console.error("There was an error fetching the agent data",e)}finally{ex(!1)}};x||s()},[x,e]),(0,d.useEffect)(()=>{let s=async()=>{if(e)try{ef(!0);let s=await (0,g.fetchMCPServers)(e);console.log("MCPHubData:",s),ej(s)}catch(e){console.error("There was an error fetching the MCP server data",e)}finally{ef(!1)}};x||s()},[x,e]),(0,d.useEffect)(()=>{(async()=>{if(e)try{eP(!0);let s=!0===x,l=await (0,g.getClaudeCodePluginsList)(e,s);eC(l.plugins)}catch(e){console.error("Error fetching skill hub data",e)}finally{eP(!1)}})()},[e,x]);let eL=()=>{L(!1),$(!1),E(null),ep(!1),eh(null),ek(!1),eN(null)},eO=()=>{L(!1),$(!1),E(null),ep(!1),eh(null),ek(!1),eN(null)},e$=e=>{navigator.clipboard.writeText(e),j.default.success("Copied to clipboard!")},eD=e=>`$${(1e6*e).toFixed(2)}`,eE=(0,d.useCallback)(e=>{K(e)},[]);return(console.log("publicPage: ",x),console.log("publicPageAllowed: ",T),x&&T)?(0,s.jsx)(W.default,{accessToken:e}):(0,s.jsxs)("div",{className:"w-full mx-4 h-[75vh]",children:[!1==x?(0,s.jsxs)("div",{className:"w-full m-2 mt-2 p-8",children:[(0,s.jsxs)("div",{className:"flex justify-between items-center mb-6",children:[(0,s.jsxs)("div",{className:"flex flex-col items-start",children:[(0,s.jsx)(p.Title,{className:"text-center",children:"AI Hub"}),(0,P.isAdminRole)(h||"")?(0,s.jsx)("p",{className:"text-sm text-gray-600",children:"Make models, agents, and MCP servers public for developers to know what's available."}):(0,s.jsx)("p",{className:"text-sm text-gray-600",children:"A list of all public model names personally available to you."})]}),(0,s.jsxs)("div",{className:"flex items-center space-x-4",children:[(0,s.jsx)(a.Text,{children:"Model Hub URL:"}),(0,s.jsxs)("div",{className:"flex items-center bg-gray-200 px-2 py-1 rounded",children:[(0,s.jsx)(a.Text,{className:"mr-2",children:`${(0,g.getProxyBaseUrl)()}/ui/model_hub_table`}),(0,s.jsx)("button",{onClick:()=>e$(`${(0,g.getProxyBaseUrl)()}/ui/model_hub_table`),className:"p-1 hover:bg-gray-300 rounded transition-colors",title:"Copy URL",children:(0,s.jsx)(X.Copy,{size:16,className:"text-gray-600"})})]})]})]}),v&&(0,s.jsx)("div",{className:"mt-8 mb-2",children:(0,s.jsx)(U,{accessToken:e,userRole:h})}),(0,s.jsxs)(G.TabGroup,{children:[(0,s.jsxs)(Y.TabList,{className:"mb-4",children:[(0,s.jsx)(q.Tab,{children:"Model Hub"}),(0,s.jsx)(q.Tab,{children:"Agent Hub"}),(0,s.jsx)(q.Tab,{children:"MCP Hub"}),(0,s.jsx)(q.Tab,{children:"Skill Hub"})]}),(0,s.jsxs)(Q.TabPanels,{children:[(0,s.jsxs)(J.TabPanel,{children:[(0,s.jsxs)(y.Card,{children:[!1==x&&v&&(0,s.jsx)("div",{className:"flex justify-end mb-4",children:(0,s.jsx)(l.Button,{onClick:()=>void(e&&ei(!0)),children:"Select Models to Make Public"})}),(0,s.jsx)(k,{modelHubData:M||[],onFilteredDataChange:eE}),(0,s.jsx)(V.ModelDataTable,{columns:((e,d,o=!1)=>{let x=[{header:"Public Model Name",accessorKey:"model_group",enableSorting:!0,sortingFn:"alphanumeric",cell:({row:e})=>{let l=e.original;return(0,s.jsxs)("div",{className:"space-y-1",children:[(0,s.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,s.jsx)(a.Text,{className:"font-medium text-sm",children:l.model_group}),(0,s.jsx)(i.Tooltip,{title:"Copy model name",children:(0,s.jsx)(n.CopyOutlined,{onClick:()=>d(l.model_group),className:"cursor-pointer text-gray-500 hover:text-blue-500 text-xs"})})]}),(0,s.jsx)("div",{className:"md:hidden",children:(0,s.jsx)(a.Text,{className:"text-xs text-gray-600",children:l.providers.join(", ")})})]})}},{header:"Provider",accessorKey:"providers",enableSorting:!0,sortingFn:(e,s)=>{let l=e.original.providers.join(", "),t=s.original.providers.join(", ");return l.localeCompare(t)},cell:({row:e})=>{let l=e.original;return(0,s.jsxs)("div",{className:"flex flex-wrap gap-1",children:[l.providers.slice(0,2).map(e=>(0,s.jsx)(r.Tag,{color:"blue",className:"text-xs",children:e},e)),l.providers.length>2&&(0,s.jsxs)(a.Text,{className:"text-xs text-gray-500",children:["+",l.providers.length-2]})]})},meta:{className:"hidden md:table-cell"}},{header:"Mode",accessorKey:"mode",enableSorting:!0,sortingFn:"alphanumeric",cell:({row:e})=>{let l=e.original;return l.mode?(0,s.jsx)(t.Badge,{color:"green",size:"sm",children:l.mode}):(0,s.jsx)(a.Text,{className:"text-gray-500",children:"-"})},meta:{className:"hidden lg:table-cell"}},{header:"Tokens",accessorKey:"max_input_tokens",enableSorting:!0,sortingFn:(e,s)=>(e.original.max_input_tokens||0)+(e.original.max_output_tokens||0)-((s.original.max_input_tokens||0)+(s.original.max_output_tokens||0)),cell:({row:e})=>{let l=e.original;return(0,s.jsx)("div",{className:"space-y-1",children:(0,s.jsxs)(a.Text,{className:"text-xs",children:[l.max_input_tokens?C(l.max_input_tokens):"-"," /"," ",l.max_output_tokens?C(l.max_output_tokens):"-"]})})},meta:{className:"hidden lg:table-cell"}},{header:"Cost/1M",accessorKey:"input_cost_per_token",enableSorting:!0,sortingFn:(e,s)=>(e.original.input_cost_per_token||0)+(e.original.output_cost_per_token||0)-((s.original.input_cost_per_token||0)+(s.original.output_cost_per_token||0)),cell:({row:e})=>{let l=e.original;return(0,s.jsxs)("div",{className:"space-y-1",children:[(0,s.jsx)(a.Text,{className:"text-xs",children:l.input_cost_per_token?w(l.input_cost_per_token):"-"}),(0,s.jsx)(a.Text,{className:"text-xs text-gray-500",children:l.output_cost_per_token?w(l.output_cost_per_token):"-"})]})}},{header:"Features",accessorKey:"capabilities",enableSorting:!1,cell:({row:e})=>{let l=Object.entries(e.original).filter(([e,s])=>e.startsWith("supports_")&&!0===s).map(([e])=>e),i=["green","blue","purple","orange","red","yellow"];return(0,s.jsx)("div",{className:"flex flex-wrap gap-1",children:0===l.length?(0,s.jsx)(a.Text,{className:"text-gray-500 text-xs",children:"-"}):l.map((e,l)=>(0,s.jsx)(t.Badge,{color:i[l%i.length],size:"xs",children:e.replace(/^supports_/,"").split("_").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ")},e))})}},{header:"Public",accessorKey:"is_public_model_group",enableSorting:!0,sortingFn:(e,s)=>(!0===e.original.is_public_model_group)-(!0===s.original.is_public_model_group),cell:({row:e})=>!0===e.original.is_public_model_group?(0,s.jsx)(t.Badge,{color:"green",size:"xs",children:"Yes"}):(0,s.jsx)(t.Badge,{color:"gray",size:"xs",children:"No"}),meta:{className:"hidden md:table-cell"}},{header:"Details",id:"details",enableSorting:!1,cell:({row:t})=>{let a=t.original;return(0,s.jsxs)(l.Button,{size:"xs",variant:"secondary",onClick:()=>e(a),icon:c.InfoCircleOutlined,children:[(0,s.jsx)("span",{className:"hidden lg:inline",children:"Details"}),(0,s.jsx)("span",{className:"lg:hidden",children:"Info"})]})}}];return o?x.filter(e=>!("accessorKey"in e)||"is_public_model_group"!==e.accessorKey):x})(e=>{E(e),L(!0)},e$,x),data:H,isLoading:z,defaultSorting:[{id:"model_group",desc:!1}]})]}),(0,s.jsx)("div",{className:"mt-4 text-center space-y-2",children:(0,s.jsxs)(a.Text,{className:"text-sm text-gray-600",children:["Showing ",H.length," of ",M?.length||0," models"]})})]}),(0,s.jsxs)(J.TabPanel,{children:[(0,s.jsxs)(y.Card,{children:[!1==x&&v&&(0,s.jsx)("div",{className:"flex justify-end mb-4",children:(0,s.jsx)(l.Button,{onClick:()=>void(e&&ed(!0)),children:"Select Agents to Make Public"})}),(0,s.jsx)(V.ModelDataTable,{columns:((e,d,o=!1)=>[{header:"Agent Name",accessorKey:"name",enableSorting:!0,sortingFn:"alphanumeric",cell:({row:e})=>{let l=e.original;return(0,s.jsxs)("div",{className:"space-y-1",children:[(0,s.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,s.jsx)(a.Text,{className:"font-medium text-sm",children:l.name}),(0,s.jsx)(i.Tooltip,{title:"Copy agent name",children:(0,s.jsx)(n.CopyOutlined,{onClick:()=>d(l.name),className:"cursor-pointer text-gray-500 hover:text-blue-500 text-xs"})})]}),(0,s.jsx)("div",{className:"md:hidden",children:(0,s.jsx)(a.Text,{className:"text-xs text-gray-600",children:l.description})})]})}},{header:"Description",accessorKey:"description",enableSorting:!0,sortingFn:"alphanumeric",cell:({row:e})=>{let l=e.original;return(0,s.jsx)(a.Text,{className:"text-xs line-clamp-2",children:l.description||"-"})},meta:{className:"hidden md:table-cell"}},{header:"Version",accessorKey:"version",enableSorting:!0,sortingFn:"alphanumeric",cell:({row:e})=>{let l=e.original;return(0,s.jsxs)(t.Badge,{color:"blue",size:"sm",children:["v",l.version]})},meta:{className:"hidden lg:table-cell"}},{header:"Protocol",accessorKey:"protocolVersion",enableSorting:!0,sortingFn:"alphanumeric",cell:({row:e})=>{let l=e.original;return(0,s.jsx)(a.Text,{className:"text-xs",children:l.protocolVersion||"-"})},meta:{className:"hidden lg:table-cell"}},{header:"Skills",accessorKey:"skills",enableSorting:!1,cell:({row:e})=>{let l=e.original.skills||[];return(0,s.jsxs)("div",{className:"space-y-1",children:[(0,s.jsxs)(a.Text,{className:"text-xs font-medium",children:[l.length," skill",1!==l.length?"s":""]}),l.length>0&&(0,s.jsxs)("div",{className:"flex flex-wrap gap-1",children:[l.slice(0,2).map(e=>(0,s.jsx)(r.Tag,{color:"purple",className:"text-xs",children:e.name},e.id)),l.length>2&&(0,s.jsxs)(a.Text,{className:"text-xs text-gray-500",children:["+",l.length-2]})]})]})}},{header:"Capabilities",accessorKey:"capabilities",enableSorting:!1,cell:({row:e})=>{let l=Object.entries(e.original.capabilities||{}).filter(([e,s])=>!0===s).map(([e])=>e);return(0,s.jsx)("div",{className:"flex flex-wrap gap-1",children:0===l.length?(0,s.jsx)(a.Text,{className:"text-gray-500 text-xs",children:"-"}):l.map(e=>(0,s.jsx)(t.Badge,{color:"green",size:"xs",children:e},e))})}},{header:"I/O Modes",accessorKey:"defaultInputModes",enableSorting:!1,cell:({row:e})=>{let l=e.original,t=l.defaultInputModes||[],i=l.defaultOutputModes||[];return(0,s.jsxs)("div",{className:"space-y-1",children:[(0,s.jsxs)(a.Text,{className:"text-xs",children:[(0,s.jsx)("span",{className:"font-medium",children:"In:"})," ",t.join(", ")||"-"]}),(0,s.jsxs)(a.Text,{className:"text-xs",children:[(0,s.jsx)("span",{className:"font-medium",children:"Out:"})," ",i.join(", ")||"-"]})]})},meta:{className:"hidden xl:table-cell"}},{header:"Public",accessorKey:"is_public",enableSorting:!0,sortingFn:(e,s)=>(!0===e.original.is_public)-(!0===s.original.is_public),cell:({row:e})=>!0===e.original.is_public?(0,s.jsx)(t.Badge,{color:"green",size:"xs",children:"Yes"}):(0,s.jsx)(t.Badge,{color:"gray",size:"xs",children:"No"}),meta:{className:"hidden md:table-cell"}},{header:"Details",id:"details",enableSorting:!1,cell:({row:t})=>{let a=t.original;return(0,s.jsxs)(l.Button,{size:"xs",variant:"secondary",onClick:()=>e(a),icon:c.InfoCircleOutlined,children:[(0,s.jsx)("span",{className:"hidden lg:inline",children:"Details"}),(0,s.jsx)("span",{className:"lg:hidden",children:"Info"})]})}}])(e=>{eh(e),ep(!0)},e$,x),data:er||[],isLoading:eo,defaultSorting:[{id:"name",desc:!1}]})]}),(0,s.jsx)("div",{className:"mt-4 text-center space-y-2",children:(0,s.jsxs)(a.Text,{className:"text-sm text-gray-600",children:["Showing ",er?.length||0," agent",er?.length!==1?"s":""]})})]}),(0,s.jsxs)(J.TabPanel,{children:[(0,s.jsxs)(y.Card,{children:[!1==x&&v&&(0,s.jsx)("div",{className:"flex justify-end mb-4",children:(0,s.jsx)(l.Button,{onClick:()=>void(e&&e_(!0)),children:"Select MCP Servers to Make Public"})}),(0,s.jsx)(V.ModelDataTable,{columns:((e,d,o=!1)=>[{header:"Server Name",accessorKey:"server_name",enableSorting:!0,sortingFn:"alphanumeric",cell:({row:e})=>{let l=e.original;return(0,s.jsxs)("div",{className:"space-y-1",children:[(0,s.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,s.jsx)(a.Text,{className:"font-medium text-sm",children:l.server_name}),(0,s.jsx)(i.Tooltip,{title:"Copy server name",children:(0,s.jsx)(n.CopyOutlined,{onClick:()=>d(l.server_name),className:"cursor-pointer text-gray-500 hover:text-blue-500 text-xs"})})]}),(0,s.jsx)("div",{className:"md:hidden",children:(0,s.jsx)(a.Text,{className:"text-xs text-gray-600",children:l.description||"-"})})]})}},{header:"Description",accessorKey:"description",enableSorting:!0,sortingFn:"alphanumeric",cell:({row:e})=>{let l=e.original;return(0,s.jsx)(a.Text,{className:"text-xs line-clamp-2",children:l.description||"-"})},meta:{className:"hidden md:table-cell"}},{header:"Transport",accessorKey:"transport",enableSorting:!0,sortingFn:"alphanumeric",cell:({row:e})=>{let l=e.original;return(0,s.jsx)(t.Badge,{color:"blue",size:"sm",children:l.transport})},meta:{className:"hidden md:table-cell"}},{header:"Auth Type",accessorKey:"auth_type",enableSorting:!0,sortingFn:"alphanumeric",cell:({row:e})=>{let l=e.original,a="none"===l.auth_type?"gray":"green";return(0,s.jsx)(t.Badge,{color:a,size:"sm",children:l.auth_type})},meta:{className:"hidden md:table-cell"}},{header:"Status",accessorKey:"status",enableSorting:!0,sortingFn:"alphanumeric",cell:({row:e})=>{let l=e.original,a={active:"green",inactive:"red",unknown:"gray",healthy:"green",unhealthy:"red"}[l.status]||"gray";return(0,s.jsx)(t.Badge,{color:a,size:"sm",children:l.status||"unknown"})}},{header:"Tools",accessorKey:"allowed_tools",enableSorting:!1,cell:({row:e})=>{let l=e.original.allowed_tools||[];return(0,s.jsxs)("div",{className:"space-y-1",children:[(0,s.jsx)(a.Text,{className:"text-xs font-medium",children:l.length>0?`${l.length} tool${1!==l.length?"s":""}`:"All tools"}),l.length>0&&(0,s.jsxs)("div",{className:"flex flex-wrap gap-1",children:[l.slice(0,2).map((e,l)=>(0,s.jsx)(r.Tag,{color:"purple",className:"text-xs",children:e},l)),l.length>2&&(0,s.jsxs)(a.Text,{className:"text-xs text-gray-500",children:["+",l.length-2]})]})]})},meta:{className:"hidden lg:table-cell"}},{header:"Created By",accessorKey:"created_by",enableSorting:!0,sortingFn:"alphanumeric",cell:({row:e})=>{let l=e.original;return(0,s.jsx)(a.Text,{className:"text-xs",children:l.created_by||"-"})},meta:{className:"hidden xl:table-cell"}},{header:"Public",accessorKey:"mcp_info.is_public",enableSorting:!0,sortingFn:(e,s)=>(e.original.mcp_info?.is_public===!0)-(s.original.mcp_info?.is_public===!0),cell:({row:e})=>{let l=e.original;return l.mcp_info?.is_public===!0?(0,s.jsx)(t.Badge,{color:"green",size:"xs",children:"Yes"}):(0,s.jsx)(t.Badge,{color:"gray",size:"xs",children:"No"})},meta:{className:"hidden md:table-cell"}},{header:"Details",id:"details",enableSorting:!1,cell:({row:t})=>{let a=t.original;return(0,s.jsxs)(l.Button,{size:"xs",variant:"secondary",onClick:()=>e(a),icon:c.InfoCircleOutlined,children:[(0,s.jsx)("span",{className:"hidden lg:inline",children:"Details"}),(0,s.jsx)("span",{className:"lg:hidden",children:"Info"})]})}}])(e=>{eN(e),ek(!0)},e$,x),data:eg||[],isLoading:eb,defaultSorting:[{id:"server_name",desc:!1}]})]}),(0,s.jsx)("div",{className:"mt-4 text-center space-y-2",children:(0,s.jsxs)(a.Text,{className:"text-sm text-gray-600",children:["Showing ",eg?.length||0," MCP server",eg?.length!==1?"s":""]})})]}),(0,s.jsxs)(J.TabPanel,{children:[!1==x&&v&&(0,s.jsx)("div",{className:"flex justify-end mb-4",children:(0,s.jsx)(l.Button,{onClick:()=>eB(!0),children:"Select Skills to Make Public"})}),(0,s.jsx)(I.default,{skills:ew,isLoading:eS,isAdmin:v,accessToken:e,publicPage:x,onPublishSuccess:async()=>{eC((await (0,g.getClaudeCodePluginsList)(e||"",x)).plugins)}})]})]})]})]}):(0,s.jsxs)(y.Card,{className:"mx-auto max-w-xl mt-10",children:[(0,s.jsx)(a.Text,{className:"text-xl text-center mb-2 text-black",children:"Public Model Hub not enabled."}),(0,s.jsx)("p",{className:"text-base text-center text-slate-800",children:"Ask your proxy admin to enable this on their Admin UI."})]}),(0,s.jsx)(o.Modal,{title:"Public Model Hub",width:600,open:O,footer:null,onOk:eL,onCancel:eO,children:(0,s.jsxs)("div",{className:"pt-5 pb-5",children:[(0,s.jsxs)("div",{className:"flex justify-between mb-4",children:[(0,s.jsx)(a.Text,{className:"text-base mr-2",children:"Shareable Link:"}),(0,s.jsx)(a.Text,{className:"max-w-sm ml-2 bg-gray-200 pr-2 pl-2 pt-1 pb-1 text-center rounded",children:`${(0,g.getProxyBaseUrl)()}/ui/model_hub_table`})]}),(0,s.jsx)("div",{className:"flex justify-end",children:(0,s.jsx)(l.Button,{onClick:()=>{ez.replace(`/model_hub_table?key=${e}`)},children:"See Page"})})]})}),(0,s.jsx)(o.Modal,{title:D?.model_group||"Model Details",width:1e3,open:F,footer:null,onOk:eL,onCancel:eO,children:D&&(0,s.jsxs)("div",{className:"space-y-6",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"text-lg font-semibold mb-4",children:"Model Overview"}),(0,s.jsxs)("div",{className:"grid grid-cols-2 gap-4 mb-4",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"font-medium",children:"Model Group:"}),(0,s.jsx)(a.Text,{children:D.model_group})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"font-medium",children:"Mode:"}),(0,s.jsx)(a.Text,{children:D.mode||"Not specified"})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"font-medium",children:"Providers:"}),(0,s.jsx)("div",{className:"flex flex-wrap gap-1 mt-1",children:D.providers.map(e=>(0,s.jsx)(t.Badge,{color:"blue",children:e},e))})]})]})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"text-lg font-semibold mb-4",children:"Token & Cost Information"}),(0,s.jsxs)("div",{className:"grid grid-cols-2 gap-4",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"font-medium",children:"Max Input Tokens:"}),(0,s.jsx)(a.Text,{children:D.max_input_tokens?.toLocaleString()||"Not specified"})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"font-medium",children:"Max Output Tokens:"}),(0,s.jsx)(a.Text,{children:D.max_output_tokens?.toLocaleString()||"Not specified"})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"font-medium",children:"Input Cost per 1M Tokens:"}),(0,s.jsx)(a.Text,{children:D.input_cost_per_token?eD(D.input_cost_per_token):"Not specified"})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"font-medium",children:"Output Cost per 1M Tokens:"}),(0,s.jsx)(a.Text,{children:D.output_cost_per_token?eD(D.output_cost_per_token):"Not specified"})]})]})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"text-lg font-semibold mb-4",children:"Capabilities"}),(0,s.jsx)("div",{className:"flex flex-wrap gap-2",children:(u=Object.entries(D).filter(([e,s])=>e.startsWith("supports_")&&!0===s).map(([e])=>e),b=["green","blue","purple","orange","red","yellow"],0===u.length?(0,s.jsx)(a.Text,{className:"text-gray-500",children:"No special capabilities listed"}):u.map((e,l)=>(0,s.jsx)(t.Badge,{color:b[l%b.length],children:e.replace(/^supports_/,"").split("_").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ")},e)))})]}),(D.tpm||D.rpm)&&(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"text-lg font-semibold mb-4",children:"Rate Limits"}),(0,s.jsxs)("div",{className:"grid grid-cols-2 gap-4",children:[D.tpm&&(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"font-medium",children:"Tokens per Minute:"}),(0,s.jsx)(a.Text,{children:D.tpm.toLocaleString()})]}),D.rpm&&(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"font-medium",children:"Requests per Minute:"}),(0,s.jsx)(a.Text,{children:D.rpm.toLocaleString()})]})]})]}),D.supported_openai_params&&(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"text-lg font-semibold mb-4",children:"Supported OpenAI Parameters"}),(0,s.jsx)("div",{className:"flex flex-wrap gap-2",children:D.supported_openai_params.map(e=>(0,s.jsx)(t.Badge,{color:"green",children:e},e))})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"text-lg font-semibold mb-4",children:"Usage Example"}),(0,s.jsx)(ee.Prism,{language:"python",className:"text-sm",children:`import openai + +client = openai.OpenAI( + api_key="your_api_key", + base_url="${(0,g.getProxyBaseUrl)()}" # Your LiteLLM Proxy URL +) + +response = client.chat.completions.create( + model="${D.model_group}", + messages=[ + { + "role": "user", + "content": "Hello, how are you?" + } + ] +) + +print(response.choices[0].message.content)`})]})]})}),(0,s.jsx)(o.Modal,{title:em?.name||"Agent Details",width:1e3,open:eu,footer:null,onOk:eL,onCancel:eO,children:em&&(0,s.jsxs)("div",{className:"space-y-6",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"text-lg font-semibold mb-4",children:"Agent Overview"}),(0,s.jsxs)("div",{className:"grid grid-cols-2 gap-4 mb-4",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"font-medium",children:"Name:"}),(0,s.jsx)(a.Text,{children:em.name})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"font-medium",children:"Version:"}),(0,s.jsxs)(t.Badge,{color:"blue",children:["v",em.version]})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"font-medium",children:"Protocol Version:"}),(0,s.jsx)(a.Text,{children:em.protocolVersion})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"font-medium",children:"URL:"}),(0,s.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,s.jsx)(a.Text,{className:"truncate",children:em.url}),(0,s.jsx)(n.CopyOutlined,{onClick:()=>e$(em.url),className:"cursor-pointer text-gray-500 hover:text-blue-500"})]})]})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"font-medium",children:"Description:"}),(0,s.jsx)(a.Text,{className:"mt-1",children:em.description})]})]}),em.capabilities&&Object.keys(em.capabilities).length>0&&(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"text-lg font-semibold mb-4",children:"Capabilities"}),(0,s.jsx)("div",{className:"flex flex-wrap gap-2",children:Object.entries(em.capabilities).filter(([e,s])=>!0===s).map(([e])=>(0,s.jsx)(t.Badge,{color:"green",children:e},e))})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"text-lg font-semibold mb-4",children:"Input/Output Modes"}),(0,s.jsxs)("div",{className:"grid grid-cols-2 gap-4",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"font-medium",children:"Input Modes:"}),(0,s.jsx)("div",{className:"flex flex-wrap gap-1 mt-1",children:em.defaultInputModes?.map(e=>(0,s.jsx)(t.Badge,{color:"blue",children:e},e))||(0,s.jsx)(a.Text,{children:"Not specified"})})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"font-medium",children:"Output Modes:"}),(0,s.jsx)("div",{className:"flex flex-wrap gap-1 mt-1",children:em.defaultOutputModes?.map(e=>(0,s.jsx)(t.Badge,{color:"purple",children:e},e))||(0,s.jsx)(a.Text,{children:"Not specified"})})]})]})]}),em.skills&&em.skills.length>0&&(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"text-lg font-semibold mb-4",children:"Skills"}),(0,s.jsx)("div",{className:"space-y-4",children:em.skills.map(e=>(0,s.jsxs)("div",{className:"border border-gray-200 rounded p-4",children:[(0,s.jsxs)("div",{className:"flex justify-between items-start mb-2",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"font-medium text-base",children:e.name}),(0,s.jsxs)(a.Text,{className:"text-xs text-gray-500",children:["ID: ",e.id]})]}),e.tags&&e.tags.length>0&&(0,s.jsx)("div",{className:"flex flex-wrap gap-1",children:e.tags.map(e=>(0,s.jsx)(t.Badge,{color:"purple",size:"xs",children:e},e))})]}),(0,s.jsx)(a.Text,{className:"text-sm mb-2",children:e.description}),e.examples&&e.examples.length>0&&(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"text-xs font-medium text-gray-700",children:"Examples:"}),(0,s.jsx)("div",{className:"flex flex-wrap gap-1 mt-1",children:e.examples.map((e,l)=>(0,s.jsx)(t.Badge,{color:"gray",size:"xs",children:e},l))})]})]},e.id))})]}),em.supportsAuthenticatedExtendedCard&&(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"text-lg font-semibold mb-4",children:"Additional Features"}),(0,s.jsx)(t.Badge,{color:"green",children:"Supports Authenticated Extended Card"})]})]})}),(0,s.jsx)(o.Modal,{title:ev?.server_name||"MCP Server Details",width:1e3,open:ey,footer:null,onOk:eL,onCancel:eO,children:ev&&(0,s.jsxs)("div",{className:"space-y-6",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"text-lg font-semibold mb-4",children:"Server Overview"}),(0,s.jsxs)("div",{className:"grid grid-cols-2 gap-4 mb-4",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"font-medium",children:"Server Name:"}),(0,s.jsx)(a.Text,{children:ev.server_name})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"font-medium",children:"Server ID:"}),(0,s.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,s.jsx)(a.Text,{className:"text-xs truncate",children:ev.server_id}),(0,s.jsx)(n.CopyOutlined,{onClick:()=>e$(ev.server_id),className:"cursor-pointer text-gray-500 hover:text-blue-500"})]})]}),ev.alias&&(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"font-medium",children:"Alias:"}),(0,s.jsx)(a.Text,{children:ev.alias})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"font-medium",children:"Transport:"}),(0,s.jsx)(t.Badge,{color:"blue",children:ev.transport})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"font-medium",children:"Auth Type:"}),(0,s.jsx)(t.Badge,{color:"none"===ev.auth_type?"gray":"green",children:ev.auth_type})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"font-medium",children:"Status:"}),(0,s.jsx)(t.Badge,{color:"active"===ev.status||"healthy"===ev.status?"green":"inactive"===ev.status||"unhealthy"===ev.status?"red":"gray",children:ev.status||"unknown"})]})]}),ev.description&&(0,s.jsxs)("div",{className:"mt-2",children:[(0,s.jsx)(a.Text,{className:"font-medium",children:"Description:"}),(0,s.jsx)(a.Text,{className:"mt-1",children:ev.description})]})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"text-lg font-semibold mb-4",children:"Connection Details"}),(0,s.jsx)("div",{className:"space-y-2",children:ev.command&&(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"font-medium",children:"Command:"}),(0,s.jsx)(a.Text,{className:"text-sm bg-gray-100 p-2 rounded mt-1 font-mono",children:ev.command})]})})]}),ev.allowed_tools&&ev.allowed_tools.length>0&&(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"text-lg font-semibold mb-4",children:"Allowed Tools"}),(0,s.jsx)("div",{className:"flex flex-wrap gap-2",children:ev.allowed_tools.map((e,l)=>(0,s.jsx)(t.Badge,{color:"purple",children:e},l))})]}),ev.teams&&ev.teams.length>0&&(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"text-lg font-semibold mb-4",children:"Teams"}),(0,s.jsx)("div",{className:"flex flex-wrap gap-2",children:ev.teams.map((e,l)=>(0,s.jsx)(t.Badge,{color:"blue",children:e},l))})]}),ev.mcp_access_groups&&ev.mcp_access_groups.length>0&&(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"text-lg font-semibold mb-4",children:"Access Groups"}),(0,s.jsx)("div",{className:"flex flex-wrap gap-2",children:ev.mcp_access_groups.map((e,l)=>(0,s.jsx)(t.Badge,{color:"green",children:e},l))})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"text-lg font-semibold mb-4",children:"Metadata"}),(0,s.jsxs)("div",{className:"grid grid-cols-2 gap-4",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"font-medium",children:"Created By:"}),(0,s.jsx)(a.Text,{children:ev.created_by})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"font-medium",children:"Updated By:"}),(0,s.jsx)(a.Text,{children:ev.updated_by})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"font-medium",children:"Created At:"}),(0,s.jsx)(a.Text,{className:"text-sm",children:new Date(ev.created_at).toLocaleString()})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"font-medium",children:"Updated At:"}),(0,s.jsx)(a.Text,{className:"text-sm",children:new Date(ev.updated_at).toLocaleString()})]}),ev.last_health_check&&(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"font-medium",children:"Last Health Check:"}),(0,s.jsx)(a.Text,{className:"text-sm",children:new Date(ev.last_health_check).toLocaleString()})]})]}),ev.health_check_error&&(0,s.jsxs)("div",{className:"mt-2 p-2 bg-red-50 rounded",children:[(0,s.jsx)(a.Text,{className:"font-medium text-red-700",children:"Health Check Error:"}),(0,s.jsx)(a.Text,{className:"text-sm text-red-600 mt-1",children:ev.health_check_error})]})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)(a.Text,{className:"text-lg font-semibold mb-4",children:"Usage Example"}),(0,s.jsx)(ee.Prism,{language:"python",className:"text-sm",children:`from fastmcp import Client +import asyncio + +# Standard MCP configuration +config = { + "mcpServers": { + "${ev.server_name}": { + "url": "${(0,g.getProxyBaseUrl)()}/${ev.server_name}/mcp", + "headers": { + "x-litellm-api-key": "Bearer sk-1234" + } + } + } +} + +# Create a client that connects to the server +client = Client(config) + +async def main(): + async with client: + # List available tools + tools = await client.list_tools() + print(f"Available tools: {[tool.name for tool in tools]}") + + # Call a tool + response = await client.call_tool( + name="tool_name", + arguments={"arg": "value"} + ) + print(f"Response: {response}") + +if __name__ == "__main__": + asyncio.run(main())`})]})]})}),(0,s.jsx)(_,{visible:ea,onClose:()=>ei(!1),accessToken:e||"",modelHubData:M||[],onSuccess:()=>{e&&(async()=>{try{let s=await (0,g.modelHubCall)(e);B(s.data)}catch(e){console.error("Error refreshing model data:",e)}})()}}),(0,s.jsx)(f,{visible:ec,onClose:()=>ed(!1),accessToken:e||"",agentHubData:er||[],onSuccess:()=>{e&&(async()=>{try{let s=(await (0,g.getAgentsList)(e)).agents.map(e=>({agent_id:e.agent_id,...e.agent_card_params,is_public:e.is_public}));en(s)}catch(e){console.error("Error refreshing agent data:",e)}})()}}),(0,s.jsx)(N,{visible:eT,onClose:()=>e_(!1),accessToken:e||"",mcpHubData:eg||[],onSuccess:()=>{e&&(async()=>{try{let s=await (0,g.fetchMCPServers)(e);ej(s)}catch(e){console.error("Error refreshing MCP server data:",e)}})()}}),(0,s.jsx)(R,{visible:eM,onClose:()=>eB(!1),accessToken:e||"",skillsList:ew,onSuccess:async()=>{eC((await (0,g.getClaudeCodePluginsList)(e||"",!0===x)).plugins)}})]})}],934879)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0q2og72gex34u.js b/litellm/proxy/_experimental/out/_next/static/chunks/0q2og72gex34u.js new file mode 100644 index 00000000000..d905a85b484 --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0q2og72gex34u.js @@ -0,0 +1 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,21548,e=>{"use strict";var t=e.i(616303);e.s(["Empty",()=>t.default])},608856,e=>{"use strict";e.i(247167);var t=e.i(271645),a=e.i(343794),n=e.i(209428),r=e.i(392221),l=e.i(951160),o=e.i(174428),i=t.createContext(null),s=t.createContext({}),d=e.i(211577),c=e.i(931067),u=e.i(361275),m=e.i(404948),p=e.i(244009),f=e.i(703923),y=e.i(611935),h=["prefixCls","className","containerRef"];let g=function(e){var n=e.prefixCls,r=e.className,l=e.containerRef,o=(0,f.default)(e,h),i=t.useContext(s).panel,d=(0,y.useComposeRef)(i,l);return t.createElement("div",(0,c.default)({className:(0,a.default)("".concat(n,"-content"),r),role:"dialog",ref:d},(0,p.default)(e,{aria:!0}),{"aria-modal":"true"},o))};var v=e.i(883110);function x(e){return"string"==typeof e&&String(Number(e))===e?((0,v.default)(!1,"Invalid value type of `width` or `height` which should be number type instead."),Number(e)):e}var b={width:0,height:0,overflow:"hidden",outline:"none",position:"absolute"},w=t.forwardRef(function(e,l){var o,s,f,y=e.prefixCls,h=e.open,v=e.placement,w=e.inline,k=e.push,j=e.forceRender,C=e.autoFocus,S=e.keyboard,O=e.classNames,$=e.rootClassName,E=e.rootStyle,N=e.zIndex,I=e.className,D=e.id,M=e.style,R=e.motion,_=e.width,z=e.height,F=e.children,T=e.mask,P=e.maskClosable,A=e.maskMotion,B=e.maskClassName,K=e.maskStyle,L=e.afterOpenChange,q=e.onClose,U=e.onMouseEnter,W=e.onMouseOver,H=e.onMouseLeave,V=e.onClick,J=e.onKeyDown,X=e.onKeyUp,Y=e.styles,Q=e.drawerRender,G=t.useRef(),Z=t.useRef(),ee=t.useRef();t.useImperativeHandle(l,function(){return G.current}),t.useEffect(function(){if(h&&C){var e;null==(e=G.current)||e.focus({preventScroll:!0})}},[h]);var et=t.useState(!1),ea=(0,r.default)(et,2),en=ea[0],er=ea[1],el=t.useContext(i),eo=null!=(o=null!=(s=null==(f="boolean"==typeof k?k?{}:{distance:0}:k||{})?void 0:f.distance)?s:null==el?void 0:el.pushDistance)?o:180,ei=t.useMemo(function(){return{pushDistance:eo,push:function(){er(!0)},pull:function(){er(!1)}}},[eo]);t.useEffect(function(){var e,t;h?null==el||null==(e=el.push)||e.call(el):null==el||null==(t=el.pull)||t.call(el)},[h]),t.useEffect(function(){return function(){var e;null==el||null==(e=el.pull)||e.call(el)}},[]);var es=t.createElement(u.default,(0,c.default)({key:"mask"},A,{visible:T&&h}),function(e,r){var l=e.className,o=e.style;return t.createElement("div",{className:(0,a.default)("".concat(y,"-mask"),l,null==O?void 0:O.mask,B),style:(0,n.default)((0,n.default)((0,n.default)({},o),K),null==Y?void 0:Y.mask),onClick:P&&h?q:void 0,ref:r})}),ed="function"==typeof R?R(v):R,ec={};if(en&&eo)switch(v){case"top":ec.transform="translateY(".concat(eo,"px)");break;case"bottom":ec.transform="translateY(".concat(-eo,"px)");break;case"left":ec.transform="translateX(".concat(eo,"px)");break;default:ec.transform="translateX(".concat(-eo,"px)")}"left"===v||"right"===v?ec.width=x(_):ec.height=x(z);var eu={onMouseEnter:U,onMouseOver:W,onMouseLeave:H,onClick:V,onKeyDown:J,onKeyUp:X},em=t.createElement(u.default,(0,c.default)({key:"panel"},ed,{visible:h,forceRender:j,onVisibleChanged:function(e){null==L||L(e)},removeOnLeave:!1,leavedClassName:"".concat(y,"-content-wrapper-hidden")}),function(r,l){var o=r.className,i=r.style,s=t.createElement(g,(0,c.default)({id:D,containerRef:l,prefixCls:y,className:(0,a.default)(I,null==O?void 0:O.content),style:(0,n.default)((0,n.default)({},M),null==Y?void 0:Y.content)},(0,p.default)(e,{aria:!0}),eu),F);return t.createElement("div",(0,c.default)({className:(0,a.default)("".concat(y,"-content-wrapper"),null==O?void 0:O.wrapper,o),style:(0,n.default)((0,n.default)((0,n.default)({},ec),i),null==Y?void 0:Y.wrapper)},(0,p.default)(e,{data:!0})),Q?Q(s):s)}),ep=(0,n.default)({},E);return N&&(ep.zIndex=N),t.createElement(i.Provider,{value:ei},t.createElement("div",{className:(0,a.default)(y,"".concat(y,"-").concat(v),$,(0,d.default)((0,d.default)({},"".concat(y,"-open"),h),"".concat(y,"-inline"),w)),style:ep,tabIndex:-1,ref:G,onKeyDown:function(e){var t,a,n=e.keyCode,r=e.shiftKey;switch(n){case m.default.TAB:n===m.default.TAB&&(r||document.activeElement!==ee.current?r&&document.activeElement===Z.current&&(null==(a=ee.current)||a.focus({preventScroll:!0})):null==(t=Z.current)||t.focus({preventScroll:!0}));break;case m.default.ESC:q&&S&&(e.stopPropagation(),q(e))}}},es,t.createElement("div",{tabIndex:0,ref:Z,style:b,"aria-hidden":"true","data-sentinel":"start"}),em,t.createElement("div",{tabIndex:0,ref:ee,style:b,"aria-hidden":"true","data-sentinel":"end"})))});let k=function(e){var a=e.open,i=e.prefixCls,d=e.placement,c=e.autoFocus,u=e.keyboard,m=e.width,p=e.mask,f=void 0===p||p,y=e.maskClosable,h=e.getContainer,g=e.forceRender,v=e.afterOpenChange,x=e.destroyOnClose,b=e.onMouseEnter,k=e.onMouseOver,j=e.onMouseLeave,C=e.onClick,S=e.onKeyDown,O=e.onKeyUp,$=e.panelRef,E=t.useState(!1),N=(0,r.default)(E,2),I=N[0],D=N[1],M=t.useState(!1),R=(0,r.default)(M,2),_=R[0],z=R[1];(0,o.default)(function(){z(!0)},[]);var F=!!_&&void 0!==a&&a,T=t.useRef(),P=t.useRef();(0,o.default)(function(){F&&(P.current=document.activeElement)},[F]);var A=t.useMemo(function(){return{panel:$}},[$]);if(!g&&!I&&!F&&x)return null;var B=(0,n.default)((0,n.default)({},e),{},{open:F,prefixCls:void 0===i?"rc-drawer":i,placement:void 0===d?"right":d,autoFocus:void 0===c||c,keyboard:void 0===u||u,width:void 0===m?378:m,mask:f,maskClosable:void 0===y||y,inline:!1===h,afterOpenChange:function(e){var t,a;D(e),null==v||v(e),e||!P.current||null!=(t=T.current)&&t.contains(P.current)||null==(a=P.current)||a.focus({preventScroll:!0})},ref:T},{onMouseEnter:b,onMouseOver:k,onMouseLeave:j,onClick:C,onKeyDown:S,onKeyUp:O});return t.createElement(s.Provider,{value:A},t.createElement(l.default,{open:F||g||I,autoDestroy:!1,getContainer:h,autoLock:f&&(F||I)},t.createElement(w,B)))};var j=e.i(981444),C=e.i(617206),S=e.i(122767),O=e.i(613541),$=e.i(340010),E=e.i(242064),N=e.i(922611),I=e.i(563113),D=e.i(185793);let M=e=>{var n,r,l,o;let i,{prefixCls:s,ariaId:d,title:c,footer:u,extra:m,closable:p,loading:f,onClose:y,headerStyle:h,bodyStyle:g,footerStyle:v,children:x,classNames:b,styles:w}=e,k=(0,E.useComponentConfig)("drawer");i=!1===p?void 0:void 0===p||!0===p?"start":(null==p?void 0:p.placement)==="end"?"end":"start";let j=t.useCallback(e=>t.createElement("button",{type:"button",onClick:y,className:(0,a.default)(`${s}-close`,{[`${s}-close-${i}`]:"end"===i})},e),[y,s,i]),[C,S]=(0,I.useClosable)((0,I.pickClosable)(e),(0,I.pickClosable)(k),{closable:!0,closeIconRender:j});return t.createElement(t.Fragment,null,c||C?t.createElement("div",{style:Object.assign(Object.assign(Object.assign({},null==(l=k.styles)?void 0:l.header),h),null==w?void 0:w.header),className:(0,a.default)(`${s}-header`,{[`${s}-header-close-only`]:C&&!c&&!m},null==(o=k.classNames)?void 0:o.header,null==b?void 0:b.header)},t.createElement("div",{className:`${s}-header-title`},"start"===i&&S,c&&t.createElement("div",{className:`${s}-title`,id:d},c)),m&&t.createElement("div",{className:`${s}-extra`},m),"end"===i&&S):null,t.createElement("div",{className:(0,a.default)(`${s}-body`,null==b?void 0:b.body,null==(n=k.classNames)?void 0:n.body),style:Object.assign(Object.assign(Object.assign({},null==(r=k.styles)?void 0:r.body),g),null==w?void 0:w.body)},f?t.createElement(D.default,{active:!0,title:!1,paragraph:{rows:5},className:`${s}-body-skeleton`}):x),(()=>{var e,n;if(!u)return null;let r=`${s}-footer`;return t.createElement("div",{className:(0,a.default)(r,null==(e=k.classNames)?void 0:e.footer,null==b?void 0:b.footer),style:Object.assign(Object.assign(Object.assign({},null==(n=k.styles)?void 0:n.footer),v),null==w?void 0:w.footer)},u)})())};e.i(296059);var R=e.i(915654),_=e.i(183293),z=e.i(246422),F=e.i(838378);let T=(e,t)=>({"&-enter, &-appear":Object.assign(Object.assign({},e),{"&-active":t}),"&-leave":Object.assign(Object.assign({},t),{"&-active":e})}),P=(e,t)=>Object.assign({"&-enter, &-appear, &-leave":{"&-start":{transition:"none"},"&-active":{transition:`all ${t}`}}},T({opacity:e},{opacity:1})),A=(0,z.genStyleHooks)("Drawer",e=>{let t=(0,F.mergeToken)(e,{});return[(e=>{let{borderRadiusSM:t,componentCls:a,zIndexPopup:n,colorBgMask:r,colorBgElevated:l,motionDurationSlow:o,motionDurationMid:i,paddingXS:s,padding:d,paddingLG:c,fontSizeLG:u,lineHeightLG:m,lineWidth:p,lineType:f,colorSplit:y,marginXS:h,colorIcon:g,colorIconHover:v,colorBgTextHover:x,colorBgTextActive:b,colorText:w,fontWeightStrong:k,footerPaddingBlock:j,footerPaddingInline:C,calc:S}=e,O=`${a}-content-wrapper`;return{[a]:{position:"fixed",inset:0,zIndex:n,pointerEvents:"none",color:w,"&-pure":{position:"relative",background:l,display:"flex",flexDirection:"column",[`&${a}-left`]:{boxShadow:e.boxShadowDrawerLeft},[`&${a}-right`]:{boxShadow:e.boxShadowDrawerRight},[`&${a}-top`]:{boxShadow:e.boxShadowDrawerUp},[`&${a}-bottom`]:{boxShadow:e.boxShadowDrawerDown}},"&-inline":{position:"absolute"},[`${a}-mask`]:{position:"absolute",inset:0,zIndex:n,background:r,pointerEvents:"auto"},[O]:{position:"absolute",zIndex:n,maxWidth:"100vw",transition:`all ${o}`,"&-hidden":{display:"none"}},[`&-left > ${O}`]:{top:0,bottom:0,left:{_skip_check_:!0,value:0},boxShadow:e.boxShadowDrawerLeft},[`&-right > ${O}`]:{top:0,right:{_skip_check_:!0,value:0},bottom:0,boxShadow:e.boxShadowDrawerRight},[`&-top > ${O}`]:{top:0,insetInline:0,boxShadow:e.boxShadowDrawerUp},[`&-bottom > ${O}`]:{bottom:0,insetInline:0,boxShadow:e.boxShadowDrawerDown},[`${a}-content`]:{display:"flex",flexDirection:"column",width:"100%",height:"100%",overflow:"auto",background:l,pointerEvents:"auto"},[`${a}-header`]:{display:"flex",flex:0,alignItems:"center",padding:`${(0,R.unit)(d)} ${(0,R.unit)(c)}`,fontSize:u,lineHeight:m,borderBottom:`${(0,R.unit)(p)} ${f} ${y}`,"&-title":{display:"flex",flex:1,alignItems:"center",minWidth:0,minHeight:0}},[`${a}-extra`]:{flex:"none"},[`${a}-close`]:Object.assign({display:"inline-flex",width:S(u).add(s).equal(),height:S(u).add(s).equal(),borderRadius:t,justifyContent:"center",alignItems:"center",color:g,fontWeight:k,fontSize:u,fontStyle:"normal",lineHeight:1,textAlign:"center",textTransform:"none",textDecoration:"none",background:"transparent",border:0,cursor:"pointer",transition:`all ${i}`,textRendering:"auto",[`&${a}-close-end`]:{marginInlineStart:h},[`&:not(${a}-close-end)`]:{marginInlineEnd:h},"&:hover":{color:v,backgroundColor:x,textDecoration:"none"},"&:active":{backgroundColor:b}},(0,_.genFocusStyle)(e)),[`${a}-title`]:{flex:1,margin:0,fontWeight:e.fontWeightStrong,fontSize:u,lineHeight:m},[`${a}-body`]:{flex:1,minWidth:0,minHeight:0,padding:c,overflow:"auto",[`${a}-body-skeleton`]:{width:"100%",height:"100%",display:"flex",justifyContent:"center"}},[`${a}-footer`]:{flexShrink:0,padding:`${(0,R.unit)(j)} ${(0,R.unit)(C)}`,borderTop:`${(0,R.unit)(p)} ${f} ${y}`},"&-rtl":{direction:"rtl"}}}})(t),(e=>{let{componentCls:t,motionDurationSlow:a}=e;return{[t]:{[`${t}-mask-motion`]:P(0,a),[`${t}-panel-motion`]:["left","right","top","bottom"].reduce((e,t)=>{let n;return Object.assign(Object.assign({},e),{[`&-${t}`]:[P(.7,a),T({transform:(n="100%",({left:`translateX(-${n})`,right:`translateX(${n})`,top:`translateY(-${n})`,bottom:`translateY(${n})`})[t])},{transform:"none"})]})},{})}}})(t)]},e=>({zIndexPopup:e.zIndexPopupBase,footerPaddingBlock:e.paddingXS,footerPaddingInline:e.padding}));var B=function(e,t){var a={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&0>t.indexOf(n)&&(a[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var r=0,n=Object.getOwnPropertySymbols(e);rt.indexOf(n[r])&&Object.prototype.propertyIsEnumerable.call(e,n[r])&&(a[n[r]]=e[n[r]]);return a};let K={distance:180},L=e=>{let{rootClassName:n,width:r,height:l,size:o="default",mask:i=!0,push:s=K,open:d,afterOpenChange:c,onClose:u,prefixCls:m,getContainer:p,panelRef:f=null,style:h,className:g,"aria-labelledby":v,visible:x,afterVisibleChange:b,maskStyle:w,drawerStyle:I,contentWrapperStyle:D,destroyOnClose:R,destroyOnHidden:_}=e,z=B(e,["rootClassName","width","height","size","mask","push","open","afterOpenChange","onClose","prefixCls","getContainer","panelRef","style","className","aria-labelledby","visible","afterVisibleChange","maskStyle","drawerStyle","contentWrapperStyle","destroyOnClose","destroyOnHidden"]),F=(0,j.default)(),T=z.title?F:void 0,{getPopupContainer:P,getPrefixCls:L,direction:q,className:U,style:W,classNames:H,styles:V}=(0,E.useComponentConfig)("drawer"),J=L("drawer",m),[X,Y,Q]=A(J),G=void 0===p&&P?()=>P(document.body):p,Z=(0,a.default)({"no-mask":!i,[`${J}-rtl`]:"rtl"===q},n,Y,Q),ee=t.useMemo(()=>null!=r?r:"large"===o?736:378,[r,o]),et=t.useMemo(()=>null!=l?l:"large"===o?736:378,[l,o]),ea={motionName:(0,O.getTransitionName)(J,"mask-motion"),motionAppear:!0,motionEnter:!0,motionLeave:!0,motionDeadline:500},en=(0,N.usePanelRef)(),er=(0,y.composeRef)(f,en),[el,eo]=(0,S.useZIndex)("Drawer",z.zIndex),{classNames:ei={},styles:es={}}=z;return X(t.createElement(C.default,{form:!0,space:!0},t.createElement($.default.Provider,{value:eo},t.createElement(k,Object.assign({prefixCls:J,onClose:u,maskMotion:ea,motion:e=>({motionName:(0,O.getTransitionName)(J,`panel-motion-${e}`),motionAppear:!0,motionEnter:!0,motionLeave:!0,motionDeadline:500})},z,{classNames:{mask:(0,a.default)(ei.mask,H.mask),content:(0,a.default)(ei.content,H.content),wrapper:(0,a.default)(ei.wrapper,H.wrapper)},styles:{mask:Object.assign(Object.assign(Object.assign({},es.mask),w),V.mask),content:Object.assign(Object.assign(Object.assign({},es.content),I),V.content),wrapper:Object.assign(Object.assign(Object.assign({},es.wrapper),D),V.wrapper)},open:null!=d?d:x,mask:i,push:s,width:ee,height:et,style:Object.assign(Object.assign({},W),h),className:(0,a.default)(U,g),rootClassName:Z,getContainer:G,afterOpenChange:null!=c?c:b,panelRef:er,zIndex:el,"aria-labelledby":null!=v?v:T,destroyOnClose:null!=_?_:R}),t.createElement(M,Object.assign({prefixCls:J},z,{ariaId:T,onClose:u}))))))};L._InternalPanelDoNotUseOrYouWillBeFired=e=>{let{prefixCls:n,style:r,className:l,placement:o="right"}=e,i=B(e,["prefixCls","style","className","placement"]),{getPrefixCls:s}=t.useContext(E.ConfigContext),d=s("drawer",n),[c,u,m]=A(d),p=(0,a.default)(d,`${d}-pure`,`${d}-${o}`,u,m,l);return c(t.createElement("div",{className:p,style:r},t.createElement(M,Object.assign({prefixCls:d},i))))},e.s(["Drawer",0,L],608856)},91979,e=>{"use strict";e.i(247167);var t=e.i(931067),a=e.i(271645);let n={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M909.1 209.3l-56.4 44.1C775.8 155.1 656.2 92 521.9 92 290 92 102.3 279.5 102 511.5 101.7 743.7 289.8 932 521.9 932c181.3 0 335.8-115 394.6-276.1 1.5-4.2-.7-8.9-4.9-10.3l-56.7-19.5a8 8 0 00-10.1 4.8c-1.8 5-3.8 10-5.9 14.9-17.3 41-42.1 77.8-73.7 109.4A344.77 344.77 0 01655.9 829c-42.3 17.9-87.4 27-133.8 27-46.5 0-91.5-9.1-133.8-27A341.5 341.5 0 01279 755.2a342.16 342.16 0 01-73.7-109.4c-17.9-42.4-27-87.4-27-133.9s9.1-91.5 27-133.9c17.3-41 42.1-77.8 73.7-109.4 31.6-31.6 68.4-56.4 109.3-73.8 42.3-17.9 87.4-27 133.8-27 46.5 0 91.5 9.1 133.8 27a341.5 341.5 0 01109.3 73.8c9.9 9.9 19.2 20.4 27.8 31.4l-60.2 47a8 8 0 003 14.1l175.6 43c5 1.2 9.9-2.6 9.9-7.7l.8-180.9c-.1-6.6-7.8-10.3-13-6.2z"}}]},name:"reload",theme:"outlined"};var r=e.i(9583),l=a.forwardRef(function(e,l){return a.createElement(r.default,(0,t.default)({},e,{ref:l,icon:n}))});e.s(["ReloadOutlined",0,l],91979)},751904,e=>{"use strict";var t=e.i(401361);e.s(["EditOutlined",()=>t.default])},123521,e=>{"use strict";var t=e.i(984125);e.s(["EyeOutlined",()=>t.default])},956224,e=>{"use strict";var t=e.i(843476),a=e.i(271645),n=e.i(954616),r=e.i(266027),l=e.i(912598),o=e.i(464571),i=e.i(175712),s=e.i(608856),d=e.i(21548),c=e.i(311451),u=e.i(770914),m=e.i(291542),p=e.i(592968),f=e.i(898586),y=e.i(998573),h=e.i(955135),g=e.i(751904),v=e.i(123521),x=e.i(646563),b=e.i(91979),w=e.i(928685),k=e.i(602869),j=e.i(808613),C=e.i(212931);let{Text:S}=f.Typography,O=({open:e,mode:n,initialRow:r,onClose:l,onSave:o})=>{let[i]=j.Form.useForm(),[s,d]=(0,a.useState)(!1);(0,a.useEffect)(()=>{e&&("edit"===n&&r?i.setFieldsValue({key:r.key,value:r.value,metadata:null!=r.metadata?JSON.stringify(r.metadata,null,2):""}):i.resetFields())},[e,n,r,i]);let u=async()=>{let e=await i.validateFields();d(!0);let t=await o(e.key.trim(),e.value??"",e.metadata??"","create"===n);d(!1),t&&(i.resetFields(),l())};return(0,t.jsx)(C.Modal,{open:e,title:"create"===n?"Create memory":`Edit ${r?.key??""}`,onCancel:()=>{i.resetFields(),l()},onOk:u,okText:"create"===n?"Create":"Save",confirmLoading:s,width:640,destroyOnClose:!0,children:(0,t.jsxs)(j.Form,{form:i,layout:"vertical",children:[(0,t.jsx)(j.Form.Item,{label:"Key",name:"key",rules:[{required:!0,message:"Key is required"}],tooltip:"Globally unique — two memories cannot share a key. Namespace your own keys if you need per-user isolation (e.g. user:123:notes).",children:(0,t.jsx)(c.Input,{placeholder:"e.g. user_role",disabled:"edit"===n})}),(0,t.jsx)(j.Form.Item,{label:"Value",name:"value",rules:[{required:!0,message:"Value is required"}],tooltip:"Markdown/text injected into LLM context. Plain strings are fine.",children:(0,t.jsx)(c.Input.TextArea,{rows:8,placeholder:"What the agent should remember…"})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Metadata ",(0,t.jsx)(S,{type:"secondary",children:"(optional JSON)"})]}),name:"metadata",tooltip:"Optional structured metadata — must be valid JSON if provided.",children:(0,t.jsx)(c.Input.TextArea,{rows:4,placeholder:'{"tags": ["example"]}',style:{fontFamily:"ui-monospace, SFMono-Regular, Menlo, monospace"}})})]})})};var $=e.i(127952);let{Text:E,Paragraph:N,Title:I}=f.Typography;function D(e){if(!e)return"—";try{return new Date(e).toLocaleString()}catch{return e}}let M=({accessToken:e})=>{let[f,j]=(0,a.useState)(""),[C,S]=(0,a.useState)(""),[M,R]=(0,a.useState)(null),[_,z]=(0,a.useState)(null),[F,T]=(0,a.useState)(null),[P,A]=(0,a.useState)(!1),[B,K]=(0,a.useState)(1);a.default.useEffect(()=>{K(1)},[C]);let L=(0,l.useQueryClient)(),q="memoryList",{data:U,isLoading:W,isFetching:H}=(0,r.useQuery)({queryKey:[q,C,B],queryFn:()=>{if(!e)throw Error("Access token required");return(0,k.fetchMemoryList)(e,{keyPrefix:C||void 0,page:B,pageSize:50})},enabled:!!e}),V=(0,a.useMemo)(()=>U?.memories??[],[U]),J=U?.total??0,X=()=>L.invalidateQueries({queryKey:[q]}),Y=(0,n.useMutation)({mutationFn:t=>{if(!e)throw Error("Access token required");return(0,k.createMemory)(e,t)},onSuccess:e=>{y.message.success(`Created ${e.key}`),X()},onError:e=>{y.message.error(`Save failed: ${e.message}`)}}),Q=(0,n.useMutation)({mutationFn:t=>{if(!e)throw Error("Access token required");let{key:a,...n}=t;return(0,k.updateMemory)(e,a,n)},onSuccess:e=>{y.message.success(`Updated ${e.key}`),X()},onError:e=>{y.message.error(`Save failed: ${e.message}`)}}),G=(0,n.useMutation)({mutationFn:t=>{if(!e)throw Error("Access token required");return(0,k.deleteMemory)(e,t).then(()=>t)},onSuccess:e=>{y.message.success(`Deleted ${e}`),X()},onError:e=>{y.message.error(`Delete failed: ${e.message}`)}}),Z=async()=>{if(F)try{await G.mutateAsync(F.key),T(null)}catch{}},ee=async(t,a,n,r)=>{let l;if(!e)return!1;if(n.trim())try{l=JSON.parse(n)}catch{return y.message.error("Metadata must be valid JSON (or leave empty)."),!1}else l=r?void 0:null;try{return r?await Y.mutateAsync({key:t,value:a,metadata:l}):await Q.mutateAsync({key:t,value:a,metadata:l}),!0}catch{return!1}},et=(e,a)=>{if(!e)return(0,t.jsx)(E,{type:"secondary",children:"-"});let n=e.length>10?`${e.slice(0,7)}...`:e,r="font-mono text-blue-600 bg-blue-50 text-xs font-medium px-2 py-0.5 rounded-md border border-blue-200 inline-block max-w-[15ch] truncate whitespace-nowrap";return(0,t.jsx)(p.Tooltip,{title:e,children:a?(0,t.jsx)("button",{onClick:a,className:`${r} hover:bg-blue-100 cursor-pointer transition-colors text-left`,children:n}):(0,t.jsx)("span",{className:r,children:n})})},ea=[{title:"ID",dataIndex:"memory_id",key:"memory_id",width:140,render:(e,t)=>et(t.memory_id,()=>R(t))},{title:"Name",dataIndex:"key",key:"key",width:200,render:e=>(0,t.jsx)(E,{code:!0,children:e})},{title:"Preview",dataIndex:"value",key:"value",render:e=>(0,t.jsx)(E,{type:"secondary",style:{whiteSpace:"pre-wrap"},children:function(e,t=120){if(!e)return"";let a=e.trim();return a.length<=t?a:`${a.slice(0,t)}…`}(e)})},{title:"User ID",dataIndex:"user_id",key:"user_id",width:160,render:e=>et(e)},{title:"Team ID",dataIndex:"team_id",key:"team_id",width:160,render:e=>et(e)},{title:"Updated",dataIndex:"updated_at",key:"updated_at",width:180,render:e=>(0,t.jsx)(E,{type:"secondary",children:D(e)})},{title:"",key:"actions",width:140,render:(e,a)=>(0,t.jsxs)(u.Space,{size:4,children:[(0,t.jsx)(o.Button,{size:"small",type:"text",icon:(0,t.jsx)(v.EyeOutlined,{}),onClick:()=>R(a),"aria-label":"View"}),(0,t.jsx)(o.Button,{size:"small",type:"text",icon:(0,t.jsx)(g.EditOutlined,{}),onClick:()=>z(a),"aria-label":"Edit"}),(0,t.jsx)(o.Button,{size:"small",type:"text",danger:!0,icon:(0,t.jsx)(h.DeleteOutlined,{}),onClick:()=>{T(a)},"aria-label":"Delete"})]})}];return(0,t.jsxs)("div",{className:"w-full",style:{padding:24},children:[(0,t.jsxs)(u.Space,{direction:"vertical",size:"large",style:{width:"100%"},children:[(0,t.jsxs)("div",{children:[(0,t.jsx)(I,{level:3,style:{marginBottom:4},children:"Memory"}),(0,t.jsxs)(N,{type:"secondary",style:{marginBottom:0},children:["Inspect what your agents have stored under ",(0,t.jsx)(E,{code:!0,children:"/v1/memory"}),". Scoped to memories visible to your user / team (admins see all)."]})]}),(0,t.jsxs)(i.Card,{children:[(0,t.jsxs)(u.Space,{style:{width:"100%",justifyContent:"space-between",marginBottom:16},wrap:!0,children:[(0,t.jsxs)(u.Space,{children:[(0,t.jsx)(c.Input,{allowClear:!0,placeholder:'Filter by key prefix, e.g. "user:"',prefix:(0,t.jsx)(w.SearchOutlined,{}),value:f,onChange:e=>j(e.target.value),onPressEnter:()=>S(f.trim()),onClear:()=>{j(""),S("")},style:{width:280}}),(0,t.jsx)(o.Button,{type:"primary",ghost:!0,onClick:()=>S(f.trim()),children:"Search"}),(0,t.jsx)(o.Button,{icon:(0,t.jsx)(b.ReloadOutlined,{}),onClick:()=>X(),loading:H&&!W,children:"Refresh"})]}),(0,t.jsx)(o.Button,{type:"primary",icon:(0,t.jsx)(x.PlusOutlined,{}),onClick:()=>A(!0),children:"New memory"})]}),(0,t.jsx)(m.Table,{rowKey:"memory_id",loading:W,dataSource:V,columns:ea,pagination:{current:B,pageSize:50,total:J,showSizeChanger:!1,showTotal:(e,t)=>`${t[0]}–${t[1]} of ${e}`,onChange:e=>K(e)},locale:{emptyText:(0,t.jsx)(d.Empty,{description:C?`No memories with keys starting with "${C}"`:"No memories stored yet"})}})]})]}),(0,t.jsx)(s.Drawer,{open:!!M,onClose:()=>R(null),title:M?(0,t.jsx)(u.Space,{children:(0,t.jsx)(E,{code:!0,children:M.key})}):"Memory",width:720,destroyOnClose:!0,children:M&&(0,t.jsxs)(u.Space,{direction:"vertical",size:"middle",style:{width:"100%"},children:[(0,t.jsxs)(u.Space,{size:"large",wrap:!0,children:[(0,t.jsxs)("div",{children:[(0,t.jsx)(E,{strong:!0,style:{display:"block"},children:"Memory ID"}),(0,t.jsx)(E,{code:!0,style:{fontSize:12},children:M.memory_id})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)(E,{strong:!0,style:{display:"block"},children:"User ID"}),(0,t.jsx)(E,{type:M.user_id?void 0:"secondary",children:M.user_id??"-"})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)(E,{strong:!0,style:{display:"block"},children:"Team ID"}),(0,t.jsx)(E,{type:M.team_id?void 0:"secondary",children:M.team_id??"-"})]})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)(E,{strong:!0,children:"Value"}),(0,t.jsx)(N,{style:{background:"#fafafa",padding:12,borderRadius:6,whiteSpace:"pre-wrap",fontFamily:"ui-monospace, SFMono-Regular, Menlo, monospace",fontSize:13},children:M.value})]}),void 0!==M.metadata&&null!==M.metadata&&(0,t.jsxs)("div",{children:[(0,t.jsx)(E,{strong:!0,children:"Metadata"}),(0,t.jsx)(N,{style:{background:"#fafafa",padding:12,borderRadius:6,whiteSpace:"pre-wrap",fontFamily:"ui-monospace, SFMono-Regular, Menlo, monospace",fontSize:12},children:JSON.stringify(M.metadata,null,2)})]}),(0,t.jsxs)(u.Space,{split:(0,t.jsx)(E,{type:"secondary",children:"·"}),wrap:!0,size:"small",style:{color:"rgba(0,0,0,0.45)"},children:[(0,t.jsxs)(E,{type:"secondary",children:["Created ",D(M.created_at),M.created_by?` by ${M.created_by}`:""]}),(0,t.jsxs)(E,{type:"secondary",children:["Updated ",D(M.updated_at),M.updated_by?` by ${M.updated_by}`:""]})]})]})}),(0,t.jsx)(O,{open:P||!!_,mode:_?"edit":"create",initialRow:_??void 0,onClose:()=>{A(!1),z(null)},onSave:ee}),(0,t.jsx)($.default,{isOpen:!!F,title:"Delete memory",message:"This action cannot be undone.",resourceInformationTitle:"Memory",resourceInformation:F?[{label:"Key",value:F.key,code:!0},{label:"Memory ID",value:F.memory_id,code:!0},{label:"User ID",value:F.user_id??"-",code:!0},{label:"Team ID",value:F.team_id??"-",code:!0}]:[],onCancel:()=>{G.isPending||T(null)},onOk:Z,confirmLoading:G.isPending,requiredConfirmation:F?.key})]})};var R=e.i(135214);e.s(["default",0,function(){let{accessToken:e,userRole:a,userId:n}=(0,R.default)();return(0,t.jsx)(M,{accessToken:e,userID:n,userRole:a})}],956224)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0q6~n4y84cejn.js b/litellm/proxy/_experimental/out/_next/static/chunks/0q6~n4y84cejn.js new file mode 100644 index 00000000000..b82e28e8264 --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0q6~n4y84cejn.js @@ -0,0 +1 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,35983,992704,877891,401141,952744,605083,101852,919751,178677,635307,495470,333771,e=>{"use strict";let t,n,r,o,l;var i=e.i(290571),u=e.i(271645),s=e.i(783222),a=e.i(433336),c=e.i(174080),d=e.i(394487),f=e.i(503269),p=e.i(214520),m=e.i(835696),v=e.i(746725);function g(e,t=!1){let[n,r]=(0,u.useReducer)(()=>({}),{}),o=(0,u.useMemo)(()=>(function(e){if(null===e)return{width:0,height:0};let{width:t,height:n}=e.getBoundingClientRect();return{width:t,height:n}})(e),[e,n]);return(0,m.useIsoMorphicEffect)(()=>{if(!e)return;let t=new ResizeObserver(r);return t.observe(e),()=>{t.disconnect()}},[e]),t?{width:`${o.width}px`,height:`${o.height}px`}:o}e.s(["useElementSize",0,g],992704);var h=e.i(914189),b=e.i(544508),x=e.i(402155);class E extends Map{constructor(e){super(),this.factory=e}get(e){let t=super.get(e);return void 0===t&&(t=this.factory(e),this.set(e,t)),t}}function y(e,t){let n=e(),r=new Set;return{getSnapshot:()=>n,subscribe:e=>(r.add(e),()=>r.delete(e)),dispatch(e,...o){let l=t[e].call(n,...o);l&&(n=l,r.forEach(e=>e()))}}}function S(e){return(0,u.useSyncExternalStore)(e.subscribe,e.getSnapshot,e.getSnapshot)}let R=new E(()=>y(()=>[],{ADD(e){return this.includes(e)?this:[...this,e]},REMOVE(e){let t=this.indexOf(e);if(-1===t)return this;let n=this.slice();return n.splice(t,1),n}}));function w(e,t){let n=R.get(t),r=(0,u.useId)(),o=S(n);if((0,m.useIsoMorphicEffect)(()=>{if(e)return n.dispatch("ADD",r),()=>n.dispatch("REMOVE",r)},[n,e]),!e)return!1;let l=o.indexOf(r),i=o.length;return -1===l&&(l=i,i+=1),l===i-1}let O=new Map,P=new Map;function C(e){var t;let n=null!=(t=P.get(e))?t:0;return P.set(e,n+1),0!==n||(O.set(e,{"aria-hidden":e.getAttribute("aria-hidden"),inert:e.inert}),e.setAttribute("aria-hidden","true"),e.inert=!0),()=>(function(e){var t;let n=null!=(t=P.get(e))?t:1;if(1===n?P.delete(e):P.set(e,n-1),1!==n)return;let r=O.get(e);r&&(null===r["aria-hidden"]?e.removeAttribute("aria-hidden"):e.setAttribute("aria-hidden",r["aria-hidden"]),e.inert=r.inert,O.delete(e))})(e)}var M=e.i(941444);function I(e,t,n){let r=(0,M.useLatestValue)(e=>{let t=e.getBoundingClientRect();0===t.x&&0===t.y&&0===t.width&&0===t.height&&n()});(0,u.useEffect)(()=>{if(!e)return;let n=null===t?null:t instanceof HTMLElement?t:t.current;if(!n)return;let o=(0,b.disposables)();if("u">typeof ResizeObserver){let e=new ResizeObserver(()=>r.current(n));e.observe(n),o.add(()=>e.disconnect())}if("u">typeof IntersectionObserver){let e=new IntersectionObserver(()=>r.current(n));e.observe(n),o.add(()=>e.disconnect())}return()=>o.dispose()},[t,r,e])}e.s(["useOnDisappear",0,I],877891);var L=e.i(652265);function T(){return/iPhone/gi.test(window.navigator.platform)||/Mac/gi.test(window.navigator.platform)&&window.navigator.maxTouchPoints>0}function D(e,t,n,r){let o=(0,M.useLatestValue)(n);(0,u.useEffect)(()=>{if(e)return document.addEventListener(t,n,r),()=>document.removeEventListener(t,n,r);function n(e){o.current(e)}},[e,t,r])}function F(e,t,n,r){let o=(0,M.useLatestValue)(n);(0,u.useEffect)(()=>{if(e)return window.addEventListener(t,n,r),()=>window.removeEventListener(t,n,r);function n(e){o.current(e)}},[e,t,r])}function k(e,t,n){let r=w(e,"outside-click"),o=(0,M.useLatestValue)(n),l=(0,u.useCallback)(function(e,n){if(e.defaultPrevented)return;let r=n(e);if(null!==r&&r.getRootNode().contains(r)&&r.isConnected){for(let n of function e(t){return"function"==typeof t?e(t()):Array.isArray(t)||t instanceof Set?t:[t]}(t))if(null!==n&&(n.contains(r)||e.composed&&e.composedPath().includes(n)))return;return(0,L.isFocusableElement)(r,L.FocusableMode.Loose)||-1===r.tabIndex||e.preventDefault(),o.current(e,r)}},[o,t]),i=(0,u.useRef)(null);D(r,"pointerdown",e=>{var t,n;i.current=(null==(n=null==(t=e.composedPath)?void 0:t.call(e))?void 0:n[0])||e.target},!0),D(r,"mousedown",e=>{var t,n;i.current=(null==(n=null==(t=e.composedPath)?void 0:t.call(e))?void 0:n[0])||e.target},!0),D(r,"click",e=>{T()||/Android/gi.test(window.navigator.userAgent)||i.current&&(l(e,()=>i.current),i.current=null)},!0);let s=(0,u.useRef)({x:0,y:0});D(r,"touchstart",e=>{s.current.x=e.touches[0].clientX,s.current.y=e.touches[0].clientY},!0),D(r,"touchend",e=>{let t={x:e.changedTouches[0].clientX,y:e.changedTouches[0].clientY};if(!(Math.abs(t.x-s.current.x)>=30||Math.abs(t.y-s.current.y)>=30))return l(e,()=>e.target instanceof HTMLElement?e.target:null)},!0),F(r,"blur",e=>l(e,()=>window.document.activeElement instanceof HTMLIFrameElement?window.document.activeElement:null),!0)}function A(...e){return(0,u.useMemo)(()=>(0,x.getOwnerDocument)(...e),[...e])}e.s(["useWindowEvent",0,F],401141),e.s(["useOutsideClick",0,k],952744),e.s(["useOwnerDocument",0,A],605083);var H=e.i(144279);let N=y(()=>new Map,{PUSH(e,t){var n;let r=null!=(n=this.get(e))?n:{doc:e,count:0,d:(0,b.disposables)(),meta:new Set};return r.count++,r.meta.add(t),this.set(e,r),this},POP(e,t){let n=this.get(e);return n&&(n.count--,n.meta.delete(t)),this},SCROLL_PREVENT({doc:e,d:t,meta:n}){let r,o={doc:e,d:t,meta:function(e){let t={};for(let n of e)Object.assign(t,n(t));return t}(n)},l=[T()?{before({doc:e,d:t,meta:n}){function r(e){return n.containers.flatMap(e=>e()).some(t=>t.contains(e))}t.microTask(()=>{var n;if("auto"!==window.getComputedStyle(e.documentElement).scrollBehavior){let n=(0,b.disposables)();n.style(e.documentElement,"scrollBehavior","auto"),t.add(()=>t.microTask(()=>n.dispose()))}let o=null!=(n=window.scrollY)?n:window.pageYOffset,l=null;t.addEventListener(e,"click",t=>{if(t.target instanceof HTMLElement)try{let n=t.target.closest("a");if(!n)return;let{hash:o}=new URL(n.href),i=e.querySelector(o);i&&!r(i)&&(l=i)}catch{}},!0),t.addEventListener(e,"touchstart",e=>{if(e.target instanceof HTMLElement)if(r(e.target)){let n=e.target;for(;n.parentElement&&r(n.parentElement);)n=n.parentElement;t.style(n,"overscrollBehavior","contain")}else t.style(e.target,"touchAction","none")}),t.addEventListener(e,"touchmove",e=>{if(e.target instanceof HTMLElement&&"INPUT"!==e.target.tagName)if(r(e.target)){let t=e.target;for(;t.parentElement&&""!==t.dataset.headlessuiPortal&&!(t.scrollHeight>t.clientHeight||t.scrollWidth>t.clientWidth);)t=t.parentElement;""===t.dataset.headlessuiPortal&&e.preventDefault()}else e.preventDefault()},{passive:!1}),t.add(()=>{var e;o!==(null!=(e=window.scrollY)?e:window.pageYOffset)&&window.scrollTo(0,o),l&&l.isConnected&&(l.scrollIntoView({block:"nearest"}),l=null)})})}}:{},{before({doc:e}){var t;let n=e.documentElement;r=Math.max(0,(null!=(t=e.defaultView)?t:window).innerWidth-n.clientWidth)},after({doc:e,d:t}){let n=e.documentElement,o=Math.max(0,n.clientWidth-n.offsetWidth),l=Math.max(0,r-o);t.style(n,"paddingRight",`${l}px`)}},{before({doc:e,d:t}){t.style(e.documentElement,"overflow","hidden")}}];l.forEach(({before:e})=>null==e?void 0:e(o)),l.forEach(({after:e})=>null==e?void 0:e(o))},SCROLL_ALLOW({d:e}){e.dispose()},TEARDOWN({doc:e}){this.delete(e)}});function B(e,t,n=()=>[document.body]){!function(e,t,n=()=>({containers:[]})){let r=S(N),o=t?r.get(t):void 0;o&&o.count,(0,m.useIsoMorphicEffect)(()=>{if(!(!t||!e))return N.dispatch("PUSH",t,n),()=>N.dispatch("POP",t,n)},[e,t])}(w(e,"scroll-lock"),t,e=>{var t;return{containers:[...null!=(t=e.containers)?t:[],n]}})}N.subscribe(()=>{let e=N.getSnapshot(),t=new Map;for(let[n]of e)t.set(n,n.documentElement.style.overflow);for(let n of e.values()){let e="hidden"===t.get(n.doc),r=0!==n.count;(r&&!e||!r&&e)&&N.dispatch(n.count>0?"SCROLL_PREVENT":"SCROLL_ALLOW",n),0===n.count&&N.dispatch("TEARDOWN",n)}}),e.s(["useScrollLock",0,B],101852);var K=e.i(294316);let _=/([\u2700-\u27BF]|[\uE000-\uF8FF]|\uD83C[\uDC00-\uDFFF]|\uD83D[\uDC00-\uDFFF]|[\u2011-\u26FF]|\uD83E[\uDD10-\uDDFF])/g;function W(e){var t,n;let r=null!=(t=e.innerText)?t:"",o=e.cloneNode(!0);if(!(o instanceof HTMLElement))return r;let l=!1;for(let e of o.querySelectorAll('[hidden],[aria-hidden],[role="img"]'))e.remove(),l=!0;let i=l?null!=(n=o.innerText)?n:"":r;return _.test(i)&&(i=i.replace(_,"")),i}function V(e){return[e.screenX,e.screenY]}var j=e.i(83733),$=e.i(601893),U=e.i(953760),z="u">typeof document?u.useLayoutEffect:function(){};function Q(e,t){let n,r,o;if(e===t)return!0;if(typeof e!=typeof t)return!1;if("function"==typeof e&&e.toString()===t.toString())return!0;if(e&&t&&"object"==typeof e){if(Array.isArray(e)){if((n=e.length)!==t.length)return!1;for(r=n;0!=r--;)if(!Q(e[r],t[r]))return!1;return!0}if((n=(o=Object.keys(e)).length)!==Object.keys(t).length)return!1;for(r=n;0!=r--;)if(!({}).hasOwnProperty.call(t,o[r]))return!1;for(r=n;0!=r--;){let n=o[r];if(("_owner"!==n||!e.$$typeof)&&!Q(e[n],t[n]))return!1}return!0}return e!=e&&t!=t}function Y(e){return"u"{t.current=e}),t}let X=(e,t)=>{let n=(0,U.offset)(e);return{name:n.name,fn:n.fn,options:[e,t]}};e.i(247167);var J=e.i(229315),Z=e.i(343084);e.i(397126);let ee={...u},et=ee.useInsertionEffect||(e=>e());function en(e){let t=u.useRef(()=>{});return et(()=>{t.current=e}),u.useCallback(function(){for(var e=arguments.length,n=Array(e),r=0;rtypeof document?u.useLayoutEffect:u.useEffect;let eo=!1,el=0,ei=()=>"floating-ui-"+Math.random().toString(36).slice(2,6)+el++,eu=ee.useId||function(){let[e,t]=u.useState(()=>eo?ei():void 0);return er(()=>{null==e&&t(ei())},[]),u.useEffect(()=>{eo=!0},[]),e},es=u.createContext(null),ea=u.createContext(null),ec="active",ed="selected";function ef(e,t,n){let r=new Map,o="item"===n,l=e;if(o&&e){let{[ec]:t,[ed]:n,...r}=e;l=r}return{..."floating"===n&&{tabIndex:-1,"data-floating-ui-focusable":""},...l,...t.map(t=>{let r=t?t[n]:null;return"function"==typeof r?e?r(e):null:r}).concat(e).reduce((e,t)=>(t&&Object.entries(t).forEach(t=>{let[n,l]=t;if(!(o&&[ec,ed].includes(n)))if(0===n.indexOf("on")){if(r.has(n)||r.set(n,[]),"function"==typeof l){var i;null==(i=r.get(n))||i.push(l),e[n]=function(){for(var e,t=arguments.length,o=Array(t),l=0;le(...o)).find(e=>void 0!==e)}}}else e[n]=l}),e),{})}}function ep(e,t){return{...e,rects:{...e.rects,floating:{...e.rects.floating,height:t}}}}let em=(0,u.createContext)({styles:void 0,setReference:()=>{},setFloating:()=>{},getReferenceProps:()=>({}),getFloatingProps:()=>({}),slot:{}});em.displayName="FloatingContext";let ev=(0,u.createContext)(null);function eg(e){return(0,u.useMemo)(()=>e?"string"==typeof e?{to:e}:e:null,[e])}function eh(){return(0,u.useContext)(em).setReference}function eb(){return(0,u.useContext)(em).getReferenceProps}function ex(){let{getFloatingProps:e,slot:t}=(0,u.useContext)(em);return(0,u.useCallback)((...n)=>Object.assign({},e(...n),{"data-anchor":t.anchor}),[e,t])}function eE(e=null){!1===e&&(e=null),"string"==typeof e&&(e={to:e});let t=(0,u.useContext)(ev),n=(0,u.useMemo)(()=>e,[JSON.stringify(e,(e,t)=>{var n;return null!=(n=null==t?void 0:t.outerHTML)?n:t})]);(0,m.useIsoMorphicEffect)(()=>{null==t||t(null!=n?n:null)},[t,n]);let r=(0,u.useContext)(em);return(0,u.useMemo)(()=>[r.setFloating,e?r.styles:{}],[r.setFloating,e,r.styles])}function ey({children:e,enabled:t=!0}){var n,r,o,l,i,s,a,d,f,p,v,g,b;let x,E,y,S,R,w,O,P,C,M,I,L,T,[D,F]=(0,u.useState)(null),[k,A]=(0,u.useState)(0),H=(0,u.useRef)(null),[N,B]=(0,u.useState)(null);d=N,(0,m.useIsoMorphicEffect)(()=>{if(!d)return;let e=new MutationObserver(()=>{let e=window.getComputedStyle(d).maxHeight,t=parseFloat(e);if(isNaN(t))return;let n=parseInt(e);isNaN(n)||t!==n&&(d.style.maxHeight=`${Math.ceil(t)}px`)});return e.observe(d,{attributes:!0,attributeFilter:["style"]}),()=>{e.disconnect()}},[d]);let K=t&&null!==D&&null!==N,{to:_="bottom",gap:W=0,offset:V=0,padding:j=0,inner:$}=(f=D,p=N,x=eS(null!=(v=null==f?void 0:f.gap)?v:"var(--anchor-gap, 0)",p),E=eS(null!=(g=null==f?void 0:f.offset)?g:"var(--anchor-offset, 0)",p),y=eS(null!=(b=null==f?void 0:f.padding)?b:"var(--anchor-padding, 0)",p),{...f,gap:x,offset:E,padding:y}),[ee,et="center"]=_.split(" ");(0,m.useIsoMorphicEffect)(()=>{K&&A(0)},[K]);let{refs:eo,floatingStyles:el,context:ei}=function(e){void 0===e&&(e={});let{nodeId:t}=e,n=function(e){var t;let{open:n=!1,onOpenChange:r,elements:o}=e,l=eu(),i=u.useRef({}),[s]=u.useState(()=>{let e;return e=new Map,{emit(t,n){var r;null==(r=e.get(t))||r.forEach(e=>e(n))},on(t,n){e.set(t,[...e.get(t)||[],n])},off(t,n){var r;e.set(t,(null==(r=e.get(t))?void 0:r.filter(e=>e!==n))||[])}}}),a=null!=((null==(t=u.useContext(es))?void 0:t.id)||null),[c,d]=u.useState(o.reference),f=en((e,t,n)=>{i.current.openEvent=e?t:void 0,s.emit("openchange",{open:e,event:t,reason:n,nested:a}),null==r||r(e,t,n)}),p=u.useMemo(()=>({setPositionReference:d}),[]),m=u.useMemo(()=>({reference:c||o.reference||null,floating:o.floating||null,domReference:o.reference}),[c,o.reference,o.floating]);return u.useMemo(()=>({dataRef:i,open:n,onOpenChange:f,elements:m,events:s,floatingId:l,refs:p}),[n,f,m,s,l,p])}({...e,elements:{reference:null,floating:null,...e.elements}}),r=e.rootContext||n,o=r.elements,[l,i]=u.useState(null),[s,a]=u.useState(null),d=(null==o?void 0:o.domReference)||l,f=u.useRef(null),p=u.useContext(ea);er(()=>{d&&(f.current=d)},[d]);let m=function(e){void 0===e&&(e={});let{placement:t="bottom",strategy:n="absolute",middleware:r=[],platform:o,elements:{reference:l,floating:i}={},transform:s=!0,whileElementsMounted:a,open:d}=e,[f,p]=u.useState({x:0,y:0,strategy:n,placement:t,middlewareData:{},isPositioned:!1}),[m,v]=u.useState(r);Q(m,r)||v(r);let[g,h]=u.useState(null),[b,x]=u.useState(null),E=u.useCallback(e=>{e!==w.current&&(w.current=e,h(e))},[]),y=u.useCallback(e=>{e!==O.current&&(O.current=e,x(e))},[]),S=l||g,R=i||b,w=u.useRef(null),O=u.useRef(null),P=u.useRef(f),C=null!=a,M=G(a),I=G(o),L=G(d),T=u.useCallback(()=>{if(!w.current||!O.current)return;let e={placement:t,strategy:n,middleware:m};I.current&&(e.platform=I.current),(0,U.computePosition)(w.current,O.current,e).then(e=>{let t={...e,isPositioned:!1!==L.current};D.current&&!Q(P.current,t)&&(P.current=t,c.flushSync(()=>{p(t)}))})},[m,t,n,I,L]);z(()=>{!1===d&&P.current.isPositioned&&(P.current.isPositioned=!1,p(e=>({...e,isPositioned:!1})))},[d]);let D=u.useRef(!1);z(()=>(D.current=!0,()=>{D.current=!1}),[]),z(()=>{if(S&&(w.current=S),R&&(O.current=R),S&&R){if(M.current)return M.current(S,R,T);T()}},[S,R,T,M,C]);let F=u.useMemo(()=>({reference:w,floating:O,setReference:E,setFloating:y}),[E,y]),k=u.useMemo(()=>({reference:S,floating:R}),[S,R]),A=u.useMemo(()=>{let e={position:n,left:0,top:0};if(!k.floating)return e;let t=q(k.floating,f.x),r=q(k.floating,f.y);return s?{...e,transform:"translate("+t+"px, "+r+"px)",...Y(k.floating)>=1.5&&{willChange:"transform"}}:{position:n,left:t,top:r}},[n,s,k.floating,f.x,f.y]);return u.useMemo(()=>({...f,update:T,refs:F,elements:k,floatingStyles:A}),[f,T,F,k,A])}({...e,elements:{...o,...s&&{reference:s}}}),v=u.useCallback(e=>{let t=(0,J.isElement)(e)?{getBoundingClientRect:()=>e.getBoundingClientRect(),contextElement:e}:e;a(t),m.refs.setReference(t)},[m.refs]),g=u.useCallback(e=>{((0,J.isElement)(e)||null===e)&&(f.current=e,i(e)),((0,J.isElement)(m.refs.reference.current)||null===m.refs.reference.current||null!==e&&!(0,J.isElement)(e))&&m.refs.setReference(e)},[m.refs]),h=u.useMemo(()=>({...m.refs,setReference:g,setPositionReference:v,domReference:f}),[m.refs,g,v]),b=u.useMemo(()=>({...m.elements,domReference:d}),[m.elements,d]),x=u.useMemo(()=>({...m,...r,refs:h,elements:b,nodeId:t}),[m,h,b,t,r]);return er(()=>{r.dataRef.current.floatingContext=x;let e=null==p?void 0:p.nodesRef.current.find(e=>e.id===t);e&&(e.context=x)}),u.useMemo(()=>({...m,context:x,refs:h,elements:b}),[m,h,b,x])}({open:K,placement:"selection"===ee?"center"===et?"bottom":`bottom-${et}`:"center"===et?`${ee}`:`${ee}-${et}`,strategy:"absolute",transform:!1,middleware:[X({mainAxis:"selection"===ee?0:W,crossAxis:V}),(n={padding:j},{name:(S=(0,U.shift)(n)).name,fn:S.fn,options:[n,r]}),"selection"!==ee&&(o={padding:j},{name:(R=(0,U.flip)(o)).name,fn:R.fn,options:[o,l]}),"selection"===ee&&$?{name:"inner",options:w={...$,padding:j,overflowRef:H,offset:k,minItemsVisible:4,referenceOverflowThreshold:j,onFallbackChange(e){var t,n;if(!e)return;let r=ei.elements.floating;if(!r)return;let o=parseFloat(getComputedStyle(r).scrollPaddingBottom)||0,l=Math.min(4,r.childElementCount),i=0,u=0;for(let e of null!=(n=null==(t=ei.elements.floating)?void 0:t.childNodes)?n:[])if(e instanceof HTMLElement){let t=e.offsetTop,n=t+e.clientHeight+o,s=r.scrollTop,a=s+r.clientHeight;if(t>=s&&n<=a)l--;else{u=Math.max(0,Math.min(n,a)-Math.max(t,s)),i=e.clientHeight;break}}l>=1&&A(e=>{let t=i*l-u+o;return e>=t?e:t})}},async fn(e){let{listRef:t,overflowRef:n,onFallbackChange:r,offset:o=0,index:l=0,minItemsVisible:i=4,referenceOverflowThreshold:u=0,scrollRef:s,...a}=(0,Z.evaluate)(w,e),{rects:d,elements:{floating:f}}=e,p=t.current[l],m=(null==s?void 0:s.current)||f,v=f.clientTop||m.clientTop,g=0!==f.clientTop,h=0!==m.clientTop,b=f===m;if(!p)return{};let x={...e,...await X(-p.offsetTop-f.clientTop-d.reference.height/2-p.offsetHeight/2-o).fn(e)},E=await (0,U.detectOverflow)(ep(x,m.scrollHeight+v+f.clientTop),a),y=await (0,U.detectOverflow)(x,{...a,elementContext:"reference"}),S=(0,Z.max)(0,E.top),R=x.y+S,O=(m.scrollHeight>m.clientHeight?e=>e:Z.round)((0,Z.max)(0,m.scrollHeight+(g&&b||h?2*v:0)-S-(0,Z.max)(0,E.bottom)));if(m.style.maxHeight=O+"px",m.scrollTop=S,r){let e=m.offsetHeight=-u||y.bottom>=-u;c.flushSync(()=>r(e))}return n&&(n.current=await (0,U.detectOverflow)(ep({...x,y:R},m.offsetHeight+v+f.clientTop),a)),{y:R}}}:null,(i={padding:j,apply({availableWidth:e,availableHeight:t,elements:n}){Object.assign(n.floating.style,{overflow:"auto",maxWidth:`${e}px`,maxHeight:`min(var(--anchor-max-height, 100vh), ${t}px)`})}},{name:(O=(0,U.size)(i)).name,fn:O.fn,options:[i,s]})].filter(Boolean),whileElementsMounted:U.autoUpdate}),[ec=ee,ed=et]=ei.placement.split("-");"selection"===ee&&(ec="selection");let eg=(0,u.useMemo)(()=>({anchor:[ec,ed].filter(Boolean).join(" ")}),[ec,ed]),{getReferenceProps:eh,getFloatingProps:eb}=(P=(a=[function(e,t){let{open:n,elements:r}=e,{enabled:o=!0,overflowRef:l,scrollRef:i,onChange:s}=t,a=en(s),d=u.useRef(!1),f=u.useRef(null),p=u.useRef(null);u.useEffect(()=>{if(!o)return;function e(e){if(e.ctrlKey||!t||null==l.current)return;let n=e.deltaY,r=l.current.top>=-.5,o=l.current.bottom>=-.5,i=t.scrollHeight-t.clientHeight,u=n<0?-1:1,s=n<0?"max":"min";if(!(t.scrollHeight<=t.clientHeight))if(!r&&n>0||!o&&n<0)e.preventDefault(),c.flushSync(()=>{a(e=>e+Math[s](n,i*u))});else{let e;/firefox/i.test((e=navigator.userAgentData)&&Array.isArray(e.brands)?e.brands.map(e=>{let{brand:t,version:n}=e;return t+"/"+n}).join(" "):navigator.userAgent)&&(t.scrollTop+=n)}}let t=(null==i?void 0:i.current)||r.floating;if(n&&t)return t.addEventListener("wheel",e),requestAnimationFrame(()=>{f.current=t.scrollTop,null!=l.current&&(p.current={...l.current})}),()=>{f.current=null,p.current=null,t.removeEventListener("wheel",e)}},[o,n,r.floating,l,i,a]);let m=u.useMemo(()=>({onKeyDown(){d.current=!0},onWheel(){d.current=!1},onPointerMove(){d.current=!1},onScroll(){let e=(null==i?void 0:i.current)||r.floating;if(l.current&&e&&d.current){if(null!==f.current){let t=e.scrollTop-f.current;(l.current.bottom<-.5&&t<-1||l.current.top<-.5&&t>1)&&c.flushSync(()=>a(e=>e+t))}requestAnimationFrame(()=>{f.current=e.scrollTop})}}}),[r.floating,a,l,i]);return u.useMemo(()=>o?{floating:m}:{},[o,m])}(ei,{overflowRef:H,onChange:A})]).map(e=>null==e?void 0:e.reference),C=a.map(e=>null==e?void 0:e.floating),M=a.map(e=>null==e?void 0:e.item),I=u.useCallback(e=>ef(e,a,"reference"),P),L=u.useCallback(e=>ef(e,a,"floating"),C),T=u.useCallback(e=>ef(e,a,"item"),M),u.useMemo(()=>({getReferenceProps:I,getFloatingProps:L,getItemProps:T}),[I,L,T])),ex=(0,h.useEvent)(e=>{B(e),eo.setFloating(e)});return u.createElement(ev.Provider,{value:F},u.createElement(em.Provider,{value:{setFloating:ex,setReference:eo.setReference,styles:el,getReferenceProps:eh,getFloatingProps:eb,slot:eg}},e))}function eS(e,t,n){let r=(0,v.useDisposables)(),o=(0,h.useEvent)((e,t)=>{if(null==e)return[n,null];if("number"==typeof e)return[e,null];if("string"==typeof e){if(!t)return[n,null];let o=eR(e,t);return[o,n=>{let l=function e(t){let n=/var\((.*)\)/.exec(t);if(n){let t=n[1].indexOf(",");if(-1===t)return[n[1]];let r=n[1].slice(0,t).trim(),o=n[1].slice(t+1).trim();return o?[r,...e(o)]:[r]}return[]}(e);{let i=l.map(e=>window.getComputedStyle(t).getPropertyValue(e));r.requestAnimationFrame(function u(){r.nextFrame(u);let s=!1;for(let[e,n]of l.entries()){let r=window.getComputedStyle(t).getPropertyValue(n);if(i[e]!==r){i[e]=r,s=!0;break}}if(!s)return;let a=eR(e,t);o!==a&&(n(a),o=a)})}return r.dispose}]}return[n,null]}),l=(0,u.useMemo)(()=>o(e,t)[0],[e,t]),[i=l,s]=(0,u.useState)();return(0,m.useIsoMorphicEffect)(()=>{let[n,r]=o(e,t);if(s(n),r)return r(s)},[e,t]),i}function eR(e,t){let n=document.createElement("div");t.appendChild(n),n.style.setProperty("margin-top","0px","important"),n.style.setProperty("margin-top",e,"important");let r=parseFloat(window.getComputedStyle(n).marginTop)||0;return t.removeChild(n),r}ev.displayName="PlacementContext",e.s(["FloatingProvider",0,ey,"useFloatingPanel",0,eE,"useFloatingPanelProps",0,ex,"useFloatingReference",0,eh,"useFloatingReferenceProps",0,eb,"useResolvedAnchor",0,eg],919751);var ew=e.i(140721),eO=e.i(942803),eP=e.i(233137),eC=e.i(233538),eM=((t=eM||{})[t.First=0]="First",t[t.Previous=1]="Previous",t[t.Next=2]="Next",t[t.Last=3]="Last",t[t.Specific=4]="Specific",t[t.Nothing=5]="Nothing",t);function eI(e,t){let n=t.resolveItems();if(n.length<=0)return null;let r=t.resolveActiveIndex(),o=null!=r?r:-1;switch(e.focus){case 0:for(let e=0;e=0;--e)if(!t.resolveDisabled(n[e],e,n))return e;return r;case 2:for(let e=o+1;e=0;--e)if(!t.resolveDisabled(n[e],e,n))return e;return r;case 4:for(let r=0;r()=>{},()=>!1,()=>!e)),[n,r]=u.useState(eN.env.isHandoffComplete);return n&&!1===eN.env.isHandoffComplete&&r(!1),u.useEffect(()=>{!0!==n&&r(!0)},[n]),u.useEffect(()=>eN.env.handoff(),[]),!t&&n}e.s(["useServerHandoffComplete",0,eB],178677);let eK=(0,u.createContext)(!1),e_=u.Fragment,eW=(0,eD.forwardRefWithAs)(function(e,t){let n,r,o=(0,u.useRef)(null),l=(0,K.useSyncRefs)((0,K.optionalRef)(e=>{o.current=e}),t),i=A(o),s=function(e){let t=(0,u.useContext)(eK),n=(0,u.useContext)(ej),r=A(e),[o,l]=(0,u.useState)(()=>{var e;if(!t&&null!==n)return null!=(e=n.current)?e:null;if(eN.env.isServer)return null;let o=null==r?void 0:r.getElementById("headlessui-portal-root");if(o)return o;if(null===r)return null;let l=r.createElement("div");return l.setAttribute("id","headlessui-portal-root"),r.body.appendChild(l)});return(0,u.useEffect)(()=>{null!==o&&(null!=r&&r.body.contains(o)||null==r||r.body.appendChild(o))},[o,r]),(0,u.useEffect)(()=>{t||null!==n&&l(n.current)},[n,l,t]),o}(o),[a]=(0,u.useState)(()=>{var e;return eN.env.isServer?null:null!=(e=null==i?void 0:i.createElement("div"))?e:null}),d=(0,u.useContext)(e$),f=eB();(0,m.useIsoMorphicEffect)(()=>{!s||!a||s.contains(a)||(a.setAttribute("data-headlessui-portal",""),s.appendChild(a))},[s,a]),(0,m.useIsoMorphicEffect)(()=>{if(a&&d)return d.register(a)},[d,a]),n=(0,h.useEvent)(()=>{var e;s&&a&&(a instanceof Node&&s.contains(a)&&s.removeChild(a),s.childNodes.length<=0&&(null==(e=s.parentElement)||e.removeChild(s)))}),r=(0,u.useRef)(!1),(0,u.useEffect)(()=>(r.current=!1,()=>{r.current=!0,(0,eH.microTask)(()=>{r.current&&n()})}),[n]);let p=(0,eD.useRender)();return f&&s&&a?(0,c.createPortal)(p({ourProps:{ref:l},theirProps:e,slot:{},defaultTag:e_,name:"Portal"}),a):null}),eV=u.Fragment,ej=(0,u.createContext)(null),e$=(0,u.createContext)(null),eU=Object.assign((0,eD.forwardRefWithAs)(function(e,t){let n=(0,K.useSyncRefs)(t),{enabled:r=!0,...o}=e,l=(0,eD.useRender)();return r?u.default.createElement(eW,{...o,ref:n}):l({ourProps:{ref:n},theirProps:o,slot:{},defaultTag:e_,name:"Portal"})}),{Group:(0,eD.forwardRefWithAs)(function(e,t){let{target:n,...r}=e,o={ref:(0,K.useSyncRefs)(t)},l=(0,eD.useRender)();return u.default.createElement(ej.Provider,{value:n},l({ourProps:o,theirProps:r,defaultTag:eV,name:"Popover.Group"}))})});e.s(["Portal",0,eU,"useNestedPortals",0,function(){let e=(0,u.useContext)(e$),t=(0,u.useRef)([]),n=(0,h.useEvent)(n=>(t.current.push(n),e&&e.register(n),()=>r(n))),r=(0,h.useEvent)(n=>{let r=t.current.indexOf(n);-1!==r&&t.current.splice(r,1),e&&e.unregister(n)}),o=(0,u.useMemo)(()=>({register:n,unregister:r,portals:t}),[n,r,t]);return[t,(0,u.useMemo)(()=>function({children:e}){return u.default.createElement(e$.Provider,{value:o},e)},[o])]}],635307);var ez=((n=ez||{})[n.Open=0]="Open",n[n.Closed=1]="Closed",n),eQ=((r=eQ||{})[r.Single=0]="Single",r[r.Multi=1]="Multi",r),eY=((o=eY||{})[o.Pointer=0]="Pointer",o[o.Other=1]="Other",o),eq=((l=eq||{})[l.OpenListbox=0]="OpenListbox",l[l.CloseListbox=1]="CloseListbox",l[l.GoToOption=2]="GoToOption",l[l.Search=3]="Search",l[l.ClearSearch=4]="ClearSearch",l[l.RegisterOption=5]="RegisterOption",l[l.UnregisterOption=6]="UnregisterOption",l[l.SetButtonElement=7]="SetButtonElement",l[l.SetOptionsElement=8]="SetOptionsElement",l);function eG(e,t=e=>e){let n=null!==e.activeOptionIndex?e.options[e.activeOptionIndex]:null,r=(0,L.sortByDomNode)(t(e.options.slice()),e=>e.dataRef.current.domRef.current),o=n?r.indexOf(n):null;return -1===o&&(o=null),{options:r,activeOptionIndex:o}}let eX={1:e=>e.dataRef.current.disabled||1===e.listboxState?e:{...e,activeOptionIndex:null,listboxState:1,__demoMode:!1},0(e){if(e.dataRef.current.disabled||0===e.listboxState)return e;let t=e.activeOptionIndex,{isSelected:n}=e.dataRef.current,r=e.options.findIndex(e=>n(e.dataRef.current.value));return -1!==r&&(t=r),{...e,listboxState:0,activeOptionIndex:t,__demoMode:!1}},2(e,t){var n,r,o,l,i;if(e.dataRef.current.disabled||1===e.listboxState)return e;let u={...e,searchQuery:"",activationTrigger:null!=(n=t.trigger)?n:1,__demoMode:!1};if(t.focus===eM.Nothing)return{...u,activeOptionIndex:null};if(t.focus===eM.Specific)return{...u,activeOptionIndex:e.options.findIndex(e=>e.id===t.id)};if(t.focus===eM.Previous){let n=e.activeOptionIndex;if(null!==n){let l=e.options[n].dataRef.current.domRef,i=eI(t,{resolveItems:()=>e.options,resolveActiveIndex:()=>e.activeOptionIndex,resolveId:e=>e.id,resolveDisabled:e=>e.dataRef.current.disabled});if(null!==i){let t=e.options[i].dataRef.current.domRef;if((null==(r=l.current)?void 0:r.previousElementSibling)===t.current||(null==(o=t.current)?void 0:o.previousElementSibling)===null)return{...u,activeOptionIndex:i}}}}else if(t.focus===eM.Next){let n=e.activeOptionIndex;if(null!==n){let r=e.options[n].dataRef.current.domRef,o=eI(t,{resolveItems:()=>e.options,resolveActiveIndex:()=>e.activeOptionIndex,resolveId:e=>e.id,resolveDisabled:e=>e.dataRef.current.disabled});if(null!==o){let t=e.options[o].dataRef.current.domRef;if((null==(l=r.current)?void 0:l.nextElementSibling)===t.current||(null==(i=t.current)?void 0:i.nextElementSibling)===null)return{...u,activeOptionIndex:o}}}}let s=eG(e),a=eI(t,{resolveItems:()=>s.options,resolveActiveIndex:()=>s.activeOptionIndex,resolveId:e=>e.id,resolveDisabled:e=>e.dataRef.current.disabled});return{...u,...s,activeOptionIndex:a}},3:(e,t)=>{if(e.dataRef.current.disabled||1===e.listboxState)return e;let n=+(""===e.searchQuery),r=e.searchQuery+t.value.toLowerCase(),o=(null!==e.activeOptionIndex?e.options.slice(e.activeOptionIndex+n).concat(e.options.slice(0,e.activeOptionIndex+n)):e.options).find(e=>{var t;return!e.dataRef.current.disabled&&(null==(t=e.dataRef.current.textValue)?void 0:t.startsWith(r))}),l=o?e.options.indexOf(o):-1;return -1===l||l===e.activeOptionIndex?{...e,searchQuery:r}:{...e,searchQuery:r,activeOptionIndex:l,activationTrigger:1}},4:e=>e.dataRef.current.disabled||1===e.listboxState||""===e.searchQuery?e:{...e,searchQuery:""},5:(e,t)=>{let n={id:t.id,dataRef:t.dataRef},r=eG(e,e=>[...e,n]);return null===e.activeOptionIndex&&e.dataRef.current.isSelected(t.dataRef.current.value)&&(r.activeOptionIndex=r.options.indexOf(n)),{...e,...r}},6:(e,t)=>{let n=eG(e,e=>{let n=e.findIndex(e=>e.id===t.id);return -1!==n&&e.splice(n,1),e});return{...e,...n,activationTrigger:1}},7:(e,t)=>e.buttonElement===t.element?e:{...e,buttonElement:t.element},8:(e,t)=>e.optionsElement===t.element?e:{...e,optionsElement:t.element}},eJ=(0,u.createContext)(null);function eZ(e){let t=(0,u.useContext)(eJ);if(null===t){let t=Error(`<${e} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,eZ),t}return t}eJ.displayName="ListboxActionsContext";let e0=(0,u.createContext)(null);function e1(e){let t=(0,u.useContext)(e0);if(null===t){let t=Error(`<${e} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,e1),t}return t}function e3(e,t){return(0,eT.match)(t.type,eX,e,t)}e0.displayName="ListboxDataContext";let e7=u.Fragment,e4=(0,u.createContext)(!1),e5=eD.RenderFeatures.RenderStrategy|eD.RenderFeatures.Static,e2=u.Fragment,e8=(0,eD.forwardRefWithAs)(function(e,t){var n;let r=(0,$.useDisabled)(),{value:o,defaultValue:l,form:i,name:s,onChange:a,by:c,invalid:d=!1,disabled:g=r||!1,horizontal:b=!1,multiple:x=!1,__demoMode:E=!1,...y}=e,S=b?"horizontal":"vertical",R=(0,K.useSyncRefs)(t),w=(0,p.useDefaultValue)(l),[O=x?[]:void 0,P]=(0,f.useControllable)(o,a,w),[C,M]=(0,u.useReducer)(e3,{dataRef:(0,u.createRef)(),listboxState:+!E,options:[],searchQuery:"",activeOptionIndex:null,activationTrigger:1,optionsVisible:!1,buttonElement:null,optionsElement:null,__demoMode:E}),I=(0,u.useRef)({static:!1,hold:!1}),T=(0,u.useRef)(new Map),D=function(e=function(e,t){return null!==e&&null!==t&&"object"==typeof e&&"object"==typeof t&&"id"in e&&"id"in t?e.id===t.id:e===t}){return(0,u.useCallback)((t,n)=>"string"==typeof e?(null==t?void 0:t[e])===(null==n?void 0:n[e]):e(t,n),[e])}(c),F=(0,u.useCallback)(e=>(0,eT.match)(A.mode,{1:()=>O.some(t=>D(t,e)),0:()=>D(O,e)}),[O]),A=(0,u.useMemo)(()=>({...C,value:O,disabled:g,invalid:d,mode:+!!x,orientation:S,compare:D,isSelected:F,optionsPropsRef:I,listRef:T}),[O,g,d,x,C,T]);(0,m.useIsoMorphicEffect)(()=>{C.dataRef.current=A},[A]),k(0===A.listboxState,[A.buttonElement,A.optionsElement],(e,t)=>{var n;M({type:1}),(0,L.isFocusableElement)(t,L.FocusableMode.Loose)||(e.preventDefault(),null==(n=A.buttonElement)||n.focus())});let H=(0,u.useMemo)(()=>({open:0===A.listboxState,disabled:g,invalid:d,value:O}),[A,g,O,d]),N=(0,h.useEvent)(e=>{let t=A.options.find(t=>t.id===e);t&&z(t.dataRef.current.value)}),B=(0,h.useEvent)(()=>{if(null!==A.activeOptionIndex){let{dataRef:e,id:t}=A.options[A.activeOptionIndex];z(e.current.value),M({type:2,focus:eM.Specific,id:t})}}),_=(0,h.useEvent)(()=>M({type:0})),W=(0,h.useEvent)(()=>M({type:1})),V=(0,v.useDisposables)(),j=(0,h.useEvent)((e,t,n)=>{V.dispose(),V.microTask(()=>e===eM.Specific?M({type:2,focus:eM.Specific,id:t,trigger:n}):M({type:2,focus:e,trigger:n}))}),U=(0,h.useEvent)((e,t)=>(M({type:5,id:e,dataRef:t}),()=>M({type:6,id:e}))),z=(0,h.useEvent)(e=>(0,eT.match)(A.mode,{0:()=>null==P?void 0:P(e),1(){let t=A.value.slice(),n=t.findIndex(t=>D(t,e));return -1===n?t.push(e):t.splice(n,1),null==P?void 0:P(t)}})),Q=(0,h.useEvent)(e=>M({type:3,value:e})),Y=(0,h.useEvent)(()=>M({type:4})),q=(0,h.useEvent)(e=>{M({type:7,element:e})}),G=(0,h.useEvent)(e=>{M({type:8,element:e})}),X=(0,u.useMemo)(()=>({onChange:z,registerOption:U,goToOption:j,closeListbox:W,openListbox:_,selectActiveOption:B,selectOption:N,search:Q,clearSearch:Y,setButtonElement:q,setOptionsElement:G}),[]),[J,Z]=(0,eA.useLabels)({inherit:!0}),ee=(0,u.useCallback)(()=>{if(void 0!==w)return null==P?void 0:P(w)},[P,w]),et=(0,eD.useRender)();return u.default.createElement(Z,{value:J,props:{htmlFor:null==(n=A.buttonElement)?void 0:n.id},slot:{open:0===A.listboxState,disabled:g}},u.default.createElement(ey,null,u.default.createElement(eJ.Provider,{value:X},u.default.createElement(e0.Provider,{value:A},u.default.createElement(eP.OpenClosedProvider,{value:(0,eT.match)(A.listboxState,{0:eP.State.Open,1:eP.State.Closed})},null!=s&&null!=O&&u.default.createElement(ew.FormFields,{disabled:g,data:{[s]:O},form:i,onReset:ee}),et({ourProps:{ref:R},theirProps:y,slot:H,defaultTag:e7,name:"Listbox"}))))))}),e9=(0,eD.forwardRefWithAs)(function(e,t){var n;let r=e1("Listbox.Button"),o=eZ("Listbox.Button"),l=(0,u.useId)(),i=(0,eO.useProvidedId)(),{id:f=i||`headlessui-listbox-button-${l}`,disabled:p=r.disabled||!1,autoFocus:m=!1,...v}=e,g=(0,K.useSyncRefs)(t,eh(),o.setButtonElement),b=eb(),x=(0,h.useEvent)(e=>{switch(e.key){case ek.Keys.Enter:(0,eL.attemptSubmit)(e.currentTarget);break;case ek.Keys.Space:case ek.Keys.ArrowDown:e.preventDefault(),(0,c.flushSync)(()=>o.openListbox()),r.value||o.goToOption(eM.First);break;case ek.Keys.ArrowUp:e.preventDefault(),(0,c.flushSync)(()=>o.openListbox()),r.value||o.goToOption(eM.Last)}}),E=(0,h.useEvent)(e=>{e.key===ek.Keys.Space&&e.preventDefault()}),y=(0,h.useEvent)(e=>{var t;if((0,eC.isDisabledReactIssue7711)(e.currentTarget))return e.preventDefault();0===r.listboxState?((0,c.flushSync)(()=>o.closeListbox()),null==(t=r.buttonElement)||t.focus({preventScroll:!0})):(e.preventDefault(),o.openListbox())}),S=(0,h.useEvent)(e=>e.preventDefault()),R=(0,eA.useLabelledBy)([f]),w=(0,eF.useDescribedBy)(),{isFocusVisible:O,focusProps:P}=(0,s.useFocusRing)({autoFocus:m}),{isHovered:C,hoverProps:M}=(0,a.useHover)({isDisabled:p}),{pressed:I,pressProps:L}=(0,d.useActivePress)({disabled:p}),T=(0,u.useMemo)(()=>({open:0===r.listboxState,active:I||0===r.listboxState,disabled:p,invalid:r.invalid,value:r.value,hover:C,focus:O,autofocus:m}),[r.listboxState,r.value,p,C,O,I,r.invalid,m]),D=(0,eD.mergeProps)(b(),{ref:g,id:f,type:(0,H.useResolveButtonType)(e,r.buttonElement),"aria-haspopup":"listbox","aria-controls":null==(n=r.optionsElement)?void 0:n.id,"aria-expanded":0===r.listboxState,"aria-labelledby":R,"aria-describedby":w,disabled:p||void 0,autoFocus:m,onKeyDown:x,onKeyUp:E,onKeyPress:S,onClick:y},P,M,L);return(0,eD.useRender)()({ourProps:D,theirProps:v,slot:T,defaultTag:"button",name:"Listbox.Button"})}),e6=eA.Label,te=(0,eD.forwardRefWithAs)(function(e,t){var n,r;let o=(0,u.useId)(),{id:l=`headlessui-listbox-options-${o}`,anchor:i,portal:s=!1,modal:a=!0,transition:d=!1,...f}=e,p=eg(i),[E,y]=(0,u.useState)(null);p&&(s=!0);let S=e1("Listbox.Options"),R=eZ("Listbox.Options"),O=A(S.optionsElement),P=(0,eP.useOpenClosed)(),[M,T]=(0,j.useTransition)(d,E,null!==P?(P&eP.State.Open)===eP.State.Open:0===S.listboxState);I(M,S.buttonElement,R.closeListbox),B(!S.__demoMode&&a&&0===S.listboxState,O),function(e,{allowed:t,disallowed:n}={}){let r=w(e,"inert-others");(0,m.useIsoMorphicEffect)(()=>{var e,o;if(!r)return;let l=(0,b.disposables)();for(let t of null!=(e=null==n?void 0:n())?e:[])t&&l.add(C(t));let i=null!=(o=null==t?void 0:t())?o:[];for(let e of i){if(!e)continue;let t=(0,x.getOwnerDocument)(e);if(!t)continue;let n=e.parentElement;for(;n&&n!==t.body;){for(let e of n.children)i.some(t=>e.contains(t))||l.add(C(e));n=n.parentElement}}return l.dispose},[r,t,n])}(!S.__demoMode&&a&&0===S.listboxState,{allowed:(0,u.useCallback)(()=>[S.buttonElement,S.optionsElement],[S.buttonElement,S.optionsElement])});let D=!function(e,t){let n=(0,u.useRef)({left:0,top:0});if((0,m.useIsoMorphicEffect)(()=>{if(!t)return;let e=t.getBoundingClientRect();e&&(n.current=e)},[e,t]),null==t||!e||t===document.activeElement)return!1;let r=t.getBoundingClientRect();return r.top!==n.current.top||r.left!==n.current.left}(0!==S.listboxState,S.buttonElement)&&M,F=function(e,t){let[n,r]=(0,u.useState)(t);return e||n===t||r(t),e?n:t}(M&&1===S.listboxState,S.value),k=(0,h.useEvent)(e=>S.compare(F,e)),H=(0,u.useMemo)(()=>{var e;if(null==p||!(null!=(e=null==p?void 0:p.to)&&e.includes("selection")))return null;let t=S.options.findIndex(e=>k(e.dataRef.current.value));return -1===t&&(t=0),t},[p,S.options]),[N,_]=eE((()=>{if(null==p)return;if(null===H)return{...p,inner:void 0};let e=Array.from(S.listRef.current.values());return{...p,inner:{listRef:{current:e},index:H}}})()),W=ex(),V=(0,K.useSyncRefs)(t,p?N:null,R.setOptionsElement,y),$=(0,v.useDisposables)();(0,u.useEffect)(()=>{var e;let t=S.optionsElement;t&&0===S.listboxState&&t!==(null==(e=(0,x.getOwnerDocument)(t))?void 0:e.activeElement)&&(null==t||t.focus({preventScroll:!0}))},[S.listboxState,S.optionsElement]);let U=(0,h.useEvent)(e=>{var t,n;switch($.dispose(),e.key){case ek.Keys.Space:if(""!==S.searchQuery)return e.preventDefault(),e.stopPropagation(),R.search(e.key);case ek.Keys.Enter:if(e.preventDefault(),e.stopPropagation(),null!==S.activeOptionIndex){let{dataRef:e}=S.options[S.activeOptionIndex];R.onChange(e.current.value)}0===S.mode&&((0,c.flushSync)(()=>R.closeListbox()),null==(t=S.buttonElement)||t.focus({preventScroll:!0}));break;case(0,eT.match)(S.orientation,{vertical:ek.Keys.ArrowDown,horizontal:ek.Keys.ArrowRight}):return e.preventDefault(),e.stopPropagation(),R.goToOption(eM.Next);case(0,eT.match)(S.orientation,{vertical:ek.Keys.ArrowUp,horizontal:ek.Keys.ArrowLeft}):return e.preventDefault(),e.stopPropagation(),R.goToOption(eM.Previous);case ek.Keys.Home:case ek.Keys.PageUp:return e.preventDefault(),e.stopPropagation(),R.goToOption(eM.First);case ek.Keys.End:case ek.Keys.PageDown:return e.preventDefault(),e.stopPropagation(),R.goToOption(eM.Last);case ek.Keys.Escape:e.preventDefault(),e.stopPropagation(),(0,c.flushSync)(()=>R.closeListbox()),null==(n=S.buttonElement)||n.focus({preventScroll:!0});return;case ek.Keys.Tab:e.preventDefault(),e.stopPropagation(),(0,c.flushSync)(()=>R.closeListbox()),(0,L.focusFrom)(S.buttonElement,e.shiftKey?L.Focus.Previous:L.Focus.Next);break;default:1===e.key.length&&(R.search(e.key),$.setTimeout(()=>R.clearSearch(),350))}}),z=null==(n=S.buttonElement)?void 0:n.id,Q=(0,u.useMemo)(()=>({open:0===S.listboxState}),[S.listboxState]),Y=(0,eD.mergeProps)(p?W():{},{id:l,ref:V,"aria-activedescendant":null===S.activeOptionIndex||null==(r=S.options[S.activeOptionIndex])?void 0:r.id,"aria-multiselectable":1===S.mode||void 0,"aria-labelledby":z,"aria-orientation":S.orientation,onKeyDown:U,role:"listbox",tabIndex:0===S.listboxState?0:void 0,style:{...f.style,..._,"--button-width":g(S.buttonElement,!0).width},...(0,j.transitionDataAttributes)(T)}),q=(0,eD.useRender)();return u.default.createElement(eU,{enabled:!!s&&(e.static||M)},u.default.createElement(e0.Provider,{value:1===S.mode?S:{...S,isSelected:k}},q({ourProps:Y,theirProps:f,slot:Q,defaultTag:"div",features:e5,visible:D,name:"Listbox.Options"})))}),tt=(0,eD.forwardRefWithAs)(function(e,t){let n,r,o,l=(0,u.useId)(),{id:i=`headlessui-listbox-option-${l}`,disabled:s=!1,value:a,...d}=e,f=!0===(0,u.useContext)(e4),p=e1("Listbox.Option"),v=eZ("Listbox.Option"),g=null!==p.activeOptionIndex&&p.options[p.activeOptionIndex].id===i,x=p.isSelected(a),E=(0,u.useRef)(null),y=(n=(0,u.useRef)(""),r=(0,u.useRef)(""),(0,h.useEvent)(()=>{let e=E.current;if(!e)return"";let t=e.innerText;if(n.current===t)return r.current;let o=(function(e){let t=e.getAttribute("aria-label");if("string"==typeof t)return t.trim();let n=e.getAttribute("aria-labelledby");if(n){let e=n.split(" ").map(e=>{let t=document.getElementById(e);if(t){let e=t.getAttribute("aria-label");return"string"==typeof e?e.trim():W(t).trim()}return null}).filter(Boolean);if(e.length>0)return e.join(", ")}return W(e).trim()})(e).trim().toLowerCase();return n.current=t,r.current=o,o})),S=(0,M.useLatestValue)({disabled:s,value:a,domRef:E,get textValue(){return y()}}),R=(0,K.useSyncRefs)(t,E,e=>{e?p.listRef.current.set(i,e):p.listRef.current.delete(i)});(0,m.useIsoMorphicEffect)(()=>{if(!p.__demoMode&&0===p.listboxState&&g&&0!==p.activationTrigger)return(0,b.disposables)().requestAnimationFrame(()=>{var e,t;null==(t=null==(e=E.current)?void 0:e.scrollIntoView)||t.call(e,{block:"nearest"})})},[E,g,p.__demoMode,p.listboxState,p.activationTrigger,p.activeOptionIndex]),(0,m.useIsoMorphicEffect)(()=>{if(!f)return v.registerOption(i,S)},[S,i,f]);let w=(0,h.useEvent)(e=>{var t;if(s)return e.preventDefault();v.onChange(a),0===p.mode&&((0,c.flushSync)(()=>v.closeListbox()),null==(t=p.buttonElement)||t.focus({preventScroll:!0}))}),O=(0,h.useEvent)(()=>{if(s)return v.goToOption(eM.Nothing);v.goToOption(eM.Specific,i)}),P=(o=(0,u.useRef)([-1,-1]),{wasMoved(e){let t=V(e);return(o.current[0]!==t[0]||o.current[1]!==t[1])&&(o.current=t,!0)},update(e){o.current=V(e)}}),C=(0,h.useEvent)(e=>{P.update(e),!s&&(g||v.goToOption(eM.Specific,i,0))}),I=(0,h.useEvent)(e=>{P.wasMoved(e)&&(s||g||v.goToOption(eM.Specific,i,0))}),L=(0,h.useEvent)(e=>{P.wasMoved(e)&&(s||g&&v.goToOption(eM.Nothing))}),T=(0,u.useMemo)(()=>({active:g,focus:g,selected:x,disabled:s,selectedOption:x&&f}),[g,x,s,f]),D=f?{}:{id:i,ref:R,role:"option",tabIndex:!0===s?void 0:-1,"aria-disabled":!0===s||void 0,"aria-selected":x,disabled:void 0,onClick:w,onFocus:O,onPointerEnter:C,onMouseEnter:C,onPointerMove:I,onMouseMove:I,onPointerLeave:L,onMouseLeave:L},F=(0,eD.useRender)();return!x&&f?null:F({ourProps:D,theirProps:d,slot:T,defaultTag:"div",name:"Listbox.Option"})}),tn=Object.assign(e8,{Button:e9,Label:e6,Options:te,Option:tt,SelectedOption:(0,eD.forwardRefWithAs)(function(e,t){let{options:n,placeholder:r,...o}=e,l={ref:(0,K.useSyncRefs)(t)},i=e1("ListboxSelectedOption"),s=(0,u.useMemo)(()=>({}),[]),a=void 0===i.value||null===i.value||1===i.mode&&Array.isArray(i.value)&&0===i.value.length,c=(0,eD.useRender)();return u.default.createElement(e4.Provider,{value:!0},c({ourProps:l,theirProps:{...o,children:u.default.createElement(u.default.Fragment,null,r&&a?r:n)},slot:s,defaultTag:e2,name:"ListboxSelectedOption"}))})});e.s(["Listbox",0,tn,"ListboxButton",0,e9,"ListboxOption",0,tt,"ListboxOptions",0,te],495470);var tr=e.i(444755);let to=(0,e.i(673706).makeClassName)("SelectItem"),tl=u.default.forwardRef((e,t)=>{let{value:n,icon:r,className:o,children:l}=e,s=(0,i.__rest)(e,["value","icon","className","children"]);return u.default.createElement(tt,Object.assign({className:(0,tr.tremorTwMerge)(to("root"),"flex justify-start items-center cursor-default text-tremor-default px-2.5 py-2.5","data-[focus]:bg-tremor-background-muted data-[focus]:text-tremor-content-strong data-[selected]:text-tremor-content-strong data-[selected]:bg-tremor-background-muted text-tremor-content-emphasis","dark:data-[focus]:bg-dark-tremor-background-muted dark:data-[focus]:text-dark-tremor-content-strong dark:data-[selected]:text-dark-tremor-content-strong dark:data-[selected]:bg-dark-tremor-background-muted dark:text-dark-tremor-content-emphasis",o),ref:t,key:n,value:n},s),r&&u.default.createElement(r,{className:(0,tr.tremorTwMerge)(to("icon"),"flex-none w-5 h-5 mr-1.5","text-tremor-content-subtle","dark:text-dark-tremor-content-subtle")}),u.default.createElement("span",{className:"whitespace-nowrap truncate"},null!=l?l:n))});tl.displayName="SelectItem",e.s(["default",0,tl],333771),e.s(["SelectItem",0,tl],35983)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0q9_qqi.nzx5l.js b/litellm/proxy/_experimental/out/_next/static/chunks/0q9_qqi.nzx5l.js new file mode 100644 index 00000000000..ccf26cad683 --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0q9_qqi.nzx5l.js @@ -0,0 +1 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,755151,e=>{"use strict";var a=e.i(247153);e.s(["DownOutlined",()=>a.default])},916925,e=>{"use strict";var a,o=e.i(555987),r=((a={}).A2A_Agent="A2A Agent",a.AI21="Ai21",a.AI21_CHAT="Ai21 Chat",a.AIML="AI/ML API",a.AIOHTTP_OPENAI="Aiohttp Openai",a.Anthropic="Anthropic",a.ANTHROPIC_TEXT="Anthropic Text",a.AssemblyAI="AssemblyAI",a.AUTO_ROUTER="Auto Router",a.Bedrock="Amazon Bedrock",a.BedrockMantle="Amazon Bedrock Mantle",a.SageMaker="AWS SageMaker",a.Azure="Azure",a.Azure_AI_Studio="Azure AI Foundry (Studio)",a.AZURE_TEXT="Azure Text",a.BASETEN="Baseten",a.BYTEZ="Bytez",a.Cerebras="Cerebras",a.CLARIFAI="Clarifai",a.CLOUDFLARE="Cloudflare",a.CODESTRAL="Codestral",a.Cohere="Cohere",a.COHERE_CHAT="Cohere Chat",a.COMETAPI="Cometapi",a.COMPACTIFAI="Compactifai",a.Cursor="Cursor",a.Dashscope="Dashscope",a.Databricks="Databricks (Qwen API)",a.DATAROBOT="Datarobot",a.DeepInfra="DeepInfra",a.Deepgram="Deepgram",a.Deepseek="Deepseek",a.DOCKER_MODEL_RUNNER="Docker Model Runner",a.DOTPROMPT="Dotprompt",a.ElevenLabs="ElevenLabs",a.EMPOWER="Empower",a.FalAI="Fal AI",a.FEATHERLESS_AI="Featherless Ai",a.FireworksAI="Fireworks AI",a.FRIENDLIAI="Friendliai",a.GALADRIEL="Galadriel",a.GITHUB_COPILOT="Github Copilot",a.Google_AI_Studio="Google AI Studio",a.GradientAI="GradientAI",a.Groq="Groq",a.HEROKU="Heroku",a.Hosted_Vllm="vllm",a.HUGGINGFACE="Huggingface",a.HYPERBOLIC="Hyperbolic",a.Infinity="Infinity",a.JinaAI="Jina AI",a.LAMBDA_AI="Lambda Ai",a.LEMONADE="Lemonade",a.LLAMAFILE="Llamafile",a.LM_STUDIO="Lm Studio",a.LLAMA="Meta Llama",a.MARITALK="Maritalk",a.MiniMax="MiniMax",a.MistralAI="Mistral AI",a.MOONSHOT="Moonshot",a.MORPH="Morph",a.NEBIUS="Nebius",a.NLP_CLOUD="Nlp Cloud",a.NOVITA="Novita",a.NSCALE="Nscale",a.NVIDIA_NIM="Nvidia Nim",a.Ollama="Ollama",a.OLLAMA_CHAT="Ollama Chat",a.OOBABOOGA="Oobabooga",a.OpenAI="OpenAI",a.OPENAI_LIKE="Openai Like",a.OpenAI_Compatible="OpenAI-Compatible Chat Completions (Together AI, vLLM, etc.)",a.OpenAI_Text="OpenAI Text Completion",a.OpenAI_Text_Compatible="OpenAI-Compatible Completions (legacy /v1/completions)",a.Openrouter="Openrouter",a.Oracle="Oracle Cloud Infrastructure (OCI)",a.OVHCLOUD="Ovhcloud",a.Perplexity="Perplexity",a.PETALS="Petals",a.PG_VECTOR="Pg Vector",a.PREDIBASE="Predibase",a.RECRAFT="Recraft",a.REPLICATE="Replicate",a.RunwayML="RunwayML",a.SAGEMAKER_LEGACY="Sagemaker",a.Sambanova="Sambanova",a.SAP="SAP Generative AI Hub",a.Snowflake="Snowflake",a.Soniox="Soniox",a.TEXT_COMPLETION_CODESTRAL="Text-Completion-Codestral",a.TogetherAI="TogetherAI",a.TOPAZ="Topaz",a.Triton="Triton",a.V0="V0",a.VERCEL_AI_GATEWAY="Vercel Ai Gateway",a.Vertex_AI="Vertex AI (Anthropic, Gemini, etc.)",a.VERTEX_AI_BETA="Vertex Ai Beta",a.VLLM="Vllm",a.VolcEngine="VolcEngine",a.Voyage="Voyage AI",a.WANDB="Wandb",a.WATSONX="Watsonx",a.WATSONX_TEXT="Watsonx Text",a.xAI="xAI",a.XINFERENCE="Xinference",a.ZAI="Z.AI (Zhipu AI)",a);let t={A2A_Agent:"a2a_agent",AI21:"ai21",AI21_CHAT:"ai21_chat",AIML:"aiml",AIOHTTP_OPENAI:"aiohttp_openai",Anthropic:"anthropic",ANTHROPIC_TEXT:"anthropic_text",AssemblyAI:"assemblyai",AUTO_ROUTER:"auto_router",Azure:"azure",Azure_AI_Studio:"azure_ai",AZURE_TEXT:"azure_text",BASETEN:"baseten",Bedrock:"bedrock",BedrockMantle:"bedrock_mantle",BYTEZ:"bytez",Cerebras:"cerebras",CLARIFAI:"clarifai",CLOUDFLARE:"cloudflare",CODESTRAL:"codestral",Cohere:"cohere",COHERE_CHAT:"cohere_chat",COMETAPI:"cometapi",COMPACTIFAI:"compactifai",Cursor:"cursor",Dashscope:"dashscope",Databricks:"databricks",DATAROBOT:"datarobot",DeepInfra:"deepinfra",Deepgram:"deepgram",Deepseek:"deepseek",DOCKER_MODEL_RUNNER:"docker_model_runner",DOTPROMPT:"dotprompt",ElevenLabs:"elevenlabs",EMPOWER:"empower",FalAI:"fal_ai",FEATHERLESS_AI:"featherless_ai",FireworksAI:"fireworks_ai",FRIENDLIAI:"friendliai",GALADRIEL:"galadriel",GITHUB_COPILOT:"github_copilot",Google_AI_Studio:"gemini",GradientAI:"gradient_ai",Groq:"groq",HEROKU:"heroku",Hosted_Vllm:"hosted_vllm",HUGGINGFACE:"huggingface",HYPERBOLIC:"hyperbolic",Infinity:"infinity",JinaAI:"jina_ai",LAMBDA_AI:"lambda_ai",LEMONADE:"lemonade",LLAMAFILE:"llamafile",LLAMA:"meta_llama",LM_STUDIO:"lm_studio",MARITALK:"maritalk",MiniMax:"minimax",MistralAI:"mistral",MOONSHOT:"moonshot",MORPH:"morph",NEBIUS:"nebius",NLP_CLOUD:"nlp_cloud",NOVITA:"novita",NSCALE:"nscale",NVIDIA_NIM:"nvidia_nim",Ollama:"ollama",OLLAMA_CHAT:"ollama_chat",OOBABOOGA:"oobabooga",OpenAI:"openai",OPENAI_LIKE:"openai_like",OpenAI_Compatible:"openai",OpenAI_Text:"text-completion-openai",OpenAI_Text_Compatible:"text-completion-openai",Openrouter:"openrouter",Oracle:"oci",OVHCLOUD:"ovhcloud",Perplexity:"perplexity",PETALS:"petals",PG_VECTOR:"pg_vector",PREDIBASE:"predibase",RECRAFT:"recraft",REPLICATE:"replicate",RunwayML:"runwayml",SAGEMAKER_LEGACY:"sagemaker",SageMaker:"sagemaker_chat",Sambanova:"sambanova",SAP:"sap",Snowflake:"snowflake",Soniox:"soniox",TEXT_COMPLETION_CODESTRAL:"text-completion-codestral",TogetherAI:"together_ai",TOPAZ:"topaz",Triton:"triton",V0:"v0",VERCEL_AI_GATEWAY:"vercel_ai_gateway",Vertex_AI:"vertex_ai",VERTEX_AI_BETA:"vertex_ai_beta",VLLM:"vllm",VolcEngine:"volcengine",Voyage:"voyage",WANDB:"wandb",WATSONX:"watsonx",WATSONX_TEXT:"watsonx_text",xAI:"xai",XINFERENCE:"xinference",ZAI:"zai"},i=new Set(["bedrock_mantle"]),n="/ui/assets/logos/",l={"A2A Agent":`${n}a2a_agent.png`,Ai21:`${n}ai21.svg`,"Ai21 Chat":`${n}ai21.svg`,"AI/ML API":`${n}aiml_api.svg`,"Aiohttp Openai":`${n}openai_small.svg`,Anthropic:`${n}anthropic.svg`,"Anthropic Text":`${n}anthropic.svg`,AssemblyAI:`${n}assemblyai_small.png`,Azure:`${n}microsoft_azure.svg`,"Azure AI Foundry (Studio)":`${n}microsoft_azure.svg`,"Azure Text":`${n}microsoft_azure.svg`,Baseten:`${n}baseten.svg`,"Amazon Bedrock":`${n}bedrock.svg`,"Amazon Bedrock Mantle":`${n}bedrock.svg`,"AWS SageMaker":`${n}bedrock.svg`,Cerebras:`${n}cerebras.svg`,Cloudflare:`${n}cloudflare.svg`,Codestral:`${n}mistral.svg`,Cohere:`${n}cohere.svg`,"Cohere Chat":`${n}cohere.svg`,Cometapi:`${n}cometapi.svg`,Cursor:`${n}cursor.svg`,"Databricks (Qwen API)":`${n}databricks.svg`,Dashscope:`${n}dashscope.svg`,Deepseek:`${n}deepseek.svg`,Deepgram:`${n}deepgram.png`,DeepInfra:`${n}deepinfra.png`,ElevenLabs:`${n}elevenlabs.png`,"Fal AI":`${n}fal_ai.jpg`,"Featherless Ai":`${n}featherless.svg`,"Fireworks AI":`${n}fireworks.svg`,Friendliai:`${n}friendli.svg`,"Github Copilot":`${n}github_copilot.svg`,"Google AI Studio":`${n}google.svg`,GradientAI:`${n}gradientai.svg`,Groq:`${n}groq.svg`,vllm:`${n}vllm.png`,Huggingface:`${n}huggingface.svg`,Hyperbolic:`${n}hyperbolic.svg`,Infinity:`${n}infinity.png`,"Jina AI":`${n}jina.png`,"Lambda Ai":`${n}lambda.svg`,"Lm Studio":`${n}lmstudio.svg`,"Meta Llama":`${n}meta_llama.svg`,MiniMax:`${n}minimax.svg`,"Mistral AI":`${n}mistral.svg`,Moonshot:`${n}moonshot.svg`,Morph:`${n}morph.svg`,Nebius:`${n}nebius.svg`,Novita:`${n}novita.svg`,"Nvidia Nim":`${n}nvidia_nim.svg`,Ollama:`${n}ollama.svg`,"Ollama Chat":`${n}ollama.svg`,Oobabooga:`${n}openai_small.svg`,OpenAI:`${n}openai_small.svg`,"Openai Like":`${n}openai_small.svg`,"OpenAI Text Completion":`${n}openai_small.svg`,"OpenAI-Compatible Completions (legacy /v1/completions)":`${n}openai_small.svg`,"OpenAI-Compatible Chat Completions (Together AI, vLLM, etc.)":`${n}openai_small.svg`,Openrouter:`${n}openrouter.svg`,"Oracle Cloud Infrastructure (OCI)":`${n}oracle.svg`,Perplexity:`${n}perplexity-ai.svg`,Recraft:`${n}recraft.svg`,Replicate:`${n}replicate.svg`,RunwayML:`${n}runwayml.png`,Sagemaker:`${n}bedrock.svg`,Sambanova:`${n}sambanova.svg`,"SAP Generative AI Hub":`${n}sap.png`,Snowflake:`${n}snowflake.svg`,Soniox:`${n}soniox.svg`,"Text-Completion-Codestral":`${n}mistral.svg`,TogetherAI:`${n}togetherai.svg`,Topaz:`${n}topaz.svg`,Triton:`${n}nvidia_triton.png`,V0:`${n}v0.svg`,"Vercel Ai Gateway":`${n}vercel.svg`,"Vertex AI (Anthropic, Gemini, etc.)":`${n}google.svg`,"Vertex Ai Beta":`${n}google.svg`,Vllm:`${n}vllm.png`,VolcEngine:`${n}volcengine.png`,"Voyage AI":`${n}voyage.webp`,Watsonx:`${n}watsonx.svg`,"Watsonx Text":`${n}watsonx.svg`,xAI:`${n}xai.svg`,Xinference:`${n}xinference.svg`};e.s(["Providers",()=>r,"getPlaceholder",0,e=>{if("AI/ML API"===e)return"aiml/flux-pro/v1.1";if("Vertex AI (Anthropic, Gemini, etc.)"===e)return"gemini-pro";if("Anthropic"==e)return"claude-3-opus";if("Amazon Bedrock"==e)return"claude-3-opus";if("AWS SageMaker"==e)return"sagemaker/jumpstart-dft-meta-textgeneration-llama-2-7b";else if("Google AI Studio"==e)return"gemini-pro";else if("Azure AI Foundry (Studio)"==e)return"azure_ai/command-r-plus";else if("Azure"==e)return"my-deployment";else if("Oracle Cloud Infrastructure (OCI)"==e)return"oci/xai.grok-4";else if("Snowflake"==e)return"snowflake/mistral-7b";else if("Voyage AI"==e)return"voyage/";else if("Jina AI"==e)return"jina_ai/";else if("VolcEngine"==e)return"volcengine/";else if("DeepInfra"==e)return"deepinfra/";else if("Fal AI"==e)return"fal_ai/fal-ai/flux-pro/v1.1-ultra";else if("RunwayML"==e)return"runwayml/gen4_turbo";else if("Watsonx"===e)return"watsonx/ibm/granite-3-3-8b-instruct";else if("Cursor"===e)return"cursor/claude-4-sonnet";else if("Z.AI (Zhipu AI)"===e)return"zai/glm-4.5";else return"gpt-3.5-turbo"},"getProviderLogoAndName",0,e=>{if(!e)return{logo:"",displayName:"-"};if("gemini"===e.toLowerCase()){let e="Google AI Studio";return{logo:(0,o.resolveLogoSrc)(l[e])??"",displayName:e}}let a=Object.keys(t).find(a=>t[a].toLowerCase()===e.toLowerCase())??Object.keys(t).find(a=>a.toLowerCase()===e.toLowerCase());if(!a)return{logo:"",displayName:e};let i=r[a];return{logo:(0,o.resolveLogoSrc)(l[i])??"",displayName:i}},"getProviderModels",0,(e,a)=>{console.log(`Provider key: ${e}`);let o=t[e];console.log(`Provider mapped to: ${o}`);let r=[];return e&&"object"==typeof a&&(Object.entries(a).forEach(([e,a])=>{if(null!==a&&"object"==typeof a&&"litellm_provider"in a){let t=a.litellm_provider,n="string"==typeof t&&(t.startsWith(`${o}_`)||t.startsWith(`${o}-`));(t===o||n&&!i.has(t))&&r.push(e)}}),"Cohere"==e&&(console.log("Adding cohere chat models"),Object.entries(a).forEach(([e,a])=>{null!==a&&"object"==typeof a&&"litellm_provider"in a&&"cohere_chat"===a.litellm_provider&&r.push(e)})),"AWS SageMaker"==e&&(console.log("Adding sagemaker chat models"),Object.entries(a).forEach(([e,a])=>{null!==a&&"object"==typeof a&&"litellm_provider"in a&&"sagemaker_chat"===a.litellm_provider&&r.push(e)}))),r},"providerLogoMap",0,l,"provider_map",0,t])},560280,e=>{"use strict";var a=e.i(843476),o=e.i(271645),r=e.i(618566),t=e.i(976883);function i(){let e=(0,r.useSearchParams)().get("key"),[i,n]=(0,o.useState)(null);return(0,o.useEffect)(()=>{e&&n(e)},[e]),(0,a.jsx)(t.default,{accessToken:i})}e.s(["default",0,function(){return(0,a.jsx)(o.Suspense,{fallback:(0,a.jsx)("div",{className:"flex items-center justify-center min-h-screen",children:"Loading..."}),children:(0,a.jsx)(i,{})})}])}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0ql_-8xthluga.js b/litellm/proxy/_experimental/out/_next/static/chunks/0ql_-8xthluga.js new file mode 100644 index 00000000000..a85f3b5c229 --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0ql_-8xthluga.js @@ -0,0 +1 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,94629,e=>{"use strict";var r=e.i(271645);let t=r.forwardRef(function(e,t){return r.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:t},e),r.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M7 16V4m0 0L3 8m4-4l4 4m6 0v12m0 0l4-4m-4 4l-4-4"}))});e.s(["SwitchVerticalIcon",0,t],94629)},728889,e=>{"use strict";var r=e.i(290571),t=e.i(271645),a=e.i(829087),l=e.i(480731),o=e.i(444755),n=e.i(673706),s=e.i(95779);let d={xs:{paddingX:"px-1.5",paddingY:"py-1.5"},sm:{paddingX:"px-1.5",paddingY:"py-1.5"},md:{paddingX:"px-2",paddingY:"py-2"},lg:{paddingX:"px-2",paddingY:"py-2"},xl:{paddingX:"px-2.5",paddingY:"py-2.5"}},i={xs:{height:"h-3",width:"w-3"},sm:{height:"h-5",width:"w-5"},md:{height:"h-5",width:"w-5"},lg:{height:"h-7",width:"w-7"},xl:{height:"h-9",width:"w-9"}},u={simple:{rounded:"",border:"",ring:"",shadow:""},light:{rounded:"rounded-tremor-default",border:"",ring:"",shadow:""},shadow:{rounded:"rounded-tremor-default",border:"border",ring:"",shadow:"shadow-tremor-card dark:shadow-dark-tremor-card"},solid:{rounded:"rounded-tremor-default",border:"border-2",ring:"ring-1",shadow:""},outlined:{rounded:"rounded-tremor-default",border:"border",ring:"ring-2",shadow:""}},c=(0,n.makeClassName)("Icon"),m=t.default.forwardRef((e,m)=>{let{icon:f,variant:g="simple",tooltip:h,size:b=l.Sizes.SM,color:p,className:v}=e,w=(0,r.__rest)(e,["icon","variant","tooltip","size","color","className"]),k=((e,r)=>{switch(e){case"simple":return{textColor:r?(0,n.getColorClassNames)(r,s.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:"",borderColor:"",ringColor:""};case"light":return{textColor:r?(0,n.getColorClassNames)(r,s.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:r?(0,o.tremorTwMerge)((0,n.getColorClassNames)(r,s.colorPalette.background).bgColor,"bg-opacity-20"):"bg-tremor-brand-muted dark:bg-dark-tremor-brand-muted",borderColor:"",ringColor:""};case"shadow":return{textColor:r?(0,n.getColorClassNames)(r,s.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:r?(0,o.tremorTwMerge)((0,n.getColorClassNames)(r,s.colorPalette.background).bgColor,"bg-opacity-20"):"bg-tremor-background dark:bg-dark-tremor-background",borderColor:"border-tremor-border dark:border-dark-tremor-border",ringColor:""};case"solid":return{textColor:r?(0,n.getColorClassNames)(r,s.colorPalette.text).textColor:"text-tremor-brand-inverted dark:text-dark-tremor-brand-inverted",bgColor:r?(0,o.tremorTwMerge)((0,n.getColorClassNames)(r,s.colorPalette.background).bgColor,"bg-opacity-20"):"bg-tremor-brand dark:bg-dark-tremor-brand",borderColor:"border-tremor-brand-inverted dark:border-dark-tremor-brand-inverted",ringColor:"ring-tremor-ring dark:ring-dark-tremor-ring"};case"outlined":return{textColor:r?(0,n.getColorClassNames)(r,s.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:r?(0,o.tremorTwMerge)((0,n.getColorClassNames)(r,s.colorPalette.background).bgColor,"bg-opacity-20"):"bg-tremor-background dark:bg-dark-tremor-background",borderColor:r?(0,n.getColorClassNames)(r,s.colorPalette.ring).borderColor:"border-tremor-brand-subtle dark:border-dark-tremor-brand-subtle",ringColor:r?(0,o.tremorTwMerge)((0,n.getColorClassNames)(r,s.colorPalette.ring).ringColor,"ring-opacity-40"):"ring-tremor-brand-muted dark:ring-dark-tremor-brand-muted"}}})(g,p),{tooltipProps:x,getReferenceProps:C}=(0,a.useTooltip)();return t.default.createElement("span",Object.assign({ref:(0,n.mergeRefs)([m,x.refs.setReference]),className:(0,o.tremorTwMerge)(c("root"),"inline-flex shrink-0 items-center justify-center",k.bgColor,k.textColor,k.borderColor,k.ringColor,u[g].rounded,u[g].border,u[g].shadow,u[g].ring,d[b].paddingX,d[b].paddingY,v)},C,w),t.default.createElement(a.default,Object.assign({text:h},x)),t.default.createElement(f,{className:(0,o.tremorTwMerge)(c("icon"),"shrink-0",i[b].height,i[b].width)}))});m.displayName="Icon",e.s(["default",0,m],728889)},752978,e=>{"use strict";var r=e.i(728889);e.s(["Icon",()=>r.default])},591935,e=>{"use strict";var r=e.i(271645);let t=r.forwardRef(function(e,t){return r.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:t},e),r.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z"}))});e.s(["PencilAltIcon",0,t],591935)},360820,e=>{"use strict";var r=e.i(271645);let t=r.forwardRef(function(e,t){return r.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:t},e),r.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M5 15l7-7 7 7"}))});e.s(["ChevronUpIcon",0,t],360820)},871943,e=>{"use strict";var r=e.i(271645);let t=r.forwardRef(function(e,t){return r.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:t},e),r.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 9l-7 7-7-7"}))});e.s(["ChevronDownIcon",0,t],871943)},269200,e=>{"use strict";var r=e.i(290571),t=e.i(271645),a=e.i(444755);let l=(0,e.i(673706).makeClassName)("Table"),o=t.default.forwardRef((e,o)=>{let{children:n,className:s}=e,d=(0,r.__rest)(e,["children","className"]);return t.default.createElement("div",{className:(0,a.tremorTwMerge)(l("root"),"overflow-auto",s)},t.default.createElement("table",Object.assign({ref:o,className:(0,a.tremorTwMerge)(l("table"),"w-full text-tremor-default","text-tremor-content","dark:text-dark-tremor-content")},d),n))});o.displayName="Table",e.s(["Table",0,o],269200)},427612,e=>{"use strict";var r=e.i(290571),t=e.i(271645),a=e.i(444755);let l=(0,e.i(673706).makeClassName)("TableHead"),o=t.default.forwardRef((e,o)=>{let{children:n,className:s}=e,d=(0,r.__rest)(e,["children","className"]);return t.default.createElement(t.default.Fragment,null,t.default.createElement("thead",Object.assign({ref:o,className:(0,a.tremorTwMerge)(l("root"),"text-left","text-tremor-content","dark:text-dark-tremor-content",s)},d),n))});o.displayName="TableHead",e.s(["TableHead",0,o],427612)},64848,e=>{"use strict";var r=e.i(290571),t=e.i(271645),a=e.i(444755);let l=(0,e.i(673706).makeClassName)("TableHeaderCell"),o=t.default.forwardRef((e,o)=>{let{children:n,className:s}=e,d=(0,r.__rest)(e,["children","className"]);return t.default.createElement(t.default.Fragment,null,t.default.createElement("th",Object.assign({ref:o,className:(0,a.tremorTwMerge)(l("root"),"whitespace-nowrap text-left font-semibold top-0 px-4 py-3.5","text-tremor-content-strong","dark:text-dark-tremor-content-strong",s)},d),n))});o.displayName="TableHeaderCell",e.s(["TableHeaderCell",0,o],64848)},942232,e=>{"use strict";var r=e.i(290571),t=e.i(271645),a=e.i(444755);let l=(0,e.i(673706).makeClassName)("TableBody"),o=t.default.forwardRef((e,o)=>{let{children:n,className:s}=e,d=(0,r.__rest)(e,["children","className"]);return t.default.createElement(t.default.Fragment,null,t.default.createElement("tbody",Object.assign({ref:o,className:(0,a.tremorTwMerge)(l("root"),"align-top divide-y","divide-tremor-border","dark:divide-dark-tremor-border",s)},d),n))});o.displayName="TableBody",e.s(["TableBody",0,o],942232)},496020,e=>{"use strict";var r=e.i(290571),t=e.i(271645),a=e.i(444755);let l=(0,e.i(673706).makeClassName)("TableRow"),o=t.default.forwardRef((e,o)=>{let{children:n,className:s}=e,d=(0,r.__rest)(e,["children","className"]);return t.default.createElement(t.default.Fragment,null,t.default.createElement("tr",Object.assign({ref:o,className:(0,a.tremorTwMerge)(l("row"),s)},d),n))});o.displayName="TableRow",e.s(["TableRow",0,o],496020)},977572,e=>{"use strict";var r=e.i(290571),t=e.i(271645),a=e.i(444755);let l=(0,e.i(673706).makeClassName)("TableCell"),o=t.default.forwardRef((e,o)=>{let{children:n,className:s}=e,d=(0,r.__rest)(e,["children","className"]);return t.default.createElement(t.default.Fragment,null,t.default.createElement("td",Object.assign({ref:o,className:(0,a.tremorTwMerge)(l("root"),"align-middle whitespace-nowrap text-left p-4",s)},d),n))});o.displayName="TableCell",e.s(["TableCell",0,o],977572)},68155,e=>{"use strict";var r=e.i(271645);let t=r.forwardRef(function(e,t){return r.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:t},e),r.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"}))});e.s(["TrashIcon",0,t],68155)},278587,e=>{"use strict";var r=e.i(271645);let t=r.forwardRef(function(e,t){return r.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:t},e),r.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"}))});e.s(["RefreshIcon",0,t],278587)},678784,678745,e=>{"use strict";let r=(0,e.i(475254).default)("check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);e.s(["default",0,r],678745),e.s(["CheckIcon",0,r],678784)},991124,e=>{"use strict";let r=(0,e.i(475254).default)("copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);e.s(["default",0,r])},118366,e=>{"use strict";var r=e.i(991124);e.s(["CopyIcon",()=>r.default])},54943,e=>{"use strict";let r=(0,e.i(475254).default)("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]);e.s(["default",0,r])},367240,555436,e=>{"use strict";let r=(0,e.i(475254).default)("rotate-ccw",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]]);e.s(["RotateCcw",0,r],367240);var t=e.i(54943);e.s(["Search",()=>t.default],555436)},655913,38419,78334,284614,e=>{"use strict";var r=e.i(843476),t=e.i(115504),a=e.i(311451),l=e.i(374009),o=e.i(271645);e.s(["FilterInput",0,({placeholder:e,value:n,onChange:s,icon:d,className:i})=>{let[u,c]=(0,o.useState)(n);(0,o.useEffect)(()=>{c(n)},[n]);let m=(0,o.useMemo)(()=>(0,l.default)(e=>s(e),300),[s]);(0,o.useEffect)(()=>()=>{m.cancel()},[m]);let f=(0,o.useCallback)(e=>{let r=e.target.value;c(r),m(r)},[m]);return(0,r.jsx)(a.Input,{placeholder:e,value:u,onChange:f,prefix:d?(0,r.jsx)(d,{size:16,className:"text-gray-500"}):void 0,className:(0,t.cx)("w-64",i)})}],655913);var n=e.i(906579),s=e.i(464571),d=e.i(475254);let i=(0,d.default)("funnel",[["path",{d:"M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z",key:"sc7q7i"}]]);e.s(["FiltersButton",0,({onClick:e,active:t,hasActiveFilters:a,label:l="Filters"})=>(0,r.jsx)(n.Badge,{color:"blue",dot:a,children:(0,r.jsx)(s.Button,{type:"default",onClick:e,icon:(0,r.jsx)(i,{size:16}),className:t?"bg-gray-100":"",children:l})})],38419);var u=e.i(367240);e.s(["ResetFiltersButton",0,({onClick:e,label:t="Reset Filters"})=>(0,r.jsx)(s.Button,{type:"default",onClick:e,icon:(0,r.jsx)(u.RotateCcw,{size:16}),children:t})],78334);let c=(0,d.default)("user",[["path",{d:"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2",key:"975kel"}],["circle",{cx:"12",cy:"7",r:"4",key:"17ys0d"}]]);e.s(["User",0,c],284614)},888288,e=>{"use strict";var r=e.i(271645);e.s(["default",0,(e,t)=>{let a=void 0!==t,[l,o]=(0,r.useState)(e);return[a?t:l,e=>{a||o(e)}]}])},757440,e=>{"use strict";var r=e.i(290571),t=e.i(271645);e.s(["default",0,e=>{var a=(0,r.__rest)(e,[]);return t.default.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"},a),t.default.createElement("path",{d:"M11.9999 13.1714L16.9497 8.22168L18.3639 9.63589L11.9999 15.9999L5.63599 9.63589L7.0502 8.22168L11.9999 13.1714Z"}))}])},446428,854056,e=>{"use strict";let r;var t=e.i(290571),a=e.i(271645);e.s(["default",0,e=>{var r=(0,t.__rest)(e,[]);return a.default.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"},r),a.default.createElement("path",{d:"M12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22ZM12 10.5858L9.17157 7.75736L7.75736 9.17157L10.5858 12L7.75736 14.8284L9.17157 16.2426L12 13.4142L14.8284 16.2426L16.2426 14.8284L13.4142 12L16.2426 9.17157L14.8284 7.75736L12 10.5858Z"}))}],446428);var l=e.i(746725),o=e.i(914189),n=e.i(553521),s=e.i(835696),d=e.i(941444),i=e.i(178677),u=e.i(294316),c=e.i(83733),m=e.i(233137),f=e.i(732607),g=e.i(397701),h=e.i(700020);function b(e){var r;return!!(e.enter||e.enterFrom||e.enterTo||e.leave||e.leaveFrom||e.leaveTo)||(null!=(r=e.as)?r:C)!==a.Fragment||1===a.default.Children.count(e.children)}let p=(0,a.createContext)(null);p.displayName="TransitionContext";var v=((r=v||{}).Visible="visible",r.Hidden="hidden",r);let w=(0,a.createContext)(null);function k(e){return"children"in e?k(e.children):e.current.filter(({el:e})=>null!==e.current).filter(({state:e})=>"visible"===e).length>0}function x(e,r){let t=(0,d.useLatestValue)(e),s=(0,a.useRef)([]),i=(0,n.useIsMounted)(),u=(0,l.useDisposables)(),c=(0,o.useEvent)((e,r=h.RenderStrategy.Hidden)=>{let a=s.current.findIndex(({el:r})=>r===e);-1!==a&&((0,g.match)(r,{[h.RenderStrategy.Unmount](){s.current.splice(a,1)},[h.RenderStrategy.Hidden](){s.current[a].state="hidden"}}),u.microTask(()=>{var e;!k(s)&&i.current&&(null==(e=t.current)||e.call(t))}))}),m=(0,o.useEvent)(e=>{let r=s.current.find(({el:r})=>r===e);return r?"visible"!==r.state&&(r.state="visible"):s.current.push({el:e,state:"visible"}),()=>c(e,h.RenderStrategy.Unmount)}),f=(0,a.useRef)([]),b=(0,a.useRef)(Promise.resolve()),p=(0,a.useRef)({enter:[],leave:[]}),v=(0,o.useEvent)((e,t,a)=>{f.current.splice(0),r&&(r.chains.current[t]=r.chains.current[t].filter(([r])=>r!==e)),null==r||r.chains.current[t].push([e,new Promise(e=>{f.current.push(e)})]),null==r||r.chains.current[t].push([e,new Promise(e=>{Promise.all(p.current[t].map(([e,r])=>r)).then(()=>e())})]),"enter"===t?b.current=b.current.then(()=>null==r?void 0:r.wait.current).then(()=>a(t)):a(t)}),w=(0,o.useEvent)((e,r,t)=>{Promise.all(p.current[r].splice(0).map(([e,r])=>r)).then(()=>{var e;null==(e=f.current.shift())||e()}).then(()=>t(r))});return(0,a.useMemo)(()=>({children:s,register:m,unregister:c,onStart:v,onStop:w,wait:b,chains:p}),[m,c,s,v,w,p,b])}w.displayName="NestingContext";let C=a.Fragment,E=h.RenderFeatures.RenderStrategy,N=(0,h.forwardRefWithAs)(function(e,r){let{show:t,appear:l=!1,unmount:n=!0,...d}=e,c=(0,a.useRef)(null),f=b(e),g=(0,u.useSyncRefs)(...f?[c,r]:null===r?[]:[r]);(0,i.useServerHandoffComplete)();let v=(0,m.useOpenClosed)();if(void 0===t&&null!==v&&(t=(v&m.State.Open)===m.State.Open),void 0===t)throw Error("A is used but it is missing a `show={true | false}` prop.");let[C,N]=(0,a.useState)(t?"visible":"hidden"),T=x(()=>{t||N("hidden")}),[M,R]=(0,a.useState)(!0),L=(0,a.useRef)([t]);(0,s.useIsoMorphicEffect)(()=>{!1!==M&&L.current[L.current.length-1]!==t&&(L.current.push(t),R(!1))},[L,t]);let j=(0,a.useMemo)(()=>({show:t,appear:l,initial:M}),[t,l,M]);(0,s.useIsoMorphicEffect)(()=>{t?N("visible"):k(T)||null===c.current||N("hidden")},[t,T]);let S={unmount:n},O=(0,o.useEvent)(()=>{var r;M&&R(!1),null==(r=e.beforeEnter)||r.call(e)}),P=(0,o.useEvent)(()=>{var r;M&&R(!1),null==(r=e.beforeLeave)||r.call(e)}),F=(0,h.useRender)();return a.default.createElement(w.Provider,{value:T},a.default.createElement(p.Provider,{value:j},F({ourProps:{...S,as:a.Fragment,children:a.default.createElement(y,{ref:g,...S,...d,beforeEnter:O,beforeLeave:P})},theirProps:{},defaultTag:a.Fragment,features:E,visible:"visible"===C,name:"Transition"})))}),y=(0,h.forwardRefWithAs)(function(e,r){var t,l;let{transition:n=!0,beforeEnter:d,afterEnter:v,beforeLeave:N,afterLeave:y,enter:T,enterFrom:M,enterTo:R,entered:L,leave:j,leaveFrom:S,leaveTo:O,...P}=e,[F,I]=(0,a.useState)(null),_=(0,a.useRef)(null),H=b(e),B=(0,u.useSyncRefs)(...H?[_,r,I]:null===r?[]:[r]),V=null==(t=P.unmount)||t?h.RenderStrategy.Unmount:h.RenderStrategy.Hidden,{show:A,appear:z,initial:D}=function(){let e=(0,a.useContext)(p);if(null===e)throw Error("A is used but it is missing a parent or .");return e}(),[W,U]=(0,a.useState)(A?"visible":"hidden"),X=function(){let e=(0,a.useContext)(w);if(null===e)throw Error("A is used but it is missing a parent or .");return e}(),{register:Y,unregister:q}=X;(0,s.useIsoMorphicEffect)(()=>Y(_),[Y,_]),(0,s.useIsoMorphicEffect)(()=>{if(V===h.RenderStrategy.Hidden&&_.current)return A&&"visible"!==W?void U("visible"):(0,g.match)(W,{hidden:()=>q(_),visible:()=>Y(_)})},[W,_,Y,q,A,V]);let Z=(0,i.useServerHandoffComplete)();(0,s.useIsoMorphicEffect)(()=>{if(H&&Z&&"visible"===W&&null===_.current)throw Error("Did you forget to passthrough the `ref` to the actual DOM node?")},[_,W,Z,H]);let K=D&&!z,G=z&&A&&D,J=(0,a.useRef)(!1),Q=x(()=>{J.current||(U("hidden"),q(_))},X),$=(0,o.useEvent)(e=>{J.current=!0,Q.onStart(_,e?"enter":"leave",e=>{"enter"===e?null==d||d():"leave"===e&&(null==N||N())})}),ee=(0,o.useEvent)(e=>{let r=e?"enter":"leave";J.current=!1,Q.onStop(_,r,e=>{"enter"===e?null==v||v():"leave"===e&&(null==y||y())}),"leave"!==r||k(Q)||(U("hidden"),q(_))});(0,a.useEffect)(()=>{H&&n||($(A),ee(A))},[A,H,n]);let er=!(!n||!H||!Z||K),[,et]=(0,c.useTransition)(er,F,A,{start:$,end:ee}),ea=(0,h.compact)({ref:B,className:(null==(l=(0,f.classNames)(P.className,G&&T,G&&M,et.enter&&T,et.enter&&et.closed&&M,et.enter&&!et.closed&&R,et.leave&&j,et.leave&&!et.closed&&S,et.leave&&et.closed&&O,!et.transition&&A&&L))?void 0:l.trim())||void 0,...(0,c.transitionDataAttributes)(et)}),el=0;"visible"===W&&(el|=m.State.Open),"hidden"===W&&(el|=m.State.Closed),et.enter&&(el|=m.State.Opening),et.leave&&(el|=m.State.Closing);let eo=(0,h.useRender)();return a.default.createElement(w.Provider,{value:Q},a.default.createElement(m.OpenClosedProvider,{value:el},eo({ourProps:ea,theirProps:P,defaultTag:C,features:E,visible:"visible"===W,name:"Transition.Child"})))}),T=(0,h.forwardRefWithAs)(function(e,r){let t=null!==(0,a.useContext)(p),l=null!==(0,m.useOpenClosed)();return a.default.createElement(a.default.Fragment,null,!t&&l?a.default.createElement(N,{ref:r,...e}):a.default.createElement(y,{ref:r,...e}))}),M=Object.assign(N,{Child:T,Root:N});e.s(["Transition",0,M],854056)},206929,e=>{"use strict";var r=e.i(290571),t=e.i(757440),a=e.i(271645),l=e.i(446428),o=e.i(444755),n=e.i(673706),s=e.i(103471),d=e.i(495470),i=e.i(854056),u=e.i(888288);let c=(0,n.makeClassName)("Select"),m=a.default.forwardRef((e,n)=>{let{defaultValue:m="",value:f,onValueChange:g,placeholder:h="Select...",disabled:b=!1,icon:p,enableClear:v=!1,required:w,children:k,name:x,error:C=!1,errorMessage:E,className:N,id:y}=e,T=(0,r.__rest)(e,["defaultValue","value","onValueChange","placeholder","disabled","icon","enableClear","required","children","name","error","errorMessage","className","id"]),M=(0,a.useRef)(null),R=a.Children.toArray(k),[L,j]=(0,u.default)(m,f),S=(0,a.useMemo)(()=>{let e=a.default.Children.toArray(k).filter(a.isValidElement);return(0,s.constructValueToNameMapping)(e)},[k]);return a.default.createElement("div",{className:(0,o.tremorTwMerge)("w-full min-w-[10rem] text-tremor-default",N)},a.default.createElement("div",{className:"relative"},a.default.createElement("select",{title:"select-hidden",required:w,className:(0,o.tremorTwMerge)("h-full w-full absolute left-0 top-0 -z-10 opacity-0"),value:L,onChange:e=>{e.preventDefault()},name:x,disabled:b,id:y,onFocus:()=>{let e=M.current;e&&e.focus()}},a.default.createElement("option",{className:"hidden",value:"",disabled:!0,hidden:!0},h),R.map(e=>{let r=e.props.value,t=e.props.children;return a.default.createElement("option",{className:"hidden",key:r,value:r},t)})),a.default.createElement(d.Listbox,Object.assign({as:"div",ref:n,defaultValue:L,value:L,onChange:e=>{null==g||g(e),j(e)},disabled:b,id:y},T),({value:e})=>{var r;return a.default.createElement(a.default.Fragment,null,a.default.createElement(d.ListboxButton,{ref:M,className:(0,o.tremorTwMerge)("w-full outline-none text-left whitespace-nowrap truncate rounded-tremor-default focus:ring-2 transition duration-100 border pr-8 py-2","border-tremor-border shadow-tremor-input focus:border-tremor-brand-subtle focus:ring-tremor-brand-muted","dark:border-dark-tremor-border dark:shadow-dark-tremor-input dark:focus:border-dark-tremor-brand-subtle dark:focus:ring-dark-tremor-brand-muted",p?"pl-10":"pl-3",(0,s.getSelectButtonColors)((0,s.hasValue)(e),b,C))},p&&a.default.createElement("span",{className:(0,o.tremorTwMerge)("absolute inset-y-0 left-0 flex items-center ml-px pl-2.5")},a.default.createElement(p,{className:(0,o.tremorTwMerge)(c("Icon"),"flex-none h-5 w-5","text-tremor-content-subtle","dark:text-dark-tremor-content-subtle")})),a.default.createElement("span",{className:"w-[90%] block truncate"},e&&null!=(r=S.get(e))?r:h),a.default.createElement("span",{className:(0,o.tremorTwMerge)("absolute inset-y-0 right-0 flex items-center mr-3")},a.default.createElement(t.default,{className:(0,o.tremorTwMerge)(c("arrowDownIcon"),"flex-none h-5 w-5","text-tremor-content-subtle","dark:text-dark-tremor-content-subtle")}))),v&&L?a.default.createElement("button",{type:"button",className:(0,o.tremorTwMerge)("absolute inset-y-0 right-0 flex items-center mr-8"),onClick:e=>{e.preventDefault(),j(""),null==g||g("")}},a.default.createElement(l.default,{className:(0,o.tremorTwMerge)(c("clearIcon"),"flex-none h-4 w-4","text-tremor-content-subtle","dark:text-dark-tremor-content-subtle")})):null,a.default.createElement(i.Transition,{enter:"transition ease duration-100 transform",enterFrom:"opacity-0 -translate-y-4",enterTo:"opacity-100 translate-y-0",leave:"transition ease duration-100 transform",leaveFrom:"opacity-100 translate-y-0",leaveTo:"opacity-0 -translate-y-4"},a.default.createElement(d.ListboxOptions,{anchor:"bottom start",className:(0,o.tremorTwMerge)("z-10 w-[var(--button-width)] divide-y overflow-y-auto outline-none rounded-tremor-default max-h-[228px] border [--anchor-gap:4px]","bg-tremor-background border-tremor-border divide-tremor-border shadow-tremor-dropdown","dark:bg-dark-tremor-background dark:border-dark-tremor-border dark:divide-dark-tremor-border dark:shadow-dark-tremor-dropdown")},k)))})),C&&E?a.default.createElement("p",{className:(0,o.tremorTwMerge)("errorMessage","text-sm text-rose-500 mt-1")},E):null)});m.displayName="Select",e.s(["Select",0,m],206929)},502275,e=>{"use strict";var r=e.i(271645);let t=r.forwardRef(function(e,t){return r.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:t},e),r.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"}))});e.s(["InformationCircleIcon",0,t],502275)},114600,e=>{"use strict";var r=e.i(290571),t=e.i(444755),a=e.i(673706),l=e.i(271645);let o=(0,a.makeClassName)("Divider"),n=l.default.forwardRef((e,a)=>{let{className:n,children:s}=e,d=(0,r.__rest)(e,["className","children"]);return l.default.createElement("div",Object.assign({ref:a,className:(0,t.tremorTwMerge)(o("root"),"w-full mx-auto my-6 flex justify-between gap-3 items-center text-tremor-default","text-tremor-content","dark:text-dark-tremor-content",n)},d),s?l.default.createElement(l.default.Fragment,null,l.default.createElement("div",{className:(0,t.tremorTwMerge)("w-full h-[1px] bg-tremor-border dark:bg-dark-tremor-border")}),l.default.createElement("div",{className:(0,t.tremorTwMerge)("text-inherit whitespace-nowrap")},s),l.default.createElement("div",{className:(0,t.tremorTwMerge)("w-full h-[1px] bg-tremor-border dark:bg-dark-tremor-border")})):l.default.createElement("div",{className:(0,t.tremorTwMerge)("w-full h-[1px] bg-tremor-border dark:bg-dark-tremor-border")}))});n.displayName="Divider",e.s(["Divider",0,n],114600)},78085,e=>{"use strict";var r=e.i(290571),t=e.i(103471),a=e.i(888288),l=e.i(271645),o=e.i(444755),n=e.i(673706);let s=(0,n.makeClassName)("Textarea"),d=l.default.forwardRef((e,d)=>{let{value:i,defaultValue:u="",placeholder:c="Type...",error:m=!1,errorMessage:f,disabled:g=!1,className:h,onChange:b,onValueChange:p,autoHeight:v=!1}=e,w=(0,r.__rest)(e,["value","defaultValue","placeholder","error","errorMessage","disabled","className","onChange","onValueChange","autoHeight"]),[k,x]=(0,a.default)(u,i),C=(0,l.useRef)(null),E=(0,t.hasValue)(k);return(0,l.useEffect)(()=>{let e=C.current;if(v&&e){e.style.height="60px";let r=e.scrollHeight;e.style.height=r+"px"}},[v,C,k]),l.default.createElement(l.default.Fragment,null,l.default.createElement("textarea",Object.assign({ref:(0,n.mergeRefs)([C,d]),value:k,placeholder:c,disabled:g,className:(0,o.tremorTwMerge)(s("Textarea"),"w-full flex items-center outline-none rounded-tremor-default px-3 py-2 text-tremor-default focus:ring-2 transition duration-100 border","shadow-tremor-input focus:border-tremor-brand-subtle focus:ring-tremor-brand-muted","dark:shadow-dark-tremor-input focus:dark:border-dark-tremor-brand-subtle focus:dark:ring-dark-tremor-brand-muted",(0,t.getSelectButtonColors)(E,g,m),g?"placeholder:text-tremor-content-subtle dark:placeholder:text-dark-tremor-content-subtle":"placeholder:text-tremor-content dark:placeholder:text-dark-tremor-content",h),"data-testid":"text-area",onChange:e=>{null==b||b(e),x(e.target.value),null==p||p(e.target.value)}},w)),m&&f?l.default.createElement("p",{className:(0,o.tremorTwMerge)(s("errorMessage"),"text-sm text-red-500 mt-1")},f):null)});d.displayName="Textarea",e.s(["Textarea",0,d],78085)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0r8_z31ow7vw9.js b/litellm/proxy/_experimental/out/_next/static/chunks/0r8_z31ow7vw9.js new file mode 100644 index 00000000000..f1babe5914c --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0r8_z31ow7vw9.js @@ -0,0 +1,68 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,599724,936325,e=>{"use strict";var o=e.i(95779),r=e.i(444755),l=e.i(673706),n=e.i(271645);let t=n.default.forwardRef((e,t)=>{let{color:a,className:s,children:i}=e;return n.default.createElement("p",{ref:t,className:(0,r.tremorTwMerge)("text-tremor-default",a?(0,l.getColorClassNames)(a,o.colorPalette.text).textColor:(0,r.tremorTwMerge)("text-tremor-content","dark:text-dark-tremor-content"),s)},i)});t.displayName="Text",e.s(["default",0,t],936325),e.s(["Text",0,t],599724)},350967,46757,e=>{"use strict";var o=e.i(290571),r=e.i(444755),l=e.i(673706),n=e.i(271645);let t={0:"grid-cols-none",1:"grid-cols-1",2:"grid-cols-2",3:"grid-cols-3",4:"grid-cols-4",5:"grid-cols-5",6:"grid-cols-6",7:"grid-cols-7",8:"grid-cols-8",9:"grid-cols-9",10:"grid-cols-10",11:"grid-cols-11",12:"grid-cols-12"},a={0:"sm:grid-cols-none",1:"sm:grid-cols-1",2:"sm:grid-cols-2",3:"sm:grid-cols-3",4:"sm:grid-cols-4",5:"sm:grid-cols-5",6:"sm:grid-cols-6",7:"sm:grid-cols-7",8:"sm:grid-cols-8",9:"sm:grid-cols-9",10:"sm:grid-cols-10",11:"sm:grid-cols-11",12:"sm:grid-cols-12"},s={0:"md:grid-cols-none",1:"md:grid-cols-1",2:"md:grid-cols-2",3:"md:grid-cols-3",4:"md:grid-cols-4",5:"md:grid-cols-5",6:"md:grid-cols-6",7:"md:grid-cols-7",8:"md:grid-cols-8",9:"md:grid-cols-9",10:"md:grid-cols-10",11:"md:grid-cols-11",12:"md:grid-cols-12"},i={0:"lg:grid-cols-none",1:"lg:grid-cols-1",2:"lg:grid-cols-2",3:"lg:grid-cols-3",4:"lg:grid-cols-4",5:"lg:grid-cols-5",6:"lg:grid-cols-6",7:"lg:grid-cols-7",8:"lg:grid-cols-8",9:"lg:grid-cols-9",10:"lg:grid-cols-10",11:"lg:grid-cols-11",12:"lg:grid-cols-12"};e.s(["colSpan",0,{1:"col-span-1",2:"col-span-2",3:"col-span-3",4:"col-span-4",5:"col-span-5",6:"col-span-6",7:"col-span-7",8:"col-span-8",9:"col-span-9",10:"col-span-10",11:"col-span-11",12:"col-span-12",13:"col-span-13"},"colSpanLg",0,{1:"lg:col-span-1",2:"lg:col-span-2",3:"lg:col-span-3",4:"lg:col-span-4",5:"lg:col-span-5",6:"lg:col-span-6",7:"lg:col-span-7",8:"lg:col-span-8",9:"lg:col-span-9",10:"lg:col-span-10",11:"lg:col-span-11",12:"lg:col-span-12",13:"lg:col-span-13"},"colSpanMd",0,{1:"md:col-span-1",2:"md:col-span-2",3:"md:col-span-3",4:"md:col-span-4",5:"md:col-span-5",6:"md:col-span-6",7:"md:col-span-7",8:"md:col-span-8",9:"md:col-span-9",10:"md:col-span-10",11:"md:col-span-11",12:"md:col-span-12",13:"md:col-span-13"},"colSpanSm",0,{1:"sm:col-span-1",2:"sm:col-span-2",3:"sm:col-span-3",4:"sm:col-span-4",5:"sm:col-span-5",6:"sm:col-span-6",7:"sm:col-span-7",8:"sm:col-span-8",9:"sm:col-span-9",10:"sm:col-span-10",11:"sm:col-span-11",12:"sm:col-span-12",13:"sm:col-span-13"},"gridCols",0,t,"gridColsLg",0,i,"gridColsMd",0,s,"gridColsSm",0,a],46757);let c=(0,l.makeClassName)("Grid"),d=(e,o)=>e&&Object.keys(o).includes(String(e))?o[e]:"",g=n.default.forwardRef((e,l)=>{let{numItems:g=1,numItemsSm:p,numItemsMd:m,numItemsLg:h,children:u,className:b}=e,k=(0,o.__rest)(e,["numItems","numItemsSm","numItemsMd","numItemsLg","children","className"]),f=d(g,t),x=d(p,a),v=d(m,s),w=d(h,i),y=(0,r.tremorTwMerge)(f,x,v,w);return n.default.createElement("div",Object.assign({ref:l,className:(0,r.tremorTwMerge)(c("root"),"grid",y,b)},k),u)});g.displayName="Grid",e.s(["Grid",0,g],350967)},678784,678745,e=>{"use strict";let o=(0,e.i(475254).default)("check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);e.s(["default",0,o],678745),e.s(["CheckIcon",0,o],678784)},546467,e=>{"use strict";let o=(0,e.i(475254).default)("external-link",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]);e.s(["default",0,o])},673709,e=>{"use strict";var o=e.i(843476),r=e.i(271645),l=e.i(678784);let n=(0,e.i(475254).default)("clipboard",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}]]);var t=e.i(650056);let a={'code[class*="language-"]':{background:"hsl(230, 1%, 98%)",color:"hsl(230, 8%, 24%)",fontFamily:'"Fira Code", "Fira Mono", Menlo, Consolas, "DejaVu Sans Mono", monospace',direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",lineHeight:"1.5",MozTabSize:"2",OTabSize:"2",tabSize:"2",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none"},'pre[class*="language-"]':{background:"hsl(230, 1%, 98%)",color:"hsl(230, 8%, 24%)",fontFamily:'"Fira Code", "Fira Mono", Menlo, Consolas, "DejaVu Sans Mono", monospace',direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",lineHeight:"1.5",MozTabSize:"2",OTabSize:"2",tabSize:"2",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",padding:"1em",margin:"0.5em 0",overflow:"auto",borderRadius:"0.3em"},'code[class*="language-"]::-moz-selection':{background:"hsl(230, 1%, 90%)",color:"inherit"},'code[class*="language-"] *::-moz-selection':{background:"hsl(230, 1%, 90%)",color:"inherit"},'pre[class*="language-"] *::-moz-selection':{background:"hsl(230, 1%, 90%)",color:"inherit"},'code[class*="language-"]::selection':{background:"hsl(230, 1%, 90%)",color:"inherit"},'code[class*="language-"] *::selection':{background:"hsl(230, 1%, 90%)",color:"inherit"},'pre[class*="language-"] *::selection':{background:"hsl(230, 1%, 90%)",color:"inherit"},':not(pre) > code[class*="language-"]':{padding:"0.2em 0.3em",borderRadius:"0.3em",whiteSpace:"normal"},comment:{color:"hsl(230, 4%, 64%)",fontStyle:"italic"},prolog:{color:"hsl(230, 4%, 64%)"},cdata:{color:"hsl(230, 4%, 64%)"},doctype:{color:"hsl(230, 8%, 24%)"},punctuation:{color:"hsl(230, 8%, 24%)"},entity:{color:"hsl(230, 8%, 24%)",cursor:"help"},"attr-name":{color:"hsl(35, 99%, 36%)"},"class-name":{color:"hsl(35, 99%, 36%)"},boolean:{color:"hsl(35, 99%, 36%)"},constant:{color:"hsl(35, 99%, 36%)"},number:{color:"hsl(35, 99%, 36%)"},atrule:{color:"hsl(35, 99%, 36%)"},keyword:{color:"hsl(301, 63%, 40%)"},property:{color:"hsl(5, 74%, 59%)"},tag:{color:"hsl(5, 74%, 59%)"},symbol:{color:"hsl(5, 74%, 59%)"},deleted:{color:"hsl(5, 74%, 59%)"},important:{color:"hsl(5, 74%, 59%)"},selector:{color:"hsl(119, 34%, 47%)"},string:{color:"hsl(119, 34%, 47%)"},char:{color:"hsl(119, 34%, 47%)"},builtin:{color:"hsl(119, 34%, 47%)"},inserted:{color:"hsl(119, 34%, 47%)"},regex:{color:"hsl(119, 34%, 47%)"},"attr-value":{color:"hsl(119, 34%, 47%)"},"attr-value > .token.punctuation":{color:"hsl(119, 34%, 47%)"},variable:{color:"hsl(221, 87%, 60%)"},operator:{color:"hsl(221, 87%, 60%)"},function:{color:"hsl(221, 87%, 60%)"},url:{color:"hsl(198, 99%, 37%)"},"attr-value > .token.punctuation.attr-equals":{color:"hsl(230, 8%, 24%)"},"special-attr > .token.attr-value > .token.value.css":{color:"hsl(230, 8%, 24%)"},".language-css .token.selector":{color:"hsl(5, 74%, 59%)"},".language-css .token.property":{color:"hsl(230, 8%, 24%)"},".language-css .token.function":{color:"hsl(198, 99%, 37%)"},".language-css .token.url > .token.function":{color:"hsl(198, 99%, 37%)"},".language-css .token.url > .token.string.url":{color:"hsl(119, 34%, 47%)"},".language-css .token.important":{color:"hsl(301, 63%, 40%)"},".language-css .token.atrule .token.rule":{color:"hsl(301, 63%, 40%)"},".language-javascript .token.operator":{color:"hsl(301, 63%, 40%)"},".language-javascript .token.template-string > .token.interpolation > .token.interpolation-punctuation.punctuation":{color:"hsl(344, 84%, 43%)"},".language-json .token.operator":{color:"hsl(230, 8%, 24%)"},".language-json .token.null.keyword":{color:"hsl(35, 99%, 36%)"},".language-markdown .token.url":{color:"hsl(230, 8%, 24%)"},".language-markdown .token.url > .token.operator":{color:"hsl(230, 8%, 24%)"},".language-markdown .token.url-reference.url > .token.string":{color:"hsl(230, 8%, 24%)"},".language-markdown .token.url > .token.content":{color:"hsl(221, 87%, 60%)"},".language-markdown .token.url > .token.url":{color:"hsl(198, 99%, 37%)"},".language-markdown .token.url-reference.url":{color:"hsl(198, 99%, 37%)"},".language-markdown .token.blockquote.punctuation":{color:"hsl(230, 4%, 64%)",fontStyle:"italic"},".language-markdown .token.hr.punctuation":{color:"hsl(230, 4%, 64%)",fontStyle:"italic"},".language-markdown .token.code-snippet":{color:"hsl(119, 34%, 47%)"},".language-markdown .token.bold .token.content":{color:"hsl(35, 99%, 36%)"},".language-markdown .token.italic .token.content":{color:"hsl(301, 63%, 40%)"},".language-markdown .token.strike .token.content":{color:"hsl(5, 74%, 59%)"},".language-markdown .token.strike .token.punctuation":{color:"hsl(5, 74%, 59%)"},".language-markdown .token.list.punctuation":{color:"hsl(5, 74%, 59%)"},".language-markdown .token.title.important > .token.punctuation":{color:"hsl(5, 74%, 59%)"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},namespace:{Opacity:"0.8"},"token.tab:not(:empty):before":{color:"hsla(230, 8%, 24%, 0.2)"},"token.cr:before":{color:"hsla(230, 8%, 24%, 0.2)"},"token.lf:before":{color:"hsla(230, 8%, 24%, 0.2)"},"token.space:before":{color:"hsla(230, 8%, 24%, 0.2)"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item":{marginRight:"0.4em"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item > button":{background:"hsl(230, 1%, 90%)",color:"hsl(230, 6%, 44%)",padding:"0.1em 0.4em",borderRadius:"0.3em"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item > a":{background:"hsl(230, 1%, 90%)",color:"hsl(230, 6%, 44%)",padding:"0.1em 0.4em",borderRadius:"0.3em"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item > span":{background:"hsl(230, 1%, 90%)",color:"hsl(230, 6%, 44%)",padding:"0.1em 0.4em",borderRadius:"0.3em"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:hover":{background:"hsl(230, 1%, 78%)",color:"hsl(230, 8%, 24%)"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:focus":{background:"hsl(230, 1%, 78%)",color:"hsl(230, 8%, 24%)"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:hover":{background:"hsl(230, 1%, 78%)",color:"hsl(230, 8%, 24%)"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:focus":{background:"hsl(230, 1%, 78%)",color:"hsl(230, 8%, 24%)"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:hover":{background:"hsl(230, 1%, 78%)",color:"hsl(230, 8%, 24%)"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:focus":{background:"hsl(230, 1%, 78%)",color:"hsl(230, 8%, 24%)"},".line-highlight.line-highlight":{background:"hsla(230, 8%, 24%, 0.05)"},".line-highlight.line-highlight:before":{background:"hsl(230, 1%, 90%)",color:"hsl(230, 8%, 24%)",padding:"0.1em 0.6em",borderRadius:"0.3em",boxShadow:"0 2px 0 0 rgba(0, 0, 0, 0.2)"},".line-highlight.line-highlight[data-end]:after":{background:"hsl(230, 1%, 90%)",color:"hsl(230, 8%, 24%)",padding:"0.1em 0.6em",borderRadius:"0.3em",boxShadow:"0 2px 0 0 rgba(0, 0, 0, 0.2)"},"pre[id].linkable-line-numbers.linkable-line-numbers span.line-numbers-rows > span:hover:before":{backgroundColor:"hsla(230, 8%, 24%, 0.05)"},".line-numbers.line-numbers .line-numbers-rows":{borderRightColor:"hsla(230, 8%, 24%, 0.2)"},".command-line .command-line-prompt":{borderRightColor:"hsla(230, 8%, 24%, 0.2)"},".line-numbers .line-numbers-rows > span:before":{color:"hsl(230, 1%, 62%)"},".command-line .command-line-prompt > span:before":{color:"hsl(230, 1%, 62%)"},".rainbow-braces .token.token.punctuation.brace-level-1":{color:"hsl(5, 74%, 59%)"},".rainbow-braces .token.token.punctuation.brace-level-5":{color:"hsl(5, 74%, 59%)"},".rainbow-braces .token.token.punctuation.brace-level-9":{color:"hsl(5, 74%, 59%)"},".rainbow-braces .token.token.punctuation.brace-level-2":{color:"hsl(119, 34%, 47%)"},".rainbow-braces .token.token.punctuation.brace-level-6":{color:"hsl(119, 34%, 47%)"},".rainbow-braces .token.token.punctuation.brace-level-10":{color:"hsl(119, 34%, 47%)"},".rainbow-braces .token.token.punctuation.brace-level-3":{color:"hsl(221, 87%, 60%)"},".rainbow-braces .token.token.punctuation.brace-level-7":{color:"hsl(221, 87%, 60%)"},".rainbow-braces .token.token.punctuation.brace-level-11":{color:"hsl(221, 87%, 60%)"},".rainbow-braces .token.token.punctuation.brace-level-4":{color:"hsl(301, 63%, 40%)"},".rainbow-braces .token.token.punctuation.brace-level-8":{color:"hsl(301, 63%, 40%)"},".rainbow-braces .token.token.punctuation.brace-level-12":{color:"hsl(301, 63%, 40%)"},"pre.diff-highlight > code .token.token.deleted:not(.prefix)":{backgroundColor:"hsla(353, 100%, 66%, 0.15)"},"pre > code.diff-highlight .token.token.deleted:not(.prefix)":{backgroundColor:"hsla(353, 100%, 66%, 0.15)"},"pre.diff-highlight > code .token.token.deleted:not(.prefix)::-moz-selection":{backgroundColor:"hsla(353, 95%, 66%, 0.25)"},"pre.diff-highlight > code .token.token.deleted:not(.prefix) *::-moz-selection":{backgroundColor:"hsla(353, 95%, 66%, 0.25)"},"pre > code.diff-highlight .token.token.deleted:not(.prefix)::-moz-selection":{backgroundColor:"hsla(353, 95%, 66%, 0.25)"},"pre > code.diff-highlight .token.token.deleted:not(.prefix) *::-moz-selection":{backgroundColor:"hsla(353, 95%, 66%, 0.25)"},"pre.diff-highlight > code .token.token.deleted:not(.prefix)::selection":{backgroundColor:"hsla(353, 95%, 66%, 0.25)"},"pre.diff-highlight > code .token.token.deleted:not(.prefix) *::selection":{backgroundColor:"hsla(353, 95%, 66%, 0.25)"},"pre > code.diff-highlight .token.token.deleted:not(.prefix)::selection":{backgroundColor:"hsla(353, 95%, 66%, 0.25)"},"pre > code.diff-highlight .token.token.deleted:not(.prefix) *::selection":{backgroundColor:"hsla(353, 95%, 66%, 0.25)"},"pre.diff-highlight > code .token.token.inserted:not(.prefix)":{backgroundColor:"hsla(137, 100%, 55%, 0.15)"},"pre > code.diff-highlight .token.token.inserted:not(.prefix)":{backgroundColor:"hsla(137, 100%, 55%, 0.15)"},"pre.diff-highlight > code .token.token.inserted:not(.prefix)::-moz-selection":{backgroundColor:"hsla(135, 73%, 55%, 0.25)"},"pre.diff-highlight > code .token.token.inserted:not(.prefix) *::-moz-selection":{backgroundColor:"hsla(135, 73%, 55%, 0.25)"},"pre > code.diff-highlight .token.token.inserted:not(.prefix)::-moz-selection":{backgroundColor:"hsla(135, 73%, 55%, 0.25)"},"pre > code.diff-highlight .token.token.inserted:not(.prefix) *::-moz-selection":{backgroundColor:"hsla(135, 73%, 55%, 0.25)"},"pre.diff-highlight > code .token.token.inserted:not(.prefix)::selection":{backgroundColor:"hsla(135, 73%, 55%, 0.25)"},"pre.diff-highlight > code .token.token.inserted:not(.prefix) *::selection":{backgroundColor:"hsla(135, 73%, 55%, 0.25)"},"pre > code.diff-highlight .token.token.inserted:not(.prefix)::selection":{backgroundColor:"hsla(135, 73%, 55%, 0.25)"},"pre > code.diff-highlight .token.token.inserted:not(.prefix) *::selection":{backgroundColor:"hsla(135, 73%, 55%, 0.25)"},".prism-previewer.prism-previewer:before":{borderColor:"hsl(0, 0, 95%)"},".prism-previewer-gradient.prism-previewer-gradient div":{borderColor:"hsl(0, 0, 95%)",borderRadius:"0.3em"},".prism-previewer-color.prism-previewer-color:before":{borderRadius:"0.3em"},".prism-previewer-easing.prism-previewer-easing:before":{borderRadius:"0.3em"},".prism-previewer.prism-previewer:after":{borderTopColor:"hsl(0, 0, 95%)"},".prism-previewer-flipped.prism-previewer-flipped.after":{borderBottomColor:"hsl(0, 0, 95%)"},".prism-previewer-angle.prism-previewer-angle:before":{background:"hsl(0, 0%, 100%)"},".prism-previewer-time.prism-previewer-time:before":{background:"hsl(0, 0%, 100%)"},".prism-previewer-easing.prism-previewer-easing":{background:"hsl(0, 0%, 100%)"},".prism-previewer-angle.prism-previewer-angle circle":{stroke:"hsl(230, 8%, 24%)",strokeOpacity:"1"},".prism-previewer-time.prism-previewer-time circle":{stroke:"hsl(230, 8%, 24%)",strokeOpacity:"1"},".prism-previewer-easing.prism-previewer-easing circle":{stroke:"hsl(230, 8%, 24%)",fill:"transparent"},".prism-previewer-easing.prism-previewer-easing path":{stroke:"hsl(230, 8%, 24%)"},".prism-previewer-easing.prism-previewer-easing line":{stroke:"hsl(230, 8%, 24%)"}};e.s(["default",0,({code:e,language:s})=>{let[i,c]=(0,r.useState)(!1);return(0,o.jsxs)("div",{className:"relative rounded-lg border border-gray-200 overflow-hidden",children:[(0,o.jsx)("button",{onClick:()=>{navigator.clipboard.writeText(e),c(!0),setTimeout(()=>c(!1),2e3)},className:"absolute top-3 right-3 p-2 rounded-md bg-gray-100 hover:bg-gray-200 text-gray-600 z-10","aria-label":"Copy code",children:i?(0,o.jsx)(l.CheckIcon,{size:16}):(0,o.jsx)(n,{size:16})}),(0,o.jsx)(t.Prism,{language:s,style:a,customStyle:{margin:0,padding:"1.5rem",borderRadius:"0.5rem",fontSize:"0.9rem",backgroundColor:"#fafafa"},showLineNumbers:!0,children:e})]})}],673709)},778917,e=>{"use strict";var o=e.i(546467);e.s(["ExternalLink",()=>o.default])},191905,e=>{"use strict";var o=e.i(843476),r=e.i(599724),l=e.i(197647),n=e.i(653824),t=e.i(881073),a=e.i(404206),s=e.i(723731),i=e.i(350967),c=e.i(673709),d=e.i(778917);let g=({href:e,className:r})=>(0,o.jsxs)("a",{href:e,target:"_blank",rel:"noopener noreferrer",title:"Open documentation in a new tab",className:function(...e){return e.filter(Boolean).join(" ")}("inline-flex items-center gap-2 rounded-xl border border-zinc-200 bg-white/80 px-3.5 py-2 text-sm font-medium text-zinc-700 shadow-sm","hover:bg-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-500 active:translate-y-[0.5px]",r),children:[(0,o.jsx)("span",{children:"API Reference Docs"}),(0,o.jsx)(d.ExternalLink,{"aria-hidden":!0,className:"h-4 w-4 opacity-80"}),(0,o.jsx)("span",{className:"sr-only",children:"(opens in a new tab)"})]}),p=({proxySettings:e})=>{let d="",p=e?.LITELLM_UI_API_DOC_BASE_URL;return p&&p.trim()?d=p:e?.PROXY_BASE_URL&&(d=e.PROXY_BASE_URL),(0,o.jsx)(o.Fragment,{children:(0,o.jsx)(i.Grid,{className:"gap-2 p-8 h-[80vh] w-full mt-2",children:(0,o.jsxs)("div",{className:"mb-5",children:[(0,o.jsxs)("div",{className:"flex items-center justify-between",children:[(0,o.jsx)("p",{className:"text-2xl text-tremor-content-strong dark:text-dark-tremor-content-strong font-semibold",children:"OpenAI Compatible Proxy: API Reference"}),(0,o.jsx)(g,{className:"ml-3 shrink-0",href:"https://docs.litellm.ai/docs/proxy/user_keys"})]}),(0,o.jsxs)(r.Text,{className:"mt-2 mb-2",children:["LiteLLM is OpenAI Compatible. This means your API Key works with the OpenAI SDK. Just replace the base_url to point to your litellm proxy. Example Below"," "]}),(0,o.jsxs)(n.TabGroup,{children:[(0,o.jsxs)(t.TabList,{children:[(0,o.jsx)(l.Tab,{children:"OpenAI Python SDK"}),(0,o.jsx)(l.Tab,{children:"LlamaIndex"}),(0,o.jsx)(l.Tab,{children:"Langchain Py"})]}),(0,o.jsxs)(s.TabPanels,{children:[(0,o.jsx)(a.TabPanel,{children:(0,o.jsx)(c.default,{language:"python",code:`import openai +client = openai.OpenAI( + api_key="your_api_key", + base_url="${d}" # LiteLLM Proxy is OpenAI compatible, Read More: https://docs.litellm.ai/docs/proxy/user_keys +) + +response = client.chat.completions.create( + model="gpt-3.5-turbo", # model to send to the proxy + messages = [ + { + "role": "user", + "content": "this is a test request, write a short poem" + } + ] +) + +print(response)`})}),(0,o.jsx)(a.TabPanel,{children:(0,o.jsx)(c.default,{language:"python",code:`import os, dotenv + +from llama_index.llms import AzureOpenAI +from llama_index.embeddings import AzureOpenAIEmbedding +from llama_index import VectorStoreIndex, SimpleDirectoryReader, ServiceContext + +llm = AzureOpenAI( + engine="azure-gpt-3.5", # model_name on litellm proxy + temperature=0.0, + azure_endpoint="${d}", # litellm proxy endpoint + api_key="sk-1234", # litellm proxy API Key + api_version="2023-07-01-preview", +) + +embed_model = AzureOpenAIEmbedding( + deployment_name="azure-embedding-model", + azure_endpoint="${d}", + api_key="sk-1234", + api_version="2023-07-01-preview", +) + +documents = SimpleDirectoryReader("llama_index_data").load_data() +service_context = ServiceContext.from_defaults(llm=llm, embed_model=embed_model) +index = VectorStoreIndex.from_documents(documents, service_context=service_context) + +query_engine = index.as_query_engine() +response = query_engine.query("What did the author do growing up?") +print(response)`})}),(0,o.jsx)(a.TabPanel,{children:(0,o.jsx)(c.default,{language:"python",code:`from langchain.chat_models import ChatOpenAI +from langchain.prompts.chat import ( + ChatPromptTemplate, + HumanMessagePromptTemplate, + SystemMessagePromptTemplate, +) +from langchain.schema import HumanMessage, SystemMessage + +chat = ChatOpenAI( + openai_api_base="${d}", + model = "gpt-3.5-turbo", + temperature=0.1 +) + +messages = [ + SystemMessage( + content="You are a helpful assistant that im using to make a test request to." + ), + HumanMessage( + content="test from litellm. tell me why it's amazing in 1 sentence" + ), +] +response = chat(messages) + +print(response)`})})]})]})]})})})};var m=e.i(135214),h=e.i(592392);e.s(["default",0,()=>{let{accessToken:e}=(0,m.default)(),r=(0,h.default)(e);return(0,o.jsx)(p,{proxySettings:r})}],191905)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0rdv7_7_95b-1.js b/litellm/proxy/_experimental/out/_next/static/chunks/0rdv7_7_95b-1.js new file mode 100644 index 00000000000..e544a939024 --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0rdv7_7_95b-1.js @@ -0,0 +1 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,94629,e=>{"use strict";var t=e.i(271645);let a=t.forwardRef(function(e,a){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:a},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M7 16V4m0 0L3 8m4-4l4 4m6 0v12m0 0l4-4m-4 4l-4-4"}))});e.s(["SwitchVerticalIcon",0,a],94629)},91979,e=>{"use strict";e.i(247167);var t=e.i(931067),a=e.i(271645);let l={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M909.1 209.3l-56.4 44.1C775.8 155.1 656.2 92 521.9 92 290 92 102.3 279.5 102 511.5 101.7 743.7 289.8 932 521.9 932c181.3 0 335.8-115 394.6-276.1 1.5-4.2-.7-8.9-4.9-10.3l-56.7-19.5a8 8 0 00-10.1 4.8c-1.8 5-3.8 10-5.9 14.9-17.3 41-42.1 77.8-73.7 109.4A344.77 344.77 0 01655.9 829c-42.3 17.9-87.4 27-133.8 27-46.5 0-91.5-9.1-133.8-27A341.5 341.5 0 01279 755.2a342.16 342.16 0 01-73.7-109.4c-17.9-42.4-27-87.4-27-133.9s9.1-91.5 27-133.9c17.3-41 42.1-77.8 73.7-109.4 31.6-31.6 68.4-56.4 109.3-73.8 42.3-17.9 87.4-27 133.8-27 46.5 0 91.5 9.1 133.8 27a341.5 341.5 0 01109.3 73.8c9.9 9.9 19.2 20.4 27.8 31.4l-60.2 47a8 8 0 003 14.1l175.6 43c5 1.2 9.9-2.6 9.9-7.7l.8-180.9c-.1-6.6-7.8-10.3-13-6.2z"}}]},name:"reload",theme:"outlined"};var n=e.i(9583),r=a.forwardRef(function(e,r){return a.createElement(n.default,(0,t.default)({},e,{ref:r,icon:l}))});e.s(["ReloadOutlined",0,r],91979)},916925,e=>{"use strict";var t,a=e.i(555987),l=((t={}).A2A_Agent="A2A Agent",t.AI21="Ai21",t.AI21_CHAT="Ai21 Chat",t.AIML="AI/ML API",t.AIOHTTP_OPENAI="Aiohttp Openai",t.Anthropic="Anthropic",t.ANTHROPIC_TEXT="Anthropic Text",t.AssemblyAI="AssemblyAI",t.AUTO_ROUTER="Auto Router",t.Bedrock="Amazon Bedrock",t.BedrockMantle="Amazon Bedrock Mantle",t.SageMaker="AWS SageMaker",t.Azure="Azure",t.Azure_AI_Studio="Azure AI Foundry (Studio)",t.AZURE_TEXT="Azure Text",t.BASETEN="Baseten",t.BYTEZ="Bytez",t.Cerebras="Cerebras",t.CLARIFAI="Clarifai",t.CLOUDFLARE="Cloudflare",t.CODESTRAL="Codestral",t.Cohere="Cohere",t.COHERE_CHAT="Cohere Chat",t.COMETAPI="Cometapi",t.COMPACTIFAI="Compactifai",t.Cursor="Cursor",t.Dashscope="Dashscope",t.Databricks="Databricks (Qwen API)",t.DATAROBOT="Datarobot",t.DeepInfra="DeepInfra",t.Deepgram="Deepgram",t.Deepseek="Deepseek",t.DOCKER_MODEL_RUNNER="Docker Model Runner",t.DOTPROMPT="Dotprompt",t.ElevenLabs="ElevenLabs",t.EMPOWER="Empower",t.FalAI="Fal AI",t.FEATHERLESS_AI="Featherless Ai",t.FireworksAI="Fireworks AI",t.FRIENDLIAI="Friendliai",t.GALADRIEL="Galadriel",t.GITHUB_COPILOT="Github Copilot",t.Google_AI_Studio="Google AI Studio",t.GradientAI="GradientAI",t.Groq="Groq",t.HEROKU="Heroku",t.Hosted_Vllm="vllm",t.HUGGINGFACE="Huggingface",t.HYPERBOLIC="Hyperbolic",t.Infinity="Infinity",t.JinaAI="Jina AI",t.LAMBDA_AI="Lambda Ai",t.LEMONADE="Lemonade",t.LLAMAFILE="Llamafile",t.LM_STUDIO="Lm Studio",t.LLAMA="Meta Llama",t.MARITALK="Maritalk",t.MiniMax="MiniMax",t.MistralAI="Mistral AI",t.MOONSHOT="Moonshot",t.MORPH="Morph",t.NEBIUS="Nebius",t.NLP_CLOUD="Nlp Cloud",t.NOVITA="Novita",t.NSCALE="Nscale",t.NVIDIA_NIM="Nvidia Nim",t.Ollama="Ollama",t.OLLAMA_CHAT="Ollama Chat",t.OOBABOOGA="Oobabooga",t.OpenAI="OpenAI",t.OPENAI_LIKE="Openai Like",t.OpenAI_Compatible="OpenAI-Compatible Chat Completions (Together AI, vLLM, etc.)",t.OpenAI_Text="OpenAI Text Completion",t.OpenAI_Text_Compatible="OpenAI-Compatible Completions (legacy /v1/completions)",t.Openrouter="Openrouter",t.Oracle="Oracle Cloud Infrastructure (OCI)",t.OVHCLOUD="Ovhcloud",t.Perplexity="Perplexity",t.PETALS="Petals",t.PG_VECTOR="Pg Vector",t.PREDIBASE="Predibase",t.RECRAFT="Recraft",t.REPLICATE="Replicate",t.RunwayML="RunwayML",t.SAGEMAKER_LEGACY="Sagemaker",t.Sambanova="Sambanova",t.SAP="SAP Generative AI Hub",t.Snowflake="Snowflake",t.Soniox="Soniox",t.TEXT_COMPLETION_CODESTRAL="Text-Completion-Codestral",t.TogetherAI="TogetherAI",t.TOPAZ="Topaz",t.Triton="Triton",t.V0="V0",t.VERCEL_AI_GATEWAY="Vercel Ai Gateway",t.Vertex_AI="Vertex AI (Anthropic, Gemini, etc.)",t.VERTEX_AI_BETA="Vertex Ai Beta",t.VLLM="Vllm",t.VolcEngine="VolcEngine",t.Voyage="Voyage AI",t.WANDB="Wandb",t.WATSONX="Watsonx",t.WATSONX_TEXT="Watsonx Text",t.xAI="xAI",t.XINFERENCE="Xinference",t.ZAI="Z.AI (Zhipu AI)",t);let n={A2A_Agent:"a2a_agent",AI21:"ai21",AI21_CHAT:"ai21_chat",AIML:"aiml",AIOHTTP_OPENAI:"aiohttp_openai",Anthropic:"anthropic",ANTHROPIC_TEXT:"anthropic_text",AssemblyAI:"assemblyai",AUTO_ROUTER:"auto_router",Azure:"azure",Azure_AI_Studio:"azure_ai",AZURE_TEXT:"azure_text",BASETEN:"baseten",Bedrock:"bedrock",BedrockMantle:"bedrock_mantle",BYTEZ:"bytez",Cerebras:"cerebras",CLARIFAI:"clarifai",CLOUDFLARE:"cloudflare",CODESTRAL:"codestral",Cohere:"cohere",COHERE_CHAT:"cohere_chat",COMETAPI:"cometapi",COMPACTIFAI:"compactifai",Cursor:"cursor",Dashscope:"dashscope",Databricks:"databricks",DATAROBOT:"datarobot",DeepInfra:"deepinfra",Deepgram:"deepgram",Deepseek:"deepseek",DOCKER_MODEL_RUNNER:"docker_model_runner",DOTPROMPT:"dotprompt",ElevenLabs:"elevenlabs",EMPOWER:"empower",FalAI:"fal_ai",FEATHERLESS_AI:"featherless_ai",FireworksAI:"fireworks_ai",FRIENDLIAI:"friendliai",GALADRIEL:"galadriel",GITHUB_COPILOT:"github_copilot",Google_AI_Studio:"gemini",GradientAI:"gradient_ai",Groq:"groq",HEROKU:"heroku",Hosted_Vllm:"hosted_vllm",HUGGINGFACE:"huggingface",HYPERBOLIC:"hyperbolic",Infinity:"infinity",JinaAI:"jina_ai",LAMBDA_AI:"lambda_ai",LEMONADE:"lemonade",LLAMAFILE:"llamafile",LLAMA:"meta_llama",LM_STUDIO:"lm_studio",MARITALK:"maritalk",MiniMax:"minimax",MistralAI:"mistral",MOONSHOT:"moonshot",MORPH:"morph",NEBIUS:"nebius",NLP_CLOUD:"nlp_cloud",NOVITA:"novita",NSCALE:"nscale",NVIDIA_NIM:"nvidia_nim",Ollama:"ollama",OLLAMA_CHAT:"ollama_chat",OOBABOOGA:"oobabooga",OpenAI:"openai",OPENAI_LIKE:"openai_like",OpenAI_Compatible:"openai",OpenAI_Text:"text-completion-openai",OpenAI_Text_Compatible:"text-completion-openai",Openrouter:"openrouter",Oracle:"oci",OVHCLOUD:"ovhcloud",Perplexity:"perplexity",PETALS:"petals",PG_VECTOR:"pg_vector",PREDIBASE:"predibase",RECRAFT:"recraft",REPLICATE:"replicate",RunwayML:"runwayml",SAGEMAKER_LEGACY:"sagemaker",SageMaker:"sagemaker_chat",Sambanova:"sambanova",SAP:"sap",Snowflake:"snowflake",Soniox:"soniox",TEXT_COMPLETION_CODESTRAL:"text-completion-codestral",TogetherAI:"together_ai",TOPAZ:"topaz",Triton:"triton",V0:"v0",VERCEL_AI_GATEWAY:"vercel_ai_gateway",Vertex_AI:"vertex_ai",VERTEX_AI_BETA:"vertex_ai_beta",VLLM:"vllm",VolcEngine:"volcengine",Voyage:"voyage",WANDB:"wandb",WATSONX:"watsonx",WATSONX_TEXT:"watsonx_text",xAI:"xai",XINFERENCE:"xinference",ZAI:"zai"},r=new Set(["bedrock_mantle"]),o="/ui/assets/logos/",i={"A2A Agent":`${o}a2a_agent.png`,Ai21:`${o}ai21.svg`,"Ai21 Chat":`${o}ai21.svg`,"AI/ML API":`${o}aiml_api.svg`,"Aiohttp Openai":`${o}openai_small.svg`,Anthropic:`${o}anthropic.svg`,"Anthropic Text":`${o}anthropic.svg`,AssemblyAI:`${o}assemblyai_small.png`,Azure:`${o}microsoft_azure.svg`,"Azure AI Foundry (Studio)":`${o}microsoft_azure.svg`,"Azure Text":`${o}microsoft_azure.svg`,Baseten:`${o}baseten.svg`,"Amazon Bedrock":`${o}bedrock.svg`,"Amazon Bedrock Mantle":`${o}bedrock.svg`,"AWS SageMaker":`${o}bedrock.svg`,Cerebras:`${o}cerebras.svg`,Cloudflare:`${o}cloudflare.svg`,Codestral:`${o}mistral.svg`,Cohere:`${o}cohere.svg`,"Cohere Chat":`${o}cohere.svg`,Cometapi:`${o}cometapi.svg`,Cursor:`${o}cursor.svg`,"Databricks (Qwen API)":`${o}databricks.svg`,Dashscope:`${o}dashscope.svg`,Deepseek:`${o}deepseek.svg`,Deepgram:`${o}deepgram.png`,DeepInfra:`${o}deepinfra.png`,ElevenLabs:`${o}elevenlabs.png`,"Fal AI":`${o}fal_ai.jpg`,"Featherless Ai":`${o}featherless.svg`,"Fireworks AI":`${o}fireworks.svg`,Friendliai:`${o}friendli.svg`,"Github Copilot":`${o}github_copilot.svg`,"Google AI Studio":`${o}google.svg`,GradientAI:`${o}gradientai.svg`,Groq:`${o}groq.svg`,vllm:`${o}vllm.png`,Huggingface:`${o}huggingface.svg`,Hyperbolic:`${o}hyperbolic.svg`,Infinity:`${o}infinity.png`,"Jina AI":`${o}jina.png`,"Lambda Ai":`${o}lambda.svg`,"Lm Studio":`${o}lmstudio.svg`,"Meta Llama":`${o}meta_llama.svg`,MiniMax:`${o}minimax.svg`,"Mistral AI":`${o}mistral.svg`,Moonshot:`${o}moonshot.svg`,Morph:`${o}morph.svg`,Nebius:`${o}nebius.svg`,Novita:`${o}novita.svg`,"Nvidia Nim":`${o}nvidia_nim.svg`,Ollama:`${o}ollama.svg`,"Ollama Chat":`${o}ollama.svg`,Oobabooga:`${o}openai_small.svg`,OpenAI:`${o}openai_small.svg`,"Openai Like":`${o}openai_small.svg`,"OpenAI Text Completion":`${o}openai_small.svg`,"OpenAI-Compatible Completions (legacy /v1/completions)":`${o}openai_small.svg`,"OpenAI-Compatible Chat Completions (Together AI, vLLM, etc.)":`${o}openai_small.svg`,Openrouter:`${o}openrouter.svg`,"Oracle Cloud Infrastructure (OCI)":`${o}oracle.svg`,Perplexity:`${o}perplexity-ai.svg`,Recraft:`${o}recraft.svg`,Replicate:`${o}replicate.svg`,RunwayML:`${o}runwayml.png`,Sagemaker:`${o}bedrock.svg`,Sambanova:`${o}sambanova.svg`,"SAP Generative AI Hub":`${o}sap.png`,Snowflake:`${o}snowflake.svg`,Soniox:`${o}soniox.svg`,"Text-Completion-Codestral":`${o}mistral.svg`,TogetherAI:`${o}togetherai.svg`,Topaz:`${o}topaz.svg`,Triton:`${o}nvidia_triton.png`,V0:`${o}v0.svg`,"Vercel Ai Gateway":`${o}vercel.svg`,"Vertex AI (Anthropic, Gemini, etc.)":`${o}google.svg`,"Vertex Ai Beta":`${o}google.svg`,Vllm:`${o}vllm.png`,VolcEngine:`${o}volcengine.png`,"Voyage AI":`${o}voyage.webp`,Watsonx:`${o}watsonx.svg`,"Watsonx Text":`${o}watsonx.svg`,xAI:`${o}xai.svg`,Xinference:`${o}xinference.svg`};e.s(["Providers",()=>l,"getPlaceholder",0,e=>{if("AI/ML API"===e)return"aiml/flux-pro/v1.1";if("Vertex AI (Anthropic, Gemini, etc.)"===e)return"gemini-pro";if("Anthropic"==e)return"claude-3-opus";if("Amazon Bedrock"==e)return"claude-3-opus";if("AWS SageMaker"==e)return"sagemaker/jumpstart-dft-meta-textgeneration-llama-2-7b";else if("Google AI Studio"==e)return"gemini-pro";else if("Azure AI Foundry (Studio)"==e)return"azure_ai/command-r-plus";else if("Azure"==e)return"my-deployment";else if("Oracle Cloud Infrastructure (OCI)"==e)return"oci/xai.grok-4";else if("Snowflake"==e)return"snowflake/mistral-7b";else if("Voyage AI"==e)return"voyage/";else if("Jina AI"==e)return"jina_ai/";else if("VolcEngine"==e)return"volcengine/";else if("DeepInfra"==e)return"deepinfra/";else if("Fal AI"==e)return"fal_ai/fal-ai/flux-pro/v1.1-ultra";else if("RunwayML"==e)return"runwayml/gen4_turbo";else if("Watsonx"===e)return"watsonx/ibm/granite-3-3-8b-instruct";else if("Cursor"===e)return"cursor/claude-4-sonnet";else if("Z.AI (Zhipu AI)"===e)return"zai/glm-4.5";else return"gpt-3.5-turbo"},"getProviderLogoAndName",0,e=>{if(!e)return{logo:"",displayName:"-"};if("gemini"===e.toLowerCase()){let e="Google AI Studio";return{logo:(0,a.resolveLogoSrc)(i[e])??"",displayName:e}}let t=Object.keys(n).find(t=>n[t].toLowerCase()===e.toLowerCase())??Object.keys(n).find(t=>t.toLowerCase()===e.toLowerCase());if(!t)return{logo:"",displayName:e};let r=l[t];return{logo:(0,a.resolveLogoSrc)(i[r])??"",displayName:r}},"getProviderModels",0,(e,t)=>{console.log(`Provider key: ${e}`);let a=n[e];console.log(`Provider mapped to: ${a}`);let l=[];return e&&"object"==typeof t&&(Object.entries(t).forEach(([e,t])=>{if(null!==t&&"object"==typeof t&&"litellm_provider"in t){let n=t.litellm_provider,o="string"==typeof n&&(n.startsWith(`${a}_`)||n.startsWith(`${a}-`));(n===a||o&&!r.has(n))&&l.push(e)}}),"Cohere"==e&&(console.log("Adding cohere chat models"),Object.entries(t).forEach(([e,t])=>{null!==t&&"object"==typeof t&&"litellm_provider"in t&&"cohere_chat"===t.litellm_provider&&l.push(e)})),"AWS SageMaker"==e&&(console.log("Adding sagemaker chat models"),Object.entries(t).forEach(([e,t])=>{null!==t&&"object"==typeof t&&"litellm_provider"in t&&"sagemaker_chat"===t.litellm_provider&&l.push(e)}))),l},"providerLogoMap",0,i,"provider_map",0,n])},240647,e=>{"use strict";var t=e.i(286612);e.s(["RightOutlined",()=>t.default])},608856,e=>{"use strict";e.i(247167);var t=e.i(271645),a=e.i(343794),l=e.i(209428),n=e.i(392221),r=e.i(951160),o=e.i(174428),i=t.createContext(null),s=t.createContext({}),c=e.i(211577),u=e.i(931067),d=e.i(361275),m=e.i(404948),p=e.i(244009),g=e.i(703923),f=e.i(611935),h=["prefixCls","className","containerRef"];let v=function(e){var l=e.prefixCls,n=e.className,r=e.containerRef,o=(0,g.default)(e,h),i=t.useContext(s).panel,c=(0,f.useComposeRef)(i,r);return t.createElement("div",(0,u.default)({className:(0,a.default)("".concat(l,"-content"),n),role:"dialog",ref:c},(0,p.default)(e,{aria:!0}),{"aria-modal":"true"},o))};var A=e.i(883110);function b(e){return"string"==typeof e&&String(Number(e))===e?((0,A.default)(!1,"Invalid value type of `width` or `height` which should be number type instead."),Number(e)):e}var y={width:0,height:0,overflow:"hidden",outline:"none",position:"absolute"},x=t.forwardRef(function(e,r){var o,s,g,f=e.prefixCls,h=e.open,A=e.placement,x=e.inline,C=e.push,I=e.forceRender,w=e.autoFocus,O=e.keyboard,E=e.classNames,k=e.rootClassName,S=e.rootStyle,_=e.zIndex,$=e.className,L=e.id,T=e.style,M=e.motion,N=e.width,R=e.height,j=e.children,D=e.mask,P=e.maskClosable,z=e.maskMotion,H=e.maskClassName,B=e.maskStyle,F=e.afterOpenChange,V=e.onClose,G=e.onMouseEnter,K=e.onMouseOver,U=e.onMouseLeave,W=e.onClick,X=e.onKeyDown,q=e.onKeyUp,Q=e.styles,Y=e.drawerRender,Z=t.useRef(),J=t.useRef(),ee=t.useRef();t.useImperativeHandle(r,function(){return Z.current}),t.useEffect(function(){if(h&&w){var e;null==(e=Z.current)||e.focus({preventScroll:!0})}},[h]);var et=t.useState(!1),ea=(0,n.default)(et,2),el=ea[0],en=ea[1],er=t.useContext(i),eo=null!=(o=null!=(s=null==(g="boolean"==typeof C?C?{}:{distance:0}:C||{})?void 0:g.distance)?s:null==er?void 0:er.pushDistance)?o:180,ei=t.useMemo(function(){return{pushDistance:eo,push:function(){en(!0)},pull:function(){en(!1)}}},[eo]);t.useEffect(function(){var e,t;h?null==er||null==(e=er.push)||e.call(er):null==er||null==(t=er.pull)||t.call(er)},[h]),t.useEffect(function(){return function(){var e;null==er||null==(e=er.pull)||e.call(er)}},[]);var es=t.createElement(d.default,(0,u.default)({key:"mask"},z,{visible:D&&h}),function(e,n){var r=e.className,o=e.style;return t.createElement("div",{className:(0,a.default)("".concat(f,"-mask"),r,null==E?void 0:E.mask,H),style:(0,l.default)((0,l.default)((0,l.default)({},o),B),null==Q?void 0:Q.mask),onClick:P&&h?V:void 0,ref:n})}),ec="function"==typeof M?M(A):M,eu={};if(el&&eo)switch(A){case"top":eu.transform="translateY(".concat(eo,"px)");break;case"bottom":eu.transform="translateY(".concat(-eo,"px)");break;case"left":eu.transform="translateX(".concat(eo,"px)");break;default:eu.transform="translateX(".concat(-eo,"px)")}"left"===A||"right"===A?eu.width=b(N):eu.height=b(R);var ed={onMouseEnter:G,onMouseOver:K,onMouseLeave:U,onClick:W,onKeyDown:X,onKeyUp:q},em=t.createElement(d.default,(0,u.default)({key:"panel"},ec,{visible:h,forceRender:I,onVisibleChanged:function(e){null==F||F(e)},removeOnLeave:!1,leavedClassName:"".concat(f,"-content-wrapper-hidden")}),function(n,r){var o=n.className,i=n.style,s=t.createElement(v,(0,u.default)({id:L,containerRef:r,prefixCls:f,className:(0,a.default)($,null==E?void 0:E.content),style:(0,l.default)((0,l.default)({},T),null==Q?void 0:Q.content)},(0,p.default)(e,{aria:!0}),ed),j);return t.createElement("div",(0,u.default)({className:(0,a.default)("".concat(f,"-content-wrapper"),null==E?void 0:E.wrapper,o),style:(0,l.default)((0,l.default)((0,l.default)({},eu),i),null==Q?void 0:Q.wrapper)},(0,p.default)(e,{data:!0})),Y?Y(s):s)}),ep=(0,l.default)({},S);return _&&(ep.zIndex=_),t.createElement(i.Provider,{value:ei},t.createElement("div",{className:(0,a.default)(f,"".concat(f,"-").concat(A),k,(0,c.default)((0,c.default)({},"".concat(f,"-open"),h),"".concat(f,"-inline"),x)),style:ep,tabIndex:-1,ref:Z,onKeyDown:function(e){var t,a,l=e.keyCode,n=e.shiftKey;switch(l){case m.default.TAB:l===m.default.TAB&&(n||document.activeElement!==ee.current?n&&document.activeElement===J.current&&(null==(a=ee.current)||a.focus({preventScroll:!0})):null==(t=J.current)||t.focus({preventScroll:!0}));break;case m.default.ESC:V&&O&&(e.stopPropagation(),V(e))}}},es,t.createElement("div",{tabIndex:0,ref:J,style:y,"aria-hidden":"true","data-sentinel":"start"}),em,t.createElement("div",{tabIndex:0,ref:ee,style:y,"aria-hidden":"true","data-sentinel":"end"})))});let C=function(e){var a=e.open,i=e.prefixCls,c=e.placement,u=e.autoFocus,d=e.keyboard,m=e.width,p=e.mask,g=void 0===p||p,f=e.maskClosable,h=e.getContainer,v=e.forceRender,A=e.afterOpenChange,b=e.destroyOnClose,y=e.onMouseEnter,C=e.onMouseOver,I=e.onMouseLeave,w=e.onClick,O=e.onKeyDown,E=e.onKeyUp,k=e.panelRef,S=t.useState(!1),_=(0,n.default)(S,2),$=_[0],L=_[1],T=t.useState(!1),M=(0,n.default)(T,2),N=M[0],R=M[1];(0,o.default)(function(){R(!0)},[]);var j=!!N&&void 0!==a&&a,D=t.useRef(),P=t.useRef();(0,o.default)(function(){j&&(P.current=document.activeElement)},[j]);var z=t.useMemo(function(){return{panel:k}},[k]);if(!v&&!$&&!j&&b)return null;var H=(0,l.default)((0,l.default)({},e),{},{open:j,prefixCls:void 0===i?"rc-drawer":i,placement:void 0===c?"right":c,autoFocus:void 0===u||u,keyboard:void 0===d||d,width:void 0===m?378:m,mask:g,maskClosable:void 0===f||f,inline:!1===h,afterOpenChange:function(e){var t,a;L(e),null==A||A(e),e||!P.current||null!=(t=D.current)&&t.contains(P.current)||null==(a=P.current)||a.focus({preventScroll:!0})},ref:D},{onMouseEnter:y,onMouseOver:C,onMouseLeave:I,onClick:w,onKeyDown:O,onKeyUp:E});return t.createElement(s.Provider,{value:z},t.createElement(r.default,{open:j||v||$,autoDestroy:!1,getContainer:h,autoLock:g&&(j||$)},t.createElement(x,H)))};var I=e.i(981444),w=e.i(617206),O=e.i(122767),E=e.i(613541),k=e.i(340010),S=e.i(242064),_=e.i(922611),$=e.i(563113),L=e.i(185793);let T=e=>{var l,n,r,o;let i,{prefixCls:s,ariaId:c,title:u,footer:d,extra:m,closable:p,loading:g,onClose:f,headerStyle:h,bodyStyle:v,footerStyle:A,children:b,classNames:y,styles:x}=e,C=(0,S.useComponentConfig)("drawer");i=!1===p?void 0:void 0===p||!0===p?"start":(null==p?void 0:p.placement)==="end"?"end":"start";let I=t.useCallback(e=>t.createElement("button",{type:"button",onClick:f,className:(0,a.default)(`${s}-close`,{[`${s}-close-${i}`]:"end"===i})},e),[f,s,i]),[w,O]=(0,$.useClosable)((0,$.pickClosable)(e),(0,$.pickClosable)(C),{closable:!0,closeIconRender:I});return t.createElement(t.Fragment,null,u||w?t.createElement("div",{style:Object.assign(Object.assign(Object.assign({},null==(r=C.styles)?void 0:r.header),h),null==x?void 0:x.header),className:(0,a.default)(`${s}-header`,{[`${s}-header-close-only`]:w&&!u&&!m},null==(o=C.classNames)?void 0:o.header,null==y?void 0:y.header)},t.createElement("div",{className:`${s}-header-title`},"start"===i&&O,u&&t.createElement("div",{className:`${s}-title`,id:c},u)),m&&t.createElement("div",{className:`${s}-extra`},m),"end"===i&&O):null,t.createElement("div",{className:(0,a.default)(`${s}-body`,null==y?void 0:y.body,null==(l=C.classNames)?void 0:l.body),style:Object.assign(Object.assign(Object.assign({},null==(n=C.styles)?void 0:n.body),v),null==x?void 0:x.body)},g?t.createElement(L.default,{active:!0,title:!1,paragraph:{rows:5},className:`${s}-body-skeleton`}):b),(()=>{var e,l;if(!d)return null;let n=`${s}-footer`;return t.createElement("div",{className:(0,a.default)(n,null==(e=C.classNames)?void 0:e.footer,null==y?void 0:y.footer),style:Object.assign(Object.assign(Object.assign({},null==(l=C.styles)?void 0:l.footer),A),null==x?void 0:x.footer)},d)})())};e.i(296059);var M=e.i(915654),N=e.i(183293),R=e.i(246422),j=e.i(838378);let D=(e,t)=>({"&-enter, &-appear":Object.assign(Object.assign({},e),{"&-active":t}),"&-leave":Object.assign(Object.assign({},t),{"&-active":e})}),P=(e,t)=>Object.assign({"&-enter, &-appear, &-leave":{"&-start":{transition:"none"},"&-active":{transition:`all ${t}`}}},D({opacity:e},{opacity:1})),z=(0,R.genStyleHooks)("Drawer",e=>{let t=(0,j.mergeToken)(e,{});return[(e=>{let{borderRadiusSM:t,componentCls:a,zIndexPopup:l,colorBgMask:n,colorBgElevated:r,motionDurationSlow:o,motionDurationMid:i,paddingXS:s,padding:c,paddingLG:u,fontSizeLG:d,lineHeightLG:m,lineWidth:p,lineType:g,colorSplit:f,marginXS:h,colorIcon:v,colorIconHover:A,colorBgTextHover:b,colorBgTextActive:y,colorText:x,fontWeightStrong:C,footerPaddingBlock:I,footerPaddingInline:w,calc:O}=e,E=`${a}-content-wrapper`;return{[a]:{position:"fixed",inset:0,zIndex:l,pointerEvents:"none",color:x,"&-pure":{position:"relative",background:r,display:"flex",flexDirection:"column",[`&${a}-left`]:{boxShadow:e.boxShadowDrawerLeft},[`&${a}-right`]:{boxShadow:e.boxShadowDrawerRight},[`&${a}-top`]:{boxShadow:e.boxShadowDrawerUp},[`&${a}-bottom`]:{boxShadow:e.boxShadowDrawerDown}},"&-inline":{position:"absolute"},[`${a}-mask`]:{position:"absolute",inset:0,zIndex:l,background:n,pointerEvents:"auto"},[E]:{position:"absolute",zIndex:l,maxWidth:"100vw",transition:`all ${o}`,"&-hidden":{display:"none"}},[`&-left > ${E}`]:{top:0,bottom:0,left:{_skip_check_:!0,value:0},boxShadow:e.boxShadowDrawerLeft},[`&-right > ${E}`]:{top:0,right:{_skip_check_:!0,value:0},bottom:0,boxShadow:e.boxShadowDrawerRight},[`&-top > ${E}`]:{top:0,insetInline:0,boxShadow:e.boxShadowDrawerUp},[`&-bottom > ${E}`]:{bottom:0,insetInline:0,boxShadow:e.boxShadowDrawerDown},[`${a}-content`]:{display:"flex",flexDirection:"column",width:"100%",height:"100%",overflow:"auto",background:r,pointerEvents:"auto"},[`${a}-header`]:{display:"flex",flex:0,alignItems:"center",padding:`${(0,M.unit)(c)} ${(0,M.unit)(u)}`,fontSize:d,lineHeight:m,borderBottom:`${(0,M.unit)(p)} ${g} ${f}`,"&-title":{display:"flex",flex:1,alignItems:"center",minWidth:0,minHeight:0}},[`${a}-extra`]:{flex:"none"},[`${a}-close`]:Object.assign({display:"inline-flex",width:O(d).add(s).equal(),height:O(d).add(s).equal(),borderRadius:t,justifyContent:"center",alignItems:"center",color:v,fontWeight:C,fontSize:d,fontStyle:"normal",lineHeight:1,textAlign:"center",textTransform:"none",textDecoration:"none",background:"transparent",border:0,cursor:"pointer",transition:`all ${i}`,textRendering:"auto",[`&${a}-close-end`]:{marginInlineStart:h},[`&:not(${a}-close-end)`]:{marginInlineEnd:h},"&:hover":{color:A,backgroundColor:b,textDecoration:"none"},"&:active":{backgroundColor:y}},(0,N.genFocusStyle)(e)),[`${a}-title`]:{flex:1,margin:0,fontWeight:e.fontWeightStrong,fontSize:d,lineHeight:m},[`${a}-body`]:{flex:1,minWidth:0,minHeight:0,padding:u,overflow:"auto",[`${a}-body-skeleton`]:{width:"100%",height:"100%",display:"flex",justifyContent:"center"}},[`${a}-footer`]:{flexShrink:0,padding:`${(0,M.unit)(I)} ${(0,M.unit)(w)}`,borderTop:`${(0,M.unit)(p)} ${g} ${f}`},"&-rtl":{direction:"rtl"}}}})(t),(e=>{let{componentCls:t,motionDurationSlow:a}=e;return{[t]:{[`${t}-mask-motion`]:P(0,a),[`${t}-panel-motion`]:["left","right","top","bottom"].reduce((e,t)=>{let l;return Object.assign(Object.assign({},e),{[`&-${t}`]:[P(.7,a),D({transform:(l="100%",({left:`translateX(-${l})`,right:`translateX(${l})`,top:`translateY(-${l})`,bottom:`translateY(${l})`})[t])},{transform:"none"})]})},{})}}})(t)]},e=>({zIndexPopup:e.zIndexPopupBase,footerPaddingBlock:e.paddingXS,footerPaddingInline:e.padding}));var H=function(e,t){var a={};for(var l in e)Object.prototype.hasOwnProperty.call(e,l)&&0>t.indexOf(l)&&(a[l]=e[l]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var n=0,l=Object.getOwnPropertySymbols(e);nt.indexOf(l[n])&&Object.prototype.propertyIsEnumerable.call(e,l[n])&&(a[l[n]]=e[l[n]]);return a};let B={distance:180},F=e=>{let{rootClassName:l,width:n,height:r,size:o="default",mask:i=!0,push:s=B,open:c,afterOpenChange:u,onClose:d,prefixCls:m,getContainer:p,panelRef:g=null,style:h,className:v,"aria-labelledby":A,visible:b,afterVisibleChange:y,maskStyle:x,drawerStyle:$,contentWrapperStyle:L,destroyOnClose:M,destroyOnHidden:N}=e,R=H(e,["rootClassName","width","height","size","mask","push","open","afterOpenChange","onClose","prefixCls","getContainer","panelRef","style","className","aria-labelledby","visible","afterVisibleChange","maskStyle","drawerStyle","contentWrapperStyle","destroyOnClose","destroyOnHidden"]),j=(0,I.default)(),D=R.title?j:void 0,{getPopupContainer:P,getPrefixCls:F,direction:V,className:G,style:K,classNames:U,styles:W}=(0,S.useComponentConfig)("drawer"),X=F("drawer",m),[q,Q,Y]=z(X),Z=void 0===p&&P?()=>P(document.body):p,J=(0,a.default)({"no-mask":!i,[`${X}-rtl`]:"rtl"===V},l,Q,Y),ee=t.useMemo(()=>null!=n?n:"large"===o?736:378,[n,o]),et=t.useMemo(()=>null!=r?r:"large"===o?736:378,[r,o]),ea={motionName:(0,E.getTransitionName)(X,"mask-motion"),motionAppear:!0,motionEnter:!0,motionLeave:!0,motionDeadline:500},el=(0,_.usePanelRef)(),en=(0,f.composeRef)(g,el),[er,eo]=(0,O.useZIndex)("Drawer",R.zIndex),{classNames:ei={},styles:es={}}=R;return q(t.createElement(w.default,{form:!0,space:!0},t.createElement(k.default.Provider,{value:eo},t.createElement(C,Object.assign({prefixCls:X,onClose:d,maskMotion:ea,motion:e=>({motionName:(0,E.getTransitionName)(X,`panel-motion-${e}`),motionAppear:!0,motionEnter:!0,motionLeave:!0,motionDeadline:500})},R,{classNames:{mask:(0,a.default)(ei.mask,U.mask),content:(0,a.default)(ei.content,U.content),wrapper:(0,a.default)(ei.wrapper,U.wrapper)},styles:{mask:Object.assign(Object.assign(Object.assign({},es.mask),x),W.mask),content:Object.assign(Object.assign(Object.assign({},es.content),$),W.content),wrapper:Object.assign(Object.assign(Object.assign({},es.wrapper),L),W.wrapper)},open:null!=c?c:b,mask:i,push:s,width:ee,height:et,style:Object.assign(Object.assign({},K),h),className:(0,a.default)(G,v),rootClassName:J,getContainer:Z,afterOpenChange:null!=u?u:y,panelRef:en,zIndex:er,"aria-labelledby":null!=A?A:D,destroyOnClose:null!=N?N:M}),t.createElement(T,Object.assign({prefixCls:X},R,{ariaId:D,onClose:d}))))))};F._InternalPanelDoNotUseOrYouWillBeFired=e=>{let{prefixCls:l,style:n,className:r,placement:o="right"}=e,i=H(e,["prefixCls","style","className","placement"]),{getPrefixCls:s}=t.useContext(S.ConfigContext),c=s("drawer",l),[u,d,m]=z(c),p=(0,a.default)(c,`${c}-pure`,`${c}-${o}`,d,m,r);return u(t.createElement("div",{className:p,style:n},t.createElement(T,Object.assign({prefixCls:c},i))))},e.s(["Drawer",0,F],608856)},149121,e=>{"use strict";var t=e.i(843476),a=e.i(271645),l=e.i(152990),n=e.i(682830),r=e.i(269200),o=e.i(427612),i=e.i(64848),s=e.i(942232),c=e.i(496020),u=e.i(977572);e.s(["DataTable",0,function({data:e=[],columns:d,onRowClick:m,renderSubComponent:p,renderChildRows:g,getRowCanExpand:f,isLoading:h=!1,loadingMessage:v="🚅 Loading logs...",noDataMessage:A="No logs found",enableSorting:b=!1}){let y=!!(p||g)&&!!f,[x,C]=(0,a.useState)([]),I=(0,l.useReactTable)({data:e,columns:d,...b&&{state:{sorting:x},onSortingChange:C,enableSortingRemoval:!1},...y&&{getRowCanExpand:f},getRowId:(e,t)=>e?.request_id??String(t),getCoreRowModel:(0,n.getCoreRowModel)(),...b&&{getSortedRowModel:(0,n.getSortedRowModel)()},...y&&{getExpandedRowModel:(0,n.getExpandedRowModel)()}});return(0,t.jsx)("div",{className:"rounded-lg custom-border overflow-x-auto w-full max-w-full box-border",children:(0,t.jsxs)(r.Table,{className:"[&_td]:py-0.5 [&_th]:py-1 table-fixed w-full box-border",style:{minWidth:"400px"},children:[(0,t.jsx)(o.TableHead,{children:I.getHeaderGroups().map(e=>(0,t.jsx)(c.TableRow,{children:e.headers.map(e=>{let a=b&&e.column.getCanSort(),n=e.column.getIsSorted();return(0,t.jsx)(i.TableHeaderCell,{className:`py-1 h-8 ${a?"cursor-pointer select-none hover:bg-gray-50":""}`,onClick:a?e.column.getToggleSortingHandler():void 0,children:e.isPlaceholder?null:(0,t.jsxs)("div",{className:"flex items-center gap-1",children:[(0,l.flexRender)(e.column.columnDef.header,e.getContext()),a&&(0,t.jsx)("span",{className:"text-gray-400",children:"asc"===n?"↑":"desc"===n?"↓":"⇅"})]})},e.id)})},e.id))}),(0,t.jsx)(s.TableBody,{children:h?(0,t.jsx)(c.TableRow,{children:(0,t.jsx)(u.TableCell,{colSpan:d.length,className:"h-8 text-center",children:(0,t.jsx)("div",{className:"text-center text-gray-500",children:(0,t.jsx)("p",{children:v})})})}):I.getRowModel().rows.length>0?I.getRowModel().rows.map(e=>(0,t.jsxs)(a.Fragment,{children:[(0,t.jsx)(c.TableRow,{className:`h-8 ${m?"cursor-pointer hover:bg-gray-50":""}`,onClick:()=>m?.(e.original),children:e.getVisibleCells().map(e=>(0,t.jsx)(u.TableCell,{className:"py-0.5 max-h-8 overflow-hidden text-ellipsis whitespace-nowrap",children:(0,l.flexRender)(e.column.columnDef.cell,e.getContext())},e.id))}),y&&e.getIsExpanded()&&g&&g({row:e}),y&&e.getIsExpanded()&&p&&!g&&(0,t.jsx)(c.TableRow,{children:(0,t.jsx)(u.TableCell,{colSpan:e.getVisibleCells().length,className:"p-0",children:(0,t.jsx)("div",{className:"w-full max-w-full overflow-hidden box-border",children:p({row:e})})})})]},e.id)):(0,t.jsx)(c.TableRow,{children:(0,t.jsx)(u.TableCell,{colSpan:d.length,className:"h-8 text-center",children:(0,t.jsx)("div",{className:"text-center text-gray-500",children:(0,t.jsx)("p",{children:A})})})})})]})})}])},95684,e=>{"use strict";var t=e.i(165370);e.s(["Pagination",()=>t.default])},836991,e=>{"use strict";var t=e.i(271645);let a=t.forwardRef(function(e,a){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:a},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12"}))});e.s(["XIcon",0,a],836991)},446891,e=>{"use strict";var t=e.i(843476),a=e.i(464571),l=e.i(326373),n=e.i(94629),r=e.i(360820),o=e.i(871943),i=e.i(836991);e.s(["TableHeaderSortDropdown",0,({sortState:e,onSortChange:s})=>{let c=[{key:"asc",label:"Ascending",icon:(0,t.jsx)(r.ChevronUpIcon,{className:"h-4 w-4"})},{key:"desc",label:"Descending",icon:(0,t.jsx)(o.ChevronDownIcon,{className:"h-4 w-4"})},{key:"reset",label:"Reset",icon:(0,t.jsx)(i.XIcon,{className:"h-4 w-4"})}];return(0,t.jsx)(l.Dropdown,{menu:{items:c,onClick:({key:e})=>{"asc"===e?s("asc"):"desc"===e?s("desc"):"reset"===e&&s(!1)},selectable:!0,selectedKeys:e?[e]:[]},trigger:["click"],autoAdjustOverflow:!0,children:(0,t.jsx)(a.Button,{type:"text",onClick:e=>e.stopPropagation(),icon:"asc"===e?(0,t.jsx)(r.ChevronUpIcon,{className:"h-4 w-4"}):"desc"===e?(0,t.jsx)(o.ChevronDownIcon,{className:"h-4 w-4"}):(0,t.jsx)(n.SwitchVerticalIcon,{className:"h-4 w-4"}),className:e?"text-blue-500 hover:text-blue-600":"text-gray-400 hover:text-blue-500"})})}])},362024,e=>{"use strict";var t=e.i(988122);e.s(["Collapse",()=>t.default])},245704,e=>{"use strict";e.i(247167);var t=e.i(931067),a=e.i(271645);let l={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M699 353h-46.9c-10.2 0-19.9 4.9-25.9 13.3L469 584.3l-71.2-98.8c-6-8.3-15.6-13.3-25.9-13.3H325c-6.5 0-10.3 7.4-6.5 12.7l124.6 172.8a31.8 31.8 0 0051.7 0l210.6-292c3.9-5.3.1-12.7-6.4-12.7z"}},{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}}]},name:"check-circle",theme:"outlined"};var n=e.i(9583),r=a.forwardRef(function(e,r){return a.createElement(n.default,(0,t.default)({},e,{ref:r,icon:l}))});e.s(["CheckCircleOutlined",0,r],245704)},149192,e=>{"use strict";var t=e.i(864517);e.s(["CloseOutlined",()=>t.default])},518617,e=>{"use strict";e.i(247167);var t=e.i(931067),a=e.i(271645);let l={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64c247.4 0 448 200.6 448 448S759.4 960 512 960 64 759.4 64 512 264.6 64 512 64zm0 76c-205.4 0-372 166.6-372 372s166.6 372 372 372 372-166.6 372-372-166.6-372-372-372zm128.01 198.83c.03 0 .05.01.09.06l45.02 45.01a.2.2 0 01.05.09.12.12 0 010 .07c0 .02-.01.04-.05.08L557.25 512l127.87 127.86a.27.27 0 01.05.06v.02a.12.12 0 010 .07c0 .03-.01.05-.05.09l-45.02 45.02a.2.2 0 01-.09.05.12.12 0 01-.07 0c-.02 0-.04-.01-.08-.05L512 557.25 384.14 685.12c-.04.04-.06.05-.08.05a.12.12 0 01-.07 0c-.03 0-.05-.01-.09-.05l-45.02-45.02a.2.2 0 01-.05-.09.12.12 0 010-.07c0-.02.01-.04.06-.08L466.75 512 338.88 384.14a.27.27 0 01-.05-.06l-.01-.02a.12.12 0 010-.07c0-.03.01-.05.05-.09l45.02-45.02a.2.2 0 01.09-.05.12.12 0 01.07 0c.02 0 .04.01.08.06L512 466.75l127.86-127.86c.04-.05.06-.06.08-.06a.12.12 0 01.07 0z"}}]},name:"close-circle",theme:"outlined"};var n=e.i(9583),r=a.forwardRef(function(e,r){return a.createElement(n.default,(0,t.default)({},e,{ref:r,icon:l}))});e.s(["CloseCircleOutlined",0,r],518617)},657150,e=>{"use strict";let t=(0,e.i(475254).default)("bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]);e.s(["default",0,t])},531245,782273,793916,e=>{"use strict";var t=e.i(657150);e.s(["Bot",()=>t.default],531245),e.i(247167);var a=e.i(931067),l=e.i(271645);let n={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M625.9 115c-5.9 0-11.9 1.6-17.4 5.3L254 352H90c-8.8 0-16 7.2-16 16v288c0 8.8 7.2 16 16 16h164l354.5 231.7c5.5 3.6 11.6 5.3 17.4 5.3 16.7 0 32.1-13.3 32.1-32.1V147.1c0-18.8-15.4-32.1-32.1-32.1zM586 803L293.4 611.7l-18-11.7H146V424h129.4l17.9-11.7L586 221v582zm348-327H806c-8.8 0-16 7.2-16 16v40c0 8.8 7.2 16 16 16h128c8.8 0 16-7.2 16-16v-40c0-8.8-7.2-16-16-16zm-41.9 261.8l-110.3-63.7a15.9 15.9 0 00-21.7 5.9l-19.9 34.5c-4.4 7.6-1.8 17.4 5.8 21.8L856.3 800a15.9 15.9 0 0021.7-5.9l19.9-34.5c4.4-7.6 1.7-17.4-5.8-21.8zM760 344a15.9 15.9 0 0021.7 5.9L892 286.2c7.6-4.4 10.2-14.2 5.8-21.8L878 230a15.9 15.9 0 00-21.7-5.9L746 287.8a15.99 15.99 0 00-5.8 21.8L760 344z"}}]},name:"sound",theme:"outlined"};var r=e.i(9583),o=l.forwardRef(function(e,t){return l.createElement(r.default,(0,a.default)({},e,{ref:t,icon:n}))});e.s(["SoundOutlined",0,o],782273);let i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M842 454c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8 0 140.3-113.7 254-254 254S258 594.3 258 454c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8 0 168.7 126.6 307.9 290 327.6V884H326.7c-13.7 0-24.7 14.3-24.7 32v36c0 4.4 2.8 8 6.2 8h407.6c3.4 0 6.2-3.6 6.2-8v-36c0-17.7-11-32-24.7-32H548V782.1c165.3-18 294-158 294-328.1zM512 624c93.9 0 170-75.2 170-168V232c0-92.8-76.1-168-170-168s-170 75.2-170 168v224c0 92.8 76.1 168 170 168zm-94-392c0-50.6 41.9-92 94-92s94 41.4 94 92v224c0 50.6-41.9 92-94 92s-94-41.4-94-92V232z"}}]},name:"audio",theme:"outlined"};var s=l.forwardRef(function(e,t){return l.createElement(r.default,(0,a.default)({},e,{ref:t,icon:i}))});e.s(["AudioOutlined",0,s],793916)},625901,e=>{"use strict";var t=e.i(266027),a=e.i(621482),l=e.i(243652),n=e.i(602869),r=e.i(135214);let o=(0,l.createQueryKeys)("models"),i=(0,l.createQueryKeys)("modelHub"),s=(0,l.createQueryKeys)("allProxyModels");(0,l.createQueryKeys)("selectedTeamModels");let c=(0,l.createQueryKeys)("infiniteModels"),u=(0,l.createQueryKeys)("userModels");e.s(["useAllProxyModels",0,()=>{let{accessToken:e,userId:a,userRole:l}=(0,r.default)();return(0,t.useQuery)({queryKey:s.list({}),queryFn:async()=>await (0,n.modelAvailableCall)(e,a,l,!0,null,!0,!1,"expand"),enabled:!!(e&&a&&l)})},"useInfiniteModelInfo",0,(e=50,t)=>{let{accessToken:l,userId:o,userRole:i}=(0,r.default)();return(0,a.useInfiniteQuery)({queryKey:c.list({filters:{...o&&{userId:o},...i&&{userRole:i},size:e,...t&&{search:t}}}),queryFn:async({pageParam:a})=>await (0,n.modelInfoCall)(l,o,i,a,e,t),initialPageParam:1,getNextPageParam:e=>{if(e.current_page{let{accessToken:e}=(0,r.default)();return(0,t.useQuery)({queryKey:i.list({}),queryFn:async()=>await (0,n.modelHubCall)(e),enabled:!!e})},"useModelsInfo",0,(e=1,a=50,l,i,s,c,u)=>{let{accessToken:d,userId:m,userRole:p}=(0,r.default)();return(0,t.useQuery)({queryKey:o.list({filters:{...m&&{userId:m},...p&&{userRole:p},page:e,size:a,...l&&{search:l},...i&&{modelId:i},...s&&{teamId:s},...c&&{sortBy:c},...u&&{sortOrder:u}}}),queryFn:async()=>await (0,n.modelInfoCall)(d,m,p,e,a,l,i,s,c,u),enabled:!!(d&&m&&p)})},"useUserModels",0,()=>{let{accessToken:e,userId:a,userRole:l}=(0,r.default)();return(0,t.useQuery)({queryKey:u.list({}),queryFn:async()=>(await (0,n.modelAvailableCall)(e,a,l)).data.map(e=>e.id),enabled:!!(e&&a&&l)})}])},969550,e=>{"use strict";var t=e.i(843476),a=e.i(271645);let l=a.forwardRef(function(e,t){return a.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:t},e),a.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3 4a1 1 0 011-1h16a1 1 0 011 1v2.586a1 1 0 01-.293.707l-6.414 6.414a1 1 0 00-.293.707V17l-4 4v-6.586a1 1 0 00-.293-.707L3.293 7.293A1 1 0 013 6.586V4z"}))});var n=e.i(464571),r=e.i(311451),o=e.i(199133),i=e.i(374009);e.s(["default",0,({options:e,onApplyFilters:s,onResetFilters:c,initialValues:u={},buttonLabel:d="Filters"})=>{let[m,p]=(0,a.useState)(!1),[g,f]=(0,a.useState)(u),[h,v]=(0,a.useState)({}),[A,b]=(0,a.useState)({}),[y,x]=(0,a.useState)({}),[C,I]=(0,a.useState)({}),w=(0,a.useCallback)((0,i.default)(async(e,t)=>{if(t.isSearchable&&t.searchFn){b(e=>({...e,[t.name]:!0}));try{let a=await t.searchFn(e);v(e=>({...e,[t.name]:a}))}catch(e){console.error("Error searching:",e),v(e=>({...e,[t.name]:[]}))}finally{b(e=>({...e,[t.name]:!1}))}}},300),[]),O=(0,a.useCallback)(async e=>{if(e.isSearchable&&e.searchFn&&!C[e.name]){b(t=>({...t,[e.name]:!0})),I(t=>({...t,[e.name]:!0}));try{let t=await e.searchFn("");v(a=>({...a,[e.name]:t}))}catch(t){console.error("Error loading initial options:",t),v(t=>({...t,[e.name]:[]}))}finally{b(t=>({...t,[e.name]:!1}))}}},[C]);(0,a.useEffect)(()=>{m&&e.forEach(e=>{e.isSearchable&&!C[e.name]&&O(e)})},[m,e,O,C]);let E=(e,t)=>{let a={...g,[e]:t};f(a),s(a)};return(0,t.jsxs)("div",{className:"w-full",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 mb-6",children:[(0,t.jsx)(n.Button,{icon:(0,t.jsx)(l,{className:"h-4 w-4"}),onClick:()=>p(!m),className:"flex items-center gap-2",children:d}),(0,t.jsx)(n.Button,{onClick:()=>{let t={};e.forEach(e=>{t[e.name]=""}),f(t),c()},children:"Reset Filters"})]}),m&&(0,t.jsx)("div",{className:"grid grid-cols-3 gap-x-6 gap-y-4 mb-6",children:e.map(e=>{let a;return(0,t.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,t.jsx)("label",{className:"text-sm text-gray-600",children:e.label||e.name}),e.isSearchable?(0,t.jsx)(o.Select,{showSearch:!0,className:"w-full",placeholder:`Search ${e.label||e.name}...`,value:g[e.name]||void 0,onChange:t=>E(e.name,t),onOpenChange:t=>{t&&e.isSearchable&&!C[e.name]&&O(e)},onSearch:t=>{x(a=>({...a,[e.name]:t})),e.searchFn&&w(t,e)},filterOption:!1,loading:A[e.name],options:h[e.name]||[],allowClear:!0,notFoundContent:A[e.name]?"Loading...":"No results found"}):e.options?(0,t.jsx)(o.Select,{className:"w-full",placeholder:`Select ${e.label||e.name}...`,value:g[e.name]||void 0,onChange:t=>E(e.name,t),allowClear:!0,children:e.options.map(e=>(0,t.jsx)(o.Select.Option,{value:e.value,children:e.label},e.value))}):e.customComponent?(a=e.customComponent,(0,t.jsx)(a,{value:g[e.name]||void 0,onChange:t=>E(e.name,t??""),placeholder:`Select ${e.label||e.name}...`,allFilters:g})):(0,t.jsx)(r.Input,{className:"w-full",placeholder:`Enter ${e.label||e.name}...`,value:g[e.name]||"",onChange:t=>E(e.name,t.target.value),allowClear:!0})]},e.name)})})]})}],969550)},633627,e=>{"use strict";var t=e.i(602869);let a=(e,t,a,l)=>{for(let n of e){let e=n?.key_alias;e&&"string"==typeof e&&t.add(e.trim());let r=n?.organization_id??n?.org_id;r&&"string"==typeof r&&a.add(r.trim());let o=n?.user_id;if(o&&"string"==typeof o){let e=n?.user?.user_email||o;l.set(o,e)}}},l=async(e,l)=>{if(!e||!l)return{keyAliases:[],organizationIds:[],userIds:[]};try{let n=new Set,r=new Set,o=new Map,i=await (0,t.keyListCall)(e,null,l,null,null,null,1,100,null,null,"user",null),s=i?.keys||[],c=i?.total_pages??1;a(s,n,r,o);let u=Math.min(c,10)-1;if(u>0){let i=Array.from({length:u},(a,n)=>(0,t.keyListCall)(e,null,l,null,null,null,n+2,100,null,null,"user",null));for(let e of(await Promise.allSettled(i)))"fulfilled"===e.status&&a(e.value?.keys||[],n,r,o)}return{keyAliases:Array.from(n).sort(),organizationIds:Array.from(r).sort(),userIds:Array.from(o.entries()).map(([e,t])=>({id:e,email:t}))}}catch(e){return console.error("Error fetching team filter options:",e),{keyAliases:[],organizationIds:[],userIds:[]}}},n=async(e,a)=>{if(!e)return[];try{let l=[],n=1,r=!0;for(;r;){let o=await (0,t.teamListCall)(e,a||null,null);l=[...l,...o],n{if(!e)return[];try{let a=[],l=1,n=!0;for(;n;){let r=await (0,t.organizationListCall)(e);a=[...a,...r],l{"use strict";var t=e.i(271645);e.s(["defaultPageSize",0,25,"useBaseUrl",0,()=>{let[e,a]=(0,t.useState)("http://localhost:4000");return(0,t.useEffect)(()=>{{let{protocol:e,host:t}=window.location;a(`${e}//${t}`)}},[]),e}])},50882,e=>{"use strict";var t=e.i(843476),a=e.i(621482),l=e.i(243652),n=e.i(602869),r=e.i(135214);let o=(0,l.createQueryKeys)("infiniteKeyAliases");var i=e.i(56456),s=e.i(152473),c=e.i(199133),u=e.i(271645);e.s(["PaginatedKeyAliasSelect",0,({value:e,onChange:l,placeholder:d="Select a key alias",style:m,pageSize:p=50,allowClear:g=!0,disabled:f=!1,allFilters:h})=>{let[v,A]=(0,u.useState)(""),[b,y]=(0,s.useDebouncedState)("",{wait:300}),{data:x,fetchNextPage:C,hasNextPage:I,isFetchingNextPage:w,isLoading:O}=((e=50,t,l)=>{let{accessToken:i}=(0,r.default)();return(0,a.useInfiniteQuery)({queryKey:o.list({filters:{size:e,...t&&{search:t},...l&&{team_id:l}}}),queryFn:async({pageParam:a})=>await (0,n.keyAliasesCall)(i,a,e,t,l),initialPageParam:1,getNextPageParam:e=>{if(e.current_page{if(!x?.pages)return[];let e=new Set,t=[];for(let a of x.pages)for(let l of a.aliases)!l||e.has(l)||(e.add(l),t.push({label:l,value:l}));return t},[x]);return(0,t.jsx)(c.Select,{value:e||void 0,onChange:e=>{l?.(e??"")},placeholder:d,style:{width:"100%",...m},allowClear:g,disabled:f,showSearch:!0,filterOption:!1,onSearch:e=>{A(e),y(e)},searchValue:v,onPopupScroll:e=>{let t=e.currentTarget;(t.scrollTop+t.clientHeight)/t.scrollHeight>=.8&&I&&!w&&C()},loading:O,notFoundContent:O?(0,t.jsx)(i.LoadingOutlined,{spin:!0}):"No key aliases found",options:E,popupRender:e=>(0,t.jsxs)(t.Fragment,{children:[e,w&&(0,t.jsx)("div",{style:{textAlign:"center",padding:8},children:(0,t.jsx)(i.LoadingOutlined,{spin:!0})})]})})}],50882)},307582,e=>{"use strict";var t=e.i(843476);e.s(["TimeCell",0,({utcTime:e})=>(0,t.jsx)("span",{style:{fontFamily:"monospace",width:"180px",display:"inline-block"},children:(e=>{try{return new Date(e).toLocaleString("en-US",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!0}).replace(",","")}catch(e){return"Error converting time"}})(e)})])},86827,e=>{"use strict";var t=e.i(843476),a=e.i(482725),l=e.i(56456);e.s(["AntDLoadingSpinner",0,function({size:e,fontSize:n}){let r=(0,t.jsx)(l.LoadingOutlined,{style:n?{fontSize:n}:void 0,spin:!0});return(0,t.jsx)(a.Spin,{indicator:r,size:e})}])}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0rsh-mjgd1-1b.js b/litellm/proxy/_experimental/out/_next/static/chunks/0rsh-mjgd1-1b.js new file mode 100644 index 00000000000..75f3fd3f090 --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0rsh-mjgd1-1b.js @@ -0,0 +1,11 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,270377,e=>{"use strict";e.i(247167);var t=e.i(931067),n=e.i(271645);let l={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M464 688a48 48 0 1096 0 48 48 0 10-96 0zm24-112h48c4.4 0 8-3.6 8-8V296c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v272c0 4.4 3.6 8 8 8z"}}]},name:"exclamation-circle",theme:"outlined"};var i=e.i(9583),o=n.forwardRef(function(e,o){return n.createElement(i.default,(0,t.default)({},e,{ref:o,icon:l}))});e.s(["ExclamationCircleOutlined",0,o],270377)},544195,e=>{"use strict";var t=e.i(271645),n=e.i(343794),l=e.i(981444),i=e.i(914949),o=e.i(244009),r=e.i(242064),a=e.i(321883),d=e.i(517455);let s=t.createContext(null),c=s.Provider,u=t.createContext(null),b=u.Provider;e.i(247167);var p=e.i(91874),g=e.i(611935),m=e.i(121872),f=e.i(26905),h=e.i(681216),$=e.i(937328),y=e.i(62139);e.i(296059);var v=e.i(915654),O=e.i(183293),S=e.i(246422),x=e.i(838378);let C=(0,S.genStyleHooks)("Radio",e=>{let{controlOutline:t,controlOutlineWidth:n}=e,l=`0 0 0 ${(0,v.unit)(n)} ${t}`,i=(0,x.mergeToken)(e,{radioFocusShadow:l,radioButtonFocusShadow:l});return[(e=>{let{componentCls:t,antCls:n}=e,l=`${t}-group`;return{[l]:Object.assign(Object.assign({},(0,O.resetComponent)(e)),{display:"inline-block",fontSize:0,[`&${l}-rtl`]:{direction:"rtl"},[`&${l}-block`]:{display:"flex"},[`${n}-badge ${n}-badge-count`]:{zIndex:1},[`> ${n}-badge:not(:first-child) > ${n}-button-wrapper`]:{borderInlineStart:"none"}})}})(i),(e=>{let{componentCls:t,wrapperMarginInlineEnd:n,colorPrimary:l,radioSize:i,motionDurationSlow:o,motionDurationMid:r,motionEaseInOutCirc:a,colorBgContainer:d,colorBorder:s,lineWidth:c,colorBgContainerDisabled:u,colorTextDisabled:b,paddingXS:p,dotColorDisabled:g,lineType:m,radioColor:f,radioBgColor:h,calc:$}=e,y=`${t}-inner`,S=$(i).sub($(4).mul(2)),x=$(1).mul(i).equal({unit:!0});return{[`${t}-wrapper`]:Object.assign(Object.assign({},(0,O.resetComponent)(e)),{display:"inline-flex",alignItems:"baseline",marginInlineStart:0,marginInlineEnd:n,cursor:"pointer","&:last-child":{marginInlineEnd:0},[`&${t}-wrapper-rtl`]:{direction:"rtl"},"&-disabled":{cursor:"not-allowed",color:e.colorTextDisabled},"&::after":{display:"inline-block",width:0,overflow:"hidden",content:'"\\a0"'},"&-block":{flex:1,justifyContent:"center"},[`${t}-checked::after`]:{position:"absolute",insetBlockStart:0,insetInlineStart:0,width:"100%",height:"100%",border:`${(0,v.unit)(c)} ${m} ${l}`,borderRadius:"50%",visibility:"hidden",opacity:0,content:'""'},[t]:Object.assign(Object.assign({},(0,O.resetComponent)(e)),{position:"relative",display:"inline-block",outline:"none",cursor:"pointer",alignSelf:"center",borderRadius:"50%"}),[`${t}-wrapper:hover &, + &:hover ${y}`]:{borderColor:l},[`${t}-input:focus-visible + ${y}`]:(0,O.genFocusOutline)(e),[`${t}:hover::after, ${t}-wrapper:hover &::after`]:{visibility:"visible"},[`${t}-inner`]:{"&::after":{boxSizing:"border-box",position:"absolute",insetBlockStart:"50%",insetInlineStart:"50%",display:"block",width:x,height:x,marginBlockStart:$(1).mul(i).div(-2).equal({unit:!0}),marginInlineStart:$(1).mul(i).div(-2).equal({unit:!0}),backgroundColor:f,borderBlockStart:0,borderInlineStart:0,borderRadius:x,transform:"scale(0)",opacity:0,transition:`all ${o} ${a}`,content:'""'},boxSizing:"border-box",position:"relative",insetBlockStart:0,insetInlineStart:0,display:"block",width:x,height:x,backgroundColor:d,borderColor:s,borderStyle:"solid",borderWidth:c,borderRadius:"50%",transition:`all ${r}`},[`${t}-input`]:{position:"absolute",inset:0,zIndex:1,cursor:"pointer",opacity:0},[`${t}-checked`]:{[y]:{borderColor:l,backgroundColor:h,"&::after":{transform:`scale(${e.calc(e.dotSize).div(i).equal()})`,opacity:1,transition:`all ${o} ${a}`}}},[`${t}-disabled`]:{cursor:"not-allowed",[y]:{backgroundColor:u,borderColor:s,cursor:"not-allowed","&::after":{backgroundColor:g}},[`${t}-input`]:{cursor:"not-allowed"},[`${t}-disabled + span`]:{color:b,cursor:"not-allowed"},[`&${t}-checked`]:{[y]:{"&::after":{transform:`scale(${$(S).div(i).equal()})`}}}},[`span${t} + *`]:{paddingInlineStart:p,paddingInlineEnd:p}})}})(i),(e=>{let{buttonColor:t,controlHeight:n,componentCls:l,lineWidth:i,lineType:o,colorBorder:r,motionDurationMid:a,buttonPaddingInline:d,fontSize:s,buttonBg:c,fontSizeLG:u,controlHeightLG:b,controlHeightSM:p,paddingXS:g,borderRadius:m,borderRadiusSM:f,borderRadiusLG:h,buttonCheckedBg:$,buttonSolidCheckedColor:y,colorTextDisabled:S,colorBgContainerDisabled:x,buttonCheckedBgDisabled:C,buttonCheckedColorDisabled:j,colorPrimary:w,colorPrimaryHover:E,colorPrimaryActive:k,buttonSolidCheckedBg:I,buttonSolidCheckedHoverBg:N,buttonSolidCheckedActiveBg:z,calc:R}=e;return{[`${l}-button-wrapper`]:{position:"relative",display:"inline-block",height:n,margin:0,paddingInline:d,paddingBlock:0,color:t,fontSize:s,lineHeight:(0,v.unit)(R(n).sub(R(i).mul(2)).equal()),background:c,border:`${(0,v.unit)(i)} ${o} ${r}`,borderBlockStartWidth:R(i).add(.02).equal(),borderInlineEndWidth:i,cursor:"pointer",transition:`color ${a},background ${a},box-shadow ${a}`,a:{color:t},[`> ${l}-button`]:{position:"absolute",insetBlockStart:0,insetInlineStart:0,zIndex:-1,width:"100%",height:"100%"},"&:not(:last-child)":{marginInlineEnd:R(i).mul(-1).equal()},"&:first-child":{borderInlineStart:`${(0,v.unit)(i)} ${o} ${r}`,borderStartStartRadius:m,borderEndStartRadius:m},"&:last-child":{borderStartEndRadius:m,borderEndEndRadius:m},"&:first-child:last-child":{borderRadius:m},[`${l}-group-large &`]:{height:b,fontSize:u,lineHeight:(0,v.unit)(R(b).sub(R(i).mul(2)).equal()),"&:first-child":{borderStartStartRadius:h,borderEndStartRadius:h},"&:last-child":{borderStartEndRadius:h,borderEndEndRadius:h}},[`${l}-group-small &`]:{height:p,paddingInline:R(g).sub(i).equal(),paddingBlock:0,lineHeight:(0,v.unit)(R(p).sub(R(i).mul(2)).equal()),"&:first-child":{borderStartStartRadius:f,borderEndStartRadius:f},"&:last-child":{borderStartEndRadius:f,borderEndEndRadius:f}},"&:hover":{position:"relative",color:w},"&:has(:focus-visible)":(0,O.genFocusOutline)(e),[`${l}-inner, input[type='checkbox'], input[type='radio']`]:{width:0,height:0,opacity:0,pointerEvents:"none"},[`&-checked:not(${l}-button-wrapper-disabled)`]:{zIndex:1,color:w,background:$,borderColor:w,"&::before":{backgroundColor:w},"&:first-child":{borderColor:w},"&:hover":{color:E,borderColor:E,"&::before":{backgroundColor:E}},"&:active":{color:k,borderColor:k,"&::before":{backgroundColor:k}}},[`${l}-group-solid &-checked:not(${l}-button-wrapper-disabled)`]:{color:y,background:I,borderColor:I,"&:hover":{color:y,background:N,borderColor:N},"&:active":{color:y,background:z,borderColor:z}},"&-disabled":{color:S,backgroundColor:x,borderColor:r,cursor:"not-allowed","&:first-child, &:hover":{color:S,backgroundColor:x,borderColor:r}},[`&-disabled${l}-button-wrapper-checked`]:{color:j,backgroundColor:C,borderColor:r,boxShadow:"none"},"&-block":{flex:1,textAlign:"center"}}}})(i)]},e=>{let{wireframe:t,padding:n,marginXS:l,lineWidth:i,fontSizeLG:o,colorText:r,colorBgContainer:a,colorTextDisabled:d,controlItemBgActiveDisabled:s,colorTextLightSolid:c,colorPrimary:u,colorPrimaryHover:b,colorPrimaryActive:p,colorWhite:g}=e;return{radioSize:o,dotSize:t?o-8:o-(4+i)*2,dotColorDisabled:d,buttonSolidCheckedColor:c,buttonSolidCheckedBg:u,buttonSolidCheckedHoverBg:b,buttonSolidCheckedActiveBg:p,buttonBg:a,buttonCheckedBg:a,buttonColor:r,buttonCheckedBgDisabled:s,buttonCheckedColorDisabled:d,buttonPaddingInline:n-i,wrapperMarginInlineEnd:l,radioColor:t?u:g,radioBgColor:t?a:u}},{unitless:{radioSize:!0,dotSize:!0}});var j=function(e,t){var n={};for(var l in e)Object.prototype.hasOwnProperty.call(e,l)&&0>t.indexOf(l)&&(n[l]=e[l]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var i=0,l=Object.getOwnPropertySymbols(e);it.indexOf(l[i])&&Object.prototype.propertyIsEnumerable.call(e,l[i])&&(n[l[i]]=e[l[i]]);return n};let w=t.forwardRef((e,l)=>{var i,o;let d=t.useContext(s),c=t.useContext(u),{getPrefixCls:b,direction:v,radio:O}=t.useContext(r.ConfigContext),S=t.useRef(null),x=(0,g.composeRef)(l,S),{isFormItemInput:w}=t.useContext(y.FormItemInputContext),{prefixCls:E,className:k,rootClassName:I,children:N,style:z,title:R}=e,B=j(e,["prefixCls","className","rootClassName","children","style","title"]),P=b("radio",E),T="button"===((null==d?void 0:d.optionType)||c),L=T?`${P}-button`:P,M=(0,a.default)(P),[H,G,W]=C(P,M),q=Object.assign({},B),A=t.useContext($.default);d&&(q.name=d.name,q.onChange=t=>{var n,l;null==(n=e.onChange)||n.call(e,t),null==(l=null==d?void 0:d.onChange)||l.call(d,t)},q.checked=e.value===d.value,q.disabled=null!=(i=q.disabled)?i:d.disabled),q.disabled=null!=(o=q.disabled)?o:A;let D=(0,n.default)(`${L}-wrapper`,{[`${L}-wrapper-checked`]:q.checked,[`${L}-wrapper-disabled`]:q.disabled,[`${L}-wrapper-rtl`]:"rtl"===v,[`${L}-wrapper-in-form-item`]:w,[`${L}-wrapper-block`]:!!(null==d?void 0:d.block)},null==O?void 0:O.className,k,I,G,W,M),[F,X]=(0,h.default)(q.onClick);return H(t.createElement(m.default,{component:"Radio",disabled:q.disabled},t.createElement("label",{className:D,style:Object.assign(Object.assign({},null==O?void 0:O.style),z),onMouseEnter:e.onMouseEnter,onMouseLeave:e.onMouseLeave,title:R,onClick:F},t.createElement(p.default,Object.assign({},q,{className:(0,n.default)(q.className,{[f.TARGET_CLS]:!T}),type:"radio",prefixCls:L,ref:x,onClick:X})),void 0!==N?t.createElement("span",{className:`${L}-label`},N):null)))});var E=e.i(286039);let k=t.forwardRef((e,s)=>{let{getPrefixCls:u,direction:b}=t.useContext(r.ConfigContext),{name:p}=t.useContext(y.FormItemInputContext),g=(0,l.default)((0,E.toNamePathStr)(p)),{prefixCls:m,className:f,rootClassName:h,options:$,buttonStyle:v="outline",disabled:O,children:S,size:x,style:j,id:k,optionType:I,name:N=g,defaultValue:z,value:R,block:B=!1,onChange:P,onMouseEnter:T,onMouseLeave:L,onFocus:M,onBlur:H}=e,[G,W]=(0,i.default)(z,{value:R}),q=t.useCallback(t=>{let n=t.target.value;"value"in e||W(n),n!==G&&(null==P||P(t))},[G,W,P]),A=u("radio",m),D=`${A}-group`,F=(0,a.default)(A),[X,K,_]=C(A,F),U=S;$&&$.length>0&&(U=$.map(e=>"string"==typeof e||"number"==typeof e?t.createElement(w,{key:e.toString(),prefixCls:A,disabled:O,value:e,checked:G===e},e):t.createElement(w,{key:`radio-group-value-options-${e.value}`,prefixCls:A,disabled:e.disabled||O,value:e.value,checked:G===e.value,title:e.title,style:e.style,className:e.className,id:e.id,required:e.required},e.label)));let V=(0,d.default)(x),J=(0,n.default)(D,`${D}-${v}`,{[`${D}-${V}`]:V,[`${D}-rtl`]:"rtl"===b,[`${D}-block`]:B},f,h,K,_,F),Q=t.useMemo(()=>({onChange:q,value:G,disabled:O,name:N,optionType:I,block:B}),[q,G,O,N,I,B]);return X(t.createElement("div",Object.assign({},(0,o.default)(e,{aria:!0,data:!0}),{className:J,style:j,onMouseEnter:T,onMouseLeave:L,onFocus:M,onBlur:H,id:k,ref:s}),t.createElement(c,{value:Q},U)))}),I=t.memo(k);var N=function(e,t){var n={};for(var l in e)Object.prototype.hasOwnProperty.call(e,l)&&0>t.indexOf(l)&&(n[l]=e[l]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var i=0,l=Object.getOwnPropertySymbols(e);it.indexOf(l[i])&&Object.prototype.propertyIsEnumerable.call(e,l[i])&&(n[l[i]]=e[l[i]]);return n};let z=t.forwardRef((e,n)=>{let{getPrefixCls:l}=t.useContext(r.ConfigContext),{prefixCls:i}=e,o=N(e,["prefixCls"]),a=l("radio",i);return t.createElement(b,{value:"button"},t.createElement(w,Object.assign({prefixCls:a},o,{type:"radio",ref:n})))});w.Button=z,w.Group=I,w.__ANT_RADIO=!0,e.s(["default",0,w],544195)},175712,e=>{"use strict";e.i(247167);var t=e.i(271645),n=e.i(343794),l=e.i(529681),i=e.i(242064),o=e.i(517455),r=e.i(185793),a=e.i(721369),d=function(e,t){var n={};for(var l in e)Object.prototype.hasOwnProperty.call(e,l)&&0>t.indexOf(l)&&(n[l]=e[l]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var i=0,l=Object.getOwnPropertySymbols(e);it.indexOf(l[i])&&Object.prototype.propertyIsEnumerable.call(e,l[i])&&(n[l[i]]=e[l[i]]);return n};let s=e=>{var{prefixCls:l,className:o,hoverable:r=!0}=e,a=d(e,["prefixCls","className","hoverable"]);let{getPrefixCls:s}=t.useContext(i.ConfigContext),c=s("card",l),u=(0,n.default)(`${c}-grid`,o,{[`${c}-grid-hoverable`]:r});return t.createElement("div",Object.assign({},a,{className:u}))};e.i(296059);var c=e.i(915654),u=e.i(183293),b=e.i(246422),p=e.i(838378);let g=(0,b.genStyleHooks)("Card",e=>{let t=(0,p.mergeToken)(e,{cardShadow:e.boxShadowCard,cardHeadPadding:e.padding,cardPaddingBase:e.paddingLG,cardActionsIconSize:e.fontSize});return[(e=>{let{componentCls:t,cardShadow:n,cardHeadPadding:l,colorBorderSecondary:i,boxShadowTertiary:o,bodyPadding:r,extraColor:a}=e;return{[t]:Object.assign(Object.assign({},(0,u.resetComponent)(e)),{position:"relative",background:e.colorBgContainer,borderRadius:e.borderRadiusLG,[`&:not(${t}-bordered)`]:{boxShadow:o},[`${t}-head`]:(e=>{let{antCls:t,componentCls:n,headerHeight:l,headerPadding:i,tabsMarginBottom:o}=e;return Object.assign(Object.assign({display:"flex",justifyContent:"center",flexDirection:"column",minHeight:l,marginBottom:-1,padding:`0 ${(0,c.unit)(i)}`,color:e.colorTextHeading,fontWeight:e.fontWeightStrong,fontSize:e.headerFontSize,background:e.headerBg,borderBottom:`${(0,c.unit)(e.lineWidth)} ${e.lineType} ${e.colorBorderSecondary}`,borderRadius:`${(0,c.unit)(e.borderRadiusLG)} ${(0,c.unit)(e.borderRadiusLG)} 0 0`},(0,u.clearFix)()),{"&-wrapper":{width:"100%",display:"flex",alignItems:"center"},"&-title":Object.assign(Object.assign({display:"inline-block",flex:1},u.textEllipsis),{[` + > ${n}-typography, + > ${n}-typography-edit-content + `]:{insetInlineStart:0,marginTop:0,marginBottom:0}}),[`${t}-tabs-top`]:{clear:"both",marginBottom:o,color:e.colorText,fontWeight:"normal",fontSize:e.fontSize,"&-bar":{borderBottom:`${(0,c.unit)(e.lineWidth)} ${e.lineType} ${e.colorBorderSecondary}`}}})})(e),[`${t}-extra`]:{marginInlineStart:"auto",color:a,fontWeight:"normal",fontSize:e.fontSize},[`${t}-body`]:{padding:r,borderRadius:`0 0 ${(0,c.unit)(e.borderRadiusLG)} ${(0,c.unit)(e.borderRadiusLG)}`},[`${t}-grid`]:(e=>{let{cardPaddingBase:t,colorBorderSecondary:n,cardShadow:l,lineWidth:i}=e;return{width:"33.33%",padding:t,border:0,borderRadius:0,boxShadow:` + ${(0,c.unit)(i)} 0 0 0 ${n}, + 0 ${(0,c.unit)(i)} 0 0 ${n}, + ${(0,c.unit)(i)} ${(0,c.unit)(i)} 0 0 ${n}, + ${(0,c.unit)(i)} 0 0 0 ${n} inset, + 0 ${(0,c.unit)(i)} 0 0 ${n} inset; + `,transition:`all ${e.motionDurationMid}`,"&-hoverable:hover":{position:"relative",zIndex:1,boxShadow:l}}})(e),[`${t}-cover`]:{"> *":{display:"block",width:"100%",borderRadius:`${(0,c.unit)(e.borderRadiusLG)} ${(0,c.unit)(e.borderRadiusLG)} 0 0`}},[`${t}-actions`]:(e=>{let{componentCls:t,iconCls:n,actionsLiMargin:l,cardActionsIconSize:i,colorBorderSecondary:o,actionsBg:r}=e;return Object.assign(Object.assign({margin:0,padding:0,listStyle:"none",background:r,borderTop:`${(0,c.unit)(e.lineWidth)} ${e.lineType} ${o}`,display:"flex",borderRadius:`0 0 ${(0,c.unit)(e.borderRadiusLG)} ${(0,c.unit)(e.borderRadiusLG)}`},(0,u.clearFix)()),{"& > li":{margin:l,color:e.colorTextDescription,textAlign:"center","> span":{position:"relative",display:"block",minWidth:e.calc(e.cardActionsIconSize).mul(2).equal(),fontSize:e.fontSize,lineHeight:e.lineHeight,cursor:"pointer","&:hover":{color:e.colorPrimary,transition:`color ${e.motionDurationMid}`},[`a:not(${t}-btn), > ${n}`]:{display:"inline-block",width:"100%",color:e.colorIcon,lineHeight:(0,c.unit)(e.fontHeight),transition:`color ${e.motionDurationMid}`,"&:hover":{color:e.colorPrimary}},[`> ${n}`]:{fontSize:i,lineHeight:(0,c.unit)(e.calc(i).mul(e.lineHeight).equal())}},"&:not(:last-child)":{borderInlineEnd:`${(0,c.unit)(e.lineWidth)} ${e.lineType} ${o}`}}})})(e),[`${t}-meta`]:Object.assign(Object.assign({margin:`${(0,c.unit)(e.calc(e.marginXXS).mul(-1).equal())} 0`,display:"flex"},(0,u.clearFix)()),{"&-avatar":{paddingInlineEnd:e.padding},"&-detail":{overflow:"hidden",flex:1,"> div:not(:last-child)":{marginBottom:e.marginXS}},"&-title":Object.assign({color:e.colorTextHeading,fontWeight:e.fontWeightStrong,fontSize:e.fontSizeLG},u.textEllipsis),"&-description":{color:e.colorTextDescription}})}),[`${t}-bordered`]:{border:`${(0,c.unit)(e.lineWidth)} ${e.lineType} ${i}`,[`${t}-cover`]:{marginTop:-1,marginInlineStart:-1,marginInlineEnd:-1}},[`${t}-hoverable`]:{cursor:"pointer",transition:`box-shadow ${e.motionDurationMid}, border-color ${e.motionDurationMid}`,"&:hover":{borderColor:"transparent",boxShadow:n}},[`${t}-contain-grid`]:{borderRadius:`${(0,c.unit)(e.borderRadiusLG)} ${(0,c.unit)(e.borderRadiusLG)} 0 0 `,[`${t}-body`]:{display:"flex",flexWrap:"wrap"},[`&:not(${t}-loading) ${t}-body`]:{marginBlockStart:e.calc(e.lineWidth).mul(-1).equal(),marginInlineStart:e.calc(e.lineWidth).mul(-1).equal(),padding:0}},[`${t}-contain-tabs`]:{[`> div${t}-head`]:{minHeight:0,[`${t}-head-title, ${t}-extra`]:{paddingTop:l}}},[`${t}-type-inner`]:(e=>{let{componentCls:t,colorFillAlter:n,headerPadding:l,bodyPadding:i}=e;return{[`${t}-head`]:{padding:`0 ${(0,c.unit)(l)}`,background:n,"&-title":{fontSize:e.fontSize}},[`${t}-body`]:{padding:`${(0,c.unit)(e.padding)} ${(0,c.unit)(i)}`}}})(e),[`${t}-loading`]:(e=>{let{componentCls:t}=e;return{overflow:"hidden",[`${t}-body`]:{userSelect:"none"}}})(e),[`${t}-rtl`]:{direction:"rtl"}}})(t),(e=>{let{componentCls:t,bodyPaddingSM:n,headerPaddingSM:l,headerHeightSM:i,headerFontSizeSM:o}=e;return{[`${t}-small`]:{[`> ${t}-head`]:{minHeight:i,padding:`0 ${(0,c.unit)(l)}`,fontSize:o,[`> ${t}-head-wrapper`]:{[`> ${t}-extra`]:{fontSize:e.fontSize}}},[`> ${t}-body`]:{padding:n}},[`${t}-small${t}-contain-tabs`]:{[`> ${t}-head`]:{[`${t}-head-title, ${t}-extra`]:{paddingTop:0,display:"flex",alignItems:"center"}}}}})(t)]},e=>{var t,n;return{headerBg:"transparent",headerFontSize:e.fontSizeLG,headerFontSizeSM:e.fontSize,headerHeight:e.fontSizeLG*e.lineHeightLG+2*e.padding,headerHeightSM:e.fontSize*e.lineHeight+2*e.paddingXS,actionsBg:e.colorBgContainer,actionsLiMargin:`${e.paddingSM}px 0`,tabsMarginBottom:-e.padding-e.lineWidth,extraColor:e.colorText,bodyPaddingSM:12,headerPaddingSM:12,bodyPadding:null!=(t=e.bodyPadding)?t:e.paddingLG,headerPadding:null!=(n=e.headerPadding)?n:e.paddingLG}});var m=e.i(792812),f=function(e,t){var n={};for(var l in e)Object.prototype.hasOwnProperty.call(e,l)&&0>t.indexOf(l)&&(n[l]=e[l]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var i=0,l=Object.getOwnPropertySymbols(e);it.indexOf(l[i])&&Object.prototype.propertyIsEnumerable.call(e,l[i])&&(n[l[i]]=e[l[i]]);return n};let h=e=>{let{actionClasses:n,actions:l=[],actionStyle:i}=e;return t.createElement("ul",{className:n,style:i},l.map((e,n)=>{let i=`action-${n}`;return t.createElement("li",{style:{width:`${100/l.length}%`},key:i},t.createElement("span",null,e))}))},$=t.forwardRef((e,d)=>{let c,{prefixCls:u,className:b,rootClassName:p,style:$,extra:y,headStyle:v={},bodyStyle:O={},title:S,loading:x,bordered:C,variant:j,size:w,type:E,cover:k,actions:I,tabList:N,children:z,activeTabKey:R,defaultActiveTabKey:B,tabBarExtraContent:P,hoverable:T,tabProps:L={},classNames:M,styles:H}=e,G=f(e,["prefixCls","className","rootClassName","style","extra","headStyle","bodyStyle","title","loading","bordered","variant","size","type","cover","actions","tabList","children","activeTabKey","defaultActiveTabKey","tabBarExtraContent","hoverable","tabProps","classNames","styles"]),{getPrefixCls:W,direction:q,card:A}=t.useContext(i.ConfigContext),[D]=(0,m.default)("card",j,C),F=e=>{var t;return(0,n.default)(null==(t=null==A?void 0:A.classNames)?void 0:t[e],null==M?void 0:M[e])},X=e=>{var t;return Object.assign(Object.assign({},null==(t=null==A?void 0:A.styles)?void 0:t[e]),null==H?void 0:H[e])},K=t.useMemo(()=>{let e=!1;return t.Children.forEach(z,t=>{(null==t?void 0:t.type)===s&&(e=!0)}),e},[z]),_=W("card",u),[U,V,J]=g(_),Q=t.createElement(r.default,{loading:!0,active:!0,paragraph:{rows:4},title:!1},z),Y=void 0!==R,Z=Object.assign(Object.assign({},L),{[Y?"activeKey":"defaultActiveKey"]:Y?R:B,tabBarExtraContent:P}),ee=(0,o.default)(w),et=ee&&"default"!==ee?ee:"large",en=N?t.createElement(a.default,Object.assign({size:et},Z,{className:`${_}-head-tabs`,onChange:t=>{var n;null==(n=e.onTabChange)||n.call(e,t)},items:N.map(e=>{var{tab:t}=e;return Object.assign({label:t},f(e,["tab"]))})})):null;if(S||y||en){let e=(0,n.default)(`${_}-head`,F("header")),l=(0,n.default)(`${_}-head-title`,F("title")),i=(0,n.default)(`${_}-extra`,F("extra")),o=Object.assign(Object.assign({},v),X("header"));c=t.createElement("div",{className:e,style:o},t.createElement("div",{className:`${_}-head-wrapper`},S&&t.createElement("div",{className:l,style:X("title")},S),y&&t.createElement("div",{className:i,style:X("extra")},y)),en)}let el=(0,n.default)(`${_}-cover`,F("cover")),ei=k?t.createElement("div",{className:el,style:X("cover")},k):null,eo=(0,n.default)(`${_}-body`,F("body")),er=Object.assign(Object.assign({},O),X("body")),ea=t.createElement("div",{className:eo,style:er},x?Q:z),ed=(0,n.default)(`${_}-actions`,F("actions")),es=(null==I?void 0:I.length)?t.createElement(h,{actionClasses:ed,actionStyle:X("actions"),actions:I}):null,ec=(0,l.default)(G,["onTabChange"]),eu=(0,n.default)(_,null==A?void 0:A.className,{[`${_}-loading`]:x,[`${_}-bordered`]:"borderless"!==D,[`${_}-hoverable`]:T,[`${_}-contain-grid`]:K,[`${_}-contain-tabs`]:null==N?void 0:N.length,[`${_}-${ee}`]:ee,[`${_}-type-${E}`]:!!E,[`${_}-rtl`]:"rtl"===q},b,p,V,J),eb=Object.assign(Object.assign({},null==A?void 0:A.style),$);return U(t.createElement("div",Object.assign({ref:d},ec,{className:eu,style:eb}),c,ei,ea,es))});var y=function(e,t){var n={};for(var l in e)Object.prototype.hasOwnProperty.call(e,l)&&0>t.indexOf(l)&&(n[l]=e[l]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var i=0,l=Object.getOwnPropertySymbols(e);it.indexOf(l[i])&&Object.prototype.propertyIsEnumerable.call(e,l[i])&&(n[l[i]]=e[l[i]]);return n};$.Grid=s,$.Meta=e=>{let{prefixCls:l,className:o,avatar:r,title:a,description:d}=e,s=y(e,["prefixCls","className","avatar","title","description"]),{getPrefixCls:c}=t.useContext(i.ConfigContext),u=c("card",l),b=(0,n.default)(`${u}-meta`,o),p=r?t.createElement("div",{className:`${u}-meta-avatar`},r):null,g=a?t.createElement("div",{className:`${u}-meta-title`},a):null,m=d?t.createElement("div",{className:`${u}-meta-description`},d):null,f=g||m?t.createElement("div",{className:`${u}-meta-detail`},g,m):null;return t.createElement("div",Object.assign({},s,{className:b}),p,f)},e.s(["Card",0,$],175712)},869216,e=>{"use strict";e.i(247167);var t=e.i(271645),n=e.i(343794),l=e.i(908206),i=e.i(242064),o=e.i(517455),r=e.i(150073);let a={xxl:3,xl:3,lg:3,md:3,sm:2,xs:1},d=t.default.createContext({});var s=e.i(876556),c=function(e,t){var n={};for(var l in e)Object.prototype.hasOwnProperty.call(e,l)&&0>t.indexOf(l)&&(n[l]=e[l]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var i=0,l=Object.getOwnPropertySymbols(e);it.indexOf(l[i])&&Object.prototype.propertyIsEnumerable.call(e,l[i])&&(n[l[i]]=e[l[i]]);return n},u=function(e,t){var n={};for(var l in e)Object.prototype.hasOwnProperty.call(e,l)&&0>t.indexOf(l)&&(n[l]=e[l]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var i=0,l=Object.getOwnPropertySymbols(e);it.indexOf(l[i])&&Object.prototype.propertyIsEnumerable.call(e,l[i])&&(n[l[i]]=e[l[i]]);return n};let b=e=>{let{itemPrefixCls:l,component:i,span:o,className:r,style:a,labelStyle:s,contentStyle:c,bordered:u,label:b,content:p,colon:g,type:m,styles:f}=e,{classNames:h}=t.useContext(d),$=Object.assign(Object.assign({},s),null==f?void 0:f.label),y=Object.assign(Object.assign({},c),null==f?void 0:f.content);if(u)return t.createElement(i,{colSpan:o,style:a,className:(0,n.default)(r,{[`${l}-item-${m}`]:"label"===m||"content"===m,[null==h?void 0:h.label]:(null==h?void 0:h.label)&&"label"===m,[null==h?void 0:h.content]:(null==h?void 0:h.content)&&"content"===m})},null!=b&&t.createElement("span",{style:$},b),null!=p&&t.createElement("span",{style:y},p));return t.createElement(i,{colSpan:o,style:a,className:(0,n.default)(`${l}-item`,r)},t.createElement("div",{className:`${l}-item-container`},null!=b&&t.createElement("span",{style:$,className:(0,n.default)(`${l}-item-label`,null==h?void 0:h.label,{[`${l}-item-no-colon`]:!g})},b),null!=p&&t.createElement("span",{style:y,className:(0,n.default)(`${l}-item-content`,null==h?void 0:h.content)},p)))};function p(e,{colon:n,prefixCls:l,bordered:i},{component:o,type:r,showLabel:a,showContent:d,labelStyle:s,contentStyle:c,styles:u}){return e.map(({label:e,children:p,prefixCls:g=l,className:m,style:f,labelStyle:h,contentStyle:$,span:y=1,key:v,styles:O},S)=>"string"==typeof o?t.createElement(b,{key:`${r}-${v||S}`,className:m,style:f,styles:{label:Object.assign(Object.assign(Object.assign(Object.assign({},s),null==u?void 0:u.label),h),null==O?void 0:O.label),content:Object.assign(Object.assign(Object.assign(Object.assign({},c),null==u?void 0:u.content),$),null==O?void 0:O.content)},span:y,colon:n,component:o,itemPrefixCls:g,bordered:i,label:a?e:null,content:d?p:null,type:r}):[t.createElement(b,{key:`label-${v||S}`,className:m,style:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},s),null==u?void 0:u.label),f),h),null==O?void 0:O.label),span:1,colon:n,component:o[0],itemPrefixCls:g,bordered:i,label:e,type:"label"}),t.createElement(b,{key:`content-${v||S}`,className:m,style:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},c),null==u?void 0:u.content),f),$),null==O?void 0:O.content),span:2*y-1,component:o[1],itemPrefixCls:g,bordered:i,content:p,type:"content"})])}let g=e=>{let n=t.useContext(d),{prefixCls:l,vertical:i,row:o,index:r,bordered:a}=e;return i?t.createElement(t.Fragment,null,t.createElement("tr",{key:`label-${r}`,className:`${l}-row`},p(o,e,Object.assign({component:"th",type:"label",showLabel:!0},n))),t.createElement("tr",{key:`content-${r}`,className:`${l}-row`},p(o,e,Object.assign({component:"td",type:"content",showContent:!0},n)))):t.createElement("tr",{key:r,className:`${l}-row`},p(o,e,Object.assign({component:a?["th","td"]:"td",type:"item",showLabel:!0,showContent:!0},n)))};e.i(296059);var m=e.i(915654),f=e.i(183293),h=e.i(246422),$=e.i(838378);let y=(0,h.genStyleHooks)("Descriptions",e=>(e=>{let{componentCls:t,extraColor:n,itemPaddingBottom:l,itemPaddingEnd:i,colonMarginRight:o,colonMarginLeft:r,titleMarginBottom:a}=e;return{[t]:Object.assign(Object.assign(Object.assign({},(0,f.resetComponent)(e)),(e=>{let{componentCls:t,labelBg:n}=e;return{[`&${t}-bordered`]:{[`> ${t}-view`]:{border:`${(0,m.unit)(e.lineWidth)} ${e.lineType} ${e.colorSplit}`,"> table":{tableLayout:"auto"},[`${t}-row`]:{borderBottom:`${(0,m.unit)(e.lineWidth)} ${e.lineType} ${e.colorSplit}`,"&:first-child":{"> th:first-child, > td:first-child":{borderStartStartRadius:e.borderRadiusLG}},"&:last-child":{borderBottom:"none","> th:first-child, > td:first-child":{borderEndStartRadius:e.borderRadiusLG}},[`> ${t}-item-label, > ${t}-item-content`]:{padding:`${(0,m.unit)(e.padding)} ${(0,m.unit)(e.paddingLG)}`,borderInlineEnd:`${(0,m.unit)(e.lineWidth)} ${e.lineType} ${e.colorSplit}`,"&:last-child":{borderInlineEnd:"none"}},[`> ${t}-item-label`]:{color:e.colorTextSecondary,backgroundColor:n,"&::after":{display:"none"}}}},[`&${t}-middle`]:{[`${t}-row`]:{[`> ${t}-item-label, > ${t}-item-content`]:{padding:`${(0,m.unit)(e.paddingSM)} ${(0,m.unit)(e.paddingLG)}`}}},[`&${t}-small`]:{[`${t}-row`]:{[`> ${t}-item-label, > ${t}-item-content`]:{padding:`${(0,m.unit)(e.paddingXS)} ${(0,m.unit)(e.padding)}`}}}}}})(e)),{"&-rtl":{direction:"rtl"},[`${t}-header`]:{display:"flex",alignItems:"center",marginBottom:a},[`${t}-title`]:Object.assign(Object.assign({},f.textEllipsis),{flex:"auto",color:e.titleColor,fontWeight:e.fontWeightStrong,fontSize:e.fontSizeLG,lineHeight:e.lineHeightLG}),[`${t}-extra`]:{marginInlineStart:"auto",color:n,fontSize:e.fontSize},[`${t}-view`]:{width:"100%",borderRadius:e.borderRadiusLG,table:{width:"100%",tableLayout:"fixed",borderCollapse:"collapse"}},[`${t}-row`]:{"> th, > td":{paddingBottom:l,paddingInlineEnd:i},"> th:last-child, > td:last-child":{paddingInlineEnd:0},"&:last-child":{borderBottom:"none","> th, > td":{paddingBottom:0}}},[`${t}-item-label`]:{color:e.labelColor,fontWeight:"normal",fontSize:e.fontSize,lineHeight:e.lineHeight,textAlign:"start","&::after":{content:'":"',position:"relative",top:-.5,marginInline:`${(0,m.unit)(r)} ${(0,m.unit)(o)}`},[`&${t}-item-no-colon::after`]:{content:'""'}},[`${t}-item-no-label`]:{"&::after":{margin:0,content:'""'}},[`${t}-item-content`]:{display:"table-cell",flex:1,color:e.contentColor,fontSize:e.fontSize,lineHeight:e.lineHeight,wordBreak:"break-word",overflowWrap:"break-word"},[`${t}-item`]:{paddingBottom:0,verticalAlign:"top","&-container":{display:"flex",[`${t}-item-label`]:{display:"inline-flex",alignItems:"baseline"},[`${t}-item-content`]:{display:"inline-flex",alignItems:"baseline",minWidth:"1em"}}},"&-middle":{[`${t}-row`]:{"> th, > td":{paddingBottom:e.paddingSM}}},"&-small":{[`${t}-row`]:{"> th, > td":{paddingBottom:e.paddingXS}}}})}})((0,$.mergeToken)(e,{})),e=>({labelBg:e.colorFillAlter,labelColor:e.colorTextTertiary,titleColor:e.colorText,titleMarginBottom:e.fontSizeSM*e.lineHeightSM,itemPaddingBottom:e.padding,itemPaddingEnd:e.padding,colonMarginRight:e.marginXS,colonMarginLeft:e.marginXXS/2,contentColor:e.colorText,extraColor:e.colorText}));var v=function(e,t){var n={};for(var l in e)Object.prototype.hasOwnProperty.call(e,l)&&0>t.indexOf(l)&&(n[l]=e[l]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var i=0,l=Object.getOwnPropertySymbols(e);it.indexOf(l[i])&&Object.prototype.propertyIsEnumerable.call(e,l[i])&&(n[l[i]]=e[l[i]]);return n};let O=e=>{let b,{prefixCls:p,title:m,extra:f,column:h,colon:$=!0,bordered:O,layout:S,children:x,className:C,rootClassName:j,style:w,size:E,labelStyle:k,contentStyle:I,styles:N,items:z,classNames:R}=e,B=v(e,["prefixCls","title","extra","column","colon","bordered","layout","children","className","rootClassName","style","size","labelStyle","contentStyle","styles","items","classNames"]),{getPrefixCls:P,direction:T,className:L,style:M,classNames:H,styles:G}=(0,i.useComponentConfig)("descriptions"),W=P("descriptions",p),q=(0,r.default)(),A=t.useMemo(()=>{var e;return"number"==typeof h?h:null!=(e=(0,l.matchScreen)(q,Object.assign(Object.assign({},a),h)))?e:3},[q,h]),D=(b=t.useMemo(()=>z||(0,s.default)(x).map(e=>Object.assign(Object.assign({},null==e?void 0:e.props),{key:e.key})),[z,x]),t.useMemo(()=>b.map(e=>{var{span:t}=e,n=c(e,["span"]);return"filled"===t?Object.assign(Object.assign({},n),{filled:!0}):Object.assign(Object.assign({},n),{span:"number"==typeof t?t:(0,l.matchScreen)(q,t)})}),[b,q])),F=(0,o.default)(E),X=((e,n)=>{let[l,i]=(0,t.useMemo)(()=>{let t,l,i,o;return t=[],l=[],i=!1,o=0,n.filter(e=>e).forEach(n=>{let{filled:r}=n,a=u(n,["filled"]);if(r){l.push(a),t.push(l),l=[],o=0;return}let d=e-o;(o+=n.span||1)>=e?(o>e?(i=!0,l.push(Object.assign(Object.assign({},a),{span:d}))):l.push(a),t.push(l),l=[],o=0):l.push(a)}),l.length>0&&t.push(l),[t=t.map(t=>{let n=t.reduce((e,t)=>e+(t.span||1),0);if(n({labelStyle:k,contentStyle:I,styles:{content:Object.assign(Object.assign({},G.content),null==N?void 0:N.content),label:Object.assign(Object.assign({},G.label),null==N?void 0:N.label)},classNames:{label:(0,n.default)(H.label,null==R?void 0:R.label),content:(0,n.default)(H.content,null==R?void 0:R.content)}}),[k,I,N,R,H,G]);return K(t.createElement(d.Provider,{value:V},t.createElement("div",Object.assign({className:(0,n.default)(W,L,H.root,null==R?void 0:R.root,{[`${W}-${F}`]:F&&"default"!==F,[`${W}-bordered`]:!!O,[`${W}-rtl`]:"rtl"===T},C,j,_,U),style:Object.assign(Object.assign(Object.assign(Object.assign({},M),G.root),null==N?void 0:N.root),w)},B),(m||f)&&t.createElement("div",{className:(0,n.default)(`${W}-header`,H.header,null==R?void 0:R.header),style:Object.assign(Object.assign({},G.header),null==N?void 0:N.header)},m&&t.createElement("div",{className:(0,n.default)(`${W}-title`,H.title,null==R?void 0:R.title),style:Object.assign(Object.assign({},G.title),null==N?void 0:N.title)},m),f&&t.createElement("div",{className:(0,n.default)(`${W}-extra`,H.extra,null==R?void 0:R.extra),style:Object.assign(Object.assign({},G.extra),null==N?void 0:N.extra)},f)),t.createElement("div",{className:`${W}-view`},t.createElement("table",null,t.createElement("tbody",null,X.map((e,n)=>t.createElement(g,{key:n,index:n,colon:$,prefixCls:W,vertical:"vertical"===S,bordered:O,row:e}))))))))};O.Item=({children:e})=>e,e.s(["Descriptions",0,O],869216)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0scfmfivwcppe.js b/litellm/proxy/_experimental/out/_next/static/chunks/0scfmfivwcppe.js new file mode 100644 index 00000000000..976367045b8 --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0scfmfivwcppe.js @@ -0,0 +1,10 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,646563,e=>{"use strict";var t=e.i(959013);e.s(["PlusOutlined",()=>t.default])},954616,e=>{"use strict";var t=e.i(271645),n=e.i(114272),i=e.i(540143),l=e.i(915823),r=e.i(619273),a=class extends l.Subscribable{#e;#t=void 0;#n;#i;constructor(e,t){super(),this.#e=e,this.setOptions(t),this.bindMethods(),this.#l()}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(e){let t=this.options;this.options=this.#e.defaultMutationOptions(e),(0,r.shallowEqualObjects)(this.options,t)||this.#e.getMutationCache().notify({type:"observerOptionsUpdated",mutation:this.#n,observer:this}),t?.mutationKey&&this.options.mutationKey&&(0,r.hashKey)(t.mutationKey)!==(0,r.hashKey)(this.options.mutationKey)?this.reset():this.#n?.state.status==="pending"&&this.#n.setOptions(this.options)}onUnsubscribe(){this.hasListeners()||this.#n?.removeObserver(this)}onMutationUpdate(e){this.#l(),this.#r(e)}getCurrentResult(){return this.#t}reset(){this.#n?.removeObserver(this),this.#n=void 0,this.#l(),this.#r()}mutate(e,t){return this.#i=t,this.#n?.removeObserver(this),this.#n=this.#e.getMutationCache().build(this.#e,this.options),this.#n.addObserver(this),this.#n.execute(e)}#l(){let e=this.#n?.state??(0,n.getDefaultState)();this.#t={...e,isPending:"pending"===e.status,isSuccess:"success"===e.status,isError:"error"===e.status,isIdle:"idle"===e.status,mutate:this.mutate,reset:this.reset}}#r(e){i.notifyManager.batch(()=>{if(this.#i&&this.hasListeners()){let t=this.#t.variables,n=this.#t.context,i={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};if(e?.type==="success"){try{this.#i.onSuccess?.(e.data,t,n,i)}catch(e){Promise.reject(e)}try{this.#i.onSettled?.(e.data,null,t,n,i)}catch(e){Promise.reject(e)}}else if(e?.type==="error"){try{this.#i.onError?.(e.error,t,n,i)}catch(e){Promise.reject(e)}try{this.#i.onSettled?.(void 0,e.error,t,n,i)}catch(e){Promise.reject(e)}}}this.listeners.forEach(e=>{e(this.#t)})})}},o=e.i(912598);e.s(["useMutation",0,function(e,n){let l=(0,o.useQueryClient)(n),[s]=t.useState(()=>new a(l,e));t.useEffect(()=>{s.setOptions(e)},[s,e]);let c=t.useSyncExternalStore(t.useCallback(e=>s.subscribe(i.notifyManager.batchCalls(e)),[s]),()=>s.getCurrentResult(),()=>s.getCurrentResult()),d=t.useCallback((e,t)=>{s.mutate(e,t).catch(r.noop)},[s]);if(c.error&&(0,r.shouldThrowError)(s.options.throwOnError,[c.error]))throw c.error;return{...c,mutate:d,mutateAsync:c.mutate}}],954616)},270377,e=>{"use strict";e.i(247167);var t=e.i(931067),n=e.i(271645);let i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M464 688a48 48 0 1096 0 48 48 0 10-96 0zm24-112h48c4.4 0 8-3.6 8-8V296c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v272c0 4.4 3.6 8 8 8z"}}]},name:"exclamation-circle",theme:"outlined"};var l=e.i(9583),r=n.forwardRef(function(e,r){return n.createElement(l.default,(0,t.default)({},e,{ref:r,icon:i}))});e.s(["ExclamationCircleOutlined",0,r],270377)},175712,e=>{"use strict";e.i(247167);var t=e.i(271645),n=e.i(343794),i=e.i(529681),l=e.i(242064),r=e.i(517455),a=e.i(185793),o=e.i(721369),s=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&0>t.indexOf(i)&&(n[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var l=0,i=Object.getOwnPropertySymbols(e);lt.indexOf(i[l])&&Object.prototype.propertyIsEnumerable.call(e,i[l])&&(n[i[l]]=e[i[l]]);return n};let c=e=>{var{prefixCls:i,className:r,hoverable:a=!0}=e,o=s(e,["prefixCls","className","hoverable"]);let{getPrefixCls:c}=t.useContext(l.ConfigContext),d=c("card",i),u=(0,n.default)(`${d}-grid`,r,{[`${d}-grid-hoverable`]:a});return t.createElement("div",Object.assign({},o,{className:u}))};e.i(296059);var d=e.i(915654),u=e.i(183293),g=e.i(246422),b=e.i(838378);let p=(0,g.genStyleHooks)("Card",e=>{let t=(0,b.mergeToken)(e,{cardShadow:e.boxShadowCard,cardHeadPadding:e.padding,cardPaddingBase:e.paddingLG,cardActionsIconSize:e.fontSize});return[(e=>{let{componentCls:t,cardShadow:n,cardHeadPadding:i,colorBorderSecondary:l,boxShadowTertiary:r,bodyPadding:a,extraColor:o}=e;return{[t]:Object.assign(Object.assign({},(0,u.resetComponent)(e)),{position:"relative",background:e.colorBgContainer,borderRadius:e.borderRadiusLG,[`&:not(${t}-bordered)`]:{boxShadow:r},[`${t}-head`]:(e=>{let{antCls:t,componentCls:n,headerHeight:i,headerPadding:l,tabsMarginBottom:r}=e;return Object.assign(Object.assign({display:"flex",justifyContent:"center",flexDirection:"column",minHeight:i,marginBottom:-1,padding:`0 ${(0,d.unit)(l)}`,color:e.colorTextHeading,fontWeight:e.fontWeightStrong,fontSize:e.headerFontSize,background:e.headerBg,borderBottom:`${(0,d.unit)(e.lineWidth)} ${e.lineType} ${e.colorBorderSecondary}`,borderRadius:`${(0,d.unit)(e.borderRadiusLG)} ${(0,d.unit)(e.borderRadiusLG)} 0 0`},(0,u.clearFix)()),{"&-wrapper":{width:"100%",display:"flex",alignItems:"center"},"&-title":Object.assign(Object.assign({display:"inline-block",flex:1},u.textEllipsis),{[` + > ${n}-typography, + > ${n}-typography-edit-content + `]:{insetInlineStart:0,marginTop:0,marginBottom:0}}),[`${t}-tabs-top`]:{clear:"both",marginBottom:r,color:e.colorText,fontWeight:"normal",fontSize:e.fontSize,"&-bar":{borderBottom:`${(0,d.unit)(e.lineWidth)} ${e.lineType} ${e.colorBorderSecondary}`}}})})(e),[`${t}-extra`]:{marginInlineStart:"auto",color:o,fontWeight:"normal",fontSize:e.fontSize},[`${t}-body`]:{padding:a,borderRadius:`0 0 ${(0,d.unit)(e.borderRadiusLG)} ${(0,d.unit)(e.borderRadiusLG)}`},[`${t}-grid`]:(e=>{let{cardPaddingBase:t,colorBorderSecondary:n,cardShadow:i,lineWidth:l}=e;return{width:"33.33%",padding:t,border:0,borderRadius:0,boxShadow:` + ${(0,d.unit)(l)} 0 0 0 ${n}, + 0 ${(0,d.unit)(l)} 0 0 ${n}, + ${(0,d.unit)(l)} ${(0,d.unit)(l)} 0 0 ${n}, + ${(0,d.unit)(l)} 0 0 0 ${n} inset, + 0 ${(0,d.unit)(l)} 0 0 ${n} inset; + `,transition:`all ${e.motionDurationMid}`,"&-hoverable:hover":{position:"relative",zIndex:1,boxShadow:i}}})(e),[`${t}-cover`]:{"> *":{display:"block",width:"100%",borderRadius:`${(0,d.unit)(e.borderRadiusLG)} ${(0,d.unit)(e.borderRadiusLG)} 0 0`}},[`${t}-actions`]:(e=>{let{componentCls:t,iconCls:n,actionsLiMargin:i,cardActionsIconSize:l,colorBorderSecondary:r,actionsBg:a}=e;return Object.assign(Object.assign({margin:0,padding:0,listStyle:"none",background:a,borderTop:`${(0,d.unit)(e.lineWidth)} ${e.lineType} ${r}`,display:"flex",borderRadius:`0 0 ${(0,d.unit)(e.borderRadiusLG)} ${(0,d.unit)(e.borderRadiusLG)}`},(0,u.clearFix)()),{"& > li":{margin:i,color:e.colorTextDescription,textAlign:"center","> span":{position:"relative",display:"block",minWidth:e.calc(e.cardActionsIconSize).mul(2).equal(),fontSize:e.fontSize,lineHeight:e.lineHeight,cursor:"pointer","&:hover":{color:e.colorPrimary,transition:`color ${e.motionDurationMid}`},[`a:not(${t}-btn), > ${n}`]:{display:"inline-block",width:"100%",color:e.colorIcon,lineHeight:(0,d.unit)(e.fontHeight),transition:`color ${e.motionDurationMid}`,"&:hover":{color:e.colorPrimary}},[`> ${n}`]:{fontSize:l,lineHeight:(0,d.unit)(e.calc(l).mul(e.lineHeight).equal())}},"&:not(:last-child)":{borderInlineEnd:`${(0,d.unit)(e.lineWidth)} ${e.lineType} ${r}`}}})})(e),[`${t}-meta`]:Object.assign(Object.assign({margin:`${(0,d.unit)(e.calc(e.marginXXS).mul(-1).equal())} 0`,display:"flex"},(0,u.clearFix)()),{"&-avatar":{paddingInlineEnd:e.padding},"&-detail":{overflow:"hidden",flex:1,"> div:not(:last-child)":{marginBottom:e.marginXS}},"&-title":Object.assign({color:e.colorTextHeading,fontWeight:e.fontWeightStrong,fontSize:e.fontSizeLG},u.textEllipsis),"&-description":{color:e.colorTextDescription}})}),[`${t}-bordered`]:{border:`${(0,d.unit)(e.lineWidth)} ${e.lineType} ${l}`,[`${t}-cover`]:{marginTop:-1,marginInlineStart:-1,marginInlineEnd:-1}},[`${t}-hoverable`]:{cursor:"pointer",transition:`box-shadow ${e.motionDurationMid}, border-color ${e.motionDurationMid}`,"&:hover":{borderColor:"transparent",boxShadow:n}},[`${t}-contain-grid`]:{borderRadius:`${(0,d.unit)(e.borderRadiusLG)} ${(0,d.unit)(e.borderRadiusLG)} 0 0 `,[`${t}-body`]:{display:"flex",flexWrap:"wrap"},[`&:not(${t}-loading) ${t}-body`]:{marginBlockStart:e.calc(e.lineWidth).mul(-1).equal(),marginInlineStart:e.calc(e.lineWidth).mul(-1).equal(),padding:0}},[`${t}-contain-tabs`]:{[`> div${t}-head`]:{minHeight:0,[`${t}-head-title, ${t}-extra`]:{paddingTop:i}}},[`${t}-type-inner`]:(e=>{let{componentCls:t,colorFillAlter:n,headerPadding:i,bodyPadding:l}=e;return{[`${t}-head`]:{padding:`0 ${(0,d.unit)(i)}`,background:n,"&-title":{fontSize:e.fontSize}},[`${t}-body`]:{padding:`${(0,d.unit)(e.padding)} ${(0,d.unit)(l)}`}}})(e),[`${t}-loading`]:(e=>{let{componentCls:t}=e;return{overflow:"hidden",[`${t}-body`]:{userSelect:"none"}}})(e),[`${t}-rtl`]:{direction:"rtl"}}})(t),(e=>{let{componentCls:t,bodyPaddingSM:n,headerPaddingSM:i,headerHeightSM:l,headerFontSizeSM:r}=e;return{[`${t}-small`]:{[`> ${t}-head`]:{minHeight:l,padding:`0 ${(0,d.unit)(i)}`,fontSize:r,[`> ${t}-head-wrapper`]:{[`> ${t}-extra`]:{fontSize:e.fontSize}}},[`> ${t}-body`]:{padding:n}},[`${t}-small${t}-contain-tabs`]:{[`> ${t}-head`]:{[`${t}-head-title, ${t}-extra`]:{paddingTop:0,display:"flex",alignItems:"center"}}}}})(t)]},e=>{var t,n;return{headerBg:"transparent",headerFontSize:e.fontSizeLG,headerFontSizeSM:e.fontSize,headerHeight:e.fontSizeLG*e.lineHeightLG+2*e.padding,headerHeightSM:e.fontSize*e.lineHeight+2*e.paddingXS,actionsBg:e.colorBgContainer,actionsLiMargin:`${e.paddingSM}px 0`,tabsMarginBottom:-e.padding-e.lineWidth,extraColor:e.colorText,bodyPaddingSM:12,headerPaddingSM:12,bodyPadding:null!=(t=e.bodyPadding)?t:e.paddingLG,headerPadding:null!=(n=e.headerPadding)?n:e.paddingLG}});var m=e.i(792812),h=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&0>t.indexOf(i)&&(n[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var l=0,i=Object.getOwnPropertySymbols(e);lt.indexOf(i[l])&&Object.prototype.propertyIsEnumerable.call(e,i[l])&&(n[i[l]]=e[i[l]]);return n};let f=e=>{let{actionClasses:n,actions:i=[],actionStyle:l}=e;return t.createElement("ul",{className:n,style:l},i.map((e,n)=>{let l=`action-${n}`;return t.createElement("li",{style:{width:`${100/i.length}%`},key:l},t.createElement("span",null,e))}))},y=t.forwardRef((e,s)=>{let d,{prefixCls:u,className:g,rootClassName:b,style:y,extra:$,headStyle:v={},bodyStyle:O={},title:x,loading:j,bordered:S,variant:C,size:E,type:w,cover:N,actions:z,tabList:P,children:M,activeTabKey:B,defaultActiveTabKey:T,tabBarExtraContent:k,hoverable:R,tabProps:L={},classNames:G,styles:I}=e,H=h(e,["prefixCls","className","rootClassName","style","extra","headStyle","bodyStyle","title","loading","bordered","variant","size","type","cover","actions","tabList","children","activeTabKey","defaultActiveTabKey","tabBarExtraContent","hoverable","tabProps","classNames","styles"]),{getPrefixCls:W,direction:D,card:A}=t.useContext(l.ConfigContext),[F]=(0,m.default)("card",C,S),X=e=>{var t;return(0,n.default)(null==(t=null==A?void 0:A.classNames)?void 0:t[e],null==G?void 0:G[e])},K=e=>{var t;return Object.assign(Object.assign({},null==(t=null==A?void 0:A.styles)?void 0:t[e]),null==I?void 0:I[e])},q=t.useMemo(()=>{let e=!1;return t.Children.forEach(M,t=>{(null==t?void 0:t.type)===c&&(e=!0)}),e},[M]),U=W("card",u),[Q,V,_]=p(U),J=t.createElement(a.default,{loading:!0,active:!0,paragraph:{rows:4},title:!1},M),Y=void 0!==B,Z=Object.assign(Object.assign({},L),{[Y?"activeKey":"defaultActiveKey"]:Y?B:T,tabBarExtraContent:k}),ee=(0,r.default)(E),et=ee&&"default"!==ee?ee:"large",en=P?t.createElement(o.default,Object.assign({size:et},Z,{className:`${U}-head-tabs`,onChange:t=>{var n;null==(n=e.onTabChange)||n.call(e,t)},items:P.map(e=>{var{tab:t}=e;return Object.assign({label:t},h(e,["tab"]))})})):null;if(x||$||en){let e=(0,n.default)(`${U}-head`,X("header")),i=(0,n.default)(`${U}-head-title`,X("title")),l=(0,n.default)(`${U}-extra`,X("extra")),r=Object.assign(Object.assign({},v),K("header"));d=t.createElement("div",{className:e,style:r},t.createElement("div",{className:`${U}-head-wrapper`},x&&t.createElement("div",{className:i,style:K("title")},x),$&&t.createElement("div",{className:l,style:K("extra")},$)),en)}let ei=(0,n.default)(`${U}-cover`,X("cover")),el=N?t.createElement("div",{className:ei,style:K("cover")},N):null,er=(0,n.default)(`${U}-body`,X("body")),ea=Object.assign(Object.assign({},O),K("body")),eo=t.createElement("div",{className:er,style:ea},j?J:M),es=(0,n.default)(`${U}-actions`,X("actions")),ec=(null==z?void 0:z.length)?t.createElement(f,{actionClasses:es,actionStyle:K("actions"),actions:z}):null,ed=(0,i.default)(H,["onTabChange"]),eu=(0,n.default)(U,null==A?void 0:A.className,{[`${U}-loading`]:j,[`${U}-bordered`]:"borderless"!==F,[`${U}-hoverable`]:R,[`${U}-contain-grid`]:q,[`${U}-contain-tabs`]:null==P?void 0:P.length,[`${U}-${ee}`]:ee,[`${U}-type-${w}`]:!!w,[`${U}-rtl`]:"rtl"===D},g,b,V,_),eg=Object.assign(Object.assign({},null==A?void 0:A.style),y);return Q(t.createElement("div",Object.assign({ref:s},ed,{className:eu,style:eg}),d,el,eo,ec))});var $=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&0>t.indexOf(i)&&(n[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var l=0,i=Object.getOwnPropertySymbols(e);lt.indexOf(i[l])&&Object.prototype.propertyIsEnumerable.call(e,i[l])&&(n[i[l]]=e[i[l]]);return n};y.Grid=c,y.Meta=e=>{let{prefixCls:i,className:r,avatar:a,title:o,description:s}=e,c=$(e,["prefixCls","className","avatar","title","description"]),{getPrefixCls:d}=t.useContext(l.ConfigContext),u=d("card",i),g=(0,n.default)(`${u}-meta`,r),b=a?t.createElement("div",{className:`${u}-meta-avatar`},a):null,p=o?t.createElement("div",{className:`${u}-meta-title`},o):null,m=s?t.createElement("div",{className:`${u}-meta-description`},s):null,h=p||m?t.createElement("div",{className:`${u}-meta-detail`},p,m):null;return t.createElement("div",Object.assign({},c,{className:g}),b,h)},e.s(["Card",0,y],175712)},869216,e=>{"use strict";e.i(247167);var t=e.i(271645),n=e.i(343794),i=e.i(908206),l=e.i(242064),r=e.i(517455),a=e.i(150073);let o={xxl:3,xl:3,lg:3,md:3,sm:2,xs:1},s=t.default.createContext({});var c=e.i(876556),d=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&0>t.indexOf(i)&&(n[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var l=0,i=Object.getOwnPropertySymbols(e);lt.indexOf(i[l])&&Object.prototype.propertyIsEnumerable.call(e,i[l])&&(n[i[l]]=e[i[l]]);return n},u=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&0>t.indexOf(i)&&(n[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var l=0,i=Object.getOwnPropertySymbols(e);lt.indexOf(i[l])&&Object.prototype.propertyIsEnumerable.call(e,i[l])&&(n[i[l]]=e[i[l]]);return n};let g=e=>{let{itemPrefixCls:i,component:l,span:r,className:a,style:o,labelStyle:c,contentStyle:d,bordered:u,label:g,content:b,colon:p,type:m,styles:h}=e,{classNames:f}=t.useContext(s),y=Object.assign(Object.assign({},c),null==h?void 0:h.label),$=Object.assign(Object.assign({},d),null==h?void 0:h.content);if(u)return t.createElement(l,{colSpan:r,style:o,className:(0,n.default)(a,{[`${i}-item-${m}`]:"label"===m||"content"===m,[null==f?void 0:f.label]:(null==f?void 0:f.label)&&"label"===m,[null==f?void 0:f.content]:(null==f?void 0:f.content)&&"content"===m})},null!=g&&t.createElement("span",{style:y},g),null!=b&&t.createElement("span",{style:$},b));return t.createElement(l,{colSpan:r,style:o,className:(0,n.default)(`${i}-item`,a)},t.createElement("div",{className:`${i}-item-container`},null!=g&&t.createElement("span",{style:y,className:(0,n.default)(`${i}-item-label`,null==f?void 0:f.label,{[`${i}-item-no-colon`]:!p})},g),null!=b&&t.createElement("span",{style:$,className:(0,n.default)(`${i}-item-content`,null==f?void 0:f.content)},b)))};function b(e,{colon:n,prefixCls:i,bordered:l},{component:r,type:a,showLabel:o,showContent:s,labelStyle:c,contentStyle:d,styles:u}){return e.map(({label:e,children:b,prefixCls:p=i,className:m,style:h,labelStyle:f,contentStyle:y,span:$=1,key:v,styles:O},x)=>"string"==typeof r?t.createElement(g,{key:`${a}-${v||x}`,className:m,style:h,styles:{label:Object.assign(Object.assign(Object.assign(Object.assign({},c),null==u?void 0:u.label),f),null==O?void 0:O.label),content:Object.assign(Object.assign(Object.assign(Object.assign({},d),null==u?void 0:u.content),y),null==O?void 0:O.content)},span:$,colon:n,component:r,itemPrefixCls:p,bordered:l,label:o?e:null,content:s?b:null,type:a}):[t.createElement(g,{key:`label-${v||x}`,className:m,style:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},c),null==u?void 0:u.label),h),f),null==O?void 0:O.label),span:1,colon:n,component:r[0],itemPrefixCls:p,bordered:l,label:e,type:"label"}),t.createElement(g,{key:`content-${v||x}`,className:m,style:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},d),null==u?void 0:u.content),h),y),null==O?void 0:O.content),span:2*$-1,component:r[1],itemPrefixCls:p,bordered:l,content:b,type:"content"})])}let p=e=>{let n=t.useContext(s),{prefixCls:i,vertical:l,row:r,index:a,bordered:o}=e;return l?t.createElement(t.Fragment,null,t.createElement("tr",{key:`label-${a}`,className:`${i}-row`},b(r,e,Object.assign({component:"th",type:"label",showLabel:!0},n))),t.createElement("tr",{key:`content-${a}`,className:`${i}-row`},b(r,e,Object.assign({component:"td",type:"content",showContent:!0},n)))):t.createElement("tr",{key:a,className:`${i}-row`},b(r,e,Object.assign({component:o?["th","td"]:"td",type:"item",showLabel:!0,showContent:!0},n)))};e.i(296059);var m=e.i(915654),h=e.i(183293),f=e.i(246422),y=e.i(838378);let $=(0,f.genStyleHooks)("Descriptions",e=>(e=>{let{componentCls:t,extraColor:n,itemPaddingBottom:i,itemPaddingEnd:l,colonMarginRight:r,colonMarginLeft:a,titleMarginBottom:o}=e;return{[t]:Object.assign(Object.assign(Object.assign({},(0,h.resetComponent)(e)),(e=>{let{componentCls:t,labelBg:n}=e;return{[`&${t}-bordered`]:{[`> ${t}-view`]:{border:`${(0,m.unit)(e.lineWidth)} ${e.lineType} ${e.colorSplit}`,"> table":{tableLayout:"auto"},[`${t}-row`]:{borderBottom:`${(0,m.unit)(e.lineWidth)} ${e.lineType} ${e.colorSplit}`,"&:first-child":{"> th:first-child, > td:first-child":{borderStartStartRadius:e.borderRadiusLG}},"&:last-child":{borderBottom:"none","> th:first-child, > td:first-child":{borderEndStartRadius:e.borderRadiusLG}},[`> ${t}-item-label, > ${t}-item-content`]:{padding:`${(0,m.unit)(e.padding)} ${(0,m.unit)(e.paddingLG)}`,borderInlineEnd:`${(0,m.unit)(e.lineWidth)} ${e.lineType} ${e.colorSplit}`,"&:last-child":{borderInlineEnd:"none"}},[`> ${t}-item-label`]:{color:e.colorTextSecondary,backgroundColor:n,"&::after":{display:"none"}}}},[`&${t}-middle`]:{[`${t}-row`]:{[`> ${t}-item-label, > ${t}-item-content`]:{padding:`${(0,m.unit)(e.paddingSM)} ${(0,m.unit)(e.paddingLG)}`}}},[`&${t}-small`]:{[`${t}-row`]:{[`> ${t}-item-label, > ${t}-item-content`]:{padding:`${(0,m.unit)(e.paddingXS)} ${(0,m.unit)(e.padding)}`}}}}}})(e)),{"&-rtl":{direction:"rtl"},[`${t}-header`]:{display:"flex",alignItems:"center",marginBottom:o},[`${t}-title`]:Object.assign(Object.assign({},h.textEllipsis),{flex:"auto",color:e.titleColor,fontWeight:e.fontWeightStrong,fontSize:e.fontSizeLG,lineHeight:e.lineHeightLG}),[`${t}-extra`]:{marginInlineStart:"auto",color:n,fontSize:e.fontSize},[`${t}-view`]:{width:"100%",borderRadius:e.borderRadiusLG,table:{width:"100%",tableLayout:"fixed",borderCollapse:"collapse"}},[`${t}-row`]:{"> th, > td":{paddingBottom:i,paddingInlineEnd:l},"> th:last-child, > td:last-child":{paddingInlineEnd:0},"&:last-child":{borderBottom:"none","> th, > td":{paddingBottom:0}}},[`${t}-item-label`]:{color:e.labelColor,fontWeight:"normal",fontSize:e.fontSize,lineHeight:e.lineHeight,textAlign:"start","&::after":{content:'":"',position:"relative",top:-.5,marginInline:`${(0,m.unit)(a)} ${(0,m.unit)(r)}`},[`&${t}-item-no-colon::after`]:{content:'""'}},[`${t}-item-no-label`]:{"&::after":{margin:0,content:'""'}},[`${t}-item-content`]:{display:"table-cell",flex:1,color:e.contentColor,fontSize:e.fontSize,lineHeight:e.lineHeight,wordBreak:"break-word",overflowWrap:"break-word"},[`${t}-item`]:{paddingBottom:0,verticalAlign:"top","&-container":{display:"flex",[`${t}-item-label`]:{display:"inline-flex",alignItems:"baseline"},[`${t}-item-content`]:{display:"inline-flex",alignItems:"baseline",minWidth:"1em"}}},"&-middle":{[`${t}-row`]:{"> th, > td":{paddingBottom:e.paddingSM}}},"&-small":{[`${t}-row`]:{"> th, > td":{paddingBottom:e.paddingXS}}}})}})((0,y.mergeToken)(e,{})),e=>({labelBg:e.colorFillAlter,labelColor:e.colorTextTertiary,titleColor:e.colorText,titleMarginBottom:e.fontSizeSM*e.lineHeightSM,itemPaddingBottom:e.padding,itemPaddingEnd:e.padding,colonMarginRight:e.marginXS,colonMarginLeft:e.marginXXS/2,contentColor:e.colorText,extraColor:e.colorText}));var v=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&0>t.indexOf(i)&&(n[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var l=0,i=Object.getOwnPropertySymbols(e);lt.indexOf(i[l])&&Object.prototype.propertyIsEnumerable.call(e,i[l])&&(n[i[l]]=e[i[l]]);return n};let O=e=>{let g,{prefixCls:b,title:m,extra:h,column:f,colon:y=!0,bordered:O,layout:x,children:j,className:S,rootClassName:C,style:E,size:w,labelStyle:N,contentStyle:z,styles:P,items:M,classNames:B}=e,T=v(e,["prefixCls","title","extra","column","colon","bordered","layout","children","className","rootClassName","style","size","labelStyle","contentStyle","styles","items","classNames"]),{getPrefixCls:k,direction:R,className:L,style:G,classNames:I,styles:H}=(0,l.useComponentConfig)("descriptions"),W=k("descriptions",b),D=(0,a.default)(),A=t.useMemo(()=>{var e;return"number"==typeof f?f:null!=(e=(0,i.matchScreen)(D,Object.assign(Object.assign({},o),f)))?e:3},[D,f]),F=(g=t.useMemo(()=>M||(0,c.default)(j).map(e=>Object.assign(Object.assign({},null==e?void 0:e.props),{key:e.key})),[M,j]),t.useMemo(()=>g.map(e=>{var{span:t}=e,n=d(e,["span"]);return"filled"===t?Object.assign(Object.assign({},n),{filled:!0}):Object.assign(Object.assign({},n),{span:"number"==typeof t?t:(0,i.matchScreen)(D,t)})}),[g,D])),X=(0,r.default)(w),K=((e,n)=>{let[i,l]=(0,t.useMemo)(()=>{let t,i,l,r;return t=[],i=[],l=!1,r=0,n.filter(e=>e).forEach(n=>{let{filled:a}=n,o=u(n,["filled"]);if(a){i.push(o),t.push(i),i=[],r=0;return}let s=e-r;(r+=n.span||1)>=e?(r>e?(l=!0,i.push(Object.assign(Object.assign({},o),{span:s}))):i.push(o),t.push(i),i=[],r=0):i.push(o)}),i.length>0&&t.push(i),[t=t.map(t=>{let n=t.reduce((e,t)=>e+(t.span||1),0);if(n({labelStyle:N,contentStyle:z,styles:{content:Object.assign(Object.assign({},H.content),null==P?void 0:P.content),label:Object.assign(Object.assign({},H.label),null==P?void 0:P.label)},classNames:{label:(0,n.default)(I.label,null==B?void 0:B.label),content:(0,n.default)(I.content,null==B?void 0:B.content)}}),[N,z,P,B,I,H]);return q(t.createElement(s.Provider,{value:V},t.createElement("div",Object.assign({className:(0,n.default)(W,L,I.root,null==B?void 0:B.root,{[`${W}-${X}`]:X&&"default"!==X,[`${W}-bordered`]:!!O,[`${W}-rtl`]:"rtl"===R},S,C,U,Q),style:Object.assign(Object.assign(Object.assign(Object.assign({},G),H.root),null==P?void 0:P.root),E)},T),(m||h)&&t.createElement("div",{className:(0,n.default)(`${W}-header`,I.header,null==B?void 0:B.header),style:Object.assign(Object.assign({},H.header),null==P?void 0:P.header)},m&&t.createElement("div",{className:(0,n.default)(`${W}-title`,I.title,null==B?void 0:B.title),style:Object.assign(Object.assign({},H.title),null==P?void 0:P.title)},m),h&&t.createElement("div",{className:(0,n.default)(`${W}-extra`,I.extra,null==B?void 0:B.extra),style:Object.assign(Object.assign({},H.extra),null==P?void 0:P.extra)},h)),t.createElement("div",{className:`${W}-view`},t.createElement("table",null,t.createElement("tbody",null,K.map((e,n)=>t.createElement(p,{key:n,index:n,colon:y,prefixCls:W,vertical:"vertical"===x,bordered:O,row:e}))))))))};O.Item=({children:e})=>e,e.s(["Descriptions",0,O],869216)},368869,e=>{"use strict";e.i(296059);var t=e.i(868297),n=e.i(732961),i=e.i(289882),l=e.i(170517),r=e.i(628882),a=e.i(320890),o=e.i(104458),s=e.i(722319),c=e.i(8398),d=e.i(279728);e.i(765846);var u=e.i(602716),g=e.i(328052),b=e.i(135551);let p=(e,t)=>new b.FastColor(e).setA(t).toRgbString(),m=(e,t)=>new b.FastColor(e).lighten(t).toHexString(),h=e=>{let t=(0,u.generate)(e,{theme:"dark"});return{1:t[0],2:t[1],3:t[2],4:t[3],5:t[6],6:t[5],7:t[4],8:t[6],9:t[5],10:t[4]}},f=(e,t)=>{let n=e||"#000",i=t||"#fff";return{colorBgBase:n,colorTextBase:i,colorText:p(i,.85),colorTextSecondary:p(i,.65),colorTextTertiary:p(i,.45),colorTextQuaternary:p(i,.25),colorFill:p(i,.18),colorFillSecondary:p(i,.12),colorFillTertiary:p(i,.08),colorFillQuaternary:p(i,.04),colorBgSolid:p(i,.95),colorBgSolidHover:p(i,1),colorBgSolidActive:p(i,.9),colorBgElevated:m(n,12),colorBgContainer:m(n,8),colorBgLayout:m(n,0),colorBgSpotlight:m(n,26),colorBgBlur:p(i,.04),colorBorder:m(n,26),colorBorderSecondary:m(n,19)}},y={defaultSeed:a.defaultConfig.token,useToken:function(){let[e,t,n]=(0,o.useToken)();return{theme:e,token:t,hashId:n}},defaultAlgorithm:s.default,darkAlgorithm:(e,t)=>{let n=Object.keys(l.defaultPresetColors).map(t=>{let n=(0,u.generate)(e[t],{theme:"dark"});return Array.from({length:10},()=>1).reduce((e,i,l)=>(e[`${t}-${l+1}`]=n[l],e[`${t}${l+1}`]=n[l],e),{})}).reduce((e,t)=>e=Object.assign(Object.assign({},e),t),{}),i=null!=t?t:(0,s.default)(e),r=(0,g.default)(e,{generateColorPalettes:h,generateNeutralColorPalettes:f});return Object.assign(Object.assign(Object.assign(Object.assign({},i),n),r),{colorPrimaryBg:r.colorPrimaryBorder,colorPrimaryBgHover:r.colorPrimaryBorderHover})},compactAlgorithm:(e,t)=>{let n=null!=t?t:(0,s.default)(e),i=n.fontSizeSM,l=n.controlHeight-4;return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},n),function(e){let{sizeUnit:t,sizeStep:n}=e,i=n-2;return{sizeXXL:t*(i+10),sizeXL:t*(i+6),sizeLG:t*(i+2),sizeMD:t*(i+2),sizeMS:t*(i+1),size:t*i,sizeSM:t*i,sizeXS:t*(i-1),sizeXXS:t*(i-1)}}(null!=t?t:e)),(0,d.default)(i)),{controlHeight:l}),(0,c.default)(Object.assign(Object.assign({},n),{controlHeight:l})))},getDesignToken:e=>{let a=(null==e?void 0:e.algorithm)?(0,t.createTheme)(e.algorithm):i.default,o=Object.assign(Object.assign({},l.default),null==e?void 0:e.token);return(0,n.getComputedToken)(o,{override:null==e?void 0:e.token},a,r.default)},defaultConfig:a.defaultConfig,_internalContext:a.DesignTokenContext};e.s(["theme",0,y],368869)},127952,e=>{"use strict";var t=e.i(843476),n=e.i(560445),i=e.i(175712),l=e.i(869216),r=e.i(311451),a=e.i(212931),o=e.i(898586),s=e.i(368869),c=e.i(270377),d=e.i(271645);e.s(["default",0,function({isOpen:e,title:u,alertMessage:g,message:b,resourceInformationTitle:p,resourceInformation:m,onCancel:h,onOk:f,confirmLoading:y,requiredConfirmation:$}){let{Title:v,Text:O}=o.Typography,{token:x}=s.theme.useToken(),[j,S]=(0,d.useState)("");return(0,d.useEffect)(()=>{e&&S("")},[e]),(0,t.jsx)(a.Modal,{title:u,open:e,onOk:f,onCancel:h,confirmLoading:y,okText:y?"Deleting...":"Delete",cancelText:"Cancel",okButtonProps:{danger:!0,disabled:!!$&&j!==$||y},cancelButtonProps:{disabled:y},children:(0,t.jsxs)("div",{className:"space-y-4",children:[g&&(0,t.jsx)(n.Alert,{message:g,type:"warning"}),(0,t.jsx)(i.Card,{title:p,className:"mt-4",styles:{body:{padding:"16px"},header:{backgroundColor:x.colorErrorBg,borderColor:x.colorErrorBorder}},style:{backgroundColor:x.colorErrorBg,borderColor:x.colorErrorBorder},children:(0,t.jsx)(l.Descriptions,{column:1,size:"small",children:m&&m.map(({label:e,value:n,...i})=>(0,t.jsx)(l.Descriptions.Item,{label:(0,t.jsx)("span",{className:"font-semibold",children:e}),children:(0,t.jsx)(O,{...i,children:n??"-"})},e))})}),(0,t.jsx)("div",{children:(0,t.jsx)(O,{children:b})}),$&&(0,t.jsxs)("div",{className:"mb-6 mt-4 pt-4 border-t border-gray-200 dark:border-gray-700",children:[(0,t.jsxs)(O,{className:"block text-base font-medium text-gray-700 dark:text-gray-300 mb-2",children:[(0,t.jsx)(O,{children:"Type "}),(0,t.jsx)(O,{strong:!0,type:"danger",children:$}),(0,t.jsx)(O,{children:" to confirm deletion:"})]}),(0,t.jsx)(r.Input,{value:j,onChange:e=>S(e.target.value),placeholder:$,className:"rounded-md",prefix:(0,t.jsx)(c.ExclamationCircleOutlined,{style:{color:x.colorError}}),autoFocus:!0})]})]})})}])},525720,e=>{"use strict";e.i(247167);var t=e.i(271645),n=e.i(343794),i=e.i(529681),l=e.i(908286),r=e.i(242064),a=e.i(246422),o=e.i(838378);let s=["wrap","nowrap","wrap-reverse"],c=["flex-start","flex-end","start","end","center","space-between","space-around","space-evenly","stretch","normal","left","right"],d=["center","start","end","flex-start","flex-end","self-start","self-end","baseline","normal","stretch"],u=function(e,t){let i,l,r;return(0,n.default)(Object.assign(Object.assign(Object.assign({},(i=!0===t.wrap?"wrap":t.wrap,{[`${e}-wrap-${i}`]:i&&s.includes(i)})),(l={},d.forEach(n=>{l[`${e}-align-${n}`]=t.align===n}),l[`${e}-align-stretch`]=!t.align&&!!t.vertical,l)),(r={},c.forEach(n=>{r[`${e}-justify-${n}`]=t.justify===n}),r)))},g=(0,a.genStyleHooks)("Flex",e=>{let{paddingXS:t,padding:n,paddingLG:i}=e,l=(0,o.mergeToken)(e,{flexGapSM:t,flexGap:n,flexGapLG:i});return[(e=>{let{componentCls:t}=e;return{[t]:{display:"flex",margin:0,padding:0,"&-vertical":{flexDirection:"column"},"&-rtl":{direction:"rtl"},"&:empty":{display:"none"}}}})(l),(e=>{let{componentCls:t}=e;return{[t]:{"&-gap-small":{gap:e.flexGapSM},"&-gap-middle":{gap:e.flexGap},"&-gap-large":{gap:e.flexGapLG}}}})(l),(e=>{let{componentCls:t}=e,n={};return s.forEach(e=>{n[`${t}-wrap-${e}`]={flexWrap:e}}),n})(l),(e=>{let{componentCls:t}=e,n={};return d.forEach(e=>{n[`${t}-align-${e}`]={alignItems:e}}),n})(l),(e=>{let{componentCls:t}=e,n={};return c.forEach(e=>{n[`${t}-justify-${e}`]={justifyContent:e}}),n})(l)]},()=>({}),{resetStyle:!1});var b=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&0>t.indexOf(i)&&(n[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var l=0,i=Object.getOwnPropertySymbols(e);lt.indexOf(i[l])&&Object.prototype.propertyIsEnumerable.call(e,i[l])&&(n[i[l]]=e[i[l]]);return n};let p=t.default.forwardRef((e,a)=>{let{prefixCls:o,rootClassName:s,className:c,style:d,flex:p,gap:m,vertical:h=!1,component:f="div",children:y}=e,$=b(e,["prefixCls","rootClassName","className","style","flex","gap","vertical","component","children"]),{flex:v,direction:O,getPrefixCls:x}=t.default.useContext(r.ConfigContext),j=x("flex",o),[S,C,E]=g(j),w=null!=h?h:null==v?void 0:v.vertical,N=(0,n.default)(c,s,null==v?void 0:v.className,j,C,E,u(j,e),{[`${j}-rtl`]:"rtl"===O,[`${j}-gap-${m}`]:(0,l.isPresetSize)(m),[`${j}-vertical`]:w}),z=Object.assign(Object.assign({},null==v?void 0:v.style),d);return p&&(z.flex=p),m&&!(0,l.isPresetSize)(m)&&(z.gap=m),S(t.default.createElement(f,Object.assign({ref:a,className:N,style:z},(0,i.default)($,["justify","wrap","align"])),y))});e.s(["Flex",0,p],525720)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0snrx6.._0zus.js b/litellm/proxy/_experimental/out/_next/static/chunks/0snrx6.._0zus.js new file mode 100644 index 00000000000..c4975196ded --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0snrx6.._0zus.js @@ -0,0 +1,8 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,790848,e=>{"use strict";e.i(247167);var t=e.i(271645),n=e.i(739295),l=e.i(343794),a=e.i(931067),i=e.i(211577),r=e.i(392221),o=e.i(703923),s=e.i(914949),c=e.i(404948),d=["prefixCls","className","checked","defaultChecked","disabled","loadingIcon","checkedChildren","unCheckedChildren","onClick","onChange","onKeyDown"],u=t.forwardRef(function(e,n){var u,g=e.prefixCls,m=void 0===g?"rc-switch":g,p=e.className,f=e.checked,b=e.defaultChecked,h=e.disabled,$=e.loadingIcon,v=e.checkedChildren,C=e.unCheckedChildren,y=e.onClick,k=e.onChange,S=e.onKeyDown,w=(0,o.default)(e,d),O=(0,s.default)(!1,{value:f,defaultValue:b}),j=(0,r.default)(O,2),x=j[0],E=j[1];function I(e,t){var n=x;return h||(E(n=e),null==k||k(n,t)),n}var N=(0,l.default)(m,p,(u={},(0,i.default)(u,"".concat(m,"-checked"),x),(0,i.default)(u,"".concat(m,"-disabled"),h),u));return t.createElement("button",(0,a.default)({},w,{type:"button",role:"switch","aria-checked":x,disabled:h,className:N,ref:n,onKeyDown:function(e){e.which===c.default.LEFT?I(!1,e):e.which===c.default.RIGHT&&I(!0,e),null==S||S(e)},onClick:function(e){var t=I(!x,e);null==y||y(t,e)}}),$,t.createElement("span",{className:"".concat(m,"-inner")},t.createElement("span",{className:"".concat(m,"-inner-checked")},v),t.createElement("span",{className:"".concat(m,"-inner-unchecked")},C)))});u.displayName="Switch";var g=e.i(121872),m=e.i(242064),p=e.i(937328),f=e.i(517455);e.i(296059);var b=e.i(915654),h=e.i(135551),$=e.i(183293),v=e.i(246422),C=e.i(838378);let y=(0,v.genStyleHooks)("Switch",e=>{let t=(0,C.mergeToken)(e,{switchDuration:e.motionDurationMid,switchColor:e.colorPrimary,switchDisabledOpacity:e.opacityLoading,switchLoadingIconSize:e.calc(e.fontSizeIcon).mul(.75).equal(),switchLoadingIconColor:`rgba(0, 0, 0, ${e.opacityLoading})`,switchHandleActiveInset:"-30%"});return[(e=>{let{componentCls:t,trackHeight:n,trackMinWidth:l}=e;return{[t]:Object.assign(Object.assign(Object.assign(Object.assign({},(0,$.resetComponent)(e)),{position:"relative",display:"inline-block",boxSizing:"border-box",minWidth:l,height:n,lineHeight:(0,b.unit)(n),verticalAlign:"middle",background:e.colorTextQuaternary,border:"0",borderRadius:100,cursor:"pointer",transition:`all ${e.motionDurationMid}`,userSelect:"none",[`&:hover:not(${t}-disabled)`]:{background:e.colorTextTertiary}}),(0,$.genFocusStyle)(e)),{[`&${t}-checked`]:{background:e.switchColor,[`&:hover:not(${t}-disabled)`]:{background:e.colorPrimaryHover}},[`&${t}-loading, &${t}-disabled`]:{cursor:"not-allowed",opacity:e.switchDisabledOpacity,"*":{boxShadow:"none",cursor:"not-allowed"}},[`&${t}-rtl`]:{direction:"rtl"}})}})(t),(e=>{let{componentCls:t,trackHeight:n,trackPadding:l,innerMinMargin:a,innerMaxMargin:i,handleSize:r,calc:o}=e,s=`${t}-inner`,c=(0,b.unit)(o(r).add(o(l).mul(2)).equal()),d=(0,b.unit)(o(i).mul(2).equal());return{[t]:{[s]:{display:"block",overflow:"hidden",borderRadius:100,height:"100%",paddingInlineStart:i,paddingInlineEnd:a,transition:`padding-inline-start ${e.switchDuration} ease-in-out, padding-inline-end ${e.switchDuration} ease-in-out`,[`${s}-checked, ${s}-unchecked`]:{display:"block",color:e.colorTextLightSolid,fontSize:e.fontSizeSM,transition:`margin-inline-start ${e.switchDuration} ease-in-out, margin-inline-end ${e.switchDuration} ease-in-out`,pointerEvents:"none",minHeight:n},[`${s}-checked`]:{marginInlineStart:`calc(-100% + ${c} - ${d})`,marginInlineEnd:`calc(100% - ${c} + ${d})`},[`${s}-unchecked`]:{marginTop:o(n).mul(-1).equal(),marginInlineStart:0,marginInlineEnd:0}},[`&${t}-checked ${s}`]:{paddingInlineStart:a,paddingInlineEnd:i,[`${s}-checked`]:{marginInlineStart:0,marginInlineEnd:0},[`${s}-unchecked`]:{marginInlineStart:`calc(100% - ${c} + ${d})`,marginInlineEnd:`calc(-100% + ${c} - ${d})`}},[`&:not(${t}-disabled):active`]:{[`&:not(${t}-checked) ${s}`]:{[`${s}-unchecked`]:{marginInlineStart:o(l).mul(2).equal(),marginInlineEnd:o(l).mul(-1).mul(2).equal()}},[`&${t}-checked ${s}`]:{[`${s}-checked`]:{marginInlineStart:o(l).mul(-1).mul(2).equal(),marginInlineEnd:o(l).mul(2).equal()}}}}}})(t),(e=>{let{componentCls:t,trackPadding:n,handleBg:l,handleShadow:a,handleSize:i,calc:r}=e,o=`${t}-handle`;return{[t]:{[o]:{position:"absolute",top:n,insetInlineStart:n,width:i,height:i,transition:`all ${e.switchDuration} ease-in-out`,"&::before":{position:"absolute",top:0,insetInlineEnd:0,bottom:0,insetInlineStart:0,backgroundColor:l,borderRadius:r(i).div(2).equal(),boxShadow:a,transition:`all ${e.switchDuration} ease-in-out`,content:'""'}},[`&${t}-checked ${o}`]:{insetInlineStart:`calc(100% - ${(0,b.unit)(r(i).add(n).equal())})`},[`&:not(${t}-disabled):active`]:{[`${o}::before`]:{insetInlineEnd:e.switchHandleActiveInset,insetInlineStart:0},[`&${t}-checked ${o}::before`]:{insetInlineEnd:0,insetInlineStart:e.switchHandleActiveInset}}}}})(t),(e=>{let{componentCls:t,handleSize:n,calc:l}=e;return{[t]:{[`${t}-loading-icon${e.iconCls}`]:{position:"relative",top:l(l(n).sub(e.fontSize)).div(2).equal(),color:e.switchLoadingIconColor,verticalAlign:"top"},[`&${t}-checked ${t}-loading-icon`]:{color:e.switchColor}}}})(t),(e=>{let{componentCls:t,trackHeightSM:n,trackPadding:l,trackMinWidthSM:a,innerMinMarginSM:i,innerMaxMarginSM:r,handleSizeSM:o,calc:s}=e,c=`${t}-inner`,d=(0,b.unit)(s(o).add(s(l).mul(2)).equal()),u=(0,b.unit)(s(r).mul(2).equal());return{[t]:{[`&${t}-small`]:{minWidth:a,height:n,lineHeight:(0,b.unit)(n),[`${t}-inner`]:{paddingInlineStart:r,paddingInlineEnd:i,[`${c}-checked, ${c}-unchecked`]:{minHeight:n},[`${c}-checked`]:{marginInlineStart:`calc(-100% + ${d} - ${u})`,marginInlineEnd:`calc(100% - ${d} + ${u})`},[`${c}-unchecked`]:{marginTop:s(n).mul(-1).equal(),marginInlineStart:0,marginInlineEnd:0}},[`${t}-handle`]:{width:o,height:o},[`${t}-loading-icon`]:{top:s(s(o).sub(e.switchLoadingIconSize)).div(2).equal(),fontSize:e.switchLoadingIconSize},[`&${t}-checked`]:{[`${t}-inner`]:{paddingInlineStart:i,paddingInlineEnd:r,[`${c}-checked`]:{marginInlineStart:0,marginInlineEnd:0},[`${c}-unchecked`]:{marginInlineStart:`calc(100% - ${d} + ${u})`,marginInlineEnd:`calc(-100% + ${d} - ${u})`}},[`${t}-handle`]:{insetInlineStart:`calc(100% - ${(0,b.unit)(s(o).add(l).equal())})`}},[`&:not(${t}-disabled):active`]:{[`&:not(${t}-checked) ${c}`]:{[`${c}-unchecked`]:{marginInlineStart:s(e.marginXXS).div(2).equal(),marginInlineEnd:s(e.marginXXS).mul(-1).div(2).equal()}},[`&${t}-checked ${c}`]:{[`${c}-checked`]:{marginInlineStart:s(e.marginXXS).mul(-1).div(2).equal(),marginInlineEnd:s(e.marginXXS).div(2).equal()}}}}}}})(t)]},e=>{let{fontSize:t,lineHeight:n,controlHeight:l,colorWhite:a}=e,i=t*n,r=l/2,o=i-4,s=r-4;return{trackHeight:i,trackHeightSM:r,trackMinWidth:2*o+8,trackMinWidthSM:2*s+4,trackPadding:2,handleBg:a,handleSize:o,handleSizeSM:s,handleShadow:`0 2px 4px 0 ${new h.FastColor("#00230b").setA(.2).toRgbString()}`,innerMinMargin:o/2,innerMaxMargin:o+2+4,innerMinMarginSM:s/2,innerMaxMarginSM:s+2+4}});var k=function(e,t){var n={};for(var l in e)Object.prototype.hasOwnProperty.call(e,l)&&0>t.indexOf(l)&&(n[l]=e[l]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var a=0,l=Object.getOwnPropertySymbols(e);at.indexOf(l[a])&&Object.prototype.propertyIsEnumerable.call(e,l[a])&&(n[l[a]]=e[l[a]]);return n};let S=t.forwardRef((e,a)=>{let{prefixCls:i,size:r,disabled:o,loading:c,className:d,rootClassName:b,style:h,checked:$,value:v,defaultChecked:C,defaultValue:S,onChange:w}=e,O=k(e,["prefixCls","size","disabled","loading","className","rootClassName","style","checked","value","defaultChecked","defaultValue","onChange"]),[j,x]=(0,s.default)(!1,{value:null!=$?$:v,defaultValue:null!=C?C:S}),{getPrefixCls:E,direction:I,switch:N}=t.useContext(m.ConfigContext),z=t.useContext(p.default),q=(null!=o?o:z)||c,M=E("switch",i),R=t.createElement("div",{className:`${M}-handle`},c&&t.createElement(n.default,{className:`${M}-loading-icon`})),[H,T,A]=y(M),P=(0,f.default)(r),L=(0,l.default)(null==N?void 0:N.className,{[`${M}-small`]:"small"===P,[`${M}-loading`]:c,[`${M}-rtl`]:"rtl"===I},d,b,T,A),B=Object.assign(Object.assign({},null==N?void 0:N.style),h);return H(t.createElement(g.default,{component:"Switch",disabled:q},t.createElement(u,Object.assign({},O,{checked:j,onChange:(...e)=>{x(e[0]),null==w||w.apply(void 0,e)},prefixCls:M,className:L,style:B,disabled:q,ref:a,loadingIcon:R}))))});S.__ANT_SWITCH=!0,e.s(["Switch",0,S],790848)},653496,e=>{"use strict";var t=e.i(721369);e.s(["Tabs",()=>t.default])},770914,e=>{"use strict";var t=e.i(38243);e.s(["Space",()=>t.default])},475254,e=>{"use strict";var t=e.i(271645);let n=e=>{let t=e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,n)=>n?n.toUpperCase():t.toLowerCase());return t.charAt(0).toUpperCase()+t.slice(1)},l=(...e)=>e.filter((e,t,n)=>!!e&&""!==e.trim()&&n.indexOf(e)===t).join(" ").trim();var a={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let i=(0,t.forwardRef)(({color:e="currentColor",size:n=24,strokeWidth:i=2,absoluteStrokeWidth:r,className:o="",children:s,iconNode:c,...d},u)=>(0,t.createElement)("svg",{ref:u,...a,width:n,height:n,stroke:e,strokeWidth:r?24*Number(i)/Number(n):i,className:l("lucide",o),...!s&&!(e=>{for(let t in e)if(t.startsWith("aria-")||"role"===t||"title"===t)return!0})(d)&&{"aria-hidden":"true"},...d},[...c.map(([e,n])=>(0,t.createElement)(e,n)),...Array.isArray(s)?s:[s]]));e.s(["default",0,(e,a)=>{let r=(0,t.forwardRef)(({className:r,...o},s)=>(0,t.createElement)(i,{ref:s,iconNode:a,className:l(`lucide-${n(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()}`,`lucide-${e}`,r),...o}));return r.displayName=n(e),r}],475254)},262218,e=>{"use strict";e.i(247167);var t=e.i(271645),n=e.i(343794),l=e.i(529681),a=e.i(702779),i=e.i(563113),r=e.i(763731),o=e.i(121872),s=e.i(242064);e.i(296059);var c=e.i(915654),d=e.i(135551),u=e.i(183293),g=e.i(246422),m=e.i(838378);let p=e=>{let{lineWidth:t,fontSizeIcon:n,calc:l}=e,a=e.fontSizeSM;return(0,m.mergeToken)(e,{tagFontSize:a,tagLineHeight:(0,c.unit)(l(e.lineHeightSM).mul(a).equal()),tagIconSize:l(n).sub(l(t).mul(2)).equal(),tagPaddingHorizontal:8,tagBorderlessBg:e.defaultBg})},f=e=>({defaultBg:new d.FastColor(e.colorFillQuaternary).onBackground(e.colorBgContainer).toHexString(),defaultColor:e.colorText}),b=(0,g.genStyleHooks)("Tag",e=>(e=>{let{paddingXXS:t,lineWidth:n,tagPaddingHorizontal:l,componentCls:a,calc:i}=e,r=i(l).sub(n).equal(),o=i(t).sub(n).equal();return{[a]:Object.assign(Object.assign({},(0,u.resetComponent)(e)),{display:"inline-block",height:"auto",marginInlineEnd:e.marginXS,paddingInline:r,fontSize:e.tagFontSize,lineHeight:e.tagLineHeight,whiteSpace:"nowrap",background:e.defaultBg,border:`${(0,c.unit)(e.lineWidth)} ${e.lineType} ${e.colorBorder}`,borderRadius:e.borderRadiusSM,opacity:1,transition:`all ${e.motionDurationMid}`,textAlign:"start",position:"relative",[`&${a}-rtl`]:{direction:"rtl"},"&, a, a:hover":{color:e.defaultColor},[`${a}-close-icon`]:{marginInlineStart:o,fontSize:e.tagIconSize,color:e.colorIcon,cursor:"pointer",transition:`all ${e.motionDurationMid}`,"&:hover":{color:e.colorTextHeading}},[`&${a}-has-color`]:{borderColor:"transparent",[`&, a, a:hover, ${e.iconCls}-close, ${e.iconCls}-close:hover`]:{color:e.colorTextLightSolid}},"&-checkable":{backgroundColor:"transparent",borderColor:"transparent",cursor:"pointer",[`&:not(${a}-checkable-checked):hover`]:{color:e.colorPrimary,backgroundColor:e.colorFillSecondary},"&:active, &-checked":{color:e.colorTextLightSolid},"&-checked":{backgroundColor:e.colorPrimary,"&:hover":{backgroundColor:e.colorPrimaryHover}},"&:active":{backgroundColor:e.colorPrimaryActive}},"&-hidden":{display:"none"},[`> ${e.iconCls} + span, > span + ${e.iconCls}`]:{marginInlineStart:r}}),[`${a}-borderless`]:{borderColor:"transparent",background:e.tagBorderlessBg}}})(p(e)),f);var h=function(e,t){var n={};for(var l in e)Object.prototype.hasOwnProperty.call(e,l)&&0>t.indexOf(l)&&(n[l]=e[l]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var a=0,l=Object.getOwnPropertySymbols(e);at.indexOf(l[a])&&Object.prototype.propertyIsEnumerable.call(e,l[a])&&(n[l[a]]=e[l[a]]);return n};let $=t.forwardRef((e,l)=>{let{prefixCls:a,style:i,className:r,checked:o,children:c,icon:d,onChange:u,onClick:g}=e,m=h(e,["prefixCls","style","className","checked","children","icon","onChange","onClick"]),{getPrefixCls:p,tag:f}=t.useContext(s.ConfigContext),$=p("tag",a),[v,C,y]=b($),k=(0,n.default)($,`${$}-checkable`,{[`${$}-checkable-checked`]:o},null==f?void 0:f.className,r,C,y);return v(t.createElement("span",Object.assign({},m,{ref:l,style:Object.assign(Object.assign({},i),null==f?void 0:f.style),className:k,onClick:e=>{null==u||u(!o),null==g||g(e)}}),d,t.createElement("span",null,c)))});var v=e.i(403541);let C=(0,g.genSubStyleComponent)(["Tag","preset"],e=>{let t;return t=p(e),(0,v.genPresetColor)(t,(e,{textColor:n,lightBorderColor:l,lightColor:a,darkColor:i})=>({[`${t.componentCls}${t.componentCls}-${e}`]:{color:n,background:a,borderColor:l,"&-inverse":{color:t.colorTextLightSolid,background:i,borderColor:i},[`&${t.componentCls}-borderless`]:{borderColor:"transparent"}}}))},f),y=(e,t,n)=>{let l="string"!=typeof n?n:n.charAt(0).toUpperCase()+n.slice(1);return{[`${e.componentCls}${e.componentCls}-${t}`]:{color:e[`color${n}`],background:e[`color${l}Bg`],borderColor:e[`color${l}Border`],[`&${e.componentCls}-borderless`]:{borderColor:"transparent"}}}},k=(0,g.genSubStyleComponent)(["Tag","status"],e=>{let t=p(e);return[y(t,"success","Success"),y(t,"processing","Info"),y(t,"error","Error"),y(t,"warning","Warning")]},f);var S=function(e,t){var n={};for(var l in e)Object.prototype.hasOwnProperty.call(e,l)&&0>t.indexOf(l)&&(n[l]=e[l]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var a=0,l=Object.getOwnPropertySymbols(e);at.indexOf(l[a])&&Object.prototype.propertyIsEnumerable.call(e,l[a])&&(n[l[a]]=e[l[a]]);return n};let w=t.forwardRef((e,c)=>{let{prefixCls:d,className:u,rootClassName:g,style:m,children:p,icon:f,color:h,onClose:$,bordered:v=!0,visible:y}=e,w=S(e,["prefixCls","className","rootClassName","style","children","icon","color","onClose","bordered","visible"]),{getPrefixCls:O,direction:j,tag:x}=t.useContext(s.ConfigContext),[E,I]=t.useState(!0),N=(0,l.default)(w,["closeIcon","closable"]);t.useEffect(()=>{void 0!==y&&I(y)},[y]);let z=(0,a.isPresetColor)(h),q=(0,a.isPresetStatusColor)(h),M=z||q,R=Object.assign(Object.assign({backgroundColor:h&&!M?h:void 0},null==x?void 0:x.style),m),H=O("tag",d),[T,A,P]=b(H),L=(0,n.default)(H,null==x?void 0:x.className,{[`${H}-${h}`]:M,[`${H}-has-color`]:h&&!M,[`${H}-hidden`]:!E,[`${H}-rtl`]:"rtl"===j,[`${H}-borderless`]:!v},u,g,A,P),B=e=>{e.stopPropagation(),null==$||$(e),e.defaultPrevented||I(!1)},[,G]=(0,i.useClosable)((0,i.pickClosable)(e),(0,i.pickClosable)(x),{closable:!1,closeIconRender:e=>{let l=t.createElement("span",{className:`${H}-close-icon`,onClick:B},e);return(0,r.replaceElement)(e,l,e=>({onClick:t=>{var n;null==(n=null==e?void 0:e.onClick)||n.call(e,t),B(t)},className:(0,n.default)(null==e?void 0:e.className,`${H}-close-icon`)}))}}),D="function"==typeof w.onClick||p&&"a"===p.type,W=f||null,F=W?t.createElement(t.Fragment,null,W,p&&t.createElement("span",null,p)):p,X=t.createElement("span",Object.assign({},N,{ref:c,className:L,style:R}),F,G,z&&t.createElement(C,{key:"preset",prefixCls:H}),q&&t.createElement(k,{key:"status",prefixCls:H}));return T(D?t.createElement(o.default,{component:"Tag"},X):X)});w.CheckableTag=$,e.s(["Tag",0,w],262218)},464571,e=>{"use strict";var t=e.i(920228);e.s(["Button",()=>t.default])},190144,e=>{"use strict";e.i(247167);var t=e.i(931067),n=e.i(271645);let l={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"}}]},name:"copy",theme:"outlined"};var a=e.i(9583),i=n.forwardRef(function(e,i){return n.createElement(a.default,(0,t.default)({},e,{ref:i,icon:l}))});e.s(["default",0,i],190144)},735049,e=>{"use strict";var t=e.i(654310),n=function(e){if((0,t.default)()&&window.document.documentElement){var n=Array.isArray(e)?e:[e],l=window.document.documentElement;return n.some(function(e){return e in l.style})}return!1},l=function(e,t){if(!n(e))return!1;var l=document.createElement("div"),a=l.style[e];return l.style[e]=t,l.style[e]!==a};e.s(["isStyleSupport",0,function(e,t){return Array.isArray(e)||void 0===t?n(e):l(e,t)}])},185793,e=>{"use strict";e.i(247167);var t=e.i(271645),n=e.i(343794),l=e.i(242064),a=e.i(529681);let i=e=>{let{prefixCls:l,className:a,style:i,size:r,shape:o}=e,s=(0,n.default)({[`${l}-lg`]:"large"===r,[`${l}-sm`]:"small"===r}),c=(0,n.default)({[`${l}-circle`]:"circle"===o,[`${l}-square`]:"square"===o,[`${l}-round`]:"round"===o}),d=t.useMemo(()=>"number"==typeof r?{width:r,height:r,lineHeight:`${r}px`}:{},[r]);return t.createElement("span",{className:(0,n.default)(l,s,c,a),style:Object.assign(Object.assign({},d),i)})};e.i(296059);var r=e.i(694758),o=e.i(915654),s=e.i(246422),c=e.i(838378);let d=new r.Keyframes("ant-skeleton-loading",{"0%":{backgroundPosition:"100% 50%"},"100%":{backgroundPosition:"0 50%"}}),u=e=>({height:e,lineHeight:(0,o.unit)(e)}),g=e=>Object.assign({width:e},u(e)),m=(e,t)=>Object.assign({width:t(e).mul(5).equal(),minWidth:t(e).mul(5).equal()},u(e)),p=e=>Object.assign({width:e},u(e)),f=(e,t,n)=>{let{skeletonButtonCls:l}=e;return{[`${n}${l}-circle`]:{width:t,minWidth:t,borderRadius:"50%"},[`${n}${l}-round`]:{borderRadius:t}}},b=(e,t)=>Object.assign({width:t(e).mul(2).equal(),minWidth:t(e).mul(2).equal()},u(e)),h=(0,s.genStyleHooks)("Skeleton",e=>{let{componentCls:t,calc:n}=e;return(e=>{let{componentCls:t,skeletonAvatarCls:n,skeletonTitleCls:l,skeletonParagraphCls:a,skeletonButtonCls:i,skeletonInputCls:r,skeletonImageCls:o,controlHeight:s,controlHeightLG:c,controlHeightSM:u,gradientFromColor:h,padding:$,marginSM:v,borderRadius:C,titleHeight:y,blockRadius:k,paragraphLiHeight:S,controlHeightXS:w,paragraphMarginTop:O}=e;return{[t]:{display:"table",width:"100%",[`${t}-header`]:{display:"table-cell",paddingInlineEnd:$,verticalAlign:"top",[n]:Object.assign({display:"inline-block",verticalAlign:"top",background:h},g(s)),[`${n}-circle`]:{borderRadius:"50%"},[`${n}-lg`]:Object.assign({},g(c)),[`${n}-sm`]:Object.assign({},g(u))},[`${t}-content`]:{display:"table-cell",width:"100%",verticalAlign:"top",[l]:{width:"100%",height:y,background:h,borderRadius:k,[`+ ${a}`]:{marginBlockStart:u}},[a]:{padding:0,"> li":{width:"100%",height:S,listStyle:"none",background:h,borderRadius:k,"+ li":{marginBlockStart:w}}},[`${a}> li:last-child:not(:first-child):not(:nth-child(2))`]:{width:"61%"}},[`&-round ${t}-content`]:{[`${l}, ${a} > li`]:{borderRadius:C}}},[`${t}-with-avatar ${t}-content`]:{[l]:{marginBlockStart:v,[`+ ${a}`]:{marginBlockStart:O}}},[`${t}${t}-element`]:Object.assign(Object.assign(Object.assign(Object.assign({display:"inline-block",width:"auto"},(e=>{let{borderRadiusSM:t,skeletonButtonCls:n,controlHeight:l,controlHeightLG:a,controlHeightSM:i,gradientFromColor:r,calc:o}=e;return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({[n]:Object.assign({display:"inline-block",verticalAlign:"top",background:r,borderRadius:t,width:o(l).mul(2).equal(),minWidth:o(l).mul(2).equal()},b(l,o))},f(e,l,n)),{[`${n}-lg`]:Object.assign({},b(a,o))}),f(e,a,`${n}-lg`)),{[`${n}-sm`]:Object.assign({},b(i,o))}),f(e,i,`${n}-sm`))})(e)),(e=>{let{skeletonAvatarCls:t,gradientFromColor:n,controlHeight:l,controlHeightLG:a,controlHeightSM:i}=e;return{[t]:Object.assign({display:"inline-block",verticalAlign:"top",background:n},g(l)),[`${t}${t}-circle`]:{borderRadius:"50%"},[`${t}${t}-lg`]:Object.assign({},g(a)),[`${t}${t}-sm`]:Object.assign({},g(i))}})(e)),(e=>{let{controlHeight:t,borderRadiusSM:n,skeletonInputCls:l,controlHeightLG:a,controlHeightSM:i,gradientFromColor:r,calc:o}=e;return{[l]:Object.assign({display:"inline-block",verticalAlign:"top",background:r,borderRadius:n},m(t,o)),[`${l}-lg`]:Object.assign({},m(a,o)),[`${l}-sm`]:Object.assign({},m(i,o))}})(e)),(e=>{let{skeletonImageCls:t,imageSizeBase:n,gradientFromColor:l,borderRadiusSM:a,calc:i}=e;return{[t]:Object.assign(Object.assign({display:"inline-flex",alignItems:"center",justifyContent:"center",verticalAlign:"middle",background:l,borderRadius:a},p(i(n).mul(2).equal())),{[`${t}-path`]:{fill:"#bfbfbf"},[`${t}-svg`]:Object.assign(Object.assign({},p(n)),{maxWidth:i(n).mul(4).equal(),maxHeight:i(n).mul(4).equal()}),[`${t}-svg${t}-svg-circle`]:{borderRadius:"50%"}}),[`${t}${t}-circle`]:{borderRadius:"50%"}}})(e)),[`${t}${t}-block`]:{width:"100%",[i]:{width:"100%"},[r]:{width:"100%"}},[`${t}${t}-active`]:{[` + ${l}, + ${a} > li, + ${n}, + ${i}, + ${r}, + ${o} + `]:Object.assign({},{background:e.skeletonLoadingBackground,backgroundSize:"400% 100%",animationName:d,animationDuration:e.skeletonLoadingMotionDuration,animationTimingFunction:"ease",animationIterationCount:"infinite"})}}})((0,c.mergeToken)(e,{skeletonAvatarCls:`${t}-avatar`,skeletonTitleCls:`${t}-title`,skeletonParagraphCls:`${t}-paragraph`,skeletonButtonCls:`${t}-button`,skeletonInputCls:`${t}-input`,skeletonImageCls:`${t}-image`,imageSizeBase:n(e.controlHeight).mul(1.5).equal(),borderRadius:100,skeletonLoadingBackground:`linear-gradient(90deg, ${e.gradientFromColor} 25%, ${e.gradientToColor} 37%, ${e.gradientFromColor} 63%)`,skeletonLoadingMotionDuration:"1.4s"}))},e=>{let{colorFillContent:t,colorFill:n}=e;return{color:t,colorGradientEnd:n,gradientFromColor:t,gradientToColor:n,titleHeight:e.controlHeight/2,blockRadius:e.borderRadiusSM,paragraphMarginTop:e.marginLG+e.marginXXS,paragraphLiHeight:e.controlHeight/2}},{deprecatedTokens:[["color","gradientFromColor"],["colorGradientEnd","gradientToColor"]]}),$=e=>{let{prefixCls:l,className:a,style:i,rows:r=0}=e,o=Array.from({length:r}).map((n,l)=>t.createElement("li",{key:l,style:{width:((e,t)=>{let{width:n,rows:l=2}=t;return Array.isArray(n)?n[e]:l-1===e?n:void 0})(l,e)}}));return t.createElement("ul",{className:(0,n.default)(l,a),style:i},o)},v=({prefixCls:e,className:l,width:a,style:i})=>t.createElement("h3",{className:(0,n.default)(e,l),style:Object.assign({width:a},i)});function C(e){return e&&"object"==typeof e?e:{}}let y=e=>{let{prefixCls:a,loading:r,className:o,rootClassName:s,style:c,children:d,avatar:u=!1,title:g=!0,paragraph:m=!0,active:p,round:f}=e,{getPrefixCls:b,direction:y,className:k,style:S}=(0,l.useComponentConfig)("skeleton"),w=b("skeleton",a),[O,j,x]=h(w);if(r||!("loading"in e)){let e,l,a=!!u,r=!!g,d=!!m;if(a){let n=Object.assign(Object.assign({prefixCls:`${w}-avatar`},r&&!d?{size:"large",shape:"square"}:{size:"large",shape:"circle"}),C(u));e=t.createElement("div",{className:`${w}-header`},t.createElement(i,Object.assign({},n)))}if(r||d){let e,n;if(r){let n=Object.assign(Object.assign({prefixCls:`${w}-title`},!a&&d?{width:"38%"}:a&&d?{width:"50%"}:{}),C(g));e=t.createElement(v,Object.assign({},n))}if(d){let e,l=Object.assign(Object.assign({prefixCls:`${w}-paragraph`},(e={},a&&r||(e.width="61%"),!a&&r?e.rows=3:e.rows=2,e)),C(m));n=t.createElement($,Object.assign({},l))}l=t.createElement("div",{className:`${w}-content`},e,n)}let b=(0,n.default)(w,{[`${w}-with-avatar`]:a,[`${w}-active`]:p,[`${w}-rtl`]:"rtl"===y,[`${w}-round`]:f},k,o,s,j,x);return O(t.createElement("div",{className:b,style:Object.assign(Object.assign({},S),c)},e,l))}return null!=d?d:null};y.Button=e=>{let{prefixCls:r,className:o,rootClassName:s,active:c,block:d=!1,size:u="default"}=e,{getPrefixCls:g}=t.useContext(l.ConfigContext),m=g("skeleton",r),[p,f,b]=h(m),$=(0,a.default)(e,["prefixCls"]),v=(0,n.default)(m,`${m}-element`,{[`${m}-active`]:c,[`${m}-block`]:d},o,s,f,b);return p(t.createElement("div",{className:v},t.createElement(i,Object.assign({prefixCls:`${m}-button`,size:u},$))))},y.Avatar=e=>{let{prefixCls:r,className:o,rootClassName:s,active:c,shape:d="circle",size:u="default"}=e,{getPrefixCls:g}=t.useContext(l.ConfigContext),m=g("skeleton",r),[p,f,b]=h(m),$=(0,a.default)(e,["prefixCls","className"]),v=(0,n.default)(m,`${m}-element`,{[`${m}-active`]:c},o,s,f,b);return p(t.createElement("div",{className:v},t.createElement(i,Object.assign({prefixCls:`${m}-avatar`,shape:d,size:u},$))))},y.Input=e=>{let{prefixCls:r,className:o,rootClassName:s,active:c,block:d,size:u="default"}=e,{getPrefixCls:g}=t.useContext(l.ConfigContext),m=g("skeleton",r),[p,f,b]=h(m),$=(0,a.default)(e,["prefixCls"]),v=(0,n.default)(m,`${m}-element`,{[`${m}-active`]:c,[`${m}-block`]:d},o,s,f,b);return p(t.createElement("div",{className:v},t.createElement(i,Object.assign({prefixCls:`${m}-input`,size:u},$))))},y.Image=e=>{let{prefixCls:a,className:i,rootClassName:r,style:o,active:s}=e,{getPrefixCls:c}=t.useContext(l.ConfigContext),d=c("skeleton",a),[u,g,m]=h(d),p=(0,n.default)(d,`${d}-element`,{[`${d}-active`]:s},i,r,g,m);return u(t.createElement("div",{className:p},t.createElement("div",{className:(0,n.default)(`${d}-image`,i),style:o},t.createElement("svg",{viewBox:"0 0 1098 1024",xmlns:"http://www.w3.org/2000/svg",className:`${d}-image-svg`},t.createElement("title",null,"Image placeholder"),t.createElement("path",{d:"M365.714286 329.142857q0 45.714286-32.036571 77.677714t-77.677714 32.036571-77.677714-32.036571-32.036571-77.677714 32.036571-77.677714 77.677714-32.036571 77.677714 32.036571 32.036571 77.677714zM950.857143 548.571429l0 256-804.571429 0 0-109.714286 182.857143-182.857143 91.428571 91.428571 292.571429-292.571429zM1005.714286 146.285714l-914.285714 0q-7.460571 0-12.873143 5.412571t-5.412571 12.873143l0 694.857143q0 7.460571 5.412571 12.873143t12.873143 5.412571l914.285714 0q7.460571 0 12.873143-5.412571t5.412571-12.873143l0-694.857143q0-7.460571-5.412571-12.873143t-12.873143-5.412571zM1097.142857 164.571429l0 694.857143q0 37.741714-26.843429 64.585143t-64.585143 26.843429l-914.285714 0q-37.741714 0-64.585143-26.843429t-26.843429-64.585143l0-694.857143q0-37.741714 26.843429-64.585143t64.585143-26.843429l914.285714 0q37.741714 0 64.585143 26.843429t26.843429 64.585143z",className:`${d}-image-path`})))))},y.Node=e=>{let{prefixCls:a,className:i,rootClassName:r,style:o,active:s,children:c}=e,{getPrefixCls:d}=t.useContext(l.ConfigContext),u=d("skeleton",a),[g,m,p]=h(u),f=(0,n.default)(u,`${u}-element`,{[`${u}-active`]:s},m,i,r,p);return g(t.createElement("div",{className:f},t.createElement("div",{className:(0,n.default)(`${u}-image`,i),style:o},c)))},e.s(["default",0,y],185793)},563113,887719,e=>{"use strict";var t=e.i(271645),n=e.i(864517),l=e.i(244009),a=e.i(408850),i=e.i(87414);let r=function(...e){let t={};return e.forEach(e=>{e&&Object.keys(e).forEach(n=>{void 0!==e[n]&&(t[n]=e[n])})}),t};function o(e){let{closable:n,closeIcon:l}=e||{};return t.default.useMemo(()=>{if(!n&&(!1===n||!1===l||null===l))return!1;if(void 0===n&&void 0===l)return null;let e={closeIcon:"boolean"!=typeof l&&null!==l?l:void 0};return n&&"object"==typeof n&&(e=Object.assign(Object.assign({},e),n)),e},[n,l])}e.s(["default",0,r],887719);let s={};e.s(["pickClosable",0,function(e){if(!e)return;let{closable:t,closeIcon:n}=e;return{closable:t,closeIcon:n}},"useClosable",0,(e,c,d=s)=>{let u=o(e),g=o(c),[m]=(0,a.useLocale)("global",i.default.global),p="boolean"!=typeof u&&!!(null==u?void 0:u.disabled),f=t.default.useMemo(()=>Object.assign({closeIcon:t.default.createElement(n.default,null)},d),[d]),b=t.default.useMemo(()=>!1!==u&&(u?r(f,g,u):!1!==g&&(g?r(f,g):!!f.closable&&f)),[u,g,f]);return t.default.useMemo(()=>{var e,n;if(!1===b)return[!1,null,p,{}];let{closeIconRender:a}=f,{closeIcon:i}=b,r=i,o=(0,l.default)(b,!0);return null!=r&&(a&&(r=a(i)),r=t.default.isValidElement(r)?t.default.cloneElement(r,Object.assign(Object.assign(Object.assign({},r.props),{"aria-label":null!=(n=null==(e=r.props)?void 0:e["aria-label"])?n:m.close}),o)):t.default.createElement("span",Object.assign({"aria-label":m.close},o),r)),[!0,r,p,o]},[p,m.close,b,f])}],563113)},922611,e=>{"use strict";var t=e.i(271645),n=e.i(175066);function l(){}let a=t.createContext({add:l,remove:l});e.s(["usePanelRef",0,function(e){let l=t.useContext(a),i=t.useRef(null);return(0,n.default)(t=>{if(t){let n=e?t.querySelector(e):t;n&&(l.add(n),i.current=n)}else l.remove(i.current)})}])},801312,e=>{"use strict";e.i(247167);var t=e.i(931067),n=e.i(271645);let l={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M724 218.3V141c0-6.7-7.7-10.4-12.9-6.3L260.3 486.8a31.86 31.86 0 000 50.3l450.8 352.1c5.3 4.1 12.9.4 12.9-6.3v-77.3c0-4.9-2.3-9.6-6.1-12.6l-360-281 360-281.1c3.8-3 6.1-7.7 6.1-12.6z"}}]},name:"left",theme:"outlined"};var a=e.i(9583),i=n.forwardRef(function(e,i){return n.createElement(a.default,(0,t.default)({},e,{ref:i,icon:l}))});e.s(["default",0,i],801312)},38243,908286,e=>{"use strict";e.i(247167);var t=e.i(271645),n=e.i(343794),l=e.i(876556);function a(e){return["small","middle","large"].includes(e)}function i(e){return!!e&&"number"==typeof e&&!Number.isNaN(e)}e.s(["isPresetSize",0,a,"isValidGapNumber",0,i],908286);var r=e.i(242064),o=e.i(249616),s=e.i(372409),c=e.i(246422);let d=(0,c.genStyleHooks)(["Space","Addon"],e=>[(e=>{let{componentCls:t,borderRadius:n,paddingSM:l,colorBorder:a,paddingXS:i,fontSizeLG:r,fontSizeSM:o,borderRadiusLG:c,borderRadiusSM:d,colorBgContainerDisabled:u,lineWidth:g}=e;return{[t]:[{display:"inline-flex",alignItems:"center",gap:0,paddingInline:l,margin:0,background:u,borderWidth:g,borderStyle:"solid",borderColor:a,borderRadius:n,"&-large":{fontSize:r,borderRadius:c},"&-small":{paddingInline:i,borderRadius:d,fontSize:o},"&-compact-last-item":{borderEndStartRadius:0,borderStartStartRadius:0},"&-compact-first-item":{borderEndEndRadius:0,borderStartEndRadius:0},"&-compact-item:not(:first-child):not(:last-child)":{borderRadius:0},"&-compact-item:not(:last-child)":{borderInlineEndWidth:0}},(0,s.genCompactItemStyle)(e,{focus:!1})]}})(e)]);var u=function(e,t){var n={};for(var l in e)Object.prototype.hasOwnProperty.call(e,l)&&0>t.indexOf(l)&&(n[l]=e[l]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var a=0,l=Object.getOwnPropertySymbols(e);at.indexOf(l[a])&&Object.prototype.propertyIsEnumerable.call(e,l[a])&&(n[l[a]]=e[l[a]]);return n};let g=t.default.forwardRef((e,l)=>{let{className:a,children:i,style:s,prefixCls:c}=e,g=u(e,["className","children","style","prefixCls"]),{getPrefixCls:m,direction:p}=t.default.useContext(r.ConfigContext),f=m("space-addon",c),[b,h,$]=d(f),{compactItemClassnames:v,compactSize:C}=(0,o.useCompactItemContext)(f,p),y=(0,n.default)(f,h,v,$,{[`${f}-${C}`]:C},a);return b(t.default.createElement("div",Object.assign({ref:l,className:y,style:s},g),i))}),m=t.default.createContext({latestIndex:0}),p=m.Provider,f=({className:e,index:n,children:l,split:a,style:i})=>{let{latestIndex:r}=t.useContext(m);return null==l?null:t.createElement(t.Fragment,null,t.createElement("div",{className:e,style:i},l),n{let t=(0,b.mergeToken)(e,{spaceGapSmallSize:e.paddingXS,spaceGapMiddleSize:e.padding,spaceGapLargeSize:e.paddingLG});return[(e=>{let{componentCls:t,antCls:n}=e;return{[t]:{display:"inline-flex","&-rtl":{direction:"rtl"},"&-vertical":{flexDirection:"column"},"&-align":{flexDirection:"column","&-center":{alignItems:"center"},"&-start":{alignItems:"flex-start"},"&-end":{alignItems:"flex-end"},"&-baseline":{alignItems:"baseline"}},[`${t}-item:empty`]:{display:"none"},[`${t}-item > ${n}-badge-not-a-wrapper:only-child`]:{display:"block"}}}})(t),(e=>{let{componentCls:t}=e;return{[t]:{"&-gap-row-small":{rowGap:e.spaceGapSmallSize},"&-gap-row-middle":{rowGap:e.spaceGapMiddleSize},"&-gap-row-large":{rowGap:e.spaceGapLargeSize},"&-gap-col-small":{columnGap:e.spaceGapSmallSize},"&-gap-col-middle":{columnGap:e.spaceGapMiddleSize},"&-gap-col-large":{columnGap:e.spaceGapLargeSize}}}})(t)]},()=>({}),{resetStyle:!1});var $=function(e,t){var n={};for(var l in e)Object.prototype.hasOwnProperty.call(e,l)&&0>t.indexOf(l)&&(n[l]=e[l]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var a=0,l=Object.getOwnPropertySymbols(e);at.indexOf(l[a])&&Object.prototype.propertyIsEnumerable.call(e,l[a])&&(n[l[a]]=e[l[a]]);return n};let v=t.forwardRef((e,o)=>{var s;let{getPrefixCls:c,direction:d,size:u,className:g,style:m,classNames:b,styles:v}=(0,r.useComponentConfig)("space"),{size:C=null!=u?u:"small",align:y,className:k,rootClassName:S,children:w,direction:O="horizontal",prefixCls:j,split:x,style:E,wrap:I=!1,classNames:N,styles:z}=e,q=$(e,["size","align","className","rootClassName","children","direction","prefixCls","split","style","wrap","classNames","styles"]),[M,R]=Array.isArray(C)?C:[C,C],H=a(R),T=a(M),A=i(R),P=i(M),L=(0,l.default)(w,{keepEmpty:!0}),B=void 0===y&&"horizontal"===O?"center":y,G=c("space",j),[D,W,F]=h(G),X=(0,n.default)(G,g,W,`${G}-${O}`,{[`${G}-rtl`]:"rtl"===d,[`${G}-align-${B}`]:B,[`${G}-gap-row-${R}`]:H,[`${G}-gap-col-${M}`]:T},k,S,F),V=(0,n.default)(`${G}-item`,null!=(s=null==N?void 0:N.item)?s:b.item),K=Object.assign(Object.assign({},v.item),null==z?void 0:z.item),U=L.map((e,n)=>{let l=(null==e?void 0:e.key)||`${V}-${n}`;return t.createElement(f,{className:V,key:l,index:n,split:x,style:K},e)}),_=t.useMemo(()=>({latestIndex:L.reduce((e,t,n)=>null!=t?n:e,0)}),[L]);if(0===L.length)return null;let Q={};return I&&(Q.flexWrap="wrap"),!T&&P&&(Q.columnGap=M),!H&&A&&(Q.rowGap=R),D(t.createElement("div",Object.assign({ref:o,className:X,style:Object.assign(Object.assign(Object.assign({},Q),m),E)},q),t.createElement(p,{value:_},U)))});v.Compact=o.default,v.Addon=g,e.s(["default",0,v],38243)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0sx3mu2_l9g_y.js b/litellm/proxy/_experimental/out/_next/static/chunks/0sx3mu2_l9g_y.js new file mode 100644 index 00000000000..4e794015780 --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0sx3mu2_l9g_y.js @@ -0,0 +1,21 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,515831,955719,e=>{"use strict";e.i(247167);var t,n=e.i(271645),r=e.i(8211),a=e.i(174080),i=e.i(343794),l=e.i(931067),o=e.i(278409),s=e.i(233848),u=e.i(971151),c=e.i(868917),d=e.i(674813),p=e.i(211577),f=e.i(209428),m=e.i(703923),h=e.i(410160),g=e.i(31575),b=e.i(33968),v=e.i(244009),y=e.i(883110);let $=function(e,t){if(e&&t){var n=Array.isArray(t)?t:t.split(","),r=e.name||"",a=e.type||"",i=a.replace(/\/.*$/,"");return n.some(function(e){var t=e.trim();if(/^\*(\/\*)?$/.test(e))return!0;if("."===t.charAt(0)){var n=r.toLowerCase(),l=t.toLowerCase(),o=[l];return(".jpg"===l||".jpeg"===l)&&(o=[".jpg",".jpeg"]),o.some(function(e){return n.endsWith(e)})}return/\/\*$/.test(t)?i===t.replace(/\/.*$/,""):a===t||!!/^\w+$/.test(t)&&((0,y.default)(!1,"Upload takes an invalidate 'accept' type '".concat(t,"'.Skip for check.")),!0)})}return!0};function w(e){var t=e.responseText||e.response;if(!t)return t;try{return JSON.parse(t)}catch(e){return t}}function E(e){var t=new XMLHttpRequest;e.onProgress&&t.upload&&(t.upload.onprogress=function(t){t.total>0&&(t.percent=t.loaded/t.total*100),e.onProgress(t)});var n=new FormData;e.data&&Object.keys(e.data).forEach(function(t){var r=e.data[t];Array.isArray(r)?r.forEach(function(e){n.append("".concat(t,"[]"),e)}):n.append(t,r)}),e.file instanceof Blob?n.append(e.filename,e.file,e.file.name):n.append(e.filename,e.file),t.onerror=function(t){e.onError(t)},t.onload=function(){if(t.status<200||t.status>=300){var n;return e.onError(((n=Error("cannot ".concat(e.method," ").concat(e.action," ").concat(t.status,"'"))).status=t.status,n.method=e.method,n.url=e.action,n),w(t))}return e.onSuccess(w(t),t)},t.open(e.method,e.action,!0),e.withCredentials&&"withCredentials"in t&&(t.withCredentials=!0);var r=e.headers||{};return null!==r["X-Requested-With"]&&t.setRequestHeader("X-Requested-With","XMLHttpRequest"),Object.keys(r).forEach(function(e){null!==r[e]&&t.setRequestHeader(e,r[e])}),t.send(n),{abort:function(){t.abort()}}}var x=(t=(0,b.default)((0,g.default)().mark(function e(t,n){var a,i,l,o,s,u;return(0,g.default)().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:o=function(){return(o=(0,b.default)((0,g.default)().mark(function e(t){return(0,g.default)().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",new Promise(function(e){t.file(function(r){n(r)?(t.fullPath&&!r.webkitRelativePath&&(Object.defineProperties(r,{webkitRelativePath:{writable:!0}}),r.webkitRelativePath=t.fullPath.replace(/^\//,""),Object.defineProperties(r,{webkitRelativePath:{writable:!1}})),e(r)):e(null)})}));case 1:case"end":return e.stop()}},e)}))).apply(this,arguments)},l=function(){return(l=(0,b.default)((0,g.default)().mark(function e(t){var n,r,a,i,l;return(0,g.default)().wrap(function(e){for(;;)switch(e.prev=e.next){case 0:n=t.createReader(),r=[];case 2:return e.next=5,new Promise(function(e){n.readEntries(e,function(){return e([])})});case 5:if(i=(a=e.sent).length){e.next=9;break}return e.abrupt("break",12);case 9:for(l=0;l0||u.some(function(e){return"file"===e.kind}))&&(null==a||a()),!s){t.next=11;break}return t.next=7,x(Array.prototype.slice.call(u),function(t){return $(t,e.props.accept)});case 7:c=t.sent,e.uploadFiles(c),t.next=14;break;case 11:d=(0,r.default)(c).filter(function(e){return $(e,o)}),!1===l&&(d=c.slice(0,1)),e.uploadFiles(d);case 14:case"end":return t.stop()}},t)})),function(e,t){return n.apply(this,arguments)})),(0,p.default)((0,u.default)(e),"onFilePaste",(i=(0,b.default)((0,g.default)().mark(function t(n){var r;return(0,g.default)().wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(e.props.pastable){t.next=3;break}return t.abrupt("return");case 3:if("paste"!==n.type){t.next=6;break}return r=n.clipboardData,t.abrupt("return",e.onDataTransferFiles(r,function(){n.preventDefault()}));case 6:case"end":return t.stop()}},t)})),function(e){return i.apply(this,arguments)})),(0,p.default)((0,u.default)(e),"onFileDragOver",function(e){e.preventDefault()}),(0,p.default)((0,u.default)(e),"onFileDrop",(l=(0,b.default)((0,g.default)().mark(function t(n){var r;return(0,g.default)().wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(n.preventDefault(),"drop"!==n.type){t.next=4;break}return r=n.dataTransfer,t.abrupt("return",e.onDataTransferFiles(r));case 4:case"end":return t.stop()}},t)})),function(e){return l.apply(this,arguments)})),(0,p.default)((0,u.default)(e),"uploadFiles",function(t){var n=(0,r.default)(t);Promise.all(n.map(function(t){return t.uid=C(),e.processFile(t,n)})).then(function(t){var n=e.props.onBatchStart;null==n||n(t.map(function(e){return{file:e.origin,parsedFile:e.parsedFile}})),t.filter(function(e){return null!==e.parsedFile}).forEach(function(t){e.post(t)})})}),(0,p.default)((0,u.default)(e),"processFile",(s=(0,b.default)((0,g.default)().mark(function t(n,r){var a,i,l,o,s,u,c,d;return(0,g.default)().wrap(function(t){for(;;)switch(t.prev=t.next){case 0:if(a=e.props.beforeUpload,i=n,!a){t.next=14;break}return t.prev=3,t.next=6,a(n,r);case 6:i=t.sent,t.next=12;break;case 9:t.prev=9,t.t0=t.catch(3),i=!1;case 12:if(!1!==i){t.next=14;break}return t.abrupt("return",{origin:n,parsedFile:null,action:null,data:null});case 14:if("function"!=typeof(l=e.props.action)){t.next=21;break}return t.next=18,l(n);case 18:o=t.sent,t.next=22;break;case 21:o=l;case 22:if("function"!=typeof(s=e.props.data)){t.next=29;break}return t.next=26,s(n);case 26:u=t.sent,t.next=30;break;case 29:u=s;case 30:return(d=(c=("object"===(0,h.default)(i)||"string"==typeof i)&&i?i:n)instanceof File?c:new File([c],n.name,{type:n.type})).uid=n.uid,t.abrupt("return",{origin:n,data:u,parsedFile:d,action:o});case 35:case"end":return t.stop()}},t,null,[[3,9]])})),function(e,t){return s.apply(this,arguments)})),(0,p.default)((0,u.default)(e),"saveFileInput",function(t){e.fileInput=t}),e}return(0,s.default)(a,[{key:"componentDidMount",value:function(){this._isMounted=!0,this.props.pastable&&document.addEventListener("paste",this.onFilePaste)}},{key:"componentWillUnmount",value:function(){this._isMounted=!1,this.abort(),document.removeEventListener("paste",this.onFilePaste)}},{key:"componentDidUpdate",value:function(e){var t=this.props.pastable;t&&!e.pastable?document.addEventListener("paste",this.onFilePaste):!t&&e.pastable&&document.removeEventListener("paste",this.onFilePaste)}},{key:"post",value:function(e){var t=this,n=e.data,r=e.origin,a=e.action,i=e.parsedFile;if(this._isMounted){var l=this.props,o=l.onStart,s=l.customRequest,u=l.name,c=l.headers,d=l.withCredentials,p=l.method,f=r.uid,m=s||E;o(r),this.reqs[f]=m({action:a,filename:u,data:n,file:i,headers:c,withCredentials:d,method:p||"post",onProgress:function(e){var n=t.props.onProgress;null==n||n(e,i)},onSuccess:function(e,n){var r=t.props.onSuccess;null==r||r(e,i,n),delete t.reqs[f]},onError:function(e,n){var r=t.props.onError;null==r||r(e,n,i),delete t.reqs[f]}},{defaultRequest:E})}}},{key:"reset",value:function(){this.setState({uid:C()})}},{key:"abort",value:function(e){var t=this.reqs;if(e){var n=e.uid?e.uid:e;t[n]&&t[n].abort&&t[n].abort(),delete t[n]}else Object.keys(t).forEach(function(e){t[e]&&t[e].abort&&t[e].abort(),delete t[e]})}},{key:"render",value:function(){var e=this.props,t=e.component,r=e.prefixCls,a=e.className,o=e.classNames,s=e.disabled,u=e.id,c=e.name,d=e.style,h=e.styles,g=e.multiple,b=e.accept,y=e.capture,$=e.children,w=e.directory,E=e.folder,x=e.openFileDialogOnClick,k=e.onMouseEnter,O=e.onMouseLeave,C=e.hasControlInside,j=(0,m.default)(e,S),D=(0,i.default)((0,p.default)((0,p.default)((0,p.default)({},r,!0),"".concat(r,"-disabled"),s),a,a)),F=s?{}:{onClick:x?this.onClick:function(){},onKeyDown:x?this.onKeyDown:function(){},onMouseEnter:k,onMouseLeave:O,onDrop:this.onFileDrop,onDragOver:this.onFileDragOver,tabIndex:C?void 0:"0"};return n.default.createElement(t,(0,l.default)({},F,{className:D,role:C?void 0:"button",style:d}),n.default.createElement("input",(0,l.default)({},(0,v.default)(j,{aria:!0,data:!0}),{id:u,name:c,disabled:s,type:"file",ref:this.saveFileInput,onClick:function(e){return e.stopPropagation()},key:this.state.uid,style:(0,f.default)({display:"none"},(void 0===h?{}:h).input),className:(void 0===o?{}:o).input,accept:b},w||E?{directory:"directory",webkitdirectory:"webkitdirectory"}:{},{multiple:g,onChange:this.onChange},null!=y?{capture:y}:{})),$)}}]),a}(n.Component);function D(){}var F=function(e){(0,c.default)(r,e);var t=(0,d.default)(r);function r(){var e;(0,o.default)(this,r);for(var n=arguments.length,a=Array(n),i=0;i{let{fontSizeHeading3:t,fontHeight:n,lineWidth:r,pictureCardSize:a,calc:i}=e,l=(0,A.mergeToken)(e,{uploadThumbnailSize:i(t).mul(2).equal(),uploadProgressOffset:i(i(n).div(2)).add(r).equal(),uploadPicCardSize:a});return[(e=>{let{componentCls:t,colorTextDisabled:n}=e;return{[`${t}-wrapper`]:Object.assign(Object.assign({},(0,M.resetComponent)(e)),{[t]:{outline:0,"input[type='file']":{cursor:"pointer"}},[`${t}-select`]:{display:"inline-block"},[`${t}-hidden`]:{display:"none"},[`${t}-disabled`]:{color:n,cursor:"not-allowed"}})}})(l),(e=>{let{componentCls:t,iconCls:n}=e;return{[`${t}-wrapper`]:{[`${t}-drag`]:{position:"relative",width:"100%",height:"100%",textAlign:"center",background:e.colorFillAlter,border:`${(0,q.unit)(e.lineWidth)} dashed ${e.colorBorder}`,borderRadius:e.borderRadiusLG,cursor:"pointer",transition:`border-color ${e.motionDurationSlow}`,[t]:{padding:e.padding},[`${t}-btn`]:{display:"table",width:"100%",height:"100%",outline:"none",borderRadius:e.borderRadiusLG,"&:focus-visible":{outline:`${(0,q.unit)(e.lineWidthFocus)} solid ${e.colorPrimaryBorder}`}},[`${t}-drag-container`]:{display:"table-cell",verticalAlign:"middle"},[` + &:not(${t}-disabled):hover, + &-hover:not(${t}-disabled) + `]:{borderColor:e.colorPrimaryHover},[`p${t}-drag-icon`]:{marginBottom:e.margin,[n]:{color:e.colorPrimary,fontSize:e.uploadThumbnailSize}},[`p${t}-text`]:{margin:`0 0 ${(0,q.unit)(e.marginXXS)}`,color:e.colorTextHeading,fontSize:e.fontSizeLG},[`p${t}-hint`]:{color:e.colorTextDescription,fontSize:e.fontSize},[`&${t}-disabled`]:{[`p${t}-drag-icon ${n}, + p${t}-text, + p${t}-hint + `]:{color:e.colorTextDisabled}}}}}})(l),(e=>{let{componentCls:t,iconCls:n,uploadThumbnailSize:r,uploadProgressOffset:a,calc:i}=e,l=`${t}-list`,o=`${l}-item`;return{[`${t}-wrapper`]:{[` + ${l}${l}-picture, + ${l}${l}-picture-card, + ${l}${l}-picture-circle + `]:{[o]:{position:"relative",height:i(r).add(i(e.lineWidth).mul(2)).add(i(e.paddingXS).mul(2)).equal(),padding:e.paddingXS,border:`${(0,q.unit)(e.lineWidth)} ${e.lineType} ${e.colorBorder}`,borderRadius:e.borderRadiusLG,"&:hover":{background:"transparent"},[`${o}-thumbnail`]:Object.assign(Object.assign({},M.textEllipsis),{width:r,height:r,lineHeight:(0,q.unit)(i(r).add(e.paddingSM).equal()),textAlign:"center",flex:"none",[n]:{fontSize:e.fontSizeHeading2,color:e.colorPrimary},img:{display:"block",width:"100%",height:"100%",overflow:"hidden"}}),[`${o}-progress`]:{bottom:a,width:`calc(100% - ${(0,q.unit)(i(e.paddingSM).mul(2).equal())})`,marginTop:0,paddingInlineStart:i(r).add(e.paddingXS).equal()}},[`${o}-error`]:{borderColor:e.colorError,[`${o}-thumbnail ${n}`]:{[`svg path[fill='${X.blue[0]}']`]:{fill:e.colorErrorBg},[`svg path[fill='${X.blue.primary}']`]:{fill:e.colorError}}},[`${o}-uploading`]:{borderStyle:"dashed",[`${o}-name`]:{marginBottom:a}}},[`${l}${l}-picture-circle ${o}`]:{[`&, &::before, ${o}-thumbnail`]:{borderRadius:"50%"}}}}})(l),(e=>{let{componentCls:t,iconCls:n,fontSizeLG:r,colorTextLightSolid:a,calc:i}=e,l=`${t}-list`,o=`${l}-item`,s=e.uploadPicCardSize;return{[` + ${t}-wrapper${t}-picture-card-wrapper, + ${t}-wrapper${t}-picture-circle-wrapper + `]:Object.assign(Object.assign({},(0,M.clearFix)()),{display:"block",[`${t}${t}-select`]:{width:s,height:s,textAlign:"center",verticalAlign:"top",backgroundColor:e.colorFillAlter,border:`${(0,q.unit)(e.lineWidth)} dashed ${e.colorBorder}`,borderRadius:e.borderRadiusLG,cursor:"pointer",transition:`border-color ${e.motionDurationSlow}`,[`> ${t}`]:{display:"flex",alignItems:"center",justifyContent:"center",height:"100%",textAlign:"center"},[`&:not(${t}-disabled):hover`]:{borderColor:e.colorPrimary}},[`${l}${l}-picture-card, ${l}${l}-picture-circle`]:{display:"flex",flexWrap:"wrap","@supports not (gap: 1px)":{"& > *":{marginBlockEnd:e.marginXS,marginInlineEnd:e.marginXS}},"@supports (gap: 1px)":{gap:e.marginXS},[`${l}-item-container`]:{display:"inline-block",width:s,height:s,verticalAlign:"top"},"&::after":{display:"none"},"&::before":{display:"none"},[o]:{height:"100%",margin:0,"&::before":{position:"absolute",zIndex:1,width:`calc(100% - ${(0,q.unit)(i(e.paddingXS).mul(2).equal())})`,height:`calc(100% - ${(0,q.unit)(i(e.paddingXS).mul(2).equal())})`,backgroundColor:e.colorBgMask,opacity:0,transition:`all ${e.motionDurationSlow}`,content:'" "'}},[`${o}:hover`]:{[`&::before, ${o}-actions`]:{opacity:1}},[`${o}-actions`]:{position:"absolute",insetInlineStart:0,zIndex:10,width:"100%",whiteSpace:"nowrap",textAlign:"center",opacity:0,transition:`all ${e.motionDurationSlow}`,[` + ${n}-eye, + ${n}-download, + ${n}-delete + `]:{zIndex:10,width:r,margin:`0 ${(0,q.unit)(e.marginXXS)}`,fontSize:r,cursor:"pointer",transition:`all ${e.motionDurationSlow}`,color:a,"&:hover":{color:a},svg:{verticalAlign:"baseline"}}},[`${o}-thumbnail, ${o}-thumbnail img`]:{position:"static",display:"block",width:"100%",height:"100%",objectFit:"contain"},[`${o}-name`]:{display:"none",textAlign:"center"},[`${o}-file + ${o}-name`]:{position:"absolute",bottom:e.margin,display:"block",width:`calc(100% - ${(0,q.unit)(i(e.paddingXS).mul(2).equal())})`},[`${o}-uploading`]:{[`&${o}`]:{backgroundColor:e.colorFillAlter},[`&::before, ${n}-eye, ${n}-download, ${n}-delete`]:{display:"none"}},[`${o}-progress`]:{bottom:e.marginXL,width:`calc(100% - ${(0,q.unit)(i(e.paddingXS).mul(2).equal())})`,paddingInlineStart:0}}}),[`${t}-wrapper${t}-picture-circle-wrapper`]:{[`${t}${t}-select`]:{borderRadius:"50%"}}}})(l),(e=>{let{componentCls:t,iconCls:n,fontSize:r,lineHeight:a,calc:i}=e,l=`${t}-list-item`,o=`${l}-actions`,s=`${l}-action`;return{[`${t}-wrapper`]:{[`${t}-list`]:Object.assign(Object.assign({},(0,M.clearFix)()),{lineHeight:e.lineHeight,[l]:{position:"relative",height:i(e.lineHeight).mul(r).equal(),marginTop:e.marginXS,fontSize:r,display:"flex",alignItems:"center",transition:`background-color ${e.motionDurationSlow}`,borderRadius:e.borderRadiusSM,"&:hover":{backgroundColor:e.controlItemBgHover},[`${l}-name`]:Object.assign(Object.assign({},M.textEllipsis),{padding:`0 ${(0,q.unit)(e.paddingXS)}`,lineHeight:a,flex:"auto",transition:`all ${e.motionDurationSlow}`}),[o]:{whiteSpace:"nowrap",[s]:{opacity:0},[n]:{color:e.actionsColor,transition:`all ${e.motionDurationSlow}`},[` + ${s}:focus-visible, + &.picture ${s} + `]:{opacity:1}},[`${t}-icon ${n}`]:{color:e.colorIcon,fontSize:r},[`${l}-progress`]:{position:"absolute",bottom:e.calc(e.uploadProgressOffset).mul(-1).equal(),width:"100%",paddingInlineStart:i(r).add(e.paddingXS).equal(),fontSize:r,lineHeight:0,pointerEvents:"none","> div":{margin:0}}},[`${l}:hover ${s}`]:{opacity:1},[`${l}-error`]:{color:e.colorError,[`${l}-name, ${t}-icon ${n}`]:{color:e.colorError},[o]:{[`${n}, ${n}:hover`]:{color:e.colorError},[s]:{opacity:1}}},[`${t}-list-item-container`]:{transition:`opacity ${e.motionDurationSlow}, height ${e.motionDurationSlow}`,"&::before":{display:"table",width:0,height:0,content:'""'}}})}}})(l),(e=>{let{componentCls:t}=e,n=new T.Keyframes("uploadAnimateInlineIn",{from:{width:0,height:0,padding:0,opacity:0,margin:e.calc(e.marginXS).div(-2).equal()}}),r=new T.Keyframes("uploadAnimateInlineOut",{to:{width:0,height:0,padding:0,opacity:0,margin:e.calc(e.marginXS).div(-2).equal()}}),a=`${t}-animate-inline`;return[{[`${t}-wrapper`]:{[`${a}-appear, ${a}-enter, ${a}-leave`]:{animationDuration:e.motionDurationSlow,animationTimingFunction:e.motionEaseInOutCirc,animationFillMode:"forwards"},[`${a}-appear, ${a}-enter`]:{animationName:n},[`${a}-leave`]:{animationName:r}}},{[`${t}-wrapper`]:(0,H.initFadeMotion)(e)},n,r]})(l),(e=>{let{componentCls:t}=e;return{[`${t}-rtl`]:{direction:"rtl"}}})(l),(0,z.genCollapseMotion)(l)]},e=>({actionsColor:e.colorIcon,pictureCardSize:2.55*e.controlHeightLG})),B={icon:function(e,t){return{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M534 352V136H232v752h560V394H576a42 42 0 01-42-42z",fill:t}},{tag:"path",attrs:{d:"M854.6 288.6L639.4 73.4c-6-6-14.1-9.4-22.6-9.4H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V311.3c0-8.5-3.4-16.7-9.4-22.7zM602 137.8L790.2 326H602V137.8zM792 888H232V136h302v216a42 42 0 0042 42h216v494z",fill:e}}]}},name:"file",theme:"twotone"};var W=e.i(9583),V=n.forwardRef(function(e,t){return n.createElement(W.default,(0,l.default)({},e,{ref:t,icon:B}))}),G=e.i(739295);let K={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M779.3 196.6c-94.2-94.2-247.6-94.2-341.7 0l-261 260.8c-1.7 1.7-2.6 4-2.6 6.4s.9 4.7 2.6 6.4l36.9 36.9a9 9 0 0012.7 0l261-260.8c32.4-32.4 75.5-50.2 121.3-50.2s88.9 17.8 121.2 50.2c32.4 32.4 50.2 75.5 50.2 121.2 0 45.8-17.8 88.8-50.2 121.2l-266 265.9-43.1 43.1c-40.3 40.3-105.8 40.3-146.1 0-19.5-19.5-30.2-45.4-30.2-73s10.7-53.5 30.2-73l263.9-263.8c6.7-6.6 15.5-10.3 24.9-10.3h.1c9.4 0 18.1 3.7 24.7 10.3 6.7 6.7 10.3 15.5 10.3 24.9 0 9.3-3.7 18.1-10.3 24.7L372.4 653c-1.7 1.7-2.6 4-2.6 6.4s.9 4.7 2.6 6.4l36.9 36.9a9 9 0 0012.7 0l215.6-215.6c19.9-19.9 30.8-46.3 30.8-74.4s-11-54.6-30.8-74.4c-41.1-41.1-107.9-41-149 0L463 364 224.8 602.1A172.22 172.22 0 00174 724.8c0 46.3 18.1 89.8 50.8 122.5 33.9 33.8 78.3 50.7 122.7 50.7 44.4 0 88.8-16.9 122.6-50.7l309.2-309C824.8 492.7 850 432 850 367.5c.1-64.6-25.1-125.3-70.7-170.9z"}}]},name:"paper-clip",theme:"outlined"};var J=n.forwardRef(function(e,t){return n.createElement(W.default,(0,l.default)({},e,{ref:t,icon:K}))});e.s(["default",0,J],955719);let Q={icon:function(e,t){return{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M928 160H96c-17.7 0-32 14.3-32 32v640c0 17.7 14.3 32 32 32h832c17.7 0 32-14.3 32-32V192c0-17.7-14.3-32-32-32zm-40 632H136v-39.9l138.5-164.3 150.1 178L658.1 489 888 761.6V792zm0-129.8L664.2 396.8c-3.2-3.8-9-3.8-12.2 0L424.6 666.4l-144-170.7c-3.2-3.8-9-3.8-12.2 0L136 652.7V232h752v430.2z",fill:e}},{tag:"path",attrs:{d:"M424.6 765.8l-150.1-178L136 752.1V792h752v-30.4L658.1 489z",fill:t}},{tag:"path",attrs:{d:"M136 652.7l132.4-157c3.2-3.8 9-3.8 12.2 0l144 170.7L652 396.8c3.2-3.8 9-3.8 12.2 0L888 662.2V232H136v420.7zM304 280a88 88 0 110 176 88 88 0 010-176z",fill:t}},{tag:"path",attrs:{d:"M276 368a28 28 0 1056 0 28 28 0 10-56 0z",fill:t}},{tag:"path",attrs:{d:"M304 456a88 88 0 100-176 88 88 0 000 176zm0-116c15.5 0 28 12.5 28 28s-12.5 28-28 28-28-12.5-28-28 12.5-28 28-28z",fill:e}}]}},name:"picture",theme:"twotone"};var Y=n.forwardRef(function(e,t){return n.createElement(W.default,(0,l.default)({},e,{ref:t,icon:Q}))}),Z=e.i(361275),ee=e.i(629587),et=e.i(529681),en=e.i(149809),er=e.i(613541),ea=e.i(763731),ei=e.i(920228);function el(e){return Object.assign(Object.assign({},e),{lastModified:e.lastModified,lastModifiedDate:e.lastModifiedDate,name:e.name,size:e.size,type:e.type,uid:e.uid,percent:0,originFileObj:e})}function eo(e,t){let n=(0,r.default)(t),a=n.findIndex(({uid:t})=>t===e.uid);return -1===a?n.push(e):n[a]=e,n}function es(e,t){let n=void 0!==e.uid?"uid":"name";return t.filter(t=>t[n]===e[n])[0]}let eu=e=>0===e.indexOf("image/"),ec=e=>{if(e.type&&!e.thumbUrl)return eu(e.type);let t=e.thumbUrl||e.url||"",n=((e="")=>{let t=e.split("/"),n=t[t.length-1].split(/#|\?/)[0];return(/\.[^./\\]*$/.exec(n)||[""])[0]})(t);return!!(/^data:image\//.test(t)||/(webp|svg|png|gif|jpg|jpeg|jfif|bmp|dpg|ico|heic|heif)$/i.test(n))||!/^data:/.test(t)&&!n};function ed(e){return new Promise(t=>{if(!e.type||!eu(e.type))return void t("");let n=document.createElement("canvas");n.width=200,n.height=200,n.style.cssText="position: fixed; left: 0; top: 0; width: 200px; height: 200px; z-index: 9999; display: none;",document.body.appendChild(n);let r=n.getContext("2d"),a=new Image;if(a.onload=()=>{let{width:e,height:i}=a,l=200,o=200,s=0,u=0;e>i?u=-((o=200/e*i)-l)/2:s=-((l=200/i*e)-o)/2,r.drawImage(a,s,u,l,o);let c=n.toDataURL();document.body.removeChild(n),window.URL.revokeObjectURL(a.src),t(c)},a.crossOrigin="anonymous",e.type.startsWith("image/svg+xml")){let t=new FileReader;t.onload=()=>{t.result&&"string"==typeof t.result&&(a.src=t.result)},t.readAsDataURL(e)}else if(e.type.startsWith("image/gif")){let n=new FileReader;n.onload=()=>{n.result&&t(n.result)},n.readAsDataURL(e)}else a.src=window.URL.createObjectURL(e)})}var ep=e.i(597440),ef=e.i(184163),em=e.i(984125),eh=e.i(309821),eg=e.i(491816);let eb=n.forwardRef(({prefixCls:e,className:t,style:r,locale:a,listType:l,file:o,items:s,progress:u,iconRender:c,actionIconRender:d,itemRender:p,isImgUrl:f,showPreviewIcon:m,showRemoveIcon:h,showDownloadIcon:g,previewIcon:b,removeIcon:v,downloadIcon:y,extra:$,onPreview:w,onDownload:E,onClose:x},k)=>{var O,C;let{status:S}=o,[j,D]=n.useState(S);n.useEffect(()=>{"removed"!==S&&D(S)},[S]);let[F,R]=n.useState(!1);n.useEffect(()=>{let e=setTimeout(()=>{R(!0)},300);return()=>{clearTimeout(e)}},[]);let P=c(o),N=n.createElement("div",{className:`${e}-icon`},P);if("picture"===l||"picture-card"===l||"picture-circle"===l)if("uploading"!==j&&(o.thumbUrl||o.url)){let t=(null==f?void 0:f(o))?n.createElement("img",{src:o.thumbUrl||o.url,alt:o.name,className:`${e}-list-item-image`,crossOrigin:o.crossOrigin}):P,r=(0,i.default)(`${e}-list-item-thumbnail`,{[`${e}-list-item-file`]:f&&!f(o)});N=n.createElement("a",{className:r,onClick:e=>w(o,e),href:o.url||o.thumbUrl,target:"_blank",rel:"noopener noreferrer"},t)}else{let t=(0,i.default)(`${e}-list-item-thumbnail`,{[`${e}-list-item-file`]:"uploading"!==j});N=n.createElement("div",{className:t},P)}let L=(0,i.default)(`${e}-list-item`,`${e}-list-item-${j}`),M="string"==typeof o.linkProps?JSON.parse(o.linkProps):o.linkProps,z=("function"==typeof h?h(o):h)?d(("function"==typeof v?v(o):v)||n.createElement(ep.default,null),()=>x(o),e,a.removeFile,!0):null,U=("function"==typeof g?g(o):g)&&"done"===j?d(("function"==typeof y?y(o):y)||n.createElement(ef.default,null),()=>E(o),e,a.downloadFile):null,A="picture-card"!==l&&"picture-circle"!==l&&n.createElement("span",{key:"download-delete",className:(0,i.default)(`${e}-list-item-actions`,{picture:"picture"===l})},U,z),q="function"==typeof $?$(o):$,T=q&&n.createElement("span",{className:`${e}-list-item-extra`},q),H=(0,i.default)(`${e}-list-item-name`),X=o.url?n.createElement("a",Object.assign({key:"view",target:"_blank",rel:"noopener noreferrer",className:H,title:o.name},M,{href:o.url,onClick:e=>w(o,e)}),o.name,T):n.createElement("span",{key:"view",className:H,onClick:e=>w(o,e),title:o.name},o.name,T),_=("function"==typeof m?m(o):m)&&(o.url||o.thumbUrl)?n.createElement("a",{href:o.url||o.thumbUrl,target:"_blank",rel:"noopener noreferrer",onClick:e=>w(o,e),title:a.previewFile},"function"==typeof b?b(o):b||n.createElement(em.default,null)):null,B=("picture-card"===l||"picture-circle"===l)&&"uploading"!==j&&n.createElement("span",{className:`${e}-list-item-actions`},_,"done"===j&&U,z),{getPrefixCls:W}=n.useContext(I.ConfigContext),V=W(),G=n.createElement("div",{className:L},N,X,A,B,F&&n.createElement(Z.default,{motionName:`${V}-fade`,visible:"uploading"===j,motionDeadline:2e3},({className:t})=>{let r="percent"in o?n.createElement(eh.default,Object.assign({type:"line",percent:o.percent,"aria-label":o["aria-label"],"aria-labelledby":o["aria-labelledby"]},u)):null;return n.createElement("div",{className:(0,i.default)(`${e}-list-item-progress`,t)},r)})),K=o.response&&"string"==typeof o.response?o.response:(null==(O=o.error)?void 0:O.statusText)||(null==(C=o.error)?void 0:C.message)||a.uploadError,J="error"===j?n.createElement(eg.default,{title:K,getPopupContainer:e=>e.parentNode},G):G;return n.createElement("div",{className:(0,i.default)(`${e}-list-item-container`,t),style:r,ref:k},p?p(J,o,s,{download:E.bind(null,o),preview:w.bind(null,o),remove:x.bind(null,o)}):J)}),ev=n.forwardRef((e,t)=>{let{listType:a="text",previewFile:l=ed,onPreview:o,onDownload:s,onRemove:u,locale:c,iconRender:d,isImageUrl:p=ec,prefixCls:f,items:m=[],showPreviewIcon:h=!0,showRemoveIcon:g=!0,showDownloadIcon:b=!1,removeIcon:v,previewIcon:y,downloadIcon:$,extra:w,progress:E={size:[-1,2],showInfo:!1},appendAction:x,appendActionVisible:k=!0,itemRender:O,disabled:C}=e,[,S]=(0,en.useForceUpdate)(),[j,D]=n.useState(!1),F=["picture-card","picture-circle"].includes(a);n.useEffect(()=>{a.startsWith("picture")&&(m||[]).forEach(e=>{(e.originFileObj instanceof File||e.originFileObj instanceof Blob)&&void 0===e.thumbUrl&&(e.thumbUrl="",null==l||l(e.originFileObj).then(t=>{e.thumbUrl=t||"",S()}))})},[a,m,l]),n.useEffect(()=>{D(!0)},[]);let R=(e,t)=>{if(o)return null==t||t.preventDefault(),o(e)},P=e=>{"function"==typeof s?s(e):e.url&&window.open(e.url)},N=e=>{null==u||u(e)},L=e=>{if(d)return d(e,a);let t="uploading"===e.status;if(a.startsWith("picture")){let r="picture"===a?n.createElement(G.default,null):c.uploading,i=(null==p?void 0:p(e))?n.createElement(Y,null):n.createElement(V,null);return t?r:i}return t?n.createElement(G.default,null):n.createElement(J,null)},M=(e,t,r,a,i)=>{let l={type:"text",size:"small",title:a,onClick:r=>{var a,i;t(),n.isValidElement(e)&&(null==(i=(a=e.props).onClick)||i.call(a,r))},className:`${r}-list-item-action`,disabled:!!i&&C};return n.isValidElement(e)?n.createElement(ei.default,Object.assign({},l,{icon:(0,ea.cloneElement)(e,Object.assign(Object.assign({},e.props),{onClick:()=>{}}))})):n.createElement(ei.default,Object.assign({},l),n.createElement("span",null,e))};n.useImperativeHandle(t,()=>({handlePreview:R,handleDownload:P}));let{getPrefixCls:z}=n.useContext(I.ConfigContext),U=z("upload",f),A=z(),q=(0,i.default)(`${U}-list`,`${U}-list-${a}`),T=n.useMemo(()=>(0,et.default)((0,er.default)(A),["onAppearEnd","onEnterEnd","onLeaveEnd"]),[A]),H=Object.assign(Object.assign({},F?{}:T),{motionDeadline:2e3,motionName:`${U}-${F?"animate-inline":"animate"}`,keys:(0,r.default)(m.map(e=>({key:e.uid,file:e}))),motionAppear:j});return n.createElement("div",{className:q},n.createElement(ee.CSSMotionList,Object.assign({},H,{component:!1}),({key:e,file:t,className:r,style:i})=>n.createElement(eb,{key:e,locale:c,prefixCls:U,className:r,style:i,file:t,items:m,progress:E,listType:a,isImgUrl:p,showPreviewIcon:h,showRemoveIcon:g,showDownloadIcon:b,removeIcon:v,previewIcon:y,downloadIcon:$,extra:w,iconRender:L,actionIconRender:M,itemRender:O,onPreview:R,onDownload:P,onClose:N})),x&&n.createElement(Z.default,Object.assign({},H,{visible:k,forceRender:!0}),({className:e,style:t})=>(0,ea.cloneElement)(x,n=>({className:(0,i.default)(n.className,e),style:Object.assign(Object.assign(Object.assign({},t),{pointerEvents:e?"none":void 0}),n.style)}))))}),ey=`__LIST_IGNORE_${Date.now()}__`,e$=n.forwardRef((e,t)=>{let l=(0,I.useComponentConfig)("upload"),{fileList:o,defaultFileList:s,onRemove:u,showUploadList:c=!0,listType:d="text",onPreview:p,onDownload:f,onChange:m,onDrop:h,previewFile:g,disabled:b,locale:v,iconRender:y,isImageUrl:$,progress:w,prefixCls:E,className:x,type:k="select",children:O,style:C,itemRender:S,maxCount:j,data:D={},multiple:M=!1,hasControlInside:z=!0,action:U="",accept:A="",supportServerRender:q=!0,rootClassName:T}=e,H=n.useContext(P.default),X=null!=b?b:H,B=e.customRequest||l.customRequest,[W,V]=(0,R.default)(s||[],{value:o,postState:e=>null!=e?e:[]}),[G,K]=n.useState("drop"),J=n.useRef(null),Q=n.useRef(null);n.useMemo(()=>{let e=Date.now();(o||[]).forEach((t,n)=>{t.uid||Object.isFrozen(t)||(t.uid=`__AUTO__${e}_${n}__`)})},[o]);let Y=(e,t,n)=>{let i=(0,r.default)(t),l=!1;1===j?i=i.slice(-1):j&&(l=i.length>j,i=i.slice(0,j)),(0,a.flushSync)(()=>{V(i)});let o={file:e,fileList:i};n&&(o.event=n),(!l||"removed"===e.status||i.some(t=>t.uid===e.uid))&&(0,a.flushSync)(()=>{null==m||m(o)})},Z=e=>{let t=e.filter(e=>!e.file[ey]);if(!t.length)return;let n=t.map(e=>el(e.file)),a=(0,r.default)(W);n.forEach(e=>{a=eo(e,a)}),n.forEach((e,n)=>{let r=e;if(t[n].parsedFile)e.status="uploading";else{let t,{originFileObj:n}=e;try{t=new File([n],n.name,{type:n.type})}catch(e){(t=new Blob([n],{type:n.type})).name=n.name,t.lastModifiedDate=new Date,t.lastModified=new Date().getTime()}t.uid=e.uid,r=t}Y(r,a)})},ee=(e,t,n)=>{try{"string"==typeof e&&(e=JSON.parse(e))}catch(e){}if(!es(t,W))return;let r=el(t);r.status="done",r.percent=100,r.response=e,r.xhr=n;let a=eo(r,W);Y(r,a)},et=(e,t)=>{if(!es(t,W))return;let n=el(t);n.status="uploading",n.percent=e.percent;let r=eo(n,W);Y(n,r,e)},en=(e,t,n)=>{if(!es(n,W))return;let r=el(n);r.error=e,r.response=t,r.status="error";let a=eo(r,W);Y(r,a)},er=e=>{let t;Promise.resolve("function"==typeof u?u(e):u).then(n=>{var r;let a,i;if(!1===n)return;let l=(a=void 0!==e.uid?"uid":"name",(i=W.filter(t=>t[a]!==e[a])).length===W.length?null:i);l&&(t=Object.assign(Object.assign({},e),{status:"removed"}),null==W||W.forEach(e=>{let n=void 0!==t.uid?"uid":"name";e[n]!==t[n]||Object.isFrozen(e)||(e.status="removed")}),null==(r=J.current)||r.abort(t),Y(t,l))})},ea=e=>{K(e.type),"drop"===e.type&&(null==h||h(e))};n.useImperativeHandle(t,()=>({onBatchStart:Z,onSuccess:ee,onProgress:et,onError:en,fileList:W,upload:J.current,nativeElement:Q.current}));let{getPrefixCls:ei,direction:eu,upload:ec}=n.useContext(I.ConfigContext),ed=ei("upload",E),ep=Object.assign(Object.assign({onBatchStart:Z,onError:en,onProgress:et,onSuccess:ee},e),{customRequest:B,data:D,multiple:M,action:U,accept:A,supportServerRender:q,prefixCls:ed,disabled:X,beforeUpload:(t,n)=>{var r,a,i,l;return r=void 0,a=void 0,i=void 0,l=function*(){let{beforeUpload:r,transformFile:a}=e,i=t;if(r){let e=yield r(t,n);if(!1===e)return!1;if(delete t[ey],e===ey)return Object.defineProperty(t,ey,{value:!0,configurable:!0}),!1;"object"==typeof e&&e&&(i=e)}return a&&(i=yield a(i)),i},new(i||(i=Promise))(function(e,t){function n(e){try{s(l.next(e))}catch(e){t(e)}}function o(e){try{s(l.throw(e))}catch(e){t(e)}}function s(t){var r;t.done?e(t.value):((r=t.value)instanceof i?r:new i(function(e){e(r)})).then(n,o)}s((l=l.apply(r,a||[])).next())})},onChange:void 0,hasControlInside:z});delete ep.className,delete ep.style,(!O||X)&&delete ep.id;let ef=`${ed}-wrapper`,[em,eh,eg]=_(ed,ef),[eb]=(0,N.useLocale)("Upload",L.default.Upload),{showRemoveIcon:e$,showPreviewIcon:ew,showDownloadIcon:eE,removeIcon:ex,previewIcon:ek,downloadIcon:eO,extra:eC}="boolean"==typeof c?{}:c,eS=void 0===e$?!X:e$,ej=(e,t)=>c?n.createElement(ev,{prefixCls:ed,listType:d,items:W,previewFile:g,onPreview:p,onDownload:f,onRemove:er,showRemoveIcon:eS,showPreviewIcon:ew,showDownloadIcon:eE,removeIcon:ex,previewIcon:ek,downloadIcon:eO,iconRender:y,extra:eC,locale:Object.assign(Object.assign({},eb),v),isImageUrl:$,progress:w,appendAction:e,appendActionVisible:t,itemRender:S,disabled:X}):e,eD=(0,i.default)(ef,x,T,eh,eg,null==ec?void 0:ec.className,{[`${ed}-rtl`]:"rtl"===eu,[`${ed}-picture-card-wrapper`]:"picture-card"===d,[`${ed}-picture-circle-wrapper`]:"picture-circle"===d}),eF=Object.assign(Object.assign({},null==ec?void 0:ec.style),C);if("drag"===k){let e=(0,i.default)(eh,ed,`${ed}-drag`,{[`${ed}-drag-uploading`]:W.some(e=>"uploading"===e.status),[`${ed}-drag-hover`]:"dragover"===G,[`${ed}-disabled`]:X,[`${ed}-rtl`]:"rtl"===eu});return em(n.createElement("span",{className:eD,ref:Q},n.createElement("div",{className:e,style:eF,onDrop:ea,onDragOver:ea,onDragLeave:ea},n.createElement(F,Object.assign({},ep,{ref:J,className:`${ed}-btn`}),n.createElement("div",{className:`${ed}-drag-container`},O))),ej()))}let eR=(0,i.default)(ed,`${ed}-select`,{[`${ed}-disabled`]:X,[`${ed}-hidden`]:!O}),eI=n.createElement("div",{className:eR,style:eF},n.createElement(F,Object.assign({},ep,{ref:J})));return em("picture-card"===d||"picture-circle"===d?n.createElement("span",{className:eD,ref:Q},ej(eI,!!O)):n.createElement("span",{className:eD,ref:Q},eI,ej()))});var ew=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&0>t.indexOf(r)&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var a=0,r=Object.getOwnPropertySymbols(e);at.indexOf(r[a])&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]]);return n};let eE=n.forwardRef((e,t)=>{let{style:r,height:a,hasControlInside:i=!1,children:l}=e,o=ew(e,["style","height","hasControlInside","children"]),s=Object.assign(Object.assign({},r),{height:a});return n.createElement(e$,Object.assign({ref:t,hasControlInside:i},o,{style:s,type:"drag"}),l)});e$.Dragger=eE,e$.LIST_IGNORE=ey,e.s(["Upload",0,e$],515831)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0sxgv7gc5lm3g.js b/litellm/proxy/_experimental/out/_next/static/chunks/0sxgv7gc5lm3g.js new file mode 100644 index 00000000000..ea6a81031d9 --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0sxgv7gc5lm3g.js @@ -0,0 +1 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,916925,e=>{"use strict";var r,t=e.i(555987),a=((r={}).A2A_Agent="A2A Agent",r.AI21="Ai21",r.AI21_CHAT="Ai21 Chat",r.AIML="AI/ML API",r.AIOHTTP_OPENAI="Aiohttp Openai",r.Anthropic="Anthropic",r.ANTHROPIC_TEXT="Anthropic Text",r.AssemblyAI="AssemblyAI",r.AUTO_ROUTER="Auto Router",r.Bedrock="Amazon Bedrock",r.BedrockMantle="Amazon Bedrock Mantle",r.SageMaker="AWS SageMaker",r.Azure="Azure",r.Azure_AI_Studio="Azure AI Foundry (Studio)",r.AZURE_TEXT="Azure Text",r.BASETEN="Baseten",r.BYTEZ="Bytez",r.Cerebras="Cerebras",r.CLARIFAI="Clarifai",r.CLOUDFLARE="Cloudflare",r.CODESTRAL="Codestral",r.Cohere="Cohere",r.COHERE_CHAT="Cohere Chat",r.COMETAPI="Cometapi",r.COMPACTIFAI="Compactifai",r.Cursor="Cursor",r.Dashscope="Dashscope",r.Databricks="Databricks (Qwen API)",r.DATAROBOT="Datarobot",r.DeepInfra="DeepInfra",r.Deepgram="Deepgram",r.Deepseek="Deepseek",r.DOCKER_MODEL_RUNNER="Docker Model Runner",r.DOTPROMPT="Dotprompt",r.ElevenLabs="ElevenLabs",r.EMPOWER="Empower",r.FalAI="Fal AI",r.FEATHERLESS_AI="Featherless Ai",r.FireworksAI="Fireworks AI",r.FRIENDLIAI="Friendliai",r.GALADRIEL="Galadriel",r.GITHUB_COPILOT="Github Copilot",r.Google_AI_Studio="Google AI Studio",r.GradientAI="GradientAI",r.Groq="Groq",r.HEROKU="Heroku",r.Hosted_Vllm="vllm",r.HUGGINGFACE="Huggingface",r.HYPERBOLIC="Hyperbolic",r.Infinity="Infinity",r.JinaAI="Jina AI",r.LAMBDA_AI="Lambda Ai",r.LEMONADE="Lemonade",r.LLAMAFILE="Llamafile",r.LM_STUDIO="Lm Studio",r.LLAMA="Meta Llama",r.MARITALK="Maritalk",r.MiniMax="MiniMax",r.MistralAI="Mistral AI",r.MOONSHOT="Moonshot",r.MORPH="Morph",r.NEBIUS="Nebius",r.NLP_CLOUD="Nlp Cloud",r.NOVITA="Novita",r.NSCALE="Nscale",r.NVIDIA_NIM="Nvidia Nim",r.Ollama="Ollama",r.OLLAMA_CHAT="Ollama Chat",r.OOBABOOGA="Oobabooga",r.OpenAI="OpenAI",r.OPENAI_LIKE="Openai Like",r.OpenAI_Compatible="OpenAI-Compatible Chat Completions (Together AI, vLLM, etc.)",r.OpenAI_Text="OpenAI Text Completion",r.OpenAI_Text_Compatible="OpenAI-Compatible Completions (legacy /v1/completions)",r.Openrouter="Openrouter",r.Oracle="Oracle Cloud Infrastructure (OCI)",r.OVHCLOUD="Ovhcloud",r.Perplexity="Perplexity",r.PETALS="Petals",r.PG_VECTOR="Pg Vector",r.PREDIBASE="Predibase",r.RECRAFT="Recraft",r.REPLICATE="Replicate",r.RunwayML="RunwayML",r.SAGEMAKER_LEGACY="Sagemaker",r.Sambanova="Sambanova",r.SAP="SAP Generative AI Hub",r.Snowflake="Snowflake",r.Soniox="Soniox",r.TEXT_COMPLETION_CODESTRAL="Text-Completion-Codestral",r.TogetherAI="TogetherAI",r.TOPAZ="Topaz",r.Triton="Triton",r.V0="V0",r.VERCEL_AI_GATEWAY="Vercel Ai Gateway",r.Vertex_AI="Vertex AI (Anthropic, Gemini, etc.)",r.VERTEX_AI_BETA="Vertex Ai Beta",r.VLLM="Vllm",r.VolcEngine="VolcEngine",r.Voyage="Voyage AI",r.WANDB="Wandb",r.WATSONX="Watsonx",r.WATSONX_TEXT="Watsonx Text",r.xAI="xAI",r.XINFERENCE="Xinference",r.ZAI="Z.AI (Zhipu AI)",r);let o={A2A_Agent:"a2a_agent",AI21:"ai21",AI21_CHAT:"ai21_chat",AIML:"aiml",AIOHTTP_OPENAI:"aiohttp_openai",Anthropic:"anthropic",ANTHROPIC_TEXT:"anthropic_text",AssemblyAI:"assemblyai",AUTO_ROUTER:"auto_router",Azure:"azure",Azure_AI_Studio:"azure_ai",AZURE_TEXT:"azure_text",BASETEN:"baseten",Bedrock:"bedrock",BedrockMantle:"bedrock_mantle",BYTEZ:"bytez",Cerebras:"cerebras",CLARIFAI:"clarifai",CLOUDFLARE:"cloudflare",CODESTRAL:"codestral",Cohere:"cohere",COHERE_CHAT:"cohere_chat",COMETAPI:"cometapi",COMPACTIFAI:"compactifai",Cursor:"cursor",Dashscope:"dashscope",Databricks:"databricks",DATAROBOT:"datarobot",DeepInfra:"deepinfra",Deepgram:"deepgram",Deepseek:"deepseek",DOCKER_MODEL_RUNNER:"docker_model_runner",DOTPROMPT:"dotprompt",ElevenLabs:"elevenlabs",EMPOWER:"empower",FalAI:"fal_ai",FEATHERLESS_AI:"featherless_ai",FireworksAI:"fireworks_ai",FRIENDLIAI:"friendliai",GALADRIEL:"galadriel",GITHUB_COPILOT:"github_copilot",Google_AI_Studio:"gemini",GradientAI:"gradient_ai",Groq:"groq",HEROKU:"heroku",Hosted_Vllm:"hosted_vllm",HUGGINGFACE:"huggingface",HYPERBOLIC:"hyperbolic",Infinity:"infinity",JinaAI:"jina_ai",LAMBDA_AI:"lambda_ai",LEMONADE:"lemonade",LLAMAFILE:"llamafile",LLAMA:"meta_llama",LM_STUDIO:"lm_studio",MARITALK:"maritalk",MiniMax:"minimax",MistralAI:"mistral",MOONSHOT:"moonshot",MORPH:"morph",NEBIUS:"nebius",NLP_CLOUD:"nlp_cloud",NOVITA:"novita",NSCALE:"nscale",NVIDIA_NIM:"nvidia_nim",Ollama:"ollama",OLLAMA_CHAT:"ollama_chat",OOBABOOGA:"oobabooga",OpenAI:"openai",OPENAI_LIKE:"openai_like",OpenAI_Compatible:"openai",OpenAI_Text:"text-completion-openai",OpenAI_Text_Compatible:"text-completion-openai",Openrouter:"openrouter",Oracle:"oci",OVHCLOUD:"ovhcloud",Perplexity:"perplexity",PETALS:"petals",PG_VECTOR:"pg_vector",PREDIBASE:"predibase",RECRAFT:"recraft",REPLICATE:"replicate",RunwayML:"runwayml",SAGEMAKER_LEGACY:"sagemaker",SageMaker:"sagemaker_chat",Sambanova:"sambanova",SAP:"sap",Snowflake:"snowflake",Soniox:"soniox",TEXT_COMPLETION_CODESTRAL:"text-completion-codestral",TogetherAI:"together_ai",TOPAZ:"topaz",Triton:"triton",V0:"v0",VERCEL_AI_GATEWAY:"vercel_ai_gateway",Vertex_AI:"vertex_ai",VERTEX_AI_BETA:"vertex_ai_beta",VLLM:"vllm",VolcEngine:"volcengine",Voyage:"voyage",WANDB:"wandb",WATSONX:"watsonx",WATSONX_TEXT:"watsonx_text",xAI:"xai",XINFERENCE:"xinference",ZAI:"zai"},l=new Set(["bedrock_mantle"]),s="/ui/assets/logos/",i={"A2A Agent":`${s}a2a_agent.png`,Ai21:`${s}ai21.svg`,"Ai21 Chat":`${s}ai21.svg`,"AI/ML API":`${s}aiml_api.svg`,"Aiohttp Openai":`${s}openai_small.svg`,Anthropic:`${s}anthropic.svg`,"Anthropic Text":`${s}anthropic.svg`,AssemblyAI:`${s}assemblyai_small.png`,Azure:`${s}microsoft_azure.svg`,"Azure AI Foundry (Studio)":`${s}microsoft_azure.svg`,"Azure Text":`${s}microsoft_azure.svg`,Baseten:`${s}baseten.svg`,"Amazon Bedrock":`${s}bedrock.svg`,"Amazon Bedrock Mantle":`${s}bedrock.svg`,"AWS SageMaker":`${s}bedrock.svg`,Cerebras:`${s}cerebras.svg`,Cloudflare:`${s}cloudflare.svg`,Codestral:`${s}mistral.svg`,Cohere:`${s}cohere.svg`,"Cohere Chat":`${s}cohere.svg`,Cometapi:`${s}cometapi.svg`,Cursor:`${s}cursor.svg`,"Databricks (Qwen API)":`${s}databricks.svg`,Dashscope:`${s}dashscope.svg`,Deepseek:`${s}deepseek.svg`,Deepgram:`${s}deepgram.png`,DeepInfra:`${s}deepinfra.png`,ElevenLabs:`${s}elevenlabs.png`,"Fal AI":`${s}fal_ai.jpg`,"Featherless Ai":`${s}featherless.svg`,"Fireworks AI":`${s}fireworks.svg`,Friendliai:`${s}friendli.svg`,"Github Copilot":`${s}github_copilot.svg`,"Google AI Studio":`${s}google.svg`,GradientAI:`${s}gradientai.svg`,Groq:`${s}groq.svg`,vllm:`${s}vllm.png`,Huggingface:`${s}huggingface.svg`,Hyperbolic:`${s}hyperbolic.svg`,Infinity:`${s}infinity.png`,"Jina AI":`${s}jina.png`,"Lambda Ai":`${s}lambda.svg`,"Lm Studio":`${s}lmstudio.svg`,"Meta Llama":`${s}meta_llama.svg`,MiniMax:`${s}minimax.svg`,"Mistral AI":`${s}mistral.svg`,Moonshot:`${s}moonshot.svg`,Morph:`${s}morph.svg`,Nebius:`${s}nebius.svg`,Novita:`${s}novita.svg`,"Nvidia Nim":`${s}nvidia_nim.svg`,Ollama:`${s}ollama.svg`,"Ollama Chat":`${s}ollama.svg`,Oobabooga:`${s}openai_small.svg`,OpenAI:`${s}openai_small.svg`,"Openai Like":`${s}openai_small.svg`,"OpenAI Text Completion":`${s}openai_small.svg`,"OpenAI-Compatible Completions (legacy /v1/completions)":`${s}openai_small.svg`,"OpenAI-Compatible Chat Completions (Together AI, vLLM, etc.)":`${s}openai_small.svg`,Openrouter:`${s}openrouter.svg`,"Oracle Cloud Infrastructure (OCI)":`${s}oracle.svg`,Perplexity:`${s}perplexity-ai.svg`,Recraft:`${s}recraft.svg`,Replicate:`${s}replicate.svg`,RunwayML:`${s}runwayml.png`,Sagemaker:`${s}bedrock.svg`,Sambanova:`${s}sambanova.svg`,"SAP Generative AI Hub":`${s}sap.png`,Snowflake:`${s}snowflake.svg`,Soniox:`${s}soniox.svg`,"Text-Completion-Codestral":`${s}mistral.svg`,TogetherAI:`${s}togetherai.svg`,Topaz:`${s}topaz.svg`,Triton:`${s}nvidia_triton.png`,V0:`${s}v0.svg`,"Vercel Ai Gateway":`${s}vercel.svg`,"Vertex AI (Anthropic, Gemini, etc.)":`${s}google.svg`,"Vertex Ai Beta":`${s}google.svg`,Vllm:`${s}vllm.png`,VolcEngine:`${s}volcengine.png`,"Voyage AI":`${s}voyage.webp`,Watsonx:`${s}watsonx.svg`,"Watsonx Text":`${s}watsonx.svg`,xAI:`${s}xai.svg`,Xinference:`${s}xinference.svg`};e.s(["Providers",()=>a,"getPlaceholder",0,e=>{if("AI/ML API"===e)return"aiml/flux-pro/v1.1";if("Vertex AI (Anthropic, Gemini, etc.)"===e)return"gemini-pro";if("Anthropic"==e)return"claude-3-opus";if("Amazon Bedrock"==e)return"claude-3-opus";if("AWS SageMaker"==e)return"sagemaker/jumpstart-dft-meta-textgeneration-llama-2-7b";else if("Google AI Studio"==e)return"gemini-pro";else if("Azure AI Foundry (Studio)"==e)return"azure_ai/command-r-plus";else if("Azure"==e)return"my-deployment";else if("Oracle Cloud Infrastructure (OCI)"==e)return"oci/xai.grok-4";else if("Snowflake"==e)return"snowflake/mistral-7b";else if("Voyage AI"==e)return"voyage/";else if("Jina AI"==e)return"jina_ai/";else if("VolcEngine"==e)return"volcengine/";else if("DeepInfra"==e)return"deepinfra/";else if("Fal AI"==e)return"fal_ai/fal-ai/flux-pro/v1.1-ultra";else if("RunwayML"==e)return"runwayml/gen4_turbo";else if("Watsonx"===e)return"watsonx/ibm/granite-3-3-8b-instruct";else if("Cursor"===e)return"cursor/claude-4-sonnet";else if("Z.AI (Zhipu AI)"===e)return"zai/glm-4.5";else return"gpt-3.5-turbo"},"getProviderLogoAndName",0,e=>{if(!e)return{logo:"",displayName:"-"};if("gemini"===e.toLowerCase()){let e="Google AI Studio";return{logo:(0,t.resolveLogoSrc)(i[e])??"",displayName:e}}let r=Object.keys(o).find(r=>o[r].toLowerCase()===e.toLowerCase())??Object.keys(o).find(r=>r.toLowerCase()===e.toLowerCase());if(!r)return{logo:"",displayName:e};let l=a[r];return{logo:(0,t.resolveLogoSrc)(i[l])??"",displayName:l}},"getProviderModels",0,(e,r)=>{console.log(`Provider key: ${e}`);let t=o[e];console.log(`Provider mapped to: ${t}`);let a=[];return e&&"object"==typeof r&&(Object.entries(r).forEach(([e,r])=>{if(null!==r&&"object"==typeof r&&"litellm_provider"in r){let o=r.litellm_provider,s="string"==typeof o&&(o.startsWith(`${t}_`)||o.startsWith(`${t}-`));(o===t||s&&!l.has(o))&&a.push(e)}}),"Cohere"==e&&(console.log("Adding cohere chat models"),Object.entries(r).forEach(([e,r])=>{null!==r&&"object"==typeof r&&"litellm_provider"in r&&"cohere_chat"===r.litellm_provider&&a.push(e)})),"AWS SageMaker"==e&&(console.log("Adding sagemaker chat models"),Object.entries(r).forEach(([e,r])=>{null!==r&&"object"==typeof r&&"litellm_provider"in r&&"sagemaker_chat"===r.litellm_provider&&a.push(e)}))),a},"providerLogoMap",0,i,"provider_map",0,o])},362024,e=>{"use strict";var r=e.i(988122);e.s(["Collapse",()=>r.default])},240647,e=>{"use strict";var r=e.i(286612);e.s(["RightOutlined",()=>r.default])},149121,e=>{"use strict";var r=e.i(843476),t=e.i(271645),a=e.i(152990),o=e.i(682830),l=e.i(269200),s=e.i(427612),i=e.i(64848),n=e.i(942232),d=e.i(496020),c=e.i(977572);e.s(["DataTable",0,function({data:e=[],columns:u,onRowClick:m,renderSubComponent:g,renderChildRows:p,getRowCanExpand:f,isLoading:b=!1,loadingMessage:A="🚅 Loading logs...",noDataMessage:h="No logs found",enableSorting:v=!1}){let x=!!(g||p)&&!!f,[C,I]=(0,t.useState)([]),y=(0,a.useReactTable)({data:e,columns:u,...v&&{state:{sorting:C},onSortingChange:I,enableSortingRemoval:!1},...x&&{getRowCanExpand:f},getRowId:(e,r)=>e?.request_id??String(r),getCoreRowModel:(0,o.getCoreRowModel)(),...v&&{getSortedRowModel:(0,o.getSortedRowModel)()},...x&&{getExpandedRowModel:(0,o.getExpandedRowModel)()}});return(0,r.jsx)("div",{className:"rounded-lg custom-border overflow-x-auto w-full max-w-full box-border",children:(0,r.jsxs)(l.Table,{className:"[&_td]:py-0.5 [&_th]:py-1 table-fixed w-full box-border",style:{minWidth:"400px"},children:[(0,r.jsx)(s.TableHead,{children:y.getHeaderGroups().map(e=>(0,r.jsx)(d.TableRow,{children:e.headers.map(e=>{let t=v&&e.column.getCanSort(),o=e.column.getIsSorted();return(0,r.jsx)(i.TableHeaderCell,{className:`py-1 h-8 ${t?"cursor-pointer select-none hover:bg-gray-50":""}`,onClick:t?e.column.getToggleSortingHandler():void 0,children:e.isPlaceholder?null:(0,r.jsxs)("div",{className:"flex items-center gap-1",children:[(0,a.flexRender)(e.column.columnDef.header,e.getContext()),t&&(0,r.jsx)("span",{className:"text-gray-400",children:"asc"===o?"↑":"desc"===o?"↓":"⇅"})]})},e.id)})},e.id))}),(0,r.jsx)(n.TableBody,{children:b?(0,r.jsx)(d.TableRow,{children:(0,r.jsx)(c.TableCell,{colSpan:u.length,className:"h-8 text-center",children:(0,r.jsx)("div",{className:"text-center text-gray-500",children:(0,r.jsx)("p",{children:A})})})}):y.getRowModel().rows.length>0?y.getRowModel().rows.map(e=>(0,r.jsxs)(t.Fragment,{children:[(0,r.jsx)(d.TableRow,{className:`h-8 ${m?"cursor-pointer hover:bg-gray-50":""}`,onClick:()=>m?.(e.original),children:e.getVisibleCells().map(e=>(0,r.jsx)(c.TableCell,{className:"py-0.5 max-h-8 overflow-hidden text-ellipsis whitespace-nowrap",children:(0,a.flexRender)(e.column.columnDef.cell,e.getContext())},e.id))}),x&&e.getIsExpanded()&&p&&p({row:e}),x&&e.getIsExpanded()&&g&&!p&&(0,r.jsx)(d.TableRow,{children:(0,r.jsx)(c.TableCell,{colSpan:e.getVisibleCells().length,className:"p-0",children:(0,r.jsx)("div",{className:"w-full max-w-full overflow-hidden box-border",children:g({row:e})})})})]},e.id)):(0,r.jsx)(d.TableRow,{children:(0,r.jsx)(c.TableCell,{colSpan:u.length,className:"h-8 text-center",children:(0,r.jsx)("div",{className:"text-center text-gray-500",children:(0,r.jsx)("p",{children:h})})})})})]})})}])},738014,e=>{"use strict";var r=e.i(135214),t=e.i(602869),a=e.i(266027);let o=(0,e.i(243652).createQueryKeys)("users");e.s(["useCurrentUser",0,()=>{let{accessToken:e,userId:l}=(0,r.default)();return(0,a.useQuery)({queryKey:o.detail(l),queryFn:async()=>await (0,t.userGetInfoV2)(e),enabled:!!(e&&l)})}])},980187,e=>{"use strict";e.s(["createTeamAliasMap",0,e=>e?e.reduce((e,r)=>(e[r.team_id]=r.team_alias,e),{}):{},"resolveTeamAliasFromTeamID",0,(e,r)=>{let t=r.find(r=>r.team_id===e);return t?t.team_alias:null}])},888288,e=>{"use strict";var r=e.i(271645);e.s(["default",0,(e,t)=>{let a=void 0!==t,[o,l]=(0,r.useState)(e);return[a?t:o,e=>{a||l(e)}]}])},37091,e=>{"use strict";var r=e.i(290571),t=e.i(95779),a=e.i(444755),o=e.i(673706),l=e.i(271645);let s=l.default.forwardRef((e,s)=>{let{color:i,children:n,className:d}=e,c=(0,r.__rest)(e,["color","children","className"]);return l.default.createElement("p",Object.assign({ref:s,className:(0,a.tremorTwMerge)(i?(0,o.getColorClassNames)(i,t.colorPalette.lightText).textColor:"text-tremor-content-emphasis dark:text-dark-tremor-content-emphasis",d)},c),n)});s.displayName="Subtitle",e.s(["Subtitle",0,s],37091)},497650,e=>{"use strict";var r=e.i(309821);e.s(["Progress",()=>r.default])},160818,e=>{"use strict";e.i(247167);var r=e.i(931067),t=e.i(271645);let a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M854.4 800.9c.2-.3.5-.6.7-.9C920.6 722.1 960 621.7 960 512s-39.4-210.1-104.8-288c-.2-.3-.5-.5-.7-.8-1.1-1.3-2.1-2.5-3.2-3.7-.4-.5-.8-.9-1.2-1.4l-4.1-4.7-.1-.1c-1.5-1.7-3.1-3.4-4.6-5.1l-.1-.1c-3.2-3.4-6.4-6.8-9.7-10.1l-.1-.1-4.8-4.8-.3-.3c-1.5-1.5-3-2.9-4.5-4.3-.5-.5-1-1-1.6-1.5-1-1-2-1.9-3-2.8-.3-.3-.7-.6-1-1C736.4 109.2 629.5 64 512 64s-224.4 45.2-304.3 119.2c-.3.3-.7.6-1 1-1 .9-2 1.9-3 2.9-.5.5-1 1-1.6 1.5-1.5 1.4-3 2.9-4.5 4.3l-.3.3-4.8 4.8-.1.1c-3.3 3.3-6.5 6.7-9.7 10.1l-.1.1c-1.6 1.7-3.1 3.4-4.6 5.1l-.1.1c-1.4 1.5-2.8 3.1-4.1 4.7-.4.5-.8.9-1.2 1.4-1.1 1.2-2.1 2.5-3.2 3.7-.2.3-.5.5-.7.8C103.4 301.9 64 402.3 64 512s39.4 210.1 104.8 288c.2.3.5.6.7.9l3.1 3.7c.4.5.8.9 1.2 1.4l4.1 4.7c0 .1.1.1.1.2 1.5 1.7 3 3.4 4.6 5l.1.1c3.2 3.4 6.4 6.8 9.6 10.1l.1.1c1.6 1.6 3.1 3.2 4.7 4.7l.3.3c3.3 3.3 6.7 6.5 10.1 9.6 80.1 74 187 119.2 304.5 119.2s224.4-45.2 304.3-119.2a300 300 0 0010-9.6l.3-.3c1.6-1.6 3.2-3.1 4.7-4.7l.1-.1c3.3-3.3 6.5-6.7 9.6-10.1l.1-.1c1.5-1.7 3.1-3.3 4.6-5 0-.1.1-.1.1-.2 1.4-1.5 2.8-3.1 4.1-4.7.4-.5.8-.9 1.2-1.4a99 99 0 003.3-3.7zm4.1-142.6c-13.8 32.6-32 62.8-54.2 90.2a444.07 444.07 0 00-81.5-55.9c11.6-46.9 18.8-98.4 20.7-152.6H887c-3 40.9-12.6 80.6-28.5 118.3zM887 484H743.5c-1.9-54.2-9.1-105.7-20.7-152.6 29.3-15.6 56.6-34.4 81.5-55.9A373.86 373.86 0 01887 484zM658.3 165.5c39.7 16.8 75.8 40 107.6 69.2a394.72 394.72 0 01-59.4 41.8c-15.7-45-35.8-84.1-59.2-115.4 3.7 1.4 7.4 2.9 11 4.4zm-90.6 700.6c-9.2 7.2-18.4 12.7-27.7 16.4V697a389.1 389.1 0 01115.7 26.2c-8.3 24.6-17.9 47.3-29 67.8-17.4 32.4-37.8 58.3-59 75.1zm59-633.1c11 20.6 20.7 43.3 29 67.8A389.1 389.1 0 01540 327V141.6c9.2 3.7 18.5 9.1 27.7 16.4 21.2 16.7 41.6 42.6 59 75zM540 640.9V540h147.5c-1.6 44.2-7.1 87.1-16.3 127.8l-.3 1.2A445.02 445.02 0 00540 640.9zm0-156.9V383.1c45.8-2.8 89.8-12.5 130.9-28.1l.3 1.2c9.2 40.7 14.7 83.5 16.3 127.8H540zm-56 56v100.9c-45.8 2.8-89.8 12.5-130.9 28.1l-.3-1.2c-9.2-40.7-14.7-83.5-16.3-127.8H484zm-147.5-56c1.6-44.2 7.1-87.1 16.3-127.8l.3-1.2c41.1 15.6 85 25.3 130.9 28.1V484H336.5zM484 697v185.4c-9.2-3.7-18.5-9.1-27.7-16.4-21.2-16.7-41.7-42.7-59.1-75.1-11-20.6-20.7-43.3-29-67.8 37.2-14.6 75.9-23.3 115.8-26.1zm0-370a389.1 389.1 0 01-115.7-26.2c8.3-24.6 17.9-47.3 29-67.8 17.4-32.4 37.8-58.4 59.1-75.1 9.2-7.2 18.4-12.7 27.7-16.4V327zM365.7 165.5c3.7-1.5 7.3-3 11-4.4-23.4 31.3-43.5 70.4-59.2 115.4-21-12-40.9-26-59.4-41.8 31.8-29.2 67.9-52.4 107.6-69.2zM165.5 365.7c13.8-32.6 32-62.8 54.2-90.2 24.9 21.5 52.2 40.3 81.5 55.9-11.6 46.9-18.8 98.4-20.7 152.6H137c3-40.9 12.6-80.6 28.5-118.3zM137 540h143.5c1.9 54.2 9.1 105.7 20.7 152.6a444.07 444.07 0 00-81.5 55.9A373.86 373.86 0 01137 540zm228.7 318.5c-39.7-16.8-75.8-40-107.6-69.2 18.5-15.8 38.4-29.7 59.4-41.8 15.7 45 35.8 84.1 59.2 115.4-3.7-1.4-7.4-2.9-11-4.4zm292.6 0c-3.7 1.5-7.3 3-11 4.4 23.4-31.3 43.5-70.4 59.2-115.4 21 12 40.9 26 59.4 41.8a373.81 373.81 0 01-107.6 69.2z"}}]},name:"global",theme:"outlined"};var o=e.i(9583),l=t.forwardRef(function(e,l){return t.createElement(o.default,(0,r.default)({},e,{ref:l,icon:a}))});e.s(["GlobalOutlined",0,l],160818)},793130,e=>{"use strict";var r=e.i(290571),t=e.i(783222),a=e.i(433336),o=e.i(271645),l=e.i(394487),s=e.i(503269),i=e.i(214520),n=e.i(746725),d=e.i(914189),c=e.i(144279),u=e.i(294316),m=e.i(601893),g=e.i(140721),p=e.i(942803),f=e.i(233538),b=e.i(694421),A=e.i(700020),h=e.i(35889),v=e.i(998348),x=e.i(722678);let C=(0,o.createContext)(null);C.displayName="GroupContext";let I=o.Fragment,y=Object.assign((0,A.forwardRefWithAs)(function(e,r){var I;let y=(0,o.useId)(),T=(0,p.useProvidedId)(),E=(0,m.useDisabled)(),{id:O=T||`headlessui-switch-${y}`,disabled:_=E||!1,checked:M,defaultChecked:k,onChange:w,name:N,value:L,form:S,autoFocus:D=!1,...R}=e,$=(0,o.useContext)(C),[j,P]=(0,o.useState)(null),V=(0,o.useRef)(null),H=(0,u.useSyncRefs)(V,r,null===$?null:$.setSwitch,P),Y=(0,i.useDefaultValue)(k),[z,B]=(0,s.useControllable)(M,w,null!=Y&&Y),F=(0,n.useDisposables)(),[G,U]=(0,o.useState)(!1),W=(0,d.useEvent)(()=>{U(!0),null==B||B(!z),F.nextFrame(()=>{U(!1)})}),K=(0,d.useEvent)(e=>{if((0,f.isDisabledReactIssue7711)(e.currentTarget))return e.preventDefault();e.preventDefault(),W()}),X=(0,d.useEvent)(e=>{e.key===v.Keys.Space?(e.preventDefault(),W()):e.key===v.Keys.Enter&&(0,b.attemptSubmit)(e.currentTarget)}),q=(0,d.useEvent)(e=>e.preventDefault()),Z=(0,x.useLabelledBy)(),Q=(0,h.useDescribedBy)(),{isFocusVisible:J,focusProps:ee}=(0,t.useFocusRing)({autoFocus:D}),{isHovered:er,hoverProps:et}=(0,a.useHover)({isDisabled:_}),{pressed:ea,pressProps:eo}=(0,l.useActivePress)({disabled:_}),el=(0,o.useMemo)(()=>({checked:z,disabled:_,hover:er,focus:J,active:ea,autofocus:D,changing:G}),[z,er,J,ea,_,G,D]),es=(0,A.mergeProps)({id:O,ref:H,role:"switch",type:(0,c.useResolveButtonType)(e,j),tabIndex:-1===e.tabIndex?0:null!=(I=e.tabIndex)?I:0,"aria-checked":z,"aria-labelledby":Z,"aria-describedby":Q,disabled:_||void 0,autoFocus:D,onClick:K,onKeyUp:X,onKeyPress:q},ee,et,eo),ei=(0,o.useCallback)(()=>{if(void 0!==Y)return null==B?void 0:B(Y)},[B,Y]),en=(0,A.useRender)();return o.default.createElement(o.default.Fragment,null,null!=N&&o.default.createElement(g.FormFields,{disabled:_,data:{[N]:L||"on"},overrides:{type:"checkbox",checked:z},form:S,onReset:ei}),en({ourProps:es,theirProps:R,slot:el,defaultTag:"button",name:"Switch"}))}),{Group:function(e){var r;let[t,a]=(0,o.useState)(null),[l,s]=(0,x.useLabels)(),[i,n]=(0,h.useDescriptions)(),d=(0,o.useMemo)(()=>({switch:t,setSwitch:a}),[t,a]),c=(0,A.useRender)();return o.default.createElement(n,{name:"Switch.Description",value:i},o.default.createElement(s,{name:"Switch.Label",value:l,props:{htmlFor:null==(r=d.switch)?void 0:r.id,onClick(e){t&&(e.currentTarget instanceof HTMLLabelElement&&e.preventDefault(),t.click(),t.focus({preventScroll:!0}))}}},o.default.createElement(C.Provider,{value:d},c({ourProps:{},theirProps:e,slot:{},defaultTag:I,name:"Switch.Group"}))))},Label:x.Label,Description:h.Description});var T=e.i(888288),E=e.i(95779),O=e.i(444755),_=e.i(673706),M=e.i(829087);let k=(0,_.makeClassName)("Switch"),w=o.default.forwardRef((e,t)=>{let{checked:a,defaultChecked:l=!1,onChange:s,color:i,name:n,error:d,errorMessage:c,disabled:u,required:m,tooltip:g,id:p}=e,f=(0,r.__rest)(e,["checked","defaultChecked","onChange","color","name","error","errorMessage","disabled","required","tooltip","id"]),b={bgColor:i?(0,_.getColorClassNames)(i,E.colorPalette.background).bgColor:"bg-tremor-brand dark:bg-dark-tremor-brand",ringColor:i?(0,_.getColorClassNames)(i,E.colorPalette.ring).ringColor:"ring-tremor-brand-muted dark:ring-dark-tremor-brand-muted"},[A,h]=(0,T.default)(l,a),[v,x]=(0,o.useState)(!1),{tooltipProps:C,getReferenceProps:I}=(0,M.useTooltip)(300);return o.default.createElement("div",{className:"flex flex-row items-center justify-start"},o.default.createElement(M.default,Object.assign({text:g},C)),o.default.createElement("div",Object.assign({ref:(0,_.mergeRefs)([t,C.refs.setReference]),className:(0,O.tremorTwMerge)(k("root"),"flex flex-row relative h-5")},f,I),o.default.createElement("input",{type:"checkbox",className:(0,O.tremorTwMerge)(k("input"),"absolute w-5 h-5 cursor-pointer left-0 top-0 opacity-0"),name:n,required:m,checked:A,onChange:e=>{e.preventDefault()}}),o.default.createElement(y,{checked:A,onChange:e=>{h(e),null==s||s(e)},disabled:u,className:(0,O.tremorTwMerge)(k("switch"),"w-10 h-5 group relative inline-flex shrink-0 cursor-pointer items-center justify-center rounded-tremor-full","focus:outline-none",u?"cursor-not-allowed":""),onFocus:()=>x(!0),onBlur:()=>x(!1),id:p},o.default.createElement("span",{className:(0,O.tremorTwMerge)(k("sr-only"),"sr-only")},"Switch ",A?"on":"off"),o.default.createElement("span",{"aria-hidden":"true",className:(0,O.tremorTwMerge)(k("background"),A?b.bgColor:"bg-tremor-border dark:bg-dark-tremor-border","pointer-events-none absolute mx-auto h-3 w-9 rounded-tremor-full transition-colors duration-100 ease-in-out")}),o.default.createElement("span",{"aria-hidden":"true",className:(0,O.tremorTwMerge)(k("round"),A?(0,O.tremorTwMerge)(b.bgColor,"translate-x-5 border-tremor-background dark:border-dark-tremor-background"):"translate-x-0 bg-tremor-border dark:bg-dark-tremor-border border-tremor-background dark:border-dark-tremor-background","pointer-events-none absolute left-0 inline-block h-5 w-5 transform rounded-tremor-full border-2 shadow-tremor-input duration-100 ease-in-out transition",v?(0,O.tremorTwMerge)("ring-2",b.ringColor):"")}))),d&&c?o.default.createElement("p",{className:(0,O.tremorTwMerge)(k("errorMessage"),"text-sm text-red-500 mt-1 ")},c):null)});w.displayName="Switch",e.s(["Switch",0,w],793130)},418371,e=>{"use strict";var r=e.i(843476),t=e.i(271645),a=e.i(916925);e.s(["ProviderLogo",0,({provider:e,className:o="w-4 h-4"})=>{let[l,s]=(0,t.useState)(!1),{logo:i}=(0,a.getProviderLogoAndName)(e);return l||!i?(0,r.jsx)("div",{className:`${o} rounded-full bg-gray-200 flex items-center justify-center text-xs`,children:e?.charAt(0)||"-"}):(0,r.jsx)("img",{src:i,alt:`${e} logo`,className:o,onError:()=>s(!0)})}])},289793,e=>{"use strict";var r=e.i(602869),t=e.i(266027),a=e.i(243652),o=e.i(708347),l=e.i(135214);let s=(0,a.createQueryKeys)("agents");e.s(["useAgents",0,()=>{let{accessToken:e,userRole:a}=(0,l.default)();return(0,t.useQuery)({queryKey:s.list({}),queryFn:async()=>await (0,r.getAgentsList)(e),enabled:!!e&&o.all_admin_roles.includes(a||"")})}])},366283,e=>{"use strict";var r=e.i(290571),t=e.i(271645),a=e.i(95779),o=e.i(444755),l=e.i(673706);let s=(0,l.makeClassName)("Callout"),i=t.default.forwardRef((e,i)=>{let{title:n,icon:d,color:c,className:u,children:m}=e,g=(0,r.__rest)(e,["title","icon","color","className","children"]);return t.default.createElement("div",Object.assign({ref:i,className:(0,o.tremorTwMerge)(s("root"),"flex flex-col overflow-hidden rounded-tremor-default text-tremor-default border-l-4 py-3 pr-3 pl-4",c?(0,o.tremorTwMerge)((0,l.getColorClassNames)(c,a.colorPalette.background).bgColor,(0,l.getColorClassNames)(c,a.colorPalette.darkBorder).borderColor,(0,l.getColorClassNames)(c,a.colorPalette.darkText).textColor,"dark:bg-opacity-10 bg-opacity-10"):(0,o.tremorTwMerge)("bg-tremor-brand-faint border-tremor-brand-emphasis text-tremor-brand-emphasis","dark:bg-dark-tremor-brand-muted/70 dark:border-dark-tremor-brand-emphasis dark:text-dark-tremor-brand-emphasis"),u)},g),t.default.createElement("div",{className:(0,o.tremorTwMerge)(s("header"),"flex items-start")},d?t.default.createElement(d,{className:(0,o.tremorTwMerge)(s("icon"),"flex-none h-5 w-5 mr-1.5")}):null,t.default.createElement("h4",{className:(0,o.tremorTwMerge)(s("title"),"font-semibold")},n)),t.default.createElement("p",{className:(0,o.tremorTwMerge)(s("body"),"overflow-y-auto",m?"mt-2":"")},m))});i.displayName="Callout",e.s(["Callout",0,i],366283)},973706,e=>{"use strict";var r=e.i(843476),t=e.i(72713),a=e.i(637235),o=e.i(994388),l=e.i(599724),s=e.i(166540),i=e.i(271645);let n=[{label:"Today",shortLabel:"today",getValue:()=>({from:(0,s.default)().startOf("day").toDate(),to:(0,s.default)().endOf("day").toDate()})},{label:"Last 7 days",shortLabel:"7d",getValue:()=>({from:(0,s.default)().subtract(7,"days").startOf("day").toDate(),to:(0,s.default)().endOf("day").toDate()})},{label:"Last 30 days",shortLabel:"30d",getValue:()=>({from:(0,s.default)().subtract(30,"days").startOf("day").toDate(),to:(0,s.default)().endOf("day").toDate()})},{label:"Month to date",shortLabel:"MTD",getValue:()=>({from:(0,s.default)().startOf("month").toDate(),to:(0,s.default)().endOf("day").toDate()})},{label:"Year to date",shortLabel:"YTD",getValue:()=>({from:(0,s.default)().startOf("year").toDate(),to:(0,s.default)().endOf("day").toDate()})}];e.s(["default",0,({value:e,onValueChange:d,label:c="Select Time Range",showTimeRange:u=!0})=>{let[m,g]=(0,i.useState)(!1),[p,f]=(0,i.useState)(e),[b,A]=(0,i.useState)(null),[h,v]=(0,i.useState)(""),[x,C]=(0,i.useState)(""),I=(0,i.useRef)(null),y=(0,i.useCallback)(e=>{if(!e.from||!e.to)return null;for(let r of n){let t=r.getValue(),a=(0,s.default)(e.from).isSame((0,s.default)(t.from),"day"),o=(0,s.default)(e.to).isSame((0,s.default)(t.to),"day");if(a&&o)return r.shortLabel}return null},[]);(0,i.useEffect)(()=>{A(y(e))},[e,y]);let T=(0,i.useCallback)(()=>{if(!h||!x)return{isValid:!0,error:""};let e=(0,s.default)(h,"YYYY-MM-DD"),r=(0,s.default)(x,"YYYY-MM-DD");return e.isValid()&&r.isValid()?r.isBefore(e)?{isValid:!1,error:"End date cannot be before start date"}:{isValid:!0,error:""}:{isValid:!1,error:"Invalid date format"}},[h,x])();(0,i.useEffect)(()=>{e.from&&v((0,s.default)(e.from).format("YYYY-MM-DD")),e.to&&C((0,s.default)(e.to).format("YYYY-MM-DD")),f(e)},[e]),(0,i.useEffect)(()=>{let e=e=>{I.current&&!I.current.contains(e.target)&&g(!1)};return m&&document.addEventListener("mousedown",e),()=>{document.removeEventListener("mousedown",e)}},[m]);let E=(0,i.useCallback)((e,r)=>{if(!e||!r)return"Select date range";let t=e=>(0,s.default)(e).format("D MMM, HH:mm");return`${t(e)} - ${t(r)}`},[]),O=(0,i.useCallback)(e=>{let r;if(!e.from)return e;let t={...e},a=new Date(e.from);return r=new Date(e.to?e.to:e.from),a.toDateString()===r.toDateString(),a.setHours(0,0,0,0),r.setHours(23,59,59,999),t.from=a,t.to=r,t},[]),_=(0,i.useCallback)(()=>{try{if(h&&x&&T.isValid){let e=(0,s.default)(h,"YYYY-MM-DD").startOf("day"),r=(0,s.default)(x,"YYYY-MM-DD").endOf("day");if(e.isValid()&&r.isValid()){let t={from:e.toDate(),to:r.toDate()};f(t);let a=y(t);A(a)}}}catch(e){console.warn("Invalid date format:",e)}},[h,x,T.isValid,y]);return(0,i.useEffect)(()=>{_()},[_]),(0,r.jsxs)("div",{className:"flex items-center gap-3",children:[c&&(0,r.jsx)(l.Text,{className:"text-sm font-medium text-gray-700 whitespace-nowrap",children:c}),(0,r.jsxs)("div",{className:"relative",ref:I,children:[(0,r.jsx)("div",{className:"w-[300px] px-3 py-2 text-sm border border-gray-300 rounded-md bg-white cursor-pointer hover:border-gray-400 focus:border-blue-500 focus:ring-1 focus:ring-blue-500",onClick:()=>g(!m),children:(0,r.jsxs)("div",{className:"flex items-center justify-between",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)(a.ClockCircleOutlined,{className:"text-gray-600"}),(0,r.jsx)("span",{className:"text-gray-900",children:E(e.from,e.to)})]}),(0,r.jsx)("svg",{className:`w-4 h-4 text-gray-400 transition-transform ${m?"rotate-180":""}`,fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:(0,r.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M19 9l-7 7-7-7"})})]})}),m&&(0,r.jsx)("div",{className:"absolute top-full right-0 z-[9999] min-w-[600px] mt-1 bg-white border border-gray-200 rounded-lg shadow-xl",children:(0,r.jsxs)("div",{className:"flex",children:[(0,r.jsxs)("div",{className:"w-1/2 border-r border-gray-200",children:[(0,r.jsx)("div",{className:"p-3 border-b border-gray-200",children:(0,r.jsx)("span",{className:"text-sm font-semibold text-gray-900",children:"Relative time"})}),(0,r.jsx)("div",{className:"h-[350px] overflow-y-auto",children:n.map(e=>{let t=b===e.shortLabel;return(0,r.jsxs)("div",{className:`flex items-center justify-between px-5 py-4 cursor-pointer border-b border-gray-100 transition-colors ${t?"bg-blue-50 hover:bg-blue-100 border-blue-200":"hover:bg-gray-50"}`,onClick:()=>(e=>{let{from:r,to:t}=e.getValue();f({from:r,to:t}),A(e.shortLabel),v((0,s.default)(r).format("YYYY-MM-DD")),C((0,s.default)(t).format("YYYY-MM-DD"))})(e),children:[(0,r.jsx)("span",{className:`text-sm ${t?"text-blue-700 font-medium":"text-gray-700"}`,children:e.label}),(0,r.jsx)("span",{className:`text-xs px-2 py-1 rounded capitalize ${t?"text-blue-700 bg-blue-100":"text-gray-500 bg-gray-100"}`,children:e.shortLabel})]},e.label)})})]}),(0,r.jsxs)("div",{className:"w-1/2 relative",children:[(0,r.jsx)("div",{className:"p-3.5 border-b border-gray-200",children:(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)(t.CalendarOutlined,{className:"text-gray-600"}),(0,r.jsx)("span",{className:"text-sm font-semibold text-gray-900",children:"Start and end dates"})]})}),(0,r.jsxs)("div",{className:"p-6 space-y-6 pb-20",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)("label",{className:"text-sm text-gray-700 mb-1 block",children:"Start date"}),(0,r.jsx)("input",{type:"date",value:h,onChange:e=>v(e.target.value),className:`w-65 px-3 py-2 text-sm border rounded-md cursor-pointer hover:border-gray-400 focus:border-blue-500 focus:ring-1 focus:ring-blue-500 ${!T.isValid?"border-red-300 focus:border-red-500 focus:ring-red-200":"border-gray-300"}`})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)("label",{className:"text-sm text-gray-700 mb-1 block",children:"End date"}),(0,r.jsx)("input",{type:"date",value:x,onChange:e=>C(e.target.value),className:`w-65 px-3 py-2 text-sm border rounded-md cursor-pointer hover:border-gray-400 focus:border-blue-500 focus:ring-1 focus:ring-blue-500 ${!T.isValid?"border-red-300 focus:border-red-500 focus:ring-red-200":"border-gray-300"}`})]}),!T.isValid&&T.error&&(0,r.jsx)("div",{className:"bg-red-50 border border-red-200 rounded-md p-3",children:(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("svg",{className:"w-4 h-4 text-red-500",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:(0,r.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:2,d:"M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L3.732 16.5c-.77.833.192 2.5 1.732 2.5z"})}),(0,r.jsx)("span",{className:"text-sm text-red-700 font-medium",children:T.error})]})}),p.from&&p.to&&T.isValid&&(0,r.jsxs)("div",{className:"bg-blue-50 p-3 rounded-md space-y-1",children:[(0,r.jsxs)("div",{className:"text-xs text-blue-800",children:[(0,r.jsx)("span",{className:"font-medium",children:"From:"})," ",(0,s.default)(p.from).format("MMM D, YYYY [at] HH:mm:ss")]}),(0,r.jsxs)("div",{className:"text-xs text-blue-800",children:[(0,r.jsx)("span",{className:"font-medium",children:"To:"})," ",(0,s.default)(p.to).format("MMM D, YYYY [at] HH:mm:ss")]})]})]}),(0,r.jsx)("div",{className:"absolute bottom-4 right-4",children:(0,r.jsxs)("div",{className:"flex gap-2",children:[(0,r.jsx)(o.Button,{variant:"secondary",onClick:()=>{f(e),e.from&&v((0,s.default)(e.from).format("YYYY-MM-DD")),e.to&&C((0,s.default)(e.to).format("YYYY-MM-DD")),A(y(e)),g(!1)},children:"Cancel"}),(0,r.jsx)(o.Button,{onClick:()=>{p.from&&p.to&&T.isValid&&(d(p),requestIdleCallback(()=>{d(O(p))},{timeout:100}),g(!1))},disabled:!p.from||!p.to||!T.isValid,children:"Apply"})]})})]})]})})]})]})}])}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0sylbcw3ha_ba.js b/litellm/proxy/_experimental/out/_next/static/chunks/0sylbcw3ha_ba.js new file mode 100644 index 00000000000..c6113e70a6b --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0sylbcw3ha_ba.js @@ -0,0 +1,11 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,175712,e=>{"use strict";e.i(247167);var t=e.i(271645),r=e.i(343794),o=e.i(529681),a=e.i(242064),n=e.i(517455),l=e.i(185793),i=e.i(721369),s=function(e,t){var r={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&0>t.indexOf(o)&&(r[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var a=0,o=Object.getOwnPropertySymbols(e);at.indexOf(o[a])&&Object.prototype.propertyIsEnumerable.call(e,o[a])&&(r[o[a]]=e[o[a]]);return r};let d=e=>{var{prefixCls:o,className:n,hoverable:l=!0}=e,i=s(e,["prefixCls","className","hoverable"]);let{getPrefixCls:d}=t.useContext(a.ConfigContext),c=d("card",o),u=(0,r.default)(`${c}-grid`,n,{[`${c}-grid-hoverable`]:l});return t.createElement("div",Object.assign({},i,{className:u}))};e.i(296059);var c=e.i(915654),u=e.i(183293),m=e.i(246422),g=e.i(838378);let p=(0,m.genStyleHooks)("Card",e=>{let t=(0,g.mergeToken)(e,{cardShadow:e.boxShadowCard,cardHeadPadding:e.padding,cardPaddingBase:e.paddingLG,cardActionsIconSize:e.fontSize});return[(e=>{let{componentCls:t,cardShadow:r,cardHeadPadding:o,colorBorderSecondary:a,boxShadowTertiary:n,bodyPadding:l,extraColor:i}=e;return{[t]:Object.assign(Object.assign({},(0,u.resetComponent)(e)),{position:"relative",background:e.colorBgContainer,borderRadius:e.borderRadiusLG,[`&:not(${t}-bordered)`]:{boxShadow:n},[`${t}-head`]:(e=>{let{antCls:t,componentCls:r,headerHeight:o,headerPadding:a,tabsMarginBottom:n}=e;return Object.assign(Object.assign({display:"flex",justifyContent:"center",flexDirection:"column",minHeight:o,marginBottom:-1,padding:`0 ${(0,c.unit)(a)}`,color:e.colorTextHeading,fontWeight:e.fontWeightStrong,fontSize:e.headerFontSize,background:e.headerBg,borderBottom:`${(0,c.unit)(e.lineWidth)} ${e.lineType} ${e.colorBorderSecondary}`,borderRadius:`${(0,c.unit)(e.borderRadiusLG)} ${(0,c.unit)(e.borderRadiusLG)} 0 0`},(0,u.clearFix)()),{"&-wrapper":{width:"100%",display:"flex",alignItems:"center"},"&-title":Object.assign(Object.assign({display:"inline-block",flex:1},u.textEllipsis),{[` + > ${r}-typography, + > ${r}-typography-edit-content + `]:{insetInlineStart:0,marginTop:0,marginBottom:0}}),[`${t}-tabs-top`]:{clear:"both",marginBottom:n,color:e.colorText,fontWeight:"normal",fontSize:e.fontSize,"&-bar":{borderBottom:`${(0,c.unit)(e.lineWidth)} ${e.lineType} ${e.colorBorderSecondary}`}}})})(e),[`${t}-extra`]:{marginInlineStart:"auto",color:i,fontWeight:"normal",fontSize:e.fontSize},[`${t}-body`]:{padding:l,borderRadius:`0 0 ${(0,c.unit)(e.borderRadiusLG)} ${(0,c.unit)(e.borderRadiusLG)}`},[`${t}-grid`]:(e=>{let{cardPaddingBase:t,colorBorderSecondary:r,cardShadow:o,lineWidth:a}=e;return{width:"33.33%",padding:t,border:0,borderRadius:0,boxShadow:` + ${(0,c.unit)(a)} 0 0 0 ${r}, + 0 ${(0,c.unit)(a)} 0 0 ${r}, + ${(0,c.unit)(a)} ${(0,c.unit)(a)} 0 0 ${r}, + ${(0,c.unit)(a)} 0 0 0 ${r} inset, + 0 ${(0,c.unit)(a)} 0 0 ${r} inset; + `,transition:`all ${e.motionDurationMid}`,"&-hoverable:hover":{position:"relative",zIndex:1,boxShadow:o}}})(e),[`${t}-cover`]:{"> *":{display:"block",width:"100%",borderRadius:`${(0,c.unit)(e.borderRadiusLG)} ${(0,c.unit)(e.borderRadiusLG)} 0 0`}},[`${t}-actions`]:(e=>{let{componentCls:t,iconCls:r,actionsLiMargin:o,cardActionsIconSize:a,colorBorderSecondary:n,actionsBg:l}=e;return Object.assign(Object.assign({margin:0,padding:0,listStyle:"none",background:l,borderTop:`${(0,c.unit)(e.lineWidth)} ${e.lineType} ${n}`,display:"flex",borderRadius:`0 0 ${(0,c.unit)(e.borderRadiusLG)} ${(0,c.unit)(e.borderRadiusLG)}`},(0,u.clearFix)()),{"& > li":{margin:o,color:e.colorTextDescription,textAlign:"center","> span":{position:"relative",display:"block",minWidth:e.calc(e.cardActionsIconSize).mul(2).equal(),fontSize:e.fontSize,lineHeight:e.lineHeight,cursor:"pointer","&:hover":{color:e.colorPrimary,transition:`color ${e.motionDurationMid}`},[`a:not(${t}-btn), > ${r}`]:{display:"inline-block",width:"100%",color:e.colorIcon,lineHeight:(0,c.unit)(e.fontHeight),transition:`color ${e.motionDurationMid}`,"&:hover":{color:e.colorPrimary}},[`> ${r}`]:{fontSize:a,lineHeight:(0,c.unit)(e.calc(a).mul(e.lineHeight).equal())}},"&:not(:last-child)":{borderInlineEnd:`${(0,c.unit)(e.lineWidth)} ${e.lineType} ${n}`}}})})(e),[`${t}-meta`]:Object.assign(Object.assign({margin:`${(0,c.unit)(e.calc(e.marginXXS).mul(-1).equal())} 0`,display:"flex"},(0,u.clearFix)()),{"&-avatar":{paddingInlineEnd:e.padding},"&-detail":{overflow:"hidden",flex:1,"> div:not(:last-child)":{marginBottom:e.marginXS}},"&-title":Object.assign({color:e.colorTextHeading,fontWeight:e.fontWeightStrong,fontSize:e.fontSizeLG},u.textEllipsis),"&-description":{color:e.colorTextDescription}})}),[`${t}-bordered`]:{border:`${(0,c.unit)(e.lineWidth)} ${e.lineType} ${a}`,[`${t}-cover`]:{marginTop:-1,marginInlineStart:-1,marginInlineEnd:-1}},[`${t}-hoverable`]:{cursor:"pointer",transition:`box-shadow ${e.motionDurationMid}, border-color ${e.motionDurationMid}`,"&:hover":{borderColor:"transparent",boxShadow:r}},[`${t}-contain-grid`]:{borderRadius:`${(0,c.unit)(e.borderRadiusLG)} ${(0,c.unit)(e.borderRadiusLG)} 0 0 `,[`${t}-body`]:{display:"flex",flexWrap:"wrap"},[`&:not(${t}-loading) ${t}-body`]:{marginBlockStart:e.calc(e.lineWidth).mul(-1).equal(),marginInlineStart:e.calc(e.lineWidth).mul(-1).equal(),padding:0}},[`${t}-contain-tabs`]:{[`> div${t}-head`]:{minHeight:0,[`${t}-head-title, ${t}-extra`]:{paddingTop:o}}},[`${t}-type-inner`]:(e=>{let{componentCls:t,colorFillAlter:r,headerPadding:o,bodyPadding:a}=e;return{[`${t}-head`]:{padding:`0 ${(0,c.unit)(o)}`,background:r,"&-title":{fontSize:e.fontSize}},[`${t}-body`]:{padding:`${(0,c.unit)(e.padding)} ${(0,c.unit)(a)}`}}})(e),[`${t}-loading`]:(e=>{let{componentCls:t}=e;return{overflow:"hidden",[`${t}-body`]:{userSelect:"none"}}})(e),[`${t}-rtl`]:{direction:"rtl"}}})(t),(e=>{let{componentCls:t,bodyPaddingSM:r,headerPaddingSM:o,headerHeightSM:a,headerFontSizeSM:n}=e;return{[`${t}-small`]:{[`> ${t}-head`]:{minHeight:a,padding:`0 ${(0,c.unit)(o)}`,fontSize:n,[`> ${t}-head-wrapper`]:{[`> ${t}-extra`]:{fontSize:e.fontSize}}},[`> ${t}-body`]:{padding:r}},[`${t}-small${t}-contain-tabs`]:{[`> ${t}-head`]:{[`${t}-head-title, ${t}-extra`]:{paddingTop:0,display:"flex",alignItems:"center"}}}}})(t)]},e=>{var t,r;return{headerBg:"transparent",headerFontSize:e.fontSizeLG,headerFontSizeSM:e.fontSize,headerHeight:e.fontSizeLG*e.lineHeightLG+2*e.padding,headerHeightSM:e.fontSize*e.lineHeight+2*e.paddingXS,actionsBg:e.colorBgContainer,actionsLiMargin:`${e.paddingSM}px 0`,tabsMarginBottom:-e.padding-e.lineWidth,extraColor:e.colorText,bodyPaddingSM:12,headerPaddingSM:12,bodyPadding:null!=(t=e.bodyPadding)?t:e.paddingLG,headerPadding:null!=(r=e.headerPadding)?r:e.paddingLG}});var f=e.i(792812),b=function(e,t){var r={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&0>t.indexOf(o)&&(r[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var a=0,o=Object.getOwnPropertySymbols(e);at.indexOf(o[a])&&Object.prototype.propertyIsEnumerable.call(e,o[a])&&(r[o[a]]=e[o[a]]);return r};let h=e=>{let{actionClasses:r,actions:o=[],actionStyle:a}=e;return t.createElement("ul",{className:r,style:a},o.map((e,r)=>{let a=`action-${r}`;return t.createElement("li",{style:{width:`${100/o.length}%`},key:a},t.createElement("span",null,e))}))},v=t.forwardRef((e,s)=>{let c,{prefixCls:u,className:m,rootClassName:g,style:v,extra:x,headStyle:y={},bodyStyle:C={},title:S,loading:$,bordered:E,variant:w,size:O,type:k,cover:P,actions:T,tabList:N,children:R,activeTabKey:z,defaultActiveTabKey:M,tabBarExtraContent:j,hoverable:B,tabProps:I={},classNames:D,styles:H}=e,L=b(e,["prefixCls","className","rootClassName","style","extra","headStyle","bodyStyle","title","loading","bordered","variant","size","type","cover","actions","tabList","children","activeTabKey","defaultActiveTabKey","tabBarExtraContent","hoverable","tabProps","classNames","styles"]),{getPrefixCls:A,direction:F,card:_}=t.useContext(a.ConfigContext),[W]=(0,f.default)("card",w,E),G=e=>{var t;return(0,r.default)(null==(t=null==_?void 0:_.classNames)?void 0:t[e],null==D?void 0:D[e])},K=e=>{var t;return Object.assign(Object.assign({},null==(t=null==_?void 0:_.styles)?void 0:t[e]),null==H?void 0:H[e])},X=t.useMemo(()=>{let e=!1;return t.Children.forEach(R,t=>{(null==t?void 0:t.type)===d&&(e=!0)}),e},[R]),Y=A("card",u),[q,U,V]=p(Y),Z=t.createElement(l.default,{loading:!0,active:!0,paragraph:{rows:4},title:!1},R),J=void 0!==z,Q=Object.assign(Object.assign({},I),{[J?"activeKey":"defaultActiveKey"]:J?z:M,tabBarExtraContent:j}),ee=(0,n.default)(O),et=ee&&"default"!==ee?ee:"large",er=N?t.createElement(i.default,Object.assign({size:et},Q,{className:`${Y}-head-tabs`,onChange:t=>{var r;null==(r=e.onTabChange)||r.call(e,t)},items:N.map(e=>{var{tab:t}=e;return Object.assign({label:t},b(e,["tab"]))})})):null;if(S||x||er){let e=(0,r.default)(`${Y}-head`,G("header")),o=(0,r.default)(`${Y}-head-title`,G("title")),a=(0,r.default)(`${Y}-extra`,G("extra")),n=Object.assign(Object.assign({},y),K("header"));c=t.createElement("div",{className:e,style:n},t.createElement("div",{className:`${Y}-head-wrapper`},S&&t.createElement("div",{className:o,style:K("title")},S),x&&t.createElement("div",{className:a,style:K("extra")},x)),er)}let eo=(0,r.default)(`${Y}-cover`,G("cover")),ea=P?t.createElement("div",{className:eo,style:K("cover")},P):null,en=(0,r.default)(`${Y}-body`,G("body")),el=Object.assign(Object.assign({},C),K("body")),ei=t.createElement("div",{className:en,style:el},$?Z:R),es=(0,r.default)(`${Y}-actions`,G("actions")),ed=(null==T?void 0:T.length)?t.createElement(h,{actionClasses:es,actionStyle:K("actions"),actions:T}):null,ec=(0,o.default)(L,["onTabChange"]),eu=(0,r.default)(Y,null==_?void 0:_.className,{[`${Y}-loading`]:$,[`${Y}-bordered`]:"borderless"!==W,[`${Y}-hoverable`]:B,[`${Y}-contain-grid`]:X,[`${Y}-contain-tabs`]:null==N?void 0:N.length,[`${Y}-${ee}`]:ee,[`${Y}-type-${k}`]:!!k,[`${Y}-rtl`]:"rtl"===F},m,g,U,V),em=Object.assign(Object.assign({},null==_?void 0:_.style),v);return q(t.createElement("div",Object.assign({ref:s},ec,{className:eu,style:em}),c,ea,ei,ed))});var x=function(e,t){var r={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&0>t.indexOf(o)&&(r[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var a=0,o=Object.getOwnPropertySymbols(e);at.indexOf(o[a])&&Object.prototype.propertyIsEnumerable.call(e,o[a])&&(r[o[a]]=e[o[a]]);return r};v.Grid=d,v.Meta=e=>{let{prefixCls:o,className:n,avatar:l,title:i,description:s}=e,d=x(e,["prefixCls","className","avatar","title","description"]),{getPrefixCls:c}=t.useContext(a.ConfigContext),u=c("card",o),m=(0,r.default)(`${u}-meta`,n),g=l?t.createElement("div",{className:`${u}-meta-avatar`},l):null,p=i?t.createElement("div",{className:`${u}-meta-title`},i):null,f=s?t.createElement("div",{className:`${u}-meta-description`},s):null,b=p||f?t.createElement("div",{className:`${u}-meta-detail`},p,f):null;return t.createElement("div",Object.assign({},d,{className:m}),g,b)},e.s(["Card",0,v],175712)},270377,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M464 688a48 48 0 1096 0 48 48 0 10-96 0zm24-112h48c4.4 0 8-3.6 8-8V296c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v272c0 4.4 3.6 8 8 8z"}}]},name:"exclamation-circle",theme:"outlined"};var a=e.i(9583),n=r.forwardRef(function(e,n){return r.createElement(a.default,(0,t.default)({},e,{ref:n,icon:o}))});e.s(["ExclamationCircleOutlined",0,n],270377)},597440,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z"}}]},name:"delete",theme:"outlined"};var a=e.i(9583),n=r.forwardRef(function(e,n){return r.createElement(a.default,(0,t.default)({},e,{ref:n,icon:o}))});e.s(["default",0,n],597440)},955135,e=>{"use strict";var t=e.i(597440);e.s(["DeleteOutlined",()=>t.default])},646563,e=>{"use strict";var t=e.i(959013);e.s(["PlusOutlined",()=>t.default])},233538,e=>{"use strict";e.s(["isDisabledReactIssue7711",0,function(e){let t=e.parentElement,r=null;for(;t&&!(t instanceof HTMLFieldSetElement);)t instanceof HTMLLegendElement&&(r=t),t=t.parentElement;let o=(null==t?void 0:t.getAttribute("disabled"))==="";return!(o&&function(e){if(!e)return!1;let t=e.previousElementSibling;for(;null!==t;){if(t instanceof HTMLLegendElement)return!1;t=t.previousElementSibling}return!0}(r))&&o}])},83733,233137,e=>{"use strict";let t,r;var o,a,n=e.i(247167),l=e.i(271645),i=e.i(544508),s=e.i(746725),d=e.i(835696);void 0!==n.default&&"u">typeof globalThis&&"u">typeof Element&&(null==(o=null==n.default?void 0:n.default.env)?void 0:o.NODE_ENV)==="test"&&void 0===(null==(a=null==Element?void 0:Element.prototype)?void 0:a.getAnimations)&&(Element.prototype.getAnimations=function(){return console.warn(["Headless UI has polyfilled `Element.prototype.getAnimations` for your tests.","Please install a proper polyfill e.g. `jsdom-testing-mocks`, to silence these warnings.","","Example usage:","```js","import { mockAnimationsApi } from 'jsdom-testing-mocks'","mockAnimationsApi()","```"].join(` +`)),[]});var c=((t=c||{})[t.None=0]="None",t[t.Closed=1]="Closed",t[t.Enter=2]="Enter",t[t.Leave=4]="Leave",t);e.s(["transitionDataAttributes",0,function(e){let t={};for(let r in e)!0===e[r]&&(t[`data-${r}`]="");return t},"useTransition",0,function(e,t,r,o){let[a,n]=(0,l.useState)(r),{hasFlag:c,addFlag:u,removeFlag:m}=function(e=0){let[t,r]=(0,l.useState)(e),o=(0,l.useCallback)(e=>r(e),[t]),a=(0,l.useCallback)(e=>r(t=>t|e),[t]),n=(0,l.useCallback)(e=>(t&e)===e,[t]);return{flags:t,setFlag:o,addFlag:a,hasFlag:n,removeFlag:(0,l.useCallback)(e=>r(t=>t&~e),[r]),toggleFlag:(0,l.useCallback)(e=>r(t=>t^e),[r])}}(e&&a?3:0),g=(0,l.useRef)(!1),p=(0,l.useRef)(!1),f=(0,s.useDisposables)();return(0,d.useIsoMorphicEffect)(()=>{var a;if(e){if(r&&n(!0),!t){r&&u(3);return}return null==(a=null==o?void 0:o.start)||a.call(o,r),function(e,{prepare:t,run:r,done:o,inFlight:a}){let n=(0,i.disposables)();return function(e,{inFlight:t,prepare:r}){if(null!=t&&t.current)return r();let o=e.style.transition;e.style.transition="none",r(),e.offsetHeight,e.style.transition=o}(e,{prepare:t,inFlight:a}),n.nextFrame(()=>{r(),n.requestAnimationFrame(()=>{n.add(function(e,t){var r,o;let a=(0,i.disposables)();if(!e)return a.dispose;let n=!1;a.add(()=>{n=!0});let l=null!=(o=null==(r=e.getAnimations)?void 0:r.call(e).filter(e=>e instanceof CSSTransition))?o:[];return 0===l.length?t():Promise.allSettled(l.map(e=>e.finished)).then(()=>{n||t()}),a.dispose}(e,o))})}),n.dispose}(t,{inFlight:g,prepare(){p.current?p.current=!1:p.current=g.current,g.current=!0,p.current||(r?(u(3),m(4)):(u(4),m(2)))},run(){p.current?r?(m(3),u(4)):(m(4),u(3)):r?m(1):u(1)},done(){var e;p.current&&"function"==typeof t.getAnimations&&t.getAnimations().length>0||(g.current=!1,m(7),r||n(!1),null==(e=null==o?void 0:o.end)||e.call(o,r))}})}},[e,r,t,f]),e?[a,{closed:c(1),enter:c(2),leave:c(4),transition:c(2)||c(4)}]:[r,{closed:void 0,enter:void 0,leave:void 0,transition:void 0}]}],83733);let u=(0,l.createContext)(null);u.displayName="OpenClosedContext";var m=((r=m||{})[r.Open=1]="Open",r[r.Closed=2]="Closed",r[r.Closing=4]="Closing",r[r.Opening=8]="Opening",r);e.s(["OpenClosedProvider",0,function({value:e,children:t}){return l.default.createElement(u.Provider,{value:e},t)},"ResetOpenClosedProvider",0,function({children:e}){return l.default.createElement(u.Provider,{value:null},e)},"State",0,m,"useOpenClosed",0,function(){return(0,l.useContext)(u)}],233137)},677667,674175,886148,543086,e=>{"use strict";let t,r;var o,a=e.i(290571),n=e.i(783222),l=e.i(433336),i=e.i(271645),s=e.i(394487),d=e.i(914189),c=e.i(144279),u=e.i(294316),m=e.i(83733);let g=(0,i.createContext)(()=>{});function p({value:e,children:t}){return i.default.createElement(g.Provider,{value:e},t)}e.s(["CloseProvider",0,p],674175);var f=e.i(233137),b=e.i(233538),h=e.i(397701),v=e.i(402155),x=e.i(700020);let y=null!=(o=i.default.startTransition)?o:function(e){e()};var C=e.i(998348),S=((t=S||{})[t.Open=0]="Open",t[t.Closed=1]="Closed",t),$=((r=$||{})[r.ToggleDisclosure=0]="ToggleDisclosure",r[r.CloseDisclosure=1]="CloseDisclosure",r[r.SetButtonId=2]="SetButtonId",r[r.SetPanelId=3]="SetPanelId",r[r.SetButtonElement=4]="SetButtonElement",r[r.SetPanelElement=5]="SetPanelElement",r);let E={0:e=>({...e,disclosureState:(0,h.match)(e.disclosureState,{0:1,1:0})}),1:e=>1===e.disclosureState?e:{...e,disclosureState:1},2:(e,t)=>e.buttonId===t.buttonId?e:{...e,buttonId:t.buttonId},3:(e,t)=>e.panelId===t.panelId?e:{...e,panelId:t.panelId},4:(e,t)=>e.buttonElement===t.element?e:{...e,buttonElement:t.element},5:(e,t)=>e.panelElement===t.element?e:{...e,panelElement:t.element}},w=(0,i.createContext)(null);function O(e){let t=(0,i.useContext)(w);if(null===t){let t=Error(`<${e} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,O),t}return t}w.displayName="DisclosureContext";let k=(0,i.createContext)(null);k.displayName="DisclosureAPIContext";let P=(0,i.createContext)(null);function T(e,t){return(0,h.match)(t.type,E,e,t)}P.displayName="DisclosurePanelContext";let N=i.Fragment,R=x.RenderFeatures.RenderStrategy|x.RenderFeatures.Static,z=Object.assign((0,x.forwardRefWithAs)(function(e,t){let{defaultOpen:r=!1,...o}=e,a=(0,i.useRef)(null),n=(0,u.useSyncRefs)(t,(0,u.optionalRef)(e=>{a.current=e},void 0===e.as||e.as===i.Fragment)),l=(0,i.useReducer)(T,{disclosureState:+!r,buttonElement:null,panelElement:null,buttonId:null,panelId:null}),[{disclosureState:s,buttonId:c},m]=l,g=(0,d.useEvent)(e=>{m({type:1});let t=(0,v.getOwnerDocument)(a);if(!t||!c)return;let r=e?e instanceof HTMLElement?e:e.current instanceof HTMLElement?e.current:t.getElementById(c):t.getElementById(c);null==r||r.focus()}),b=(0,i.useMemo)(()=>({close:g}),[g]),y=(0,i.useMemo)(()=>({open:0===s,close:g}),[s,g]),C=(0,x.useRender)();return i.default.createElement(w.Provider,{value:l},i.default.createElement(k.Provider,{value:b},i.default.createElement(p,{value:g},i.default.createElement(f.OpenClosedProvider,{value:(0,h.match)(s,{0:f.State.Open,1:f.State.Closed})},C({ourProps:{ref:n},theirProps:o,slot:y,defaultTag:N,name:"Disclosure"})))))}),{Button:(0,x.forwardRefWithAs)(function(e,t){let r=(0,i.useId)(),{id:o=`headlessui-disclosure-button-${r}`,disabled:a=!1,autoFocus:m=!1,...g}=e,[p,f]=O("Disclosure.Button"),h=(0,i.useContext)(P),v=null!==h&&h===p.panelId,y=(0,i.useRef)(null),S=(0,u.useSyncRefs)(y,t,(0,d.useEvent)(e=>{if(!v)return f({type:4,element:e})}));(0,i.useEffect)(()=>{if(!v)return f({type:2,buttonId:o}),()=>{f({type:2,buttonId:null})}},[o,f,v]);let $=(0,d.useEvent)(e=>{var t;if(v){if(1===p.disclosureState)return;switch(e.key){case C.Keys.Space:case C.Keys.Enter:e.preventDefault(),e.stopPropagation(),f({type:0}),null==(t=p.buttonElement)||t.focus()}}else switch(e.key){case C.Keys.Space:case C.Keys.Enter:e.preventDefault(),e.stopPropagation(),f({type:0})}}),E=(0,d.useEvent)(e=>{e.key===C.Keys.Space&&e.preventDefault()}),w=(0,d.useEvent)(e=>{var t;(0,b.isDisabledReactIssue7711)(e.currentTarget)||a||(v?(f({type:0}),null==(t=p.buttonElement)||t.focus()):f({type:0}))}),{isFocusVisible:k,focusProps:T}=(0,n.useFocusRing)({autoFocus:m}),{isHovered:N,hoverProps:R}=(0,l.useHover)({isDisabled:a}),{pressed:z,pressProps:M}=(0,s.useActivePress)({disabled:a}),j=(0,i.useMemo)(()=>({open:0===p.disclosureState,hover:N,active:z,disabled:a,focus:k,autofocus:m}),[p,N,z,k,a,m]),B=(0,c.useResolveButtonType)(e,p.buttonElement),I=v?(0,x.mergeProps)({ref:S,type:B,disabled:a||void 0,autoFocus:m,onKeyDown:$,onClick:w},T,R,M):(0,x.mergeProps)({ref:S,id:o,type:B,"aria-expanded":0===p.disclosureState,"aria-controls":p.panelElement?p.panelId:void 0,disabled:a||void 0,autoFocus:m,onKeyDown:$,onKeyUp:E,onClick:w},T,R,M);return(0,x.useRender)()({ourProps:I,theirProps:g,slot:j,defaultTag:"button",name:"Disclosure.Button"})}),Panel:(0,x.forwardRefWithAs)(function(e,t){let r=(0,i.useId)(),{id:o=`headlessui-disclosure-panel-${r}`,transition:a=!1,...n}=e,[l,s]=O("Disclosure.Panel"),{close:c}=function e(t){let r=(0,i.useContext)(k);if(null===r){let r=Error(`<${t} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(r,e),r}return r}("Disclosure.Panel"),[g,p]=(0,i.useState)(null),b=(0,u.useSyncRefs)(t,(0,d.useEvent)(e=>{y(()=>s({type:5,element:e}))}),p);(0,i.useEffect)(()=>(s({type:3,panelId:o}),()=>{s({type:3,panelId:null})}),[o,s]);let h=(0,f.useOpenClosed)(),[v,C]=(0,m.useTransition)(a,g,null!==h?(h&f.State.Open)===f.State.Open:0===l.disclosureState),S=(0,i.useMemo)(()=>({open:0===l.disclosureState,close:c}),[l.disclosureState,c]),$={ref:b,id:o,...(0,m.transitionDataAttributes)(C)},E=(0,x.useRender)();return i.default.createElement(f.ResetOpenClosedProvider,null,i.default.createElement(P.Provider,{value:l.panelId},E({ourProps:$,theirProps:n,slot:S,defaultTag:"div",features:R,visible:v,name:"Disclosure.Panel"})))})});e.s(["Disclosure",0,z],886148);let M=(0,i.createContext)(void 0);var j=e.i(444755);let B=(0,e.i(673706).makeClassName)("Accordion"),I=(0,i.createContext)({isOpen:!1}),D=i.default.forwardRef((e,t)=>{var r;let{defaultOpen:o=!1,children:n,className:l}=e,s=(0,a.__rest)(e,["defaultOpen","children","className"]),d=null!=(r=(0,i.useContext)(M))?r:(0,j.tremorTwMerge)("rounded-tremor-default border");return i.default.createElement(z,Object.assign({as:"div",ref:t,className:(0,j.tremorTwMerge)(B("root"),"overflow-hidden","bg-tremor-background border-tremor-border","dark:bg-dark-tremor-background dark:border-dark-tremor-border",d,l),defaultOpen:o},s),({open:e})=>i.default.createElement(I.Provider,{value:{isOpen:e}},n))});D.displayName="Accordion",e.s(["OpenContext",0,I,"default",0,D],543086),e.s(["Accordion",0,D],677667)},898667,e=>{"use strict";var t=e.i(290571),r=e.i(271645),o=e.i(886148);let a=e=>{var o=(0,t.__rest)(e,[]);return r.default.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"},o),r.default.createElement("path",{d:"M11.9999 10.8284L7.0502 15.7782L5.63599 14.364L11.9999 8L18.3639 14.364L16.9497 15.7782L11.9999 10.8284Z"}))};var n=e.i(543086),l=e.i(444755);let i=(0,e.i(673706).makeClassName)("AccordionHeader"),s=r.default.forwardRef((e,s)=>{let{children:d,className:c}=e,u=(0,t.__rest)(e,["children","className"]),{isOpen:m}=(0,r.useContext)(n.OpenContext);return r.default.createElement(o.Disclosure.Button,Object.assign({ref:s,className:(0,l.tremorTwMerge)(i("root"),"w-full flex items-center justify-between px-4 py-3","text-tremor-content-emphasis","dark:text-dark-tremor-content-emphasis",c)},u),r.default.createElement("div",{className:(0,l.tremorTwMerge)(i("children"),"flex flex-1 text-inherit mr-4")},d),r.default.createElement("div",null,r.default.createElement(a,{className:(0,l.tremorTwMerge)(i("arrowIcon"),"h-5 w-5 -mr-1","text-tremor-content-subtle","dark:text-dark-tremor-content-subtle",m?"transition-all":"transition-all -rotate-180")})))});s.displayName="AccordionHeader",e.s(["AccordionHeader",0,s],898667)},130643,e=>{"use strict";var t=e.i(290571),r=e.i(271645),o=e.i(886148),a=e.i(444755);let n=(0,e.i(673706).makeClassName)("AccordionBody"),l=r.default.forwardRef((e,l)=>{let{children:i,className:s}=e,d=(0,t.__rest)(e,["children","className"]);return r.default.createElement(o.Disclosure.Panel,Object.assign({ref:l,className:(0,a.tremorTwMerge)(n("root"),"w-full text-tremor-default px-4 pb-3","text-tremor-content","dark:text-dark-tremor-content",s)},d),i)});l.displayName="AccordionBody",e.s(["AccordionBody",0,l],130643)},695411,e=>{"use strict";var t=e.i(602869);let r=async e=>{try{let r=await (0,t.modelHubCall)(e);if(console.log("model_info:",r),r?.data.length>0){let e=r.data.map(e=>({model_group:e.model_group,mode:e?.mode}));return e.sort((e,t)=>e.model_group.localeCompare(t.model_group)),e}return[]}catch(e){throw console.error("Error fetching model info:",e),e}};e.s(["fetchAvailableModels",0,r])},184163,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M505.7 661a8 8 0 0012.6 0l112-141.7c4.1-5.2.4-12.9-6.3-12.9h-74.1V168c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v338.3H400c-6.7 0-10.4 7.7-6.3 12.9l112 141.8zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"}}]},name:"download",theme:"outlined"};var a=e.i(9583),n=r.forwardRef(function(e,n){return r.createElement(a.default,(0,t.default)({},e,{ref:n,icon:o}))});e.s(["default",0,n],184163)},737434,e=>{"use strict";var t=e.i(184163);e.s(["DownloadOutlined",()=>t.default])},91739,e=>{"use strict";var t=e.i(544195);e.s(["Radio",()=>t.default])},994388,e=>{"use strict";var t=e.i(290571),r=e.i(829087),o=e.i(271645);let a=["preEnter","entering","entered","preExit","exiting","exited","unmounted"],n=e=>({_s:e,status:a[e],isEnter:e<3,isMounted:6!==e,isResolved:2===e||e>4}),l=e=>e?6:5,i=(e,t,r,o,a)=>{clearTimeout(o.current);let l=n(e);t(l),r.current=l,a&&a({current:l})};var s=e.i(480731),d=e.i(444755),c=e.i(673706);let u=e=>{var r=(0,t.__rest)(e,[]);return o.default.createElement("svg",Object.assign({},r,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"}),o.default.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}),o.default.createElement("path",{d:"M18.364 5.636L16.95 7.05A7 7 0 1 0 19 12h2a9 9 0 1 1-2.636-6.364z"}))};var m=e.i(95779);let g={xs:{height:"h-4",width:"w-4"},sm:{height:"h-5",width:"w-5"},md:{height:"h-5",width:"w-5"},lg:{height:"h-6",width:"w-6"},xl:{height:"h-6",width:"w-6"}},p=(e,t)=>{switch(e){case"primary":return{textColor:t?(0,c.getColorClassNames)("white").textColor:"text-tremor-brand-inverted dark:text-dark-tremor-brand-inverted",hoverTextColor:t?(0,c.getColorClassNames)("white").textColor:"text-tremor-brand-inverted dark:text-dark-tremor-brand-inverted",bgColor:t?(0,c.getColorClassNames)(t,m.colorPalette.background).bgColor:"bg-tremor-brand dark:bg-dark-tremor-brand",hoverBgColor:t?(0,c.getColorClassNames)(t,m.colorPalette.darkBackground).hoverBgColor:"hover:bg-tremor-brand-emphasis dark:hover:bg-dark-tremor-brand-emphasis",borderColor:t?(0,c.getColorClassNames)(t,m.colorPalette.border).borderColor:"border-tremor-brand dark:border-dark-tremor-brand",hoverBorderColor:t?(0,c.getColorClassNames)(t,m.colorPalette.darkBorder).hoverBorderColor:"hover:border-tremor-brand-emphasis dark:hover:border-dark-tremor-brand-emphasis"};case"secondary":return{textColor:t?(0,c.getColorClassNames)(t,m.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",hoverTextColor:t?(0,c.getColorClassNames)(t,m.colorPalette.text).textColor:"hover:text-tremor-brand-emphasis dark:hover:text-dark-tremor-brand-emphasis",bgColor:(0,c.getColorClassNames)("transparent").bgColor,hoverBgColor:t?(0,d.tremorTwMerge)((0,c.getColorClassNames)(t,m.colorPalette.background).hoverBgColor,"hover:bg-opacity-20 dark:hover:bg-opacity-20"):"hover:bg-tremor-brand-faint dark:hover:bg-dark-tremor-brand-faint",borderColor:t?(0,c.getColorClassNames)(t,m.colorPalette.border).borderColor:"border-tremor-brand dark:border-dark-tremor-brand"};case"light":return{textColor:t?(0,c.getColorClassNames)(t,m.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",hoverTextColor:t?(0,c.getColorClassNames)(t,m.colorPalette.darkText).hoverTextColor:"hover:text-tremor-brand-emphasis dark:hover:text-dark-tremor-brand-emphasis",bgColor:(0,c.getColorClassNames)("transparent").bgColor,borderColor:"",hoverBorderColor:""}}},f=(0,c.makeClassName)("Button"),b=({loading:e,iconSize:t,iconPosition:r,Icon:a,needMargin:n,transitionStatus:l})=>{let i=n?r===s.HorizontalPositions.Left?(0,d.tremorTwMerge)("-ml-1","mr-1.5"):(0,d.tremorTwMerge)("-mr-1","ml-1.5"):"",c=(0,d.tremorTwMerge)("w-0 h-0"),m={default:c,entering:c,entered:t,exiting:t,exited:c};return e?o.default.createElement(u,{className:(0,d.tremorTwMerge)(f("icon"),"animate-spin shrink-0",i,m.default,m[l]),style:{transition:"width 150ms"}}):o.default.createElement(a,{className:(0,d.tremorTwMerge)(f("icon"),"shrink-0",t,i)})},h=o.default.forwardRef((e,a)=>{let{icon:u,iconPosition:m=s.HorizontalPositions.Left,size:h=s.Sizes.SM,color:v,variant:x="primary",disabled:y,loading:C=!1,loadingText:S,children:$,tooltip:E,className:w}=e,O=(0,t.__rest)(e,["icon","iconPosition","size","color","variant","disabled","loading","loadingText","children","tooltip","className"]),k=C||y,P=void 0!==u||C,T=C&&S,N=!(!$&&!T),R=(0,d.tremorTwMerge)(g[h].height,g[h].width),z="light"!==x?(0,d.tremorTwMerge)("rounded-tremor-default border","shadow-tremor-input","dark:shadow-dark-tremor-input"):"",M=p(x,v),j=("light"!==x?{xs:{paddingX:"px-2.5",paddingY:"py-1.5",fontSize:"text-xs"},sm:{paddingX:"px-4",paddingY:"py-2",fontSize:"text-sm"},md:{paddingX:"px-4",paddingY:"py-2",fontSize:"text-md"},lg:{paddingX:"px-4",paddingY:"py-2.5",fontSize:"text-lg"},xl:{paddingX:"px-4",paddingY:"py-3",fontSize:"text-xl"}}:{xs:{paddingX:"",paddingY:"",fontSize:"text-xs"},sm:{paddingX:"",paddingY:"",fontSize:"text-sm"},md:{paddingX:"",paddingY:"",fontSize:"text-md"},lg:{paddingX:"",paddingY:"",fontSize:"text-lg"},xl:{paddingX:"",paddingY:"",fontSize:"text-xl"}})[h],{tooltipProps:B,getReferenceProps:I}=(0,r.useTooltip)(300),[D,H]=(({enter:e=!0,exit:t=!0,preEnter:r,preExit:a,timeout:s,initialEntered:d,mountOnEnter:c,unmountOnExit:u,onStateChange:m}={})=>{let[g,p]=(0,o.useState)(()=>n(d?2:l(c))),f=(0,o.useRef)(g),b=(0,o.useRef)(0),[h,v]="object"==typeof s?[s.enter,s.exit]:[s,s],x=(0,o.useCallback)(()=>{let e=((e,t)=>{switch(e){case 1:case 0:return 2;case 4:case 3:return l(t)}})(f.current._s,u);e&&i(e,p,f,b,m)},[m,u]);return[g,(0,o.useCallback)(o=>{let n=e=>{switch(i(e,p,f,b,m),e){case 1:h>=0&&(b.current=((...e)=>setTimeout(...e))(x,h));break;case 4:v>=0&&(b.current=((...e)=>setTimeout(...e))(x,v));break;case 0:case 3:b.current=((...e)=>setTimeout(...e))(()=>{isNaN(document.body.offsetTop)||n(e+1)},0)}},s=f.current.isEnter;"boolean"!=typeof o&&(o=!s),o?s||n(e?+!r:2):s&&n(t?a?3:4:l(u))},[x,m,e,t,r,a,h,v,u]),x]})({timeout:50});return(0,o.useEffect)(()=>{H(C)},[C]),o.default.createElement("button",Object.assign({ref:(0,c.mergeRefs)([a,B.refs.setReference]),className:(0,d.tremorTwMerge)(f("root"),"shrink-0 inline-flex justify-center items-center group font-medium outline-none",z,j.paddingX,j.paddingY,j.fontSize,M.textColor,M.bgColor,M.borderColor,M.hoverBorderColor,k?"opacity-50 cursor-not-allowed":(0,d.tremorTwMerge)(p(x,v).hoverTextColor,p(x,v).hoverBgColor,p(x,v).hoverBorderColor),w),disabled:k},I,O),o.default.createElement(r.default,Object.assign({text:E},B)),P&&m!==s.HorizontalPositions.Right?o.default.createElement(b,{loading:C,iconSize:R,iconPosition:m,Icon:u,transitionStatus:D.status,needMargin:N}):null,T||$?o.default.createElement("span",{className:(0,d.tremorTwMerge)(f("text"),"text-tremor-default whitespace-nowrap")},T?S:$):null,P&&m===s.HorizontalPositions.Right?o.default.createElement(b,{loading:C,iconSize:R,iconPosition:m,Icon:u,transitionStatus:D.status,needMargin:N}):null)});h.displayName="Button",e.s(["Button",0,h],994388)},599724,936325,e=>{"use strict";var t=e.i(95779),r=e.i(444755),o=e.i(673706),a=e.i(271645);let n=a.default.forwardRef((e,n)=>{let{color:l,className:i,children:s}=e;return a.default.createElement("p",{ref:n,className:(0,r.tremorTwMerge)("text-tremor-default",l?(0,o.getColorClassNames)(l,t.colorPalette.text).textColor:(0,r.tremorTwMerge)("text-tremor-content","dark:text-dark-tremor-content"),i)},s)});n.displayName="Text",e.s(["default",0,n],936325),e.s(["Text",0,n],599724)},629569,e=>{"use strict";var t=e.i(290571),r=e.i(95779),o=e.i(444755),a=e.i(673706),n=e.i(271645);let l=n.default.forwardRef((e,l)=>{let{color:i,children:s,className:d}=e,c=(0,t.__rest)(e,["color","children","className"]);return n.default.createElement("p",Object.assign({ref:l,className:(0,o.tremorTwMerge)("font-medium text-tremor-title",i?(0,a.getColorClassNames)(i,r.colorPalette.darkText).textColor:"text-tremor-content-strong dark:text-dark-tremor-content-strong",d)},c),s)});l.displayName="Title",e.s(["Title",0,l],629569)},555987,e=>{"use strict";var t=e.i(221688),r=e.i(950643);let o=/^(https?:|data:|blob:|\/\/)/i;e.s(["resolveLogoSrc",0,(e,a=t.serverRootPath)=>{if(e){let t;return o.test(e)?e:(t=(0,r.normalizeRootPath)(a),`${t}${e.startsWith("/")?e:`/${e}`}`)}}])},482725,e=>{"use strict";var t=e.i(244451);e.s(["Spin",()=>t.default])},500330,e=>{"use strict";var t=e.i(727749);let r=(e,t=0,r=!1,o=!0)=>{if(null==e||!Number.isFinite(e)||0===e&&!o)return"-";let a={minimumFractionDigits:t,maximumFractionDigits:t};if(!r)return e.toLocaleString("en-US",a);let n=e<0?"-":"",l=Math.abs(e),i=l,s="";return l>=1e6?(i=l/1e6,s="M"):l>=1e3&&(i=l/1e3,s="K"),`${n}${i.toLocaleString("en-US",a)}${s}`},o=async(e,r="Copied to clipboard")=>{if(!e)return!1;if(!navigator||!navigator.clipboard||!navigator.clipboard.writeText)return a(e,r);try{return await navigator.clipboard.writeText(e),t.default.success(r),!0}catch(t){return console.error("Clipboard API failed: ",t),a(e,r)}},a=(e,r)=>{try{let o=document.createElement("textarea");o.value=e,o.style.position="fixed",o.style.left="-999999px",o.style.top="-999999px",o.setAttribute("readonly",""),document.body.appendChild(o),o.focus(),o.select();let a=document.execCommand("copy");if(document.body.removeChild(o),a)return t.default.success(r),!0;throw Error("execCommand failed")}catch(e){return t.default.fromBackend("Failed to copy to clipboard"),console.error("Failed to copy: ",e),!1}};e.s(["copyToClipboard",0,o,"formatNumberWithCommas",0,r,"getSpendString",0,(e,t=6)=>{if(null==e||!Number.isFinite(e)||0===e)return"-";let o=r(e,t,!1,!1);if(0===Number(o.replace(/,/g,""))){let e=(1/10**t).toFixed(t);return`< $${e}`}return`$${o}`},"updateExistingKeys",0,function(e,t){let r=structuredClone(e);for(let[e,o]of Object.entries(t))e in r&&(r[e]=o);return r}])},211576,e=>{"use strict";var t=e.i(131757);e.s(["Col",()=>t.default])},621192,e=>{"use strict";let t=e.i(264042).Row;e.s(["Row",0,t],621192)},178654,e=>{"use strict";let t=e.i(211576).Col;e.s(["Col",0,t],178654)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0t4ig3ibz46ga.js b/litellm/proxy/_experimental/out/_next/static/chunks/0t4ig3ibz46ga.js new file mode 100644 index 00000000000..95f368d34bf --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0t4ig3ibz46ga.js @@ -0,0 +1 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,648214,e=>{"use strict";var t=e.i(843476),s=e.i(135214),r=e.i(994388),i=e.i(366283),l=e.i(304967),n=e.i(269200),a=e.i(942232),o=e.i(977572),d=e.i(427612),c=e.i(64848),u=e.i(496020),p=e.i(560445),m=e.i(464571),g=e.i(808613),_=e.i(311451),h=e.i(212931),x=e.i(770914),f=e.i(653496),y=e.i(898586),j=e.i(271645),v=e.i(844444),S=e.i(700514),b=e.i(727749),I=e.i(602869),w=e.i(629569),k=e.i(599724),T=e.i(350967),C=e.i(779241),E=e.i(114600),N=e.i(237016),O=e.i(596239),F=e.i(438957),A=e.i(166406),P=e.i(270377),M=e.i(475647),B=e.i(190702);let U=({accessToken:e,userID:s,proxySettings:n})=>{let[a]=g.Form.useForm(),[o,d]=(0,j.useState)(!1),[c,u]=(0,j.useState)(null),[p,m]=(0,j.useState)("");(0,j.useEffect)(()=>{let e="";m(e=n&&n.PROXY_BASE_URL&&void 0!==n.PROXY_BASE_URL?n.PROXY_BASE_URL:window.location.origin)},[n]);let _=`${p}/scim/v2`,h=async t=>{if(!e||!s)return void b.default.fromBackend("You need to be logged in to create a SCIM token");try{d(!0);let r={key_alias:t.key_alias||"SCIM Access Token",team_id:null,models:[],allowed_routes:["/scim/*"]},i=await (0,I.keyCreateCall)(e,s,r);u(i),b.default.success("SCIM token created successfully")}catch(e){console.error("Error creating SCIM token:",e),b.default.fromBackend("Failed to create SCIM token: "+(0,B.parseErrorMessage)(e))}finally{d(!1)}};return(0,t.jsx)(T.Grid,{numItems:1,children:(0,t.jsxs)(l.Card,{children:[(0,t.jsx)("div",{className:"flex items-center mb-4",children:(0,t.jsx)(w.Title,{children:"SCIM Configuration"})}),(0,t.jsx)(k.Text,{className:"text-gray-600",children:"System for Cross-domain Identity Management (SCIM) allows you to automatically provision and manage users and groups in LiteLLM."}),(0,t.jsx)(E.Divider,{}),(0,t.jsxs)("div",{className:"space-y-8",children:[(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"flex items-center mb-2",children:[(0,t.jsx)("div",{className:"flex items-center justify-center w-6 h-6 rounded-full bg-blue-100 text-blue-700 mr-2",children:"1"}),(0,t.jsxs)(w.Title,{className:"text-lg flex items-center",children:[(0,t.jsx)(O.LinkOutlined,{className:"h-5 w-5 mr-2"}),"SCIM Tenant URL"]})]}),(0,t.jsx)(k.Text,{className:"text-gray-600 mb-3",children:"Use this URL in your identity provider SCIM integration settings."}),(0,t.jsxs)("div",{className:"flex items-center",children:[(0,t.jsx)(C.TextInput,{value:_,disabled:!0,className:"flex-grow"}),(0,t.jsx)(N.CopyToClipboard,{text:_,onCopy:()=>b.default.success("URL copied to clipboard"),children:(0,t.jsxs)(r.Button,{variant:"primary",className:"ml-2 flex items-center",children:[(0,t.jsx)(A.CopyOutlined,{className:"h-4 w-4 mr-1"}),"Copy"]})})]})]}),(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"flex items-center mb-2",children:[(0,t.jsx)("div",{className:"flex items-center justify-center w-6 h-6 rounded-full bg-blue-100 text-blue-700 mr-2",children:"2"}),(0,t.jsxs)(w.Title,{className:"text-lg flex items-center",children:[(0,t.jsx)(F.KeyOutlined,{className:"h-5 w-5 mr-2"}),"Authentication Token"]})]}),(0,t.jsx)(i.Callout,{title:"Using SCIM",color:"blue",className:"mb-4",children:"You need a SCIM token to authenticate with the SCIM API. Create one below and use it in your SCIM provider configuration."}),c?(0,t.jsxs)(l.Card,{className:"border border-yellow-300 bg-yellow-50",children:[(0,t.jsxs)("div",{className:"flex items-center mb-2 text-yellow-800",children:[(0,t.jsx)(P.ExclamationCircleOutlined,{className:"h-5 w-5 mr-2"}),(0,t.jsx)(w.Title,{className:"text-lg text-yellow-800",children:"Your SCIM Token"})]}),(0,t.jsx)(k.Text,{className:"text-yellow-800 mb-4 font-medium",children:"Make sure to copy this token now. You will not be able to see it again."}),(0,t.jsxs)("div",{className:"flex items-center",children:[(0,t.jsx)(C.TextInput,{value:c.key,className:"flex-grow mr-2 bg-white",type:"password",disabled:!0}),(0,t.jsx)(N.CopyToClipboard,{text:c.key,onCopy:()=>b.default.success("Token copied to clipboard"),children:(0,t.jsxs)(r.Button,{variant:"primary",className:"flex items-center",children:[(0,t.jsx)(A.CopyOutlined,{className:"h-4 w-4 mr-1"}),"Copy"]})})]}),(0,t.jsxs)(r.Button,{className:"mt-4 flex items-center",variant:"secondary",onClick:()=>u(null),children:[(0,t.jsx)(M.PlusCircleOutlined,{className:"h-4 w-4 mr-1"}),"Create Another Token"]})]}):(0,t.jsx)("div",{className:"bg-gray-50 p-4 rounded-lg",children:(0,t.jsxs)(g.Form,{form:a,onFinish:h,layout:"vertical",children:[(0,t.jsx)(g.Form.Item,{name:"key_alias",label:"Token Name",rules:[{required:!0,message:"Please enter a name for your token"}],children:(0,t.jsx)(C.TextInput,{placeholder:"SCIM Access Token"})}),(0,t.jsx)(g.Form.Item,{children:(0,t.jsxs)(r.Button,{variant:"primary",type:"submit",loading:o,className:"flex items-center",children:[(0,t.jsx)(F.KeyOutlined,{className:"h-4 w-4 mr-1"}),"Create SCIM Token"]})})]})})]})]})]})})};var L=e.i(153472),R=e.i(954616),z=e.i(912598);let D=async(e,t)=>{let s=(0,I.getProxyBaseUrl)(),r=s?`${s}/config/update`:"/config/update",i=await fetch(r,{method:"POST",headers:{[(0,I.getGlobalLitellmHeaderName)()]:`Bearer ${e}`,"Content-Type":"application/json"},body:JSON.stringify({general_settings:{store_prompts_in_spend_logs:t.store_prompts_in_spend_logs,...t.maximum_spend_logs_retention_period&&{maximum_spend_logs_retention_period:t.maximum_spend_logs_retention_period}}})});if(!i.ok){let e=await i.json().catch(()=>({}));throw Error(e?.error?.message||e?.message||e?.detail||"Failed to update spend logs settings")}return await i.json()};var G=e.i(637235),V=e.i(175712),q=e.i(981339),K=e.i(790848);let H=()=>{let[e]=g.Form.useForm(),{mutate:r,isPending:i}=(()=>{let{accessToken:e}=(0,s.default)(),t=(0,z.useQueryClient)();return(0,R.useMutation)({mutationFn:async t=>{if(!e)throw Error("Access token is required");return await D(e,t)},onSuccess:()=>{t.invalidateQueries({queryKey:L.proxyConfigKeys.all})}})})(),{mutate:l,isPending:n}=(0,L.useDeleteProxyConfigField)(),{data:a,isLoading:o}=(0,L.useProxyConfig)(L.ConfigType.GENERAL_SETTINGS),d=g.Form.useWatch("store_prompts_in_spend_logs",e),c=(0,j.useMemo)(()=>{if(!a)return{store_prompts_in_spend_logs:!1,maximum_spend_logs_retention_period:void 0};let e=a.find(e=>"store_prompts_in_spend_logs"===e.field_name),t=a.find(e=>"maximum_spend_logs_retention_period"===e.field_name);return{store_prompts_in_spend_logs:e?.field_value??!1,maximum_spend_logs_retention_period:t?.field_value??void 0}},[a]);return(0,t.jsx)(V.Card,{title:"Logging Settings",children:(0,t.jsxs)(x.Space,{direction:"vertical",size:"large",style:{width:"100%"},children:[(0,t.jsx)(y.Typography.Paragraph,{style:{marginBottom:0},type:"secondary",children:"Proxy-wide settings that control how request and response data are written to spend logs."}),(0,t.jsxs)(g.Form,{form:e,layout:"vertical",onFinish:e=>{let t=e.maximum_spend_logs_retention_period,s="string"==typeof t&&""!==t.trim(),i={store_prompts_in_spend_logs:e.store_prompts_in_spend_logs,...s&&{maximum_spend_logs_retention_period:t}},n=()=>r(i,{onSuccess:()=>b.default.success("Spend logs settings updated successfully"),onError:e=>b.default.fromBackend("Failed to save spend logs settings: "+(0,B.parseErrorMessage)(e))});s?n():l({config_type:L.ConfigType.GENERAL_SETTINGS,field_name:L.GeneralSettingsFieldName.MAXIMUM_SPEND_LOGS_RETENTION_PERIOD},{onError:e=>console.warn("Failed to delete retention period field (may not exist):",e),onSettled:n})},initialValues:c,children:[(0,t.jsx)(g.Form.Item,{label:"Store Prompts in Spend Logs",name:"store_prompts_in_spend_logs",tooltip:a?.find(e=>"store_prompts_in_spend_logs"===e.field_name)?.field_description||"When enabled, prompts will be stored in spend logs for tracking and analysis purposes.",valuePropName:"checked",children:o?(0,t.jsx)(q.Skeleton.Input,{active:!0,block:!0}):(0,t.jsx)(K.Switch,{checked:d??!1,onChange:t=>e.setFieldValue("store_prompts_in_spend_logs",t)})}),(0,t.jsx)(g.Form.Item,{label:"Maximum Spend Logs Retention Period (Optional)",name:"maximum_spend_logs_retention_period",tooltip:a?.find(e=>"maximum_spend_logs_retention_period"===e.field_name)?.field_description||"Set the maximum retention period for spend logs (e.g., '7d' for 7 days, '30d' for 30 days). Leave empty for no limit.",children:o?(0,t.jsx)(q.Skeleton.Input,{active:!0,block:!0}):(0,t.jsx)(_.Input,{placeholder:"e.g., 7d, 30d",prefix:(0,t.jsx)(G.ClockCircleOutlined,{})})}),(0,t.jsx)(g.Form.Item,{children:(0,t.jsx)(m.Button,{type:"primary",htmlType:"submit",loading:i||n,disabled:o,children:i||n?"Saving...":"Save Settings"})})]},a?JSON.stringify(c):"loading")]})})};var $=e.i(266027),Q=e.i(243652);let W=(0,Q.createQueryKeys)("sso"),Y=()=>{let{accessToken:e,userId:t,userRole:r}=(0,s.default)();return(0,$.useQuery)({queryKey:W.detail("settings"),queryFn:async()=>await (0,I.getSSOSettings)(e),enabled:!!(e&&t&&r)})};var J=e.i(869216),Z=e.i(262218),X=e.i(688511),ee=e.i(98919),et=e.i(727612);let es={google:"https://artificialanalysis.ai/img/logos/google_small.svg",microsoft:"https://upload.wikimedia.org/wikipedia/commons/a/a8/Microsoft_Azure_Logo.svg",okta:"https://www.okta.com/sites/default/files/Okta_Logo_BrightBlue_Medium.png",generic:""},er={google:"Google SSO",microsoft:"Microsoft SSO",okta:"Okta / Auth0 SSO",generic:"Generic SSO"},ei={internal_user_viewer:"Internal Viewer",internal_user:"Internal User",proxy_admin_viewer:"Proxy Admin Viewer",proxy_admin:"Proxy Admin"};var el=e.i(536916),en=e.i(199133);let ea={google:{envVarMap:{google_client_id:"GOOGLE_CLIENT_ID",google_client_secret:"GOOGLE_CLIENT_SECRET"},fields:[{label:"Google Client ID",name:"google_client_id"},{label:"Google Client Secret",name:"google_client_secret"}]},microsoft:{envVarMap:{microsoft_client_id:"MICROSOFT_CLIENT_ID",microsoft_client_secret:"MICROSOFT_CLIENT_SECRET",microsoft_tenant:"MICROSOFT_TENANT"},fields:[{label:"Microsoft Client ID",name:"microsoft_client_id"},{label:"Microsoft Client Secret",name:"microsoft_client_secret"},{label:"Microsoft Tenant",name:"microsoft_tenant"}]},okta:{envVarMap:{generic_client_id:"GENERIC_CLIENT_ID",generic_client_secret:"GENERIC_CLIENT_SECRET",generic_authorization_endpoint:"GENERIC_AUTHORIZATION_ENDPOINT",generic_token_endpoint:"GENERIC_TOKEN_ENDPOINT",generic_userinfo_endpoint:"GENERIC_USERINFO_ENDPOINT"},fields:[{label:"Generic Client ID",name:"generic_client_id"},{label:"Generic Client Secret",name:"generic_client_secret"},{label:"Authorization Endpoint",name:"generic_authorization_endpoint",placeholder:"https://your-domain/authorize"},{label:"Token Endpoint",name:"generic_token_endpoint",placeholder:"https://your-domain/token"},{label:"Userinfo Endpoint",name:"generic_userinfo_endpoint",placeholder:"https://your-domain/userinfo"}]},generic:{envVarMap:{generic_client_id:"GENERIC_CLIENT_ID",generic_client_secret:"GENERIC_CLIENT_SECRET",generic_authorization_endpoint:"GENERIC_AUTHORIZATION_ENDPOINT",generic_token_endpoint:"GENERIC_TOKEN_ENDPOINT",generic_userinfo_endpoint:"GENERIC_USERINFO_ENDPOINT"},fields:[{label:"Generic Client ID",name:"generic_client_id"},{label:"Generic Client Secret",name:"generic_client_secret"},{label:"Authorization Endpoint",name:"generic_authorization_endpoint"},{label:"Token Endpoint",name:"generic_token_endpoint"},{label:"Userinfo Endpoint",name:"generic_userinfo_endpoint"}]}},eo=({form:e,onFormSubmit:s})=>(0,t.jsx)("div",{children:(0,t.jsxs)(g.Form,{form:e,onFinish:s,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,t.jsx)(g.Form.Item,{label:"SSO Provider",name:"sso_provider",rules:[{required:!0,message:"Please select an SSO provider"}],children:(0,t.jsx)(en.Select,{children:Object.entries(es).map(([e,s])=>(0,t.jsx)(en.Select.Option,{value:e,children:(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",padding:"4px 0"},children:[s&&(0,t.jsx)("img",{src:s,alt:e,style:{height:24,width:24,marginRight:12,objectFit:"contain"}}),(0,t.jsx)("span",{children:er[e]||e.charAt(0).toUpperCase()+e.slice(1)+" SSO"})]})},e))})}),(0,t.jsx)(g.Form.Item,{noStyle:!0,shouldUpdate:(e,t)=>e.sso_provider!==t.sso_provider,children:({getFieldValue:e})=>{let s,r=e("sso_provider");return r&&(s=ea[r])?s.fields.map(e=>(0,t.jsx)(g.Form.Item,{label:e.label,name:e.name,rules:[{required:!0,message:`Please enter the ${e.label.toLowerCase()}`}],children:e.name.includes("client")?(0,t.jsx)(_.Input.Password,{}):(0,t.jsx)(C.TextInput,{placeholder:e.placeholder})},e.name)):null}}),(0,t.jsx)(g.Form.Item,{label:"Proxy Admin Email",name:"user_email",rules:[{required:!0,message:"Please enter the email of the proxy admin"}],children:(0,t.jsx)(C.TextInput,{})}),(0,t.jsx)(g.Form.Item,{label:"Proxy Base URL",name:"proxy_base_url",normalize:e=>e?.trim(),rules:[{required:!0,message:"Please enter the proxy base url"},{pattern:/^https?:\/\/.+/,message:"URL must start with http:// or https://"},{validator:(e,t)=>t&&/^https?:\/\/.+/.test(t)&&t.endsWith("/")?Promise.reject("URL must not end with a trailing slash"):Promise.resolve()}],children:(0,t.jsx)(C.TextInput,{placeholder:"https://example.com"})}),(0,t.jsx)(g.Form.Item,{noStyle:!0,shouldUpdate:(e,t)=>e.sso_provider!==t.sso_provider,children:({getFieldValue:e})=>{let s=e("sso_provider");return"okta"===s||"generic"===s?(0,t.jsx)(g.Form.Item,{label:"Use Role Mappings",name:"use_role_mappings",valuePropName:"checked",children:(0,t.jsx)(el.Checkbox,{})}):null}}),(0,t.jsx)(g.Form.Item,{noStyle:!0,shouldUpdate:(e,t)=>e.use_role_mappings!==t.use_role_mappings||e.sso_provider!==t.sso_provider,children:({getFieldValue:e})=>{let s=e("use_role_mappings"),r=e("sso_provider");return s&&("okta"===r||"generic"===r)?(0,t.jsx)(g.Form.Item,{label:"Group Claim",name:"group_claim",rules:[{required:!0,message:"Please enter the group claim"}],children:(0,t.jsx)(C.TextInput,{})}):null}}),(0,t.jsx)(g.Form.Item,{noStyle:!0,shouldUpdate:(e,t)=>e.use_role_mappings!==t.use_role_mappings||e.sso_provider!==t.sso_provider,children:({getFieldValue:e})=>{let s=e("use_role_mappings"),r=e("sso_provider");return s&&("okta"===r||"generic"===r)?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(g.Form.Item,{label:"Default Role",name:"default_role",initialValue:"Internal User",children:(0,t.jsxs)(en.Select,{children:[(0,t.jsx)(en.Select.Option,{value:"internal_user_viewer",children:"Internal Viewer"}),(0,t.jsx)(en.Select.Option,{value:"internal_user",children:"Internal User"}),(0,t.jsx)(en.Select.Option,{value:"proxy_admin_viewer",children:"Admin Viewer"}),(0,t.jsx)(en.Select.Option,{value:"proxy_admin",children:"Proxy Admin"})]})}),(0,t.jsx)(g.Form.Item,{label:"Proxy Admin Teams",name:"proxy_admin_teams",children:(0,t.jsx)(C.TextInput,{})}),(0,t.jsx)(g.Form.Item,{label:"Admin Viewer Teams",name:"admin_viewer_teams",children:(0,t.jsx)(C.TextInput,{})}),(0,t.jsx)(g.Form.Item,{label:"Internal User Teams",name:"internal_user_teams",children:(0,t.jsx)(C.TextInput,{})}),(0,t.jsx)(g.Form.Item,{label:"Internal Viewer Teams",name:"internal_viewer_teams",children:(0,t.jsx)(C.TextInput,{})})]}):null}}),(0,t.jsx)(g.Form.Item,{noStyle:!0,shouldUpdate:(e,t)=>e.sso_provider!==t.sso_provider,children:({getFieldValue:e})=>{let s=e("sso_provider");return"okta"===s||"generic"===s?(0,t.jsx)(g.Form.Item,{label:"Use Team Mappings",name:"use_team_mappings",valuePropName:"checked",children:(0,t.jsx)(el.Checkbox,{})}):null}}),(0,t.jsx)(g.Form.Item,{noStyle:!0,shouldUpdate:(e,t)=>e.use_team_mappings!==t.use_team_mappings||e.sso_provider!==t.sso_provider,children:({getFieldValue:e})=>{let s=e("use_team_mappings"),r=e("sso_provider");return s&&("okta"===r||"generic"===r)?(0,t.jsx)(g.Form.Item,{label:"Team IDs JWT Field",name:"team_ids_jwt_field",rules:[{required:!0,message:"Please enter the team IDs JWT field"}],children:(0,t.jsx)(C.TextInput,{})}):null}})]})}),ed=()=>{let{accessToken:e}=(0,s.default)();return(0,R.useMutation)({mutationFn:async t=>{if(!e)throw Error("Access token is required");return await (0,I.updateSSOSettings)(e,t)}})},ec=e=>{let{proxy_admin_teams:t,admin_viewer_teams:s,internal_user_teams:r,internal_viewer_teams:i,default_role:l,group_claim:n,use_role_mappings:a,use_team_mappings:o,team_ids_jwt_field:d,...c}=e,u={...c},p=c.sso_provider;if(a&&("okta"===p||"generic"===p)){let e=e=>e&&""!==e.trim()?e.split(",").map(e=>e.trim()).filter(e=>e.length>0):[];u.role_mappings={provider:"generic",group_claim:n,default_role:({internal_user_viewer:"internal_user_viewer",internal_user:"internal_user",proxy_admin_viewer:"proxy_admin_viewer",proxy_admin:"proxy_admin"})[l]||"internal_user",roles:{proxy_admin:e(t),proxy_admin_viewer:e(s),internal_user:e(r),internal_user_viewer:e(i)}}}return o&&("okta"===p||"generic"===p)&&(u.team_mappings={team_ids_jwt_field:d}),u},eu=e=>e.google_client_id?"google":e.microsoft_client_id?"microsoft":e.generic_client_id?e.generic_authorization_endpoint?.includes("okta")||e.generic_authorization_endpoint?.includes("auth0")?"okta":"generic":null,ep=({isVisible:e,onCancel:s,onSuccess:r})=>{let[i]=g.Form.useForm(),{mutateAsync:l,isPending:n}=ed(),a=async e=>{let t=ec(e);await l(t,{onSuccess:()=>{b.default.success("SSO settings added successfully"),r()},onError:e=>{b.default.fromBackend("Failed to save SSO settings: "+(0,B.parseErrorMessage)(e))}})},o=()=>{i.resetFields(),s()};return(0,t.jsx)(h.Modal,{title:"Add SSO",open:e,width:800,footer:(0,t.jsxs)(x.Space,{children:[(0,t.jsx)(m.Button,{onClick:o,disabled:n,children:"Cancel"}),(0,t.jsx)(m.Button,{loading:n,onClick:()=>i.submit(),children:n?"Adding...":"Add SSO"})]}),onCancel:o,children:(0,t.jsx)(eo,{form:i,onFormSubmit:a})})};var em=e.i(127952);let eg=({isVisible:e,onCancel:s,onSuccess:r})=>{let{data:i}=Y(),{mutateAsync:l,isPending:n}=ed(),a=async()=>{await l({google_client_id:null,google_client_secret:null,microsoft_client_id:null,microsoft_client_secret:null,microsoft_tenant:null,generic_client_id:null,generic_client_secret:null,generic_authorization_endpoint:null,generic_token_endpoint:null,generic_userinfo_endpoint:null,proxy_base_url:null,user_email:null,sso_provider:null,role_mappings:null,team_mappings:null},{onSuccess:()=>{b.default.success("SSO settings cleared successfully"),s(),r()},onError:e=>{b.default.fromBackend("Failed to clear SSO settings: "+(0,B.parseErrorMessage)(e))}})};return(0,t.jsx)(em.default,{isOpen:e,title:"Confirm Clear SSO Settings",alertMessage:"This action cannot be undone.",message:"Are you sure you want to clear all SSO settings? Users will no longer be able to login using SSO after this change.",resourceInformationTitle:"SSO Settings",resourceInformation:[{label:"Provider",value:i?.values&&eu(i?.values)||"Generic"}],onCancel:s,onOk:a,confirmLoading:n})},e_=({isVisible:e,onCancel:s,onSuccess:r})=>{let[i]=g.Form.useForm(),l=Y(),{mutateAsync:n,isPending:a}=ed();(0,j.useEffect)(()=>{if(e&&l.data&&l.data.values){let e=l.data;console.log("Raw SSO data received:",e),console.log("SSO values:",e.values),console.log("user_email from API:",e.values.user_email);let t=null;e.values.google_client_id?t="google":e.values.microsoft_client_id?t="microsoft":e.values.generic_client_id&&(t=e.values.generic_authorization_endpoint?.includes("okta")||e.values.generic_authorization_endpoint?.includes("auth0")?"okta":"generic");let s={};if(e.values.role_mappings){let t=e.values.role_mappings,r=e=>e&&0!==e.length?e.join(", "):"";s={use_role_mappings:!0,group_claim:t.group_claim,default_role:t.default_role||"internal_user",proxy_admin_teams:r(t.roles?.proxy_admin),admin_viewer_teams:r(t.roles?.proxy_admin_viewer),internal_user_teams:r(t.roles?.internal_user),internal_viewer_teams:r(t.roles?.internal_user_viewer)}}let r={};e.values.team_mappings&&(r={use_team_mappings:!0,team_ids_jwt_field:e.values.team_mappings.team_ids_jwt_field});let n={sso_provider:t,...e.values,...s,...r};console.log("Setting form values:",n),i.resetFields(),setTimeout(()=>{i.setFieldsValue(n),console.log("Form values set, current form values:",i.getFieldsValue())},100)}},[e,l.data,i]);let o=async e=>{try{let t=ec(e);await n(t,{onSuccess:()=>{b.default.success("SSO settings updated successfully"),r()},onError:e=>{b.default.fromBackend("Failed to save SSO settings: "+(0,B.parseErrorMessage)(e))}})}catch(e){b.default.fromBackend("Failed to process SSO settings: "+(0,B.parseErrorMessage)(e))}},d=()=>{i.resetFields(),s()};return(0,t.jsx)(h.Modal,{title:"Edit SSO Settings",open:e,width:800,footer:(0,t.jsxs)(x.Space,{children:[(0,t.jsx)(m.Button,{onClick:d,disabled:a,children:"Cancel"}),(0,t.jsx)(m.Button,{loading:a,onClick:()=>i.submit(),children:a?"Saving...":"Save"})]}),onCancel:d,children:(0,t.jsx)(eo,{form:i,onFormSubmit:o})})};var eh=e.i(286536),ex=e.i(77705);function ef({defaultHidden:e=!0,value:s}){let[r,i]=(0,j.useState)(e);return(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("span",{className:"font-mono text-gray-600 flex-1",children:s?r?"•".repeat(s.length):s:(0,t.jsx)("span",{className:"text-gray-400 italic",children:"Not configured"})}),s&&(0,t.jsx)(m.Button,{type:"text",size:"small",icon:r?(0,t.jsx)(eh.Eye,{className:"w-4 h-4"}):(0,t.jsx)(ex.EyeOff,{className:"w-4 h-4"}),onClick:()=>i(!r),className:"text-gray-400 hover:text-gray-600"})]})}var ey=e.i(312361),ej=e.i(291542),ev=e.i(761911);let{Title:eS,Text:eb}=y.Typography;function eI({roleMappings:e}){if(!e)return null;let s=[{title:"Role",dataIndex:"role",key:"role",render:e=>(0,t.jsx)(eb,{strong:!0,children:ei[e]})},{title:"Mapped Groups",dataIndex:"groups",key:"groups",render:e=>(0,t.jsx)(t.Fragment,{children:e.length>0?e.map((e,s)=>(0,t.jsx)(Z.Tag,{color:"blue",children:e},s)):(0,t.jsx)(eb,{className:"text-gray-400 italic",children:"No groups mapped"})})}];return(0,t.jsxs)(V.Card,{children:[(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsx)(ev.Users,{className:"w-6 h-6 text-gray-400 mb-2"}),(0,t.jsx)(eS,{level:3,children:"Role Mappings"})]}),(0,t.jsxs)("div",{className:"space-y-8",children:[(0,t.jsxs)("div",{className:"grid grid-cols-2 gap-4",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)(eS,{level:5,children:"Group Claim"}),(0,t.jsx)("div",{children:(0,t.jsx)(eb,{code:!0,children:e.group_claim})})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)(eS,{level:5,children:"Default Role"}),(0,t.jsx)("div",{children:(0,t.jsx)(eb,{strong:!0,children:ei[e.default_role]})})]})]}),(0,t.jsx)(ey.Divider,{}),(0,t.jsx)(ej.Table,{columns:s,dataSource:Object.entries(e.roles).map(([e,t])=>({role:e,groups:t})),pagination:!1,bordered:!0,size:"small",className:"w-full"})]})]})}var ew=e.i(21548);let{Title:ek,Paragraph:eT}=y.Typography;function eC({onAdd:e}){return(0,t.jsx)("div",{className:"bg-white p-12 rounded-lg border border-dashed border-gray-300 text-center w-full",children:(0,t.jsx)(ew.Empty,{image:ew.Empty.PRESENTED_IMAGE_SIMPLE,description:(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)(ek,{level:4,children:"No SSO Configuration Found"}),(0,t.jsx)(eT,{type:"secondary",className:"max-w-md mx-auto",children:"Configure Single Sign-On (SSO) to enable seamless authentication for your team members using your identity provider."})]}),children:(0,t.jsx)(m.Button,{type:"primary",size:"large",onClick:e,className:"flex items-center gap-2 mx-auto mt-4",children:"Configure SSO"})})})}let{Title:eE,Text:eN}=y.Typography;function eO(){return(0,t.jsx)(V.Card,{children:(0,t.jsxs)(x.Space,{direction:"vertical",size:"large",className:"w-full",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsx)(ee.Shield,{className:"w-6 h-6 text-gray-400"}),(0,t.jsxs)("div",{children:[(0,t.jsx)(eE,{level:3,children:"SSO Configuration"}),(0,t.jsx)(eN,{type:"secondary",children:"Manage Single Sign-On authentication settings"})]})]}),(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsx)(q.Skeleton.Button,{active:!0,size:"default",style:{width:170,height:32}}),(0,t.jsx)(q.Skeleton.Button,{active:!0,size:"default",style:{width:190,height:32}})]})]}),(0,t.jsxs)(J.Descriptions,{bordered:!0,...{column:{xxl:1,xl:1,lg:1,md:1,sm:1,xs:1}},children:[(0,t.jsx)(J.Descriptions.Item,{label:(0,t.jsx)(q.Skeleton.Node,{active:!0,style:{width:80,height:16}}),children:(0,t.jsx)("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:(0,t.jsx)(q.Skeleton.Node,{active:!0,style:{width:100,height:16}})})}),(0,t.jsx)(J.Descriptions.Item,{label:(0,t.jsx)(q.Skeleton.Node,{active:!0,style:{width:80,height:16}}),children:(0,t.jsx)(q.Skeleton.Node,{active:!0,style:{width:200,height:16}})}),(0,t.jsx)(J.Descriptions.Item,{label:(0,t.jsx)(q.Skeleton.Node,{active:!0,style:{width:80,height:16}}),children:(0,t.jsx)(q.Skeleton.Node,{active:!0,style:{width:250,height:16}})}),(0,t.jsx)(J.Descriptions.Item,{label:(0,t.jsx)(q.Skeleton.Node,{active:!0,style:{width:80,height:16}}),children:(0,t.jsx)(q.Skeleton.Node,{active:!0,style:{width:180,height:16}})}),(0,t.jsx)(J.Descriptions.Item,{label:(0,t.jsx)(q.Skeleton.Node,{active:!0,style:{width:80,height:16}}),children:(0,t.jsx)(q.Skeleton.Node,{active:!0,style:{width:220,height:16}})})]})]})})}let{Title:eF,Text:eA}=y.Typography;function eP(){let{data:e,refetch:s,isLoading:r}=Y(),[i,l]=(0,j.useState)(!1),[n,a]=(0,j.useState)(!1),[o,d]=(0,j.useState)(!1),c=!!e?.values.google_client_id||!!e?.values.microsoft_client_id||!!e?.values.generic_client_id,u=e?.values?eu(e.values):null,p=!!e?.values.role_mappings,g=!!e?.values.team_mappings,_=e=>(0,t.jsx)(eA,{className:"font-mono text-gray-600 text-sm",copyable:!!e,children:e||"-"}),h=e=>e||(0,t.jsx)("span",{className:"text-gray-400 italic",children:"Not configured"}),f=e=>e.team_mappings?.team_ids_jwt_field?(0,t.jsx)(Z.Tag,{children:e.team_mappings.team_ids_jwt_field}):(0,t.jsx)("span",{className:"text-gray-400 italic",children:"Not configured"}),y={column:{xxl:1,xl:1,lg:1,md:1,sm:1,xs:1}},v={google:{providerText:er.google,fields:[{label:"Client ID",render:e=>(0,t.jsx)(ef,{value:e.google_client_id})},{label:"Client Secret",render:e=>(0,t.jsx)(ef,{value:e.google_client_secret})},{label:"Proxy Base URL",render:e=>h(e.proxy_base_url)}]},microsoft:{providerText:er.microsoft,fields:[{label:"Client ID",render:e=>(0,t.jsx)(ef,{value:e.microsoft_client_id})},{label:"Client Secret",render:e=>(0,t.jsx)(ef,{value:e.microsoft_client_secret})},{label:"Tenant",render:e=>h(e.microsoft_tenant)},{label:"Proxy Base URL",render:e=>h(e.proxy_base_url)}]},okta:{providerText:er.okta,fields:[{label:"Client ID",render:e=>(0,t.jsx)(ef,{value:e.generic_client_id})},{label:"Client Secret",render:e=>(0,t.jsx)(ef,{value:e.generic_client_secret})},{label:"Authorization Endpoint",render:e=>_(e.generic_authorization_endpoint)},{label:"Token Endpoint",render:e=>_(e.generic_token_endpoint)},{label:"User Info Endpoint",render:e=>_(e.generic_userinfo_endpoint)},{label:"Proxy Base URL",render:e=>h(e.proxy_base_url)},g?{label:"Team IDs JWT Field",render:e=>f(e)}:null]},generic:{providerText:er.generic,fields:[{label:"Client ID",render:e=>(0,t.jsx)(ef,{value:e.generic_client_id})},{label:"Client Secret",render:e=>(0,t.jsx)(ef,{value:e.generic_client_secret})},{label:"Authorization Endpoint",render:e=>_(e.generic_authorization_endpoint)},{label:"Token Endpoint",render:e=>_(e.generic_token_endpoint)},{label:"User Info Endpoint",render:e=>_(e.generic_userinfo_endpoint)},{label:"Proxy Base URL",render:e=>h(e.proxy_base_url)},g?{label:"Team IDs JWT Field",render:e=>f(e)}:null]}};return(0,t.jsxs)(t.Fragment,{children:[r?(0,t.jsx)(eO,{}):(0,t.jsxs)(x.Space,{direction:"vertical",size:"large",className:"w-full",children:[(0,t.jsx)(V.Card,{children:(0,t.jsxs)(x.Space,{direction:"vertical",size:"large",className:"w-full",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsx)(ee.Shield,{className:"w-6 h-6 text-gray-400"}),(0,t.jsxs)("div",{children:[(0,t.jsx)(eF,{level:3,children:"SSO Configuration"}),(0,t.jsx)(eA,{type:"secondary",children:"Manage Single Sign-On authentication settings"})]})]}),(0,t.jsx)("div",{className:"flex items-center gap-3",children:c&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(m.Button,{icon:(0,t.jsx)(X.Edit,{className:"w-4 h-4"}),onClick:()=>d(!0),children:"Edit SSO Settings"}),(0,t.jsx)(m.Button,{danger:!0,icon:(0,t.jsx)(et.Trash2,{className:"w-4 h-4"}),onClick:()=>l(!0),children:"Delete SSO Settings"})]})})]}),c?(()=>{if(!e?.values||!u)return null;let{values:s}=e,r=v[u];return r?(0,t.jsxs)(J.Descriptions,{bordered:!0,...y,children:[(0,t.jsx)(J.Descriptions.Item,{label:"Provider",children:(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[es[u]&&(0,t.jsx)("img",{src:es[u],alt:u,style:{height:24,width:24,objectFit:"contain"}}),(0,t.jsx)("span",{children:r.providerText})]})}),r.fields.map((e,r)=>e&&(0,t.jsx)(J.Descriptions.Item,{label:e.label,children:e.render(s)},r))]}):null})():(0,t.jsx)(eC,{onAdd:()=>a(!0)})]})}),p&&(0,t.jsx)(eI,{roleMappings:e?.values.role_mappings})]}),(0,t.jsx)(eg,{isVisible:i,onCancel:()=>l(!1),onSuccess:()=>s()}),(0,t.jsx)(ep,{isVisible:n,onCancel:()=>a(!1),onSuccess:()=>{a(!1),s()}}),(0,t.jsx)(e_,{isVisible:o,onCancel:()=>d(!1),onSuccess:()=>{d(!1),s()}})]})}var eM=e.i(292639);let eB=(0,Q.createQueryKeys)("uiSettings");var eU=e.i(111672);let eL={"api-keys":"Manage virtual keys for API access and authentication","llm-playground":"Interactive playground for testing LLM requests",models:"Configure and manage LLM models and endpoints",agents:"Create and manage AI agents",agentic:"Manage agentic resources: agents, workflow runs, and memory",workflows:"Track and inspect durable workflow run history","mcp-servers":"Configure Model Context Protocol servers",memory:"Inspect and manage agent memory entries stored under /v1/memory",guardrails:"Set up content moderation and safety guardrails",policies:"Define access control and usage policies","search-tools":"Configure RAG search and retrieval tools","tool-policies":"Configure tool use policies and permissions","vector-stores":"Manage vector databases for embeddings",new_usage:"View usage analytics and metrics",logs:"Access request and response logs","guardrails-monitor":"Monitor guardrail performance and view logs",users:"Manage internal user accounts and permissions",teams:"Create and manage teams for access control",organizations:"Manage organizations and their members",projects:"Manage projects within teams","access-groups":"Manage access groups for role-based permissions",budgets:"Set and monitor spending budgets",api_ref:"Browse API documentation and endpoints","model-hub-table":"Explore available AI models and providers","learning-resources":"Access tutorials and documentation",caching:"Configure response caching settings","transform-request":"Set up request transformation rules","cost-tracking":"Track and analyze API costs","ui-theme":"Customize dashboard appearance","tag-management":"Organize resources with tags",prompts:"Manage and version prompt templates",skills:"Browse and manage Claude Code skills",usage:"View legacy usage dashboard","router-settings":"Configure routing and load balancing settings","logging-and-alerts":"Set up logging and alert configurations","admin-panel":"Access admin panel and settings"};var eR=e.i(708347);let ez=e=>!e||0===e.length||e.some(e=>eR.internalUserRoles.includes(e));var eD=e.i(362024);function eG({enabledPagesInternalUsers:e,enabledPagesPropertyDescription:s,isUpdating:r,onUpdate:i}){let l=null!=e,n=(0,j.useMemo)(()=>{let e;return e=[],eU.menuGroups.forEach(t=>{t.items.forEach(s=>{if(s.page&&"tools"!==s.page&&"experimental"!==s.page&&"settings"!==s.page&&ez(s.roles)){let r="string"==typeof s.label?s.label:s.key;e.push({page:s.page,label:r,group:t.groupLabel,description:eL[s.page]||"No description available"})}if(s.children){let r="string"==typeof s.label?s.label:s.key;s.children.forEach(s=>{if(ez(s.roles)){let i="string"==typeof s.label?s.label:s.key;e.push({page:s.page,label:i,group:`${t.groupLabel} > ${r}`,description:eL[s.page]||"No description available"})}})}})}),e},[]),a=(0,j.useMemo)(()=>{let e={};return n.forEach(t=>{e[t.group]||(e[t.group]=[]),e[t.group].push(t)}),e},[n]),[o,d]=(0,j.useState)(e||[]);return(0,j.useMemo)(()=>{e?d(e):d([])},[e]),(0,t.jsxs)(x.Space,{direction:"vertical",size:"middle",style:{width:"100%"},children:[(0,t.jsxs)(x.Space,{direction:"vertical",size:4,children:[(0,t.jsxs)(x.Space,{align:"center",children:[(0,t.jsx)(y.Typography.Text,{strong:!0,children:"Internal User Page Visibility"}),!l&&(0,t.jsx)(Z.Tag,{color:"default",style:{marginLeft:"8px"},children:"Not set (all pages visible)"}),l&&(0,t.jsxs)(Z.Tag,{color:"blue",style:{marginLeft:"8px"},children:[o.length," page",1!==o.length?"s":""," selected"]})]}),s&&(0,t.jsx)(y.Typography.Text,{type:"secondary",children:s}),(0,t.jsx)(y.Typography.Text,{type:"secondary",style:{fontSize:"12px",fontStyle:"italic"},children:"By default, all pages are visible to internal users. Select specific pages to restrict visibility."}),(0,t.jsx)(y.Typography.Text,{type:"secondary",style:{fontSize:"12px",color:"#8b5cf6"},children:"Note: Only pages accessible to internal user roles are shown here. Admin-only pages are excluded as they cannot be made visible to internal users regardless of this setting."})]}),(0,t.jsx)(eD.Collapse,{items:[{key:"page-visibility",label:"Configure Page Visibility",children:(0,t.jsxs)(x.Space,{direction:"vertical",size:"middle",style:{width:"100%"},children:[(0,t.jsx)(el.Checkbox.Group,{value:o,onChange:d,style:{width:"100%"},children:(0,t.jsx)(x.Space,{direction:"vertical",size:"middle",style:{width:"100%"},children:Object.entries(a).map(([e,s])=>(0,t.jsxs)("div",{children:[(0,t.jsx)(y.Typography.Text,{strong:!0,style:{fontSize:"11px",color:"#6b7280",letterSpacing:"0.05em",display:"block",marginBottom:"8px"},children:e}),(0,t.jsx)(x.Space,{direction:"vertical",size:"small",style:{marginLeft:"16px",width:"100%"},children:s.map(e=>(0,t.jsx)("div",{style:{marginBottom:"4px"},children:(0,t.jsx)(el.Checkbox,{value:e.page,children:(0,t.jsxs)(x.Space,{direction:"vertical",size:0,children:[(0,t.jsx)(y.Typography.Text,{children:e.label}),(0,t.jsx)(y.Typography.Text,{type:"secondary",style:{fontSize:"12px"},children:e.description})]})})},e.page))})]},e))})}),(0,t.jsxs)(x.Space,{children:[(0,t.jsx)(m.Button,{type:"primary",onClick:()=>{i({enabled_ui_pages_internal_users:o.length>0?o:null})},loading:r,disabled:r,children:"Save Page Visibility Settings"}),l&&(0,t.jsx)(m.Button,{onClick:()=>{d([]),i({enabled_ui_pages_internal_users:null})},loading:r,disabled:r,children:"Reset to Default (All Pages)"})]})]})}]})]})}function eV(){let e,{accessToken:r}=(0,s.default)(),{data:i,isLoading:l,isError:n,error:a}=(0,eM.useUISettings)(),{mutate:o,isPending:d,error:c}=(e=(0,z.useQueryClient)(),(0,R.useMutation)({mutationFn:async e=>{if(!r)throw Error("Access token is required");return(0,I.updateUiSettings)(r,e)},onSuccess:()=>{e.invalidateQueries({queryKey:eB.all})}})),u=i?.field_schema,m=u?.properties?.disable_model_add_for_internal_users,g=u?.properties?.disable_team_admin_delete_team_user,_=u?.properties?.require_auth_for_public_ai_hub,h=u?.properties?.forward_client_headers_to_llm_api,f=u?.properties?.forward_llm_provider_auth_headers,j=u?.properties?.enable_projects_ui,v=u?.properties?.enabled_ui_pages_internal_users,S=u?.properties?.disable_agents_for_internal_users,w=u?.properties?.allow_agents_for_team_admins,k=u?.properties?.disable_vector_stores_for_internal_users,T=u?.properties?.allow_vector_stores_for_team_admins,C=u?.properties?.scope_user_search_to_org,E=u?.properties?.disable_custom_api_keys,N=i?.values??{},O=!!N.disable_model_add_for_internal_users,F=!!N.disable_team_admin_delete_team_user,A=!!N.disable_agents_for_internal_users,P=!!N.disable_vector_stores_for_internal_users;return(0,t.jsx)(V.Card,{title:"UI Settings",children:l?(0,t.jsx)(q.Skeleton,{active:!0}):n?(0,t.jsx)(p.Alert,{type:"error",message:"Could not load UI settings",description:a instanceof Error?a.message:void 0}):(0,t.jsxs)(x.Space,{direction:"vertical",size:"large",style:{width:"100%"},children:[u?.description&&(0,t.jsx)(y.Typography.Paragraph,{style:{marginBottom:0},children:u.description}),c&&(0,t.jsx)(p.Alert,{type:"error",message:"Could not update UI settings",description:c instanceof Error?c.message:void 0}),(0,t.jsxs)(x.Space,{align:"start",size:"middle",children:[(0,t.jsx)(K.Switch,{checked:O,disabled:d,loading:d,onChange:e=>{o({disable_model_add_for_internal_users:e},{onSuccess:()=>{b.default.success("UI settings updated successfully")},onError:e=>{b.default.fromBackend(e)}})},"aria-label":m?.description??"Disable model add for internal users"}),(0,t.jsxs)(x.Space,{direction:"vertical",size:4,children:[(0,t.jsx)(y.Typography.Text,{strong:!0,children:"Disable model add for internal users"}),m?.description&&(0,t.jsx)(y.Typography.Text,{type:"secondary",children:m.description})]})]}),(0,t.jsxs)(x.Space,{align:"start",size:"middle",children:[(0,t.jsx)(K.Switch,{checked:F,disabled:d,loading:d,onChange:e=>{o({disable_team_admin_delete_team_user:e},{onSuccess:()=>{b.default.success("UI settings updated successfully")},onError:e=>{b.default.fromBackend(e)}})},"aria-label":g?.description??"Disable team admin delete team user"}),(0,t.jsxs)(x.Space,{direction:"vertical",size:4,children:[(0,t.jsx)(y.Typography.Text,{strong:!0,children:"Disable team admin delete team user"}),g?.description&&(0,t.jsx)(y.Typography.Text,{type:"secondary",children:g.description})]})]}),(0,t.jsxs)(x.Space,{align:"start",size:"middle",children:[(0,t.jsx)(K.Switch,{checked:N.require_auth_for_public_ai_hub,disabled:d,loading:d,onChange:e=>{o({require_auth_for_public_ai_hub:e},{onSuccess:()=>{b.default.success("UI settings updated successfully")},onError:e=>{b.default.fromBackend(e)}})},"aria-label":_?.description??"Require authentication for public AI Hub"}),(0,t.jsxs)(x.Space,{direction:"vertical",size:4,children:[(0,t.jsx)(y.Typography.Text,{strong:!0,children:"Require authentication for public AI Hub"}),_?.description&&(0,t.jsx)(y.Typography.Text,{type:"secondary",children:_.description})]})]}),(0,t.jsxs)(x.Space,{align:"start",size:"middle",children:[(0,t.jsx)(K.Switch,{checked:!!N.forward_client_headers_to_llm_api,disabled:d,loading:d,onChange:e=>{o({forward_client_headers_to_llm_api:e},{onSuccess:()=>{b.default.success("UI settings updated successfully")},onError:e=>{b.default.fromBackend(e)}})},"aria-label":h?.description??"Forward client headers to LLM API"}),(0,t.jsxs)(x.Space,{direction:"vertical",size:4,children:[(0,t.jsx)(y.Typography.Text,{strong:!0,children:"Forward client headers to LLM API"}),(0,t.jsx)(y.Typography.Text,{type:"secondary",children:h?.description??"Forwards client headers (Authorization, anthropic-beta, and x-* custom headers) to the upstream LLM. Enable for Claude Code with a Max subscription (forwards the OAuth token) or to pass custom/tracing headers through to the provider. Independent of the BYOK toggle — enable only the one(s) you need."})]})]}),(0,t.jsxs)(x.Space,{align:"start",size:"middle",children:[(0,t.jsx)(K.Switch,{checked:!!N.forward_llm_provider_auth_headers,disabled:d,loading:d,onChange:e=>{o({forward_llm_provider_auth_headers:e},{onSuccess:()=>{b.default.success("UI settings updated successfully")},onError:e=>{b.default.fromBackend(e)}})},"aria-label":f?.description??"Forward LLM provider auth headers"}),(0,t.jsxs)(x.Space,{direction:"vertical",size:4,children:[(0,t.jsx)(y.Typography.Text,{strong:!0,children:"Forward LLM provider auth headers"}),(0,t.jsx)(y.Typography.Text,{type:"secondary",children:f?.description??"Forwards provider auth headers (x-api-key, x-goog-api-key, api-key, ocp-apim-subscription-key) to the upstream LLM, overriding any deployment-configured key for that request. Enable for Claude Code BYOK (clients bring their own API key). Independent of the client-headers toggle — enable only the one(s) you need."})]})]}),j&&(0,t.jsxs)(x.Space,{align:"start",size:"middle",children:[(0,t.jsx)(K.Switch,{checked:!!N.enable_projects_ui,disabled:d,loading:d,onChange:e=>{o({enable_projects_ui:e},{onSuccess:()=>{b.default.success("UI settings updated successfully. Refreshing page..."),setTimeout(()=>window.location.reload(),1e3)},onError:e=>{b.default.fromBackend(e)}})},"aria-label":j.description??"Enable Projects UI"}),(0,t.jsxs)(x.Space,{direction:"vertical",size:4,children:[(0,t.jsx)(y.Typography.Text,{strong:!0,children:"[BETA] Enable Projects (page will refresh)"}),(0,t.jsx)(y.Typography.Text,{type:"secondary",children:j.description??"If enabled, shows the Projects feature in the UI sidebar and the project field in key management."})]})]}),(0,t.jsx)(ey.Divider,{}),(0,t.jsxs)(x.Space,{align:"start",size:"middle",children:[(0,t.jsx)(K.Switch,{checked:A,disabled:d,loading:d,onChange:e=>{o({disable_agents_for_internal_users:e},{onSuccess:()=>{b.default.success("UI settings updated successfully")},onError:e=>{b.default.fromBackend(e)}})},"aria-label":S?.description??"Disable agents for internal users"}),(0,t.jsxs)(x.Space,{direction:"vertical",size:4,children:[(0,t.jsx)(y.Typography.Text,{strong:!0,children:"Disable agents for internal users"}),S?.description&&(0,t.jsx)(y.Typography.Text,{type:"secondary",children:S.description})]})]}),(0,t.jsxs)(x.Space,{align:"start",size:"middle",style:{marginLeft:32},children:[(0,t.jsx)(K.Switch,{checked:!!N.allow_agents_for_team_admins,disabled:d||!A,loading:d,onChange:e=>{o({allow_agents_for_team_admins:e},{onSuccess:()=>{b.default.success("UI settings updated successfully")},onError:e=>{b.default.fromBackend(e)}})},"aria-label":w?.description??"Allow agents for team admins"}),(0,t.jsxs)(x.Space,{direction:"vertical",size:4,children:[(0,t.jsx)(y.Typography.Text,{strong:!0,type:A?void 0:"secondary",children:"Allow agents for team admins"}),w?.description&&(0,t.jsx)(y.Typography.Text,{type:"secondary",children:w.description})]})]}),(0,t.jsx)(ey.Divider,{}),(0,t.jsxs)(x.Space,{align:"start",size:"middle",children:[(0,t.jsx)(K.Switch,{checked:P,disabled:d,loading:d,onChange:e=>{o({disable_vector_stores_for_internal_users:e},{onSuccess:()=>{b.default.success("UI settings updated successfully")},onError:e=>{b.default.fromBackend(e)}})},"aria-label":k?.description??"Disable vector stores for internal users"}),(0,t.jsxs)(x.Space,{direction:"vertical",size:4,children:[(0,t.jsx)(y.Typography.Text,{strong:!0,children:"Disable vector stores for internal users"}),k?.description&&(0,t.jsx)(y.Typography.Text,{type:"secondary",children:k.description})]})]}),(0,t.jsxs)(x.Space,{align:"start",size:"middle",style:{marginLeft:32},children:[(0,t.jsx)(K.Switch,{checked:!!N.allow_vector_stores_for_team_admins,disabled:d||!P,loading:d,onChange:e=>{o({allow_vector_stores_for_team_admins:e},{onSuccess:()=>{b.default.success("UI settings updated successfully")},onError:e=>{b.default.fromBackend(e)}})},"aria-label":T?.description??"Allow vector stores for team admins"}),(0,t.jsxs)(x.Space,{direction:"vertical",size:4,children:[(0,t.jsx)(y.Typography.Text,{strong:!0,type:P?void 0:"secondary",children:"Allow vector stores for team admins"}),T?.description&&(0,t.jsx)(y.Typography.Text,{type:"secondary",children:T.description})]})]}),(0,t.jsx)(ey.Divider,{}),(0,t.jsxs)(x.Space,{align:"start",size:"middle",children:[(0,t.jsx)(K.Switch,{checked:!!N.scope_user_search_to_org,disabled:d,loading:d,onChange:e=>{o({scope_user_search_to_org:e},{onSuccess:()=>{b.default.success("UI settings updated successfully")},onError:e=>{b.default.fromBackend(e)}})},"aria-label":C?.description??"Scope user search to organization"}),(0,t.jsxs)(x.Space,{direction:"vertical",size:4,children:[(0,t.jsx)(y.Typography.Text,{strong:!0,children:"Scope user search to organization"}),(0,t.jsx)(y.Typography.Text,{type:"secondary",children:C?.description??"If enabled, the user search endpoint restricts results by organization. When off, any authenticated user can search all users."})]})]}),(0,t.jsx)(ey.Divider,{}),(0,t.jsxs)(x.Space,{align:"start",size:"middle",children:[(0,t.jsx)(K.Switch,{checked:!!N.disable_custom_api_keys,disabled:d,loading:d,onChange:e=>{o({disable_custom_api_keys:e},{onSuccess:()=>{b.default.success("UI settings updated successfully")},onError:e=>{b.default.fromBackend(e)}})},"aria-label":E?.description??"Disable custom Virtual key values"}),(0,t.jsxs)(x.Space,{direction:"vertical",size:4,children:[(0,t.jsx)(y.Typography.Text,{strong:!0,children:"Disable custom Virtual key values"}),(0,t.jsx)(y.Typography.Text,{type:"secondary",children:E?.description??"If true, users cannot specify custom key values. All keys must be auto-generated."})]})]}),(0,t.jsx)(ey.Divider,{}),(0,t.jsx)(eG,{enabledPagesInternalUsers:N.enabled_ui_pages_internal_users,enabledPagesPropertyDescription:v?.description,isUpdating:d,onUpdate:e=>{o(e,{onSuccess:()=>{b.default.success("Page visibility settings updated successfully")},onError:e=>{b.default.fromBackend(e)}})}})]})})}var eq=e.i(431703);let eK=async e=>{let t=(0,I.getProxyBaseUrl)(),s=t?`${t}/config_overrides/hashicorp_vault`:"/config_overrides/hashicorp_vault",r=await fetch(s,{method:"GET",headers:{[(0,I.getGlobalLitellmHeaderName)()]:`Bearer ${e}`}});if(!r.ok){let e=await r.json();throw Error((0,eq.deriveErrorMessage)(e))}return await r.json()},eH=async(e,t)=>{let s=(0,I.getProxyBaseUrl)(),r=s?`${s}/config_overrides/hashicorp_vault`:"/config_overrides/hashicorp_vault",i=await fetch(r,{method:"POST",headers:{[(0,I.getGlobalLitellmHeaderName)()]:`Bearer ${e}`,"Content-Type":"application/json"},body:JSON.stringify(t)});if(!i.ok){let e=await i.json();throw Error((0,eq.deriveErrorMessage)(e))}return await i.json()},e$=async e=>{let t=(0,I.getProxyBaseUrl)(),s=t?`${t}/config_overrides/hashicorp_vault`:"/config_overrides/hashicorp_vault",r=await fetch(s,{method:"DELETE",headers:{[(0,I.getGlobalLitellmHeaderName)()]:`Bearer ${e}`}});if(!r.ok){let e=await r.json();throw Error((0,eq.deriveErrorMessage)(e))}return await r.json()},eQ=async e=>{let t=(0,I.getProxyBaseUrl)(),s=t?`${t}/config_overrides/hashicorp_vault/test_connection`:"/config_overrides/hashicorp_vault/test_connection",r=await fetch(s,{method:"POST",headers:{[(0,I.getGlobalLitellmHeaderName)()]:`Bearer ${e}`}});if(!r.ok){let e=await r.json();throw Error((0,eq.deriveErrorMessage)(e))}return await r.json()},eW=(0,Q.createQueryKeys)("hashicorpVaultConfig"),eY=()=>{let{accessToken:e}=(0,s.default)();return(0,$.useQuery)({queryKey:eW.list({}),queryFn:async()=>{if(!e)throw Error("Access token is required");return eK(e)},enabled:!!e,staleTime:36e5,gcTime:36e5})},eJ=e=>{let t=(0,z.useQueryClient)();return(0,R.useMutation)({mutationFn:async t=>{if(!e)throw Error("Access token is required");return eH(e,t)},onSuccess:()=>{t.invalidateQueries({queryKey:eW.all})}})};var eZ=e.i(525720),eX=e.i(475254);let e0=(0,eX.default)("key-round",[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]]),e1=(0,eX.default)("plug-zap",[["path",{d:"M6.3 20.3a2.4 2.4 0 0 0 3.4 0L12 18l-6-6-2.3 2.3a2.4 2.4 0 0 0 0 3.4Z",key:"goz73y"}],["path",{d:"m2 22 3-3",key:"19mgm9"}],["path",{d:"M7.5 13.5 10 11",key:"7xgeeb"}],["path",{d:"M10.5 16.5 13 14",key:"10btkg"}],["path",{d:"m18 3-4 4h6l-4 4",key:"16psg9"}]]),e4=new Set(["vault_token","approle_secret_id","client_key"]),e2={vault_addr:"Vault Address",vault_namespace:"Namespace",vault_mount_name:"KV Mount Name",vault_path_prefix:"Path Prefix",vault_token:"Token",approle_role_id:"Role ID",approle_secret_id:"Secret ID",approle_mount_path:"Mount Path",client_cert:"Client Certificate",client_key:"Client Key",vault_cert_role:"Certificate Role"},e6=[{title:"Connection",fields:["vault_addr","vault_namespace","vault_mount_name","vault_path_prefix"]},{title:"Token Authentication",subtitle:"Use a Vault token to authenticate. Only one auth method is required.",fields:["vault_token"]},{title:"AppRole Authentication",subtitle:"Use AppRole credentials to authenticate. Only one auth method is required.",fields:["approle_role_id","approle_secret_id","approle_mount_path"]},{title:"TLS",subtitle:"Optional client certificate for mTLS.",fields:["client_cert","client_key","vault_cert_role"]}],e3=({isVisible:e,onCancel:r,onSuccess:i})=>{let[l]=g.Form.useForm(),{accessToken:n}=(0,s.default)(),{data:a}=eY(),{mutate:o,isPending:d}=eJ(n),c=a?.field_schema,u=c?.properties??{},p=a?.values??{};(0,j.useEffect)(()=>{if(e&&a){l.resetFields();let e={};for(let[t,s]of Object.entries(p))e4.has(t)||(e[t]=s);l.setFieldsValue(e)}},[e,a,l]);let f=()=>{l.resetFields(),r()},v=e=>{let s=u[e];if(!s)return null;let r="vault_addr"===e?[{pattern:/^https?:\/\/.+/,message:"Must start with http:// or https://"}]:void 0,i=e4.has(e),l=p[e],n=i&&null!=l&&""!==l?`Leave blank to keep existing (${l})`:s?.description;return(0,t.jsx)(g.Form.Item,{name:e,label:e2[e]??e,rules:r,children:i?(0,t.jsx)(_.Input.Password,{placeholder:n}):(0,t.jsx)(_.Input,{placeholder:s?.description})},e)};return(0,t.jsx)(h.Modal,{title:"Edit Hashicorp Vault Configuration",open:e,width:700,footer:(0,t.jsxs)(x.Space,{children:[(0,t.jsx)(m.Button,{onClick:f,disabled:d,children:"Cancel"}),(0,t.jsx)(m.Button,{type:"primary",loading:d,onClick:()=>l.submit(),children:d?"Saving...":"Save"})]}),onCancel:f,children:(0,t.jsx)(g.Form,{form:l,layout:"vertical",onFinish:e=>{let t={};for(let[s,r]of Object.entries(e))null!=r&&""!==r?t[s]=r:e4.has(s)||(t[s]="");o(t,{onSuccess:()=>{b.default.success("Hashicorp Vault configuration updated successfully"),i()},onError:e=>{b.default.fromBackend(e)}})},children:e6.map((e,s)=>(0,t.jsxs)("div",{children:[s>0&&(0,t.jsx)(ey.Divider,{}),(0,t.jsx)(y.Typography.Title,{level:5,style:{marginBottom:4},children:e.title}),e.subtitle&&(0,t.jsx)(y.Typography.Paragraph,{type:"secondary",style:{marginBottom:16},children:e.subtitle}),e.fields.map(v)]},e.title))})})},{Title:e5,Paragraph:e8}=y.Typography;function e7({onAdd:e}){return(0,t.jsx)("div",{className:"bg-white p-12 rounded-lg border border-dashed border-gray-300 text-center w-full",children:(0,t.jsx)(ew.Empty,{image:ew.Empty.PRESENTED_IMAGE_SIMPLE,description:(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)(e5,{level:4,children:"No Vault Configuration Found"}),(0,t.jsx)(e8,{type:"secondary",className:"max-w-md mx-auto",children:"Configure Hashicorp Vault to securely manage provider API keys and secrets for your LiteLLM deployment."})]}),children:(0,t.jsx)(m.Button,{type:"primary",size:"large",onClick:e,className:"flex items-center gap-2 mx-auto mt-4",children:"Configure Vault"})})})}let{Title:e9,Text:te}=y.Typography,tt={column:{xxl:1,xl:1,lg:1,md:1,sm:1,xs:1}};function ts(){let e,{accessToken:r}=(0,s.default)(),{data:i,isLoading:l,isError:n,error:a}=eY(),{mutate:o,isPending:d}=(e=(0,z.useQueryClient)(),(0,R.useMutation)({mutationFn:async()=>{if(!r)throw Error("Access token is required");return e$(r)},onSuccess:()=>{e.invalidateQueries({queryKey:eW.all})}})),{mutate:c,isPending:u}=eJ(r),[g,_]=(0,j.useState)(!1),[h,f]=(0,j.useState)(!1),[v,S]=(0,j.useState)(null),[I,w]=(0,j.useState)(!1),k=i?.values??{},T=!!k.vault_addr,C=async()=>{if(r){w(!0);try{let e=await eQ(r);b.default.success(e.message||"Connection to Vault successful!")}catch(e){b.default.fromBackend(e)}finally{w(!1)}}};return(0,t.jsxs)(t.Fragment,{children:[l?(0,t.jsx)(V.Card,{children:(0,t.jsx)(q.Skeleton,{active:!0})}):n?(0,t.jsx)(V.Card,{children:(0,t.jsx)(p.Alert,{type:"error",message:"Could not load Hashicorp Vault configuration",description:a instanceof Error?a.message:void 0})}):(0,t.jsx)(V.Card,{children:(0,t.jsxs)(x.Space,{direction:"vertical",size:"large",className:"w-full",children:[(0,t.jsxs)(eZ.Flex,{justify:"space-between",align:"center",children:[(0,t.jsxs)(eZ.Flex,{align:"center",gap:12,children:[(0,t.jsx)(e0,{className:"w-6 h-6 text-gray-400"}),(0,t.jsxs)("div",{children:[(0,t.jsx)(e9,{level:3,style:{marginBottom:0},children:"Hashicorp Vault"}),(0,t.jsx)(te,{type:"secondary",children:"Manage secret manager configuration"})]})]}),(0,t.jsx)(x.Space,{children:T&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(m.Button,{icon:(0,t.jsx)(e1,{className:"w-4 h-4"}),loading:I,onClick:C,children:"Test Connection"}),(0,t.jsx)(m.Button,{icon:(0,t.jsx)(X.Edit,{className:"w-4 h-4"}),onClick:()=>_(!0),children:"Edit Configuration"}),(0,t.jsx)(m.Button,{danger:!0,icon:(0,t.jsx)(et.Trash2,{className:"w-4 h-4"}),onClick:()=>f(!0),children:"Delete Configuration"})]})})]}),T&&(0,t.jsx)(p.Alert,{type:"info",showIcon:!0,message:'Secrets must be stored with the field name "key"',description:(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(te,{code:!0,children:"vault kv put secret/SECRET_NAME key=secret_value"}),(0,t.jsx)("br",{}),(0,t.jsx)(y.Typography.Link,{href:"https://docs.litellm.ai/docs/secret_managers/hashicorp_vault",target:"_blank",children:"View documentation"})]})}),T?(()=>{let e=Object.entries(k).filter(([e,t])=>null!=t&&""!==t);return 0===e.length?null:(0,t.jsxs)(J.Descriptions,{bordered:!0,...tt,children:[(0,t.jsx)(J.Descriptions.Item,{label:"Auth Method",children:(0,t.jsx)(te,{children:k.approle_role_id||k.approle_secret_id?"AppRole":k.client_cert&&k.client_key?"TLS Certificate":k.vault_token?"Token":"None"})}),e.map(([e])=>{let s;return(0,t.jsx)(J.Descriptions.Item,{label:e2[e]??e,children:(s=k[e])?e4.has(e)?(0,t.jsxs)(eZ.Flex,{justify:"space-between",align:"center",children:[(0,t.jsx)(te,{className:"font-mono text-gray-600",children:s}),(0,t.jsx)(m.Button,{type:"text",size:"small",danger:!0,icon:(0,t.jsx)(et.Trash2,{className:"w-3.5 h-3.5"}),onClick:()=>S(e)})]}):(0,t.jsx)(te,{className:"font-mono text-gray-600",children:s}):(0,t.jsx)("span",{className:"text-gray-400 italic",children:"Not configured"})},e)})]})})():(0,t.jsx)(e7,{onAdd:()=>_(!0)})]})}),(0,t.jsx)(e3,{isVisible:g,onCancel:()=>_(!1),onSuccess:()=>_(!1)}),(0,t.jsx)(em.default,{isOpen:h,title:"Delete Hashicorp Vault Configuration?",message:"Models using Vault secrets will lose access to their API keys until a new configuration is saved.",resourceInformationTitle:"Vault Configuration",resourceInformation:[{label:"Vault Address",value:k.vault_addr}],onCancel:()=>f(!1),onOk:()=>{o(void 0,{onSuccess:()=>{b.default.success("Hashicorp Vault configuration deleted"),f(!1)},onError:e=>{b.default.fromBackend(e)}})},confirmLoading:d}),(0,t.jsx)(em.default,{isOpen:null!==v,title:`Clear ${v?e2[v]??v:""}?`,message:"This will remove the stored value.",resourceInformationTitle:"Field",resourceInformation:[{label:"Field",value:v?e2[v]??v:""}],onCancel:()=>S(null),onOk:()=>{v&&c({[v]:""},{onSuccess:()=>{b.default.success(`${e2[v]??v} cleared`),S(null)},onError:e=>{b.default.fromBackend(e)}})},confirmLoading:u})]})}var tr=e.i(955135),ti=e.i(751904),tl=e.i(646563);let{Title:tn,Text:ta,Paragraph:to}=y.Typography;function td(){let{accessToken:e}=(0,s.default)(),[r,i]=(0,j.useState)([]),[l,n]=(0,j.useState)(!0),[a,o]=(0,j.useState)(!1),[d,c]=(0,j.useState)(!1),[u,p]=(0,j.useState)(null),[f]=g.Form.useForm();(0,j.useEffect)(()=>{e&&(0,I.getConfigFieldSetting)(e,"plugins").then(e=>{let t=e?.field_value;i(Array.isArray(t)?t:[])}).catch(()=>i([])).finally(()=>n(!1))},[e]);let y=async t=>{if(e){o(!0);try{await (0,I.updateConfigFieldSetting)(e,"plugins",t),i(t)}finally{o(!1)}}},v=async()=>{let e=await f.validateFields(),t=null!==u?r.map((t,s)=>s===u?e:t):[...r,e];await y(t),c(!1)},S=[{title:"Name",dataIndex:"name",key:"name",render:e=>(0,t.jsx)(ta,{code:!0,children:e})},{title:"Display Name",dataIndex:"display_name",key:"display_name"},{title:"URL",dataIndex:"url",key:"url",render:e=>(0,t.jsx)("a",{href:e,target:"_blank",rel:"noopener noreferrer",children:e})},{title:"Plugin Key",dataIndex:"plugin_key",key:"plugin_key",render:e=>e?(0,t.jsx)(ta,{code:!0,children:"•".repeat(8)}):(0,t.jsx)(ta,{type:"secondary",children:"—"})},{title:"Actions",key:"actions",render:(e,s,i)=>(0,t.jsxs)(x.Space,{children:[(0,t.jsx)(m.Button,{icon:(0,t.jsx)(ti.EditOutlined,{}),size:"small",onClick:()=>{p(i),f.setFieldsValue({...r[i],plugin_key:""}),c(!0)}}),(0,t.jsx)(m.Button,{icon:(0,t.jsx)(tr.DeleteOutlined,{}),size:"small",danger:!0,onClick:()=>{y(r.filter((e,t)=>t!==i))}})]})}];return(0,t.jsxs)(V.Card,{children:[(0,t.jsx)(tn,{level:4,children:"Plugins"}),(0,t.jsx)(to,{children:"Register external services as plugins. Once added, users can toggle to the plugin from the mode switcher in the top-left of the sidebar."}),(0,t.jsxs)(to,{type:"secondary",style:{fontSize:12},children:["Each plugin must expose ",(0,t.jsx)(ta,{code:!0,children:"GET /api/plugin-manifest"})," returning nav items and capabilities."]}),(0,t.jsx)(m.Button,{type:"primary",icon:(0,t.jsx)(tl.PlusOutlined,{}),onClick:()=>{p(null),f.resetFields(),c(!0)},style:{marginBottom:16},children:"Add Plugin"}),(0,t.jsx)(ej.Table,{dataSource:r,columns:S,rowKey:"name",loading:l,pagination:!1,size:"small"}),(0,t.jsx)(h.Modal,{title:null!==u?"Edit Plugin":"Add Plugin",open:d,onOk:v,onCancel:()=>c(!1),confirmLoading:a,okText:"Save",children:(0,t.jsxs)(g.Form,{form:f,layout:"vertical",style:{marginTop:16},children:[(0,t.jsx)(g.Form.Item,{name:"name",label:"Name (identifier)",rules:[{required:!0,message:"Required"}],extra:"Used in URLs and config. No spaces. E.g. litellm-platform-plugin",children:(0,t.jsx)(_.Input,{placeholder:"litellm-platform-plugin"})}),(0,t.jsx)(g.Form.Item,{name:"display_name",label:"Display Name",rules:[{required:!0,message:"Required"}],children:(0,t.jsx)(_.Input,{placeholder:"Agent Control Plane"})}),(0,t.jsx)(g.Form.Item,{name:"url",label:"URL",rules:[{required:!0,message:"Required"},{type:"url",message:"Must be a valid URL"}],extra:"Base URL of the plugin service",children:(0,t.jsx)(_.Input,{placeholder:"https://your-plugin.example.com"})}),(0,t.jsx)(g.Form.Item,{name:"plugin_key",label:"Plugin Key",extra:"Optional. The plugin's own credential, injected as Authorization: Bearer only when litellm reverse-proxies API calls to the plugin's backend (/plugin-proxy//*). Leave blank for plugins that use the forwarded litellm user token (e.g. iframe plugins) — that path uses the user's token, not this key.",children:(0,t.jsx)(_.Input.Password,{placeholder:null!==u?"Leave blank to keep current key":"sk-... (optional)"})})]})})]})}let tc={google:"https://artificialanalysis.ai/img/logos/google_small.svg",microsoft:"https://upload.wikimedia.org/wikipedia/commons/a/a8/Microsoft_Azure_Logo.svg",okta:"https://www.okta.com/sites/default/files/Okta_Logo_BrightBlue_Medium.png",generic:""},tu={google:{envVarMap:{google_client_id:"GOOGLE_CLIENT_ID",google_client_secret:"GOOGLE_CLIENT_SECRET"},fields:[{label:"Google Client ID",name:"google_client_id"},{label:"Google Client Secret",name:"google_client_secret"}]},microsoft:{envVarMap:{microsoft_client_id:"MICROSOFT_CLIENT_ID",microsoft_client_secret:"MICROSOFT_CLIENT_SECRET",microsoft_tenant:"MICROSOFT_TENANT"},fields:[{label:"Microsoft Client ID",name:"microsoft_client_id"},{label:"Microsoft Client Secret",name:"microsoft_client_secret"},{label:"Microsoft Tenant",name:"microsoft_tenant"}]},okta:{envVarMap:{generic_client_id:"GENERIC_CLIENT_ID",generic_client_secret:"GENERIC_CLIENT_SECRET",generic_authorization_endpoint:"GENERIC_AUTHORIZATION_ENDPOINT",generic_token_endpoint:"GENERIC_TOKEN_ENDPOINT",generic_userinfo_endpoint:"GENERIC_USERINFO_ENDPOINT"},fields:[{label:"Generic Client ID",name:"generic_client_id"},{label:"Generic Client Secret",name:"generic_client_secret"},{label:"Authorization Endpoint",name:"generic_authorization_endpoint",placeholder:"https://your-domain/authorize"},{label:"Token Endpoint",name:"generic_token_endpoint",placeholder:"https://your-domain/token"},{label:"Userinfo Endpoint",name:"generic_userinfo_endpoint",placeholder:"https://your-domain/userinfo"}]},generic:{envVarMap:{generic_client_id:"GENERIC_CLIENT_ID",generic_client_secret:"GENERIC_CLIENT_SECRET",generic_authorization_endpoint:"GENERIC_AUTHORIZATION_ENDPOINT",generic_token_endpoint:"GENERIC_TOKEN_ENDPOINT",generic_userinfo_endpoint:"GENERIC_USERINFO_ENDPOINT"},fields:[{label:"Generic Client ID",name:"generic_client_id"},{label:"Generic Client Secret",name:"generic_client_secret"},{label:"Authorization Endpoint",name:"generic_authorization_endpoint"},{label:"Token Endpoint",name:"generic_token_endpoint"},{label:"Userinfo Endpoint",name:"generic_userinfo_endpoint"}]}},tp=({isAddSSOModalVisible:e,isInstructionsModalVisible:s,handleAddSSOOk:r,handleAddSSOCancel:i,handleShowInstructions:l,handleInstructionsOk:n,handleInstructionsCancel:a,form:o,accessToken:d,ssoConfigured:c=!1})=>{let[u,p]=(0,j.useState)(!1);(0,j.useEffect)(()=>{(async()=>{if(e&&d)try{let e=await (0,I.getSSOSettings)(d);if(console.log("Raw SSO data received:",e),e&&e.values){console.log("SSO values:",e.values),console.log("user_email from API:",e.values.user_email);let t=null;e.values.google_client_id?t="google":e.values.microsoft_client_id?t="microsoft":e.values.generic_client_id&&(t=e.values.generic_authorization_endpoint?.includes("okta")||e.values.generic_authorization_endpoint?.includes("auth0")?"okta":"generic");let s={};if(e.values.role_mappings){let t=e.values.role_mappings,r=e=>e&&0!==e.length?e.join(", "):"";s={use_role_mappings:!0,group_claim:t.group_claim,default_role:t.default_role||"internal_user",proxy_admin_teams:r(t.roles?.proxy_admin),admin_viewer_teams:r(t.roles?.proxy_admin_viewer),internal_user_teams:r(t.roles?.internal_user),internal_viewer_teams:r(t.roles?.internal_user_viewer)}}let r={sso_provider:t,proxy_base_url:e.values.proxy_base_url,user_email:e.values.user_email,...e.values,...s};console.log("Setting form values:",r),o.resetFields(),setTimeout(()=>{o.setFieldsValue(r),console.log("Form values set, current form values:",o.getFieldsValue())},100)}}catch(e){console.error("Failed to load SSO settings:",e)}})()},[e,d,o]);let x=async e=>{if(!d)return void b.default.fromBackend("No access token available");try{let{proxy_admin_teams:t,admin_viewer_teams:s,internal_user_teams:r,internal_viewer_teams:i,default_role:n,group_claim:a,use_role_mappings:o,...c}=e,u={...c};if(o){let e=e=>e&&""!==e.trim()?e.split(",").map(e=>e.trim()).filter(e=>e.length>0):[];u.role_mappings={provider:"generic",group_claim:a,default_role:({internal_user_viewer:"internal_user_viewer",internal_user:"internal_user",proxy_admin_viewer:"proxy_admin_viewer",proxy_admin:"proxy_admin"})[n]||"internal_user",roles:{proxy_admin:e(t),proxy_admin_viewer:e(s),internal_user:e(r),internal_user_viewer:e(i)}}}await (0,I.updateSSOSettings)(d,u),l(e)}catch(e){b.default.fromBackend("Failed to save SSO settings: "+(0,B.parseErrorMessage)(e))}},f=async()=>{if(!d)return void b.default.fromBackend("No access token available");try{await (0,I.updateSSOSettings)(d,{google_client_id:null,google_client_secret:null,microsoft_client_id:null,microsoft_client_secret:null,microsoft_tenant:null,generic_client_id:null,generic_client_secret:null,generic_authorization_endpoint:null,generic_token_endpoint:null,generic_userinfo_endpoint:null,proxy_base_url:null,user_email:null,sso_provider:null,role_mappings:null}),o.resetFields(),p(!1),r(),b.default.success("SSO settings cleared successfully")}catch(e){console.error("Failed to clear SSO settings:",e),b.default.fromBackend("Failed to clear SSO settings")}};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(h.Modal,{title:c?"Edit SSO Settings":"Add SSO",open:e,width:800,footer:null,onOk:r,onCancel:i,children:(0,t.jsxs)(g.Form,{form:o,onFinish:x,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(g.Form.Item,{label:"SSO Provider",name:"sso_provider",rules:[{required:!0,message:"Please select an SSO provider"}],children:(0,t.jsx)(en.Select,{children:Object.entries(tc).map(([e,s])=>(0,t.jsx)(en.Select.Option,{value:e,children:(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",padding:"4px 0"},children:[s&&(0,t.jsx)("img",{src:s,alt:e,style:{height:24,width:24,marginRight:12,objectFit:"contain"}}),(0,t.jsxs)("span",{children:["okta"===e.toLowerCase()?"Okta / Auth0":e.charAt(0).toUpperCase()+e.slice(1)," ","SSO"]})]})},e))})}),(0,t.jsx)(g.Form.Item,{noStyle:!0,shouldUpdate:(e,t)=>e.sso_provider!==t.sso_provider,children:({getFieldValue:e})=>{let s,r=e("sso_provider");return r&&(s=tu[r])?s.fields.map(e=>(0,t.jsx)(g.Form.Item,{label:e.label,name:e.name,rules:[{required:!0,message:`Please enter the ${e.label.toLowerCase()}`}],children:e.name.includes("client")?(0,t.jsx)(_.Input.Password,{}):(0,t.jsx)(C.TextInput,{placeholder:e.placeholder})},e.name)):null}}),(0,t.jsx)(g.Form.Item,{label:"Proxy Admin Email",name:"user_email",rules:[{required:!0,message:"Please enter the email of the proxy admin"}],children:(0,t.jsx)(C.TextInput,{})}),(0,t.jsx)(g.Form.Item,{label:"Proxy Base URL",name:"proxy_base_url",normalize:e=>e?.trim(),rules:[{required:!0,message:"Please enter the proxy base url"},{pattern:/^https?:\/\/.+/,message:"URL must start with http:// or https://"},{validator:(e,t)=>t&&/^https?:\/\/.+/.test(t)&&t.endsWith("/")?Promise.reject("URL must not end with a trailing slash"):Promise.resolve()}],children:(0,t.jsx)(C.TextInput,{placeholder:"https://example.com"})}),(0,t.jsx)(g.Form.Item,{noStyle:!0,shouldUpdate:(e,t)=>e.sso_provider!==t.sso_provider,children:({getFieldValue:e})=>{let s=e("sso_provider");return"okta"===s||"generic"===s?(0,t.jsx)(g.Form.Item,{label:"Use Role Mappings",name:"use_role_mappings",valuePropName:"checked",children:(0,t.jsx)(el.Checkbox,{})}):null}}),(0,t.jsx)(g.Form.Item,{noStyle:!0,shouldUpdate:(e,t)=>e.use_role_mappings!==t.use_role_mappings,children:({getFieldValue:e})=>e("use_role_mappings")?(0,t.jsx)(g.Form.Item,{label:"Group Claim",name:"group_claim",rules:[{required:!0,message:"Please enter the group claim"}],children:(0,t.jsx)(C.TextInput,{})}):null}),(0,t.jsx)(g.Form.Item,{noStyle:!0,shouldUpdate:(e,t)=>e.use_role_mappings!==t.use_role_mappings,children:({getFieldValue:e})=>e("use_role_mappings")?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(g.Form.Item,{label:"Default Role",name:"default_role",initialValue:"Internal User",children:(0,t.jsxs)(en.Select,{children:[(0,t.jsx)(en.Select.Option,{value:"internal_user_viewer",children:"Internal Viewer"}),(0,t.jsx)(en.Select.Option,{value:"internal_user",children:"Internal User"}),(0,t.jsx)(en.Select.Option,{value:"proxy_admin_viewer",children:"Admin Viewer"}),(0,t.jsx)(en.Select.Option,{value:"proxy_admin",children:"Proxy Admin"})]})}),(0,t.jsx)(g.Form.Item,{label:"Proxy Admin Teams",name:"proxy_admin_teams",children:(0,t.jsx)(C.TextInput,{})}),(0,t.jsx)(g.Form.Item,{label:"Admin Viewer Teams",name:"admin_viewer_teams",children:(0,t.jsx)(C.TextInput,{})}),(0,t.jsx)(g.Form.Item,{label:"Internal User Teams",name:"internal_user_teams",children:(0,t.jsx)(C.TextInput,{})}),(0,t.jsx)(g.Form.Item,{label:"Internal Viewer Teams",name:"internal_viewer_teams",children:(0,t.jsx)(C.TextInput,{})})]}):null})]}),(0,t.jsxs)("div",{style:{textAlign:"right",marginTop:"10px",display:"flex",justifyContent:"flex-end",alignItems:"center",gap:"8px"},children:[c&&(0,t.jsx)(m.Button,{onClick:()=>p(!0),style:{backgroundColor:"#6366f1",borderColor:"#6366f1",color:"white"},onMouseEnter:e=>{e.currentTarget.style.backgroundColor="#5558eb",e.currentTarget.style.borderColor="#5558eb"},onMouseLeave:e=>{e.currentTarget.style.backgroundColor="#6366f1",e.currentTarget.style.borderColor="#6366f1"},children:"Clear"}),(0,t.jsx)(m.Button,{htmlType:"submit",children:"Save"})]})]})}),(0,t.jsxs)(h.Modal,{title:"Confirm Clear SSO Settings",open:u,onOk:f,onCancel:()=>p(!1),okText:"Yes, Clear",cancelText:"Cancel",okButtonProps:{danger:!0,style:{backgroundColor:"#dc2626",borderColor:"#dc2626"}},children:[(0,t.jsx)("p",{children:"Are you sure you want to clear all SSO settings? This action cannot be undone."}),(0,t.jsx)("p",{children:"Users will no longer be able to login using SSO after this change."})]}),(0,t.jsxs)(h.Modal,{title:"SSO Setup Instructions",open:s,width:800,footer:null,onOk:n,onCancel:a,children:[(0,t.jsx)("p",{children:"Follow these steps to complete the SSO setup:"}),(0,t.jsx)(k.Text,{className:"mt-2",children:"1. DO NOT Exit this TAB"}),(0,t.jsx)(k.Text,{className:"mt-2",children:"2. Open a new tab, visit your proxy base url"}),(0,t.jsx)(k.Text,{className:"mt-2",children:"3. Confirm your SSO is configured correctly and you can login on the new Tab"}),(0,t.jsx)(k.Text,{className:"mt-2",children:"4. If Step 3 is successful, you can close this tab"}),(0,t.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,t.jsx)(m.Button,{onClick:n,children:"Done"})})]})]})},tm=({accessToken:e,onSuccess:s})=>{let[r]=g.Form.useForm(),[i,l]=(0,j.useState)(!1);(0,j.useEffect)(()=>{(async()=>{if(e)try{let t=await (0,I.getSSOSettings)(e);if(t&&t.values){let e=t.values.ui_access_mode,s={};e&&"object"==typeof e?s={ui_access_mode_type:e.type,restricted_sso_group:e.restricted_sso_group,sso_group_jwt_field:e.sso_group_jwt_field}:"string"==typeof e&&(s={ui_access_mode_type:e,restricted_sso_group:t.values.restricted_sso_group,sso_group_jwt_field:t.values.team_ids_jwt_field||t.values.sso_group_jwt_field}),r.setFieldsValue(s)}}catch(e){console.error("Failed to load UI access settings:",e)}})()},[e,r]);let n=async t=>{if(!e)return void b.default.fromBackend("No access token available");l(!0);try{let r;r="all_authenticated_users"===t.ui_access_mode_type?{ui_access_mode:"none"}:{ui_access_mode:{type:t.ui_access_mode_type,restricted_sso_group:t.restricted_sso_group,sso_group_jwt_field:t.sso_group_jwt_field}},await (0,I.updateSSOSettings)(e,r),s()}catch(e){console.error("Failed to save UI access settings:",e),b.default.fromBackend("Failed to save UI access settings")}finally{l(!1)}};return(0,t.jsxs)("div",{style:{padding:"16px"},children:[(0,t.jsx)("div",{style:{marginBottom:"16px"},children:(0,t.jsx)(k.Text,{style:{fontSize:"14px",color:"#6b7280"},children:"Configure who can access the UI interface and how group information is extracted from JWT tokens."})}),(0,t.jsxs)(g.Form,{form:r,onFinish:n,layout:"vertical",children:[(0,t.jsx)(g.Form.Item,{label:"UI Access Mode",name:"ui_access_mode_type",tooltip:"Controls who can access the UI interface",children:(0,t.jsxs)(en.Select,{placeholder:"Select access mode",children:[(0,t.jsx)(en.Select.Option,{value:"all_authenticated_users",children:"All Authenticated Users"}),(0,t.jsx)(en.Select.Option,{value:"restricted_sso_group",children:"Restricted SSO Group"})]})}),(0,t.jsx)(g.Form.Item,{noStyle:!0,shouldUpdate:(e,t)=>e.ui_access_mode_type!==t.ui_access_mode_type,children:({getFieldValue:e})=>"restricted_sso_group"===e("ui_access_mode_type")?(0,t.jsx)(g.Form.Item,{label:"Restricted SSO Group",name:"restricted_sso_group",rules:[{required:!0,message:"Please enter the restricted SSO group"}],children:(0,t.jsx)(C.TextInput,{placeholder:"ui-access-group"})}):null}),(0,t.jsx)(g.Form.Item,{label:"SSO Group JWT Field",name:"sso_group_jwt_field",tooltip:"JWT field name that contains team/group information. Use dot notation to access nested fields.",children:(0,t.jsx)(C.TextInput,{placeholder:"groups"})}),(0,t.jsx)("div",{style:{textAlign:"right",marginTop:"16px"},children:(0,t.jsx)(m.Button,{type:"primary",htmlType:"submit",loading:i,style:{backgroundColor:"#6366f1",borderColor:"#6366f1"},children:"Update UI Access Control"})})]})]})},{Title:tg,Paragraph:t_,Text:th}=y.Typography,tx=({proxySettings:e})=>{let{premiumUser:y,accessToken:w,userId:k}=(0,s.default)(),[T]=g.Form.useForm(),[C,E]=(0,j.useState)(!1),[N,O]=(0,j.useState)(!1),[F,A]=(0,j.useState)(!1),[P,M]=(0,j.useState)(!1),[B,L]=(0,j.useState)(!1),[R,z]=(0,j.useState)(!1),[D,G]=(0,j.useState)([]),[V,q]=(0,j.useState)(null),[K,$]=(0,j.useState)(!1),Q=(0,S.useBaseUrl)(),W="All IP Addresses Allowed",Y=Q;Y+="/fallback/login";let J=async()=>{if(w)try{let e=await (0,I.getSSOSettings)(w);if(e&&e.values){let t=e.values.google_client_id&&e.values.google_client_secret,s=e.values.microsoft_client_id&&e.values.microsoft_client_secret,r=e.values.generic_client_id&&e.values.generic_client_secret;$(t||s||r)}else $(!1)}catch(e){console.error("Error checking SSO configuration:",e),$(!1)}},Z=async()=>{try{if(!0!==y)return void b.default.fromBackend("This feature is only available for premium users. Please upgrade your account.");if(w){let e=await (0,I.getAllowedIPs)(w);G(e&&e.length>0?e:[W])}else G([W])}catch(e){console.error("Error fetching allowed IPs:",e),b.default.fromBackend(`Failed to fetch allowed IPs ${e}`),G([W])}finally{!0===y&&A(!0)}},X=async e=>{try{if(w){await (0,I.addAllowedIP)(w,e.ip);let t=await (0,I.getAllowedIPs)(w);G(t),b.default.success("IP address added successfully")}}catch(e){console.error("Error adding IP:",e),b.default.fromBackend(`Failed to add IP address ${e}`)}finally{M(!1)}},ee=async e=>{q(e),L(!0)},et=async()=>{if(V&&w)try{await (0,I.deleteAllowedIP)(w,V);let e=await (0,I.getAllowedIPs)(w);G(e.length>0?e:[W]),b.default.success("IP address deleted successfully")}catch(e){console.error("Error deleting IP:",e),b.default.fromBackend(`Failed to delete IP address ${e}`)}finally{L(!1),q(null)}};(0,j.useEffect)(()=>{J()},[w,y,J]);let es=()=>{z(!1)},er=[{key:"sso-settings",label:"SSO Settings",children:(0,t.jsx)(eP,{})},{key:"security-settings",label:"Security Settings",children:(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(l.Card,{children:[(0,t.jsx)(tg,{level:4,children:" ✨ Security Settings"}),(0,t.jsx)(p.Alert,{message:"SSO Configuration Deprecated",description:"Editing SSO Settings on this page is deprecated and will be removed in a future version. Please use the SSO Settings tab for SSO configuration.",type:"warning",showIcon:!0}),(0,t.jsxs)("div",{style:{display:"flex",flexDirection:"column",gap:"1rem",marginTop:"1rem",marginLeft:"0.5rem"},children:[(0,t.jsx)("div",{children:(0,t.jsx)(r.Button,{style:{width:"150px"},onClick:()=>E(!0),children:K?"Edit SSO Settings":"Add SSO"})}),(0,t.jsx)("div",{children:(0,t.jsx)(r.Button,{style:{width:"150px"},onClick:Z,children:"Allowed IPs"})}),(0,t.jsx)("div",{children:(0,t.jsx)(r.Button,{style:{width:"150px"},onClick:()=>!0===y?z(!0):b.default.fromBackend("Only premium users can configure UI access control"),children:"UI Access Control"})})]})]}),(0,t.jsxs)("div",{className:"flex justify-start mb-4",children:[(0,t.jsx)(tp,{isAddSSOModalVisible:C,isInstructionsModalVisible:N,handleAddSSOOk:()=>{E(!1),T.resetFields(),w&&y&&J()},handleAddSSOCancel:()=>{E(!1),T.resetFields()},handleShowInstructions:e=>{E(!1),O(!0)},handleInstructionsOk:()=>{O(!1),w&&y&&J()},handleInstructionsCancel:()=>{O(!1),w&&y&&J()},form:T,accessToken:w,ssoConfigured:K}),(0,t.jsx)(h.Modal,{title:"Manage Allowed IP Addresses",width:800,open:F,onCancel:()=>A(!1),footer:[(0,t.jsx)(r.Button,{className:"mx-1",onClick:()=>M(!0),children:"Add IP Address"},"add"),(0,t.jsx)(r.Button,{onClick:()=>A(!1),children:"Close"},"close")],children:(0,t.jsxs)(n.Table,{children:[(0,t.jsx)(d.TableHead,{children:(0,t.jsxs)(u.TableRow,{children:[(0,t.jsx)(c.TableHeaderCell,{children:"IP Address"}),(0,t.jsx)(c.TableHeaderCell,{className:"text-right",children:"Action"})]})}),(0,t.jsx)(a.TableBody,{children:D.map((e,s)=>(0,t.jsxs)(u.TableRow,{children:[(0,t.jsx)(o.TableCell,{children:e}),(0,t.jsx)(o.TableCell,{className:"text-right",children:e!==W&&(0,t.jsx)(r.Button,{onClick:()=>ee(e),color:"red",size:"xs",children:"Delete"})})]},s))})]})}),(0,t.jsx)(h.Modal,{title:"Add Allowed IP Address",open:P,onCancel:()=>M(!1),footer:null,children:(0,t.jsxs)(g.Form,{onFinish:X,children:[(0,t.jsx)(g.Form.Item,{name:"ip",rules:[{required:!0,message:"Please enter an IP address"}],children:(0,t.jsx)(_.Input,{placeholder:"Enter IP address"})}),(0,t.jsx)(g.Form.Item,{children:(0,t.jsx)(m.Button,{htmlType:"submit",children:"Add IP Address"})})]})}),(0,t.jsx)(h.Modal,{title:"Confirm Delete",open:B,onCancel:()=>L(!1),onOk:et,footer:[(0,t.jsx)(r.Button,{className:"mx-1",onClick:()=>et(),children:"Yes"},"delete"),(0,t.jsx)(r.Button,{onClick:()=>L(!1),children:"Close"},"close")],children:(0,t.jsxs)(th,{children:["Are you sure you want to delete the IP address: ",V,"?"]})}),(0,t.jsx)(h.Modal,{title:"UI Access Control Settings",open:R,width:600,footer:null,onOk:es,onCancel:()=>{z(!1)},children:(0,t.jsx)(tm,{accessToken:w,onSuccess:()=>{es(),b.default.success("UI Access Control settings updated successfully")}})})]}),(0,t.jsxs)(i.Callout,{title:"Login without SSO",color:"teal",children:["If you need to login without sso, you can access"," ",(0,t.jsxs)("a",{href:Y,target:"_blank",rel:"noopener noreferrer",children:[(0,t.jsx)("b",{children:Y})," "]})]})]})},{key:"scim",label:"SCIM",children:(0,t.jsx)(U,{accessToken:w,userID:k,proxySettings:e})},{key:"ui-settings",label:(0,t.jsx)(x.Space,{children:(0,t.jsxs)(th,{children:["UI Settings ",(0,t.jsx)(v.default,{})]})}),children:(0,t.jsx)(eV,{})},{key:"logging-settings",label:"Logging Settings",children:(0,t.jsx)(H,{})},{key:"hashicorp-vault",label:"Hashicorp Vault",children:(0,t.jsx)(ts,{})},{key:"plugins",label:"Plugins",children:(0,t.jsx)(td,{})}];return(0,t.jsxs)("div",{className:"w-full m-2 mt-2 p-8",children:[(0,t.jsx)(tg,{level:4,children:"Admin Access "}),(0,t.jsx)(t_,{children:"Go to 'Internal Users' page to add other admins."}),(0,t.jsx)(f.Tabs,{items:er})]})};var tf=e.i(592392);e.s(["default",0,function(){let{accessToken:e}=(0,s.default)(),r=(0,tf.default)(e);return(0,t.jsx)(tx,{proxySettings:r})}],648214)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0tbzoqict3-mi.js b/litellm/proxy/_experimental/out/_next/static/chunks/0tbzoqict3-mi.js new file mode 100644 index 00000000000..a0dca3b36ea --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0tbzoqict3-mi.js @@ -0,0 +1 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,867384,e=>{"use strict";e.i(247167);var t=e.i(931067),n=e.i(271645);let l={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M176 511a56 56 0 10112 0 56 56 0 10-112 0zm280 0a56 56 0 10112 0 56 56 0 10-112 0zm280 0a56 56 0 10112 0 56 56 0 10-112 0z"}}]},name:"ellipsis",theme:"outlined"};var r=e.i(9583),o=n.forwardRef(function(e,o){return n.createElement(r.default,(0,t.default)({},e,{ref:o,icon:l}))});e.s(["default",0,o],867384)},878081,465394,452741,905054,259792,983409,375565,e=>{"use strict";var t=e.i(931067),n=e.i(211577),l=e.i(392221),r=e.i(703923),o=e.i(707067),a=e.i(343794),u=e.i(611935),i=e.i(271645),c=e.i(404948),f=e.i(963188),s=c.default.ESC,d=c.default.TAB,p=(0,i.forwardRef)(function(e,t){var n=e.overlay,l=e.arrow,r=e.prefixCls,o=(0,i.useMemo)(function(){return"function"==typeof n?n():n},[n]),a=(0,u.composeRef)(t,(0,u.getNodeRef)(o));return i.default.createElement(i.default.Fragment,null,l&&i.default.createElement("div",{className:"".concat(r,"-arrow")}),i.default.cloneElement(o,{ref:(0,u.supportRef)(o)?a:void 0}))}),v={adjustX:1,adjustY:1},m=[0,0];let b={topLeft:{points:["bl","tl"],overflow:v,offset:[0,-4],targetOffset:m},top:{points:["bc","tc"],overflow:v,offset:[0,-4],targetOffset:m},topRight:{points:["br","tr"],overflow:v,offset:[0,-4],targetOffset:m},bottomLeft:{points:["tl","bl"],overflow:v,offset:[0,4],targetOffset:m},bottom:{points:["tc","bc"],overflow:v,offset:[0,4],targetOffset:m},bottomRight:{points:["tr","br"],overflow:v,offset:[0,4],targetOffset:m}};var y=["arrow","prefixCls","transitionName","animation","align","placement","placements","getPopupContainer","showAction","hideAction","overlayClassName","overlayStyle","visible","trigger","autoFocus","overlay","children","onVisibleChange"];let h=i.default.forwardRef(function(e,c){var v,m,h,g,C,E,w,R,M,x,k,N,P,S,I=e.arrow,K=void 0!==I&&I,O=e.prefixCls,A=void 0===O?"rc-dropdown":O,T=e.transitionName,L=e.animation,D=e.align,_=e.placement,V=e.placements,F=e.getPopupContainer,z=e.showAction,j=e.hideAction,B=e.overlayClassName,W=e.overlayStyle,H=e.visible,U=e.trigger,q=void 0===U?["hover"]:U,G=e.autoFocus,X=e.overlay,Y=e.children,J=e.onVisibleChange,Q=(0,r.default)(e,y),Z=i.default.useState(),$=(0,l.default)(Z,2),ee=$[0],et=$[1],en="visible"in e?H:ee,el=i.default.useRef(null),er=i.default.useRef(null),eo=i.default.useRef(null);i.default.useImperativeHandle(c,function(){return el.current});var ea=function(e){et(e),null==J||J(e)};m=(v={visible:en,triggerRef:eo,onVisibleChange:ea,autoFocus:G,overlayRef:er}).visible,h=v.triggerRef,g=v.onVisibleChange,C=v.autoFocus,E=v.overlayRef,w=i.useRef(!1),R=function(){if(m){var e,t;null==(e=h.current)||null==(t=e.focus)||t.call(e),null==g||g(!1)}},M=function(){var e;return null!=(e=E.current)&&!!e.focus&&(E.current.focus(),w.current=!0,!0)},x=function(e){switch(e.keyCode){case s:R();break;case d:var t=!1;w.current||(t=M()),t?e.preventDefault():R()}},i.useEffect(function(){return m?(window.addEventListener("keydown",x),C&&(0,f.default)(M,3),function(){window.removeEventListener("keydown",x),w.current=!1}):function(){w.current=!1}},[m]);var eu=function(){return i.default.createElement(p,{ref:er,overlay:X,prefixCls:A,arrow:K})},ei=i.default.cloneElement(Y,{className:(0,a.default)(null==(S=Y.props)?void 0:S.className,en&&(void 0!==(k=e.openClassName)?k:"".concat(A,"-open"))),ref:(0,u.supportRef)(Y)?(0,u.composeRef)(eo,(0,u.getNodeRef)(Y)):void 0}),ec=j;return ec||-1===q.indexOf("contextMenu")||(ec=["click"]),i.default.createElement(o.default,(0,t.default)({builtinPlacements:void 0===V?b:V},Q,{prefixCls:A,ref:el,popupClassName:(0,a.default)(B,(0,n.default)({},"".concat(A,"-show-arrow"),K)),popupStyle:W,action:q,showAction:z,hideAction:ec,popupPlacement:void 0===_?"bottomLeft":_,popupAlign:D,popupTransitionName:T,popupAnimation:L,popupVisible:en,stretch:(N=e.minOverlayWidthMatchTrigger,P=e.alignPoint,"minOverlayWidthMatchTrigger"in e?N:!P)?"minWidth":"",popup:"function"==typeof X?eu:eu(),onPopupVisibleChange:ea,onPopupClick:function(t){var n=e.onOverlayClick;et(!1),n&&n(t)},getPopupContainer:F}),ei)});e.s(["default",0,h],878081),e.i(247167);var g=e.i(209428),C=e.i(8211),E=e.i(658315),w=e.i(914949),R=e.i(929123),M=e.i(883110),x=e.i(174080),k=i.createContext(null);function N(e,t){return void 0===e?null:"".concat(e,"-").concat(t)}function P(e){return N(i.useContext(k),e)}var S=e.i(182585),I=["children","locked"],K=i.createContext(null);function O(e){var t=e.children,n=e.locked,l=(0,r.default)(e,I),o=i.useContext(K),a=(0,S.default)(function(){var e;return e=(0,g.default)({},o),Object.keys(l).forEach(function(t){var n=l[t];void 0!==n&&(e[t]=n)}),e},[o,l],function(e,t){return!n&&(e[0]!==t[0]||!(0,R.default)(e[1],t[1],!0))});return i.createElement(K.Provider,{value:a},t)}var A=i.createContext(null);function T(){return i.useContext(A)}var L=i.createContext([]);function D(e){var t=i.useContext(L);return i.useMemo(function(){return void 0!==e?[].concat((0,C.default)(t),[e]):t},[t,e])}var _=i.createContext(null);e.s(["PathRegisterContext",0,A,"PathTrackerContext",0,L,"PathUserContext",0,_,"useFullPath",0,D,"useMeasure",0,T],465394);var V=i.createContext({}),F=e.i(606262);function z(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if((0,F.default)(e)){var n=e.nodeName.toLowerCase(),l=["input","select","textarea","button"].includes(n)||e.isContentEditable||"a"===n&&!!e.getAttribute("href"),r=e.getAttribute("tabindex"),o=Number(r),a=null;return r&&!Number.isNaN(o)?a=o:l&&null===a&&(a=0),l&&e.disabled&&(a=null),null!==a&&(a>=0||t&&a<0)}return!1}var j=c.default.LEFT,B=c.default.RIGHT,W=c.default.UP,H=c.default.DOWN,U=c.default.ENTER,q=c.default.ESC,G=c.default.HOME,X=c.default.END,Y=[W,H,j,B];function J(e,t){return(function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=(0,C.default)(e.querySelectorAll("*")).filter(function(e){return z(e,t)});return z(e,t)&&n.unshift(e),n})(e,!0).filter(function(e){return t.has(e)})}function Q(e,t,n){var l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1;if(!e)return null;var r=J(e,t),o=r.length,a=r.findIndex(function(e){return n===e});return l<0?-1===a?a=o-1:a-=1:l>0&&(a+=1),r[a=(a+o)%o]}var Z=function(e,t){var n=new Set,l=new Map,r=new Map;return e.forEach(function(e){var o=document.querySelector("[data-menu-id='".concat(N(t,e),"']"));o&&(n.add(o),r.set(o,e),l.set(e,o))}),{elements:n,key2element:l,element2key:r}},$="__RC_UTIL_PATH_SPLIT__",ee=function(e){return e.join($)},et="rc-menu-more";function en(e){var t=i.useRef(e);t.current=e;var n=i.useCallback(function(){for(var e,n=arguments.length,l=Array(n),r=0;r1&&(w.motionAppear=!1);var R=w.onVisibleChanged;return(w.onVisibleChanged=function(e){return m.current||e||C(!0),null==R?void 0:R(e)},h)?null:i.createElement(O,{mode:u,locked:!m.current},i.createElement(eK.default,(0,t.default)({visible:E},w,{forceRender:s,removeOnLeave:!1,leavedClassName:"".concat(f,"-hidden")}),function(e){var t=e.className,l=e.style;return i.createElement(ew,{id:n,className:t,style:l},a)}))}var eA=["style","className","title","eventKey","warnKey","disabled","internalPopupClose","children","itemIcon","expandIcon","popupClassName","popupOffset","popupStyle","onClick","onMouseEnter","onMouseLeave","onTitleClick","onTitleMouseEnter","onTitleMouseLeave"],eT=["active"],eL=i.forwardRef(function(e,o){var u=e.style,c=e.className,f=e.title,s=e.eventKey,d=(e.warnKey,e.disabled),p=e.internalPopupClose,v=e.children,m=e.itemIcon,b=e.expandIcon,y=e.popupClassName,h=e.popupOffset,C=e.popupStyle,w=e.onClick,R=e.onMouseEnter,M=e.onMouseLeave,x=e.onTitleClick,k=e.onTitleMouseEnter,N=e.onTitleMouseLeave,S=(0,r.default)(e,eA),I=P(s),A=i.useContext(K),T=A.prefixCls,L=A.mode,F=A.openKeys,z=A.disabled,j=A.overflowDisabled,B=A.activeKey,W=A.selectedKeys,H=A.itemIcon,U=A.expandIcon,q=A.onItemClick,G=A.onOpenChange,X=A.onActive,Y=i.useContext(V)._internalRenderSubMenuItem,J=i.useContext(_).isSubPathKey,Q=D(),Z="".concat(T,"-submenu"),$=z||d,ee=i.useRef(),et=i.useRef(),el=null!=b?b:U,er=F.includes(s),eo=!j&&er,ea=J(W,s),eu=ef(s,$,k,N),ei=eu.active,ec=(0,r.default)(eu,eT),ep=i.useState(!1),em=(0,l.default)(ep,2),eb=em[0],ey=em[1],eh=function(e){$||ey(e)},eg=i.useMemo(function(){return ei||"inline"!==L&&(eb||J([B],s))},[L,ei,B,eb,s,J]),eC=es(Q.length),eE=en(function(e){null==w||w(ev(e)),q(e)}),eR=I&&"".concat(I,"-popup"),eM=i.useMemo(function(){return i.createElement(ed,{icon:"horizontal"!==L?el:void 0,props:(0,g.default)((0,g.default)({},e),{},{isOpen:eo,isSubMenu:!0})},i.createElement("i",{className:"".concat(Z,"-arrow")}))},[L,el,e,eo,Z]),ex=i.createElement("div",(0,t.default)({role:"menuitem",style:eC,className:"".concat(Z,"-title"),tabIndex:$?null:-1,ref:ee,title:"string"==typeof f?f:null,"data-menu-id":j&&I?null:I,"aria-expanded":eo,"aria-haspopup":!0,"aria-controls":eR,"aria-disabled":$,onClick:function(e){$||(null==x||x({key:s,domEvent:e}),"inline"===L&&G(s,!er))},onFocus:function(){X(s)}},ec),f,eM),ek=i.useRef(L);if("inline"!==L&&Q.length>1?ek.current="vertical":ek.current=L,!j){var eN=ek.current;ex=i.createElement(eI,{mode:eN,prefixCls:Z,visible:!p&&eo&&"inline"!==L,popupClassName:y,popupOffset:h,popupStyle:C,popup:i.createElement(O,{mode:"horizontal"===eN?"vertical":eN},i.createElement(ew,{id:eR,ref:et},v)),disabled:$,onVisibleChange:function(e){"inline"!==L&&G(s,e)}},ex)}var eP=i.createElement(E.default.Item,(0,t.default)({ref:o,role:"none"},S,{component:"li",style:u,className:(0,a.default)(Z,"".concat(Z,"-").concat(L),c,(0,n.default)((0,n.default)((0,n.default)((0,n.default)({},"".concat(Z,"-open"),eo),"".concat(Z,"-active"),eg),"".concat(Z,"-selected"),ea),"".concat(Z,"-disabled"),$)),onMouseEnter:function(e){eh(!0),null==R||R({key:s,domEvent:e})},onMouseLeave:function(e){eh(!1),null==M||M({key:s,domEvent:e})}}),ex,!j&&i.createElement(eO,{id:eR,open:eo,keyPath:Q},v));return Y&&(eP=Y(eP,e,{selected:ea,active:eg,open:eo,disabled:$})),i.createElement(O,{onItemClick:eE,mode:"horizontal"===L?"vertical":L,itemIcon:null!=m?m:H,expandIcon:el},eP)}),eD=i.forwardRef(function(e,n){var l,r=e.eventKey,o=e.children,a=D(r),u=eM(o,a),c=T();return i.useEffect(function(){if(c)return c.registerPath(r,a),function(){c.unregisterPath(r,a)}},[a]),l=c?u:i.createElement(eL,(0,t.default)({ref:n},e),u),i.createElement(L.Provider,{value:a},l)});e.s(["default",0,eD],905054);var e_=e.i(410160);function eV(e){var t=e.className,n=e.style,l=i.useContext(K).prefixCls;return T()?null:i.createElement("li",{role:"separator",className:(0,a.default)("".concat(l,"-item-divider"),t),style:n})}e.s(["default",0,eV],259792);var eF=["className","title","eventKey","children"],ez=i.forwardRef(function(e,n){var l=e.className,o=e.title,u=(e.eventKey,e.children),c=(0,r.default)(e,eF),f=i.useContext(K).prefixCls,s="".concat(f,"-item-group");return i.createElement("li",(0,t.default)({ref:n,role:"presentation"},c,{onClick:function(e){return e.stopPropagation()},className:(0,a.default)(s,l)}),i.createElement("div",{role:"presentation",className:"".concat(s,"-title"),title:"string"==typeof o?o:void 0},o),i.createElement("ul",{role:"group",className:"".concat(s,"-list")},u))}),ej=i.forwardRef(function(e,n){var l=e.eventKey,r=eM(e.children,D(l));return T()?r:i.createElement(ez,(0,t.default)({ref:n},(0,ec.default)(e,["warnKey"])),r)});e.s(["default",0,ej],983409);var eB=["label","children","key","type","extra"];function eW(e,n,l,o,a){var u=e,c=(0,g.default)({divider:eV,item:eC,group:ej,submenu:eD},o);return n&&(u=function e(n,l,o){var a=l.item,u=l.group,c=l.submenu,f=l.divider;return(n||[]).map(function(n,s){if(n&&"object"===(0,e_.default)(n)){var d=n.label,p=n.children,v=n.key,m=n.type,b=n.extra,y=(0,r.default)(n,eB),h=null!=v?v:"tmp-".concat(s);return p||"group"===m?"group"===m?i.createElement(u,(0,t.default)({key:h},y,{title:d}),e(p,l,o)):i.createElement(c,(0,t.default)({key:h},y,{title:d}),e(p,l,o)):"divider"===m?i.createElement(f,(0,t.default)({key:h},y)):i.createElement(a,(0,t.default)({key:h},y,{extra:b}),d,(!!b||0===b)&&i.createElement("span",{className:"".concat(o,"-item-extra")},b))}return null}).filter(function(e){return e})}(n,c,a)),eM(u,l)}var eH=["prefixCls","rootClassName","style","className","tabIndex","items","children","direction","id","mode","inlineCollapsed","disabled","disabledOverflow","subMenuOpenDelay","subMenuCloseDelay","forceSubMenuRender","defaultOpenKeys","openKeys","activeKey","defaultActiveFirst","selectable","multiple","defaultSelectedKeys","selectedKeys","onSelect","onDeselect","inlineIndent","motion","defaultMotions","triggerSubMenuAction","builtinPlacements","itemIcon","expandIcon","overflowedIndicator","overflowedIndicatorPopupClassName","getPopupContainer","onClick","onOpenChange","onKeyDown","openAnimation","openTransitionName","_internalRenderMenuItem","_internalRenderSubMenuItem","_internalComponents"],eU=[],eq=i.forwardRef(function(e,o){var u,c,s,d,p,v,m,b,y,h,M,N,P,S,I,K,T,L,D,F,z,eo,ea,eu,ei,ec,ef=e.prefixCls,es=void 0===ef?"rc-menu":ef,ed=e.rootClassName,ep=e.style,em=e.className,eb=e.tabIndex,ey=e.items,eh=e.children,eg=e.direction,eE=e.id,ew=e.mode,eR=void 0===ew?"vertical":ew,eM=e.inlineCollapsed,ex=e.disabled,ek=e.disabledOverflow,eN=e.subMenuOpenDelay,eP=e.subMenuCloseDelay,eS=e.forceSubMenuRender,eI=e.defaultOpenKeys,eK=e.openKeys,eO=e.activeKey,eA=e.defaultActiveFirst,eT=e.selectable,eL=void 0===eT||eT,e_=e.multiple,eV=void 0!==e_&&e_,eF=e.defaultSelectedKeys,ez=e.selectedKeys,ej=e.onSelect,eB=e.onDeselect,eq=e.inlineIndent,eG=e.motion,eX=e.defaultMotions,eY=e.triggerSubMenuAction,eJ=e.builtinPlacements,eQ=e.itemIcon,eZ=e.expandIcon,e$=e.overflowedIndicator,e0=void 0===e$?"...":e$,e1=e.overflowedIndicatorPopupClassName,e2=e.getPopupContainer,e5=e.onClick,e6=e.onOpenChange,e4=e.onKeyDown,e8=(e.openAnimation,e.openTransitionName,e._internalRenderMenuItem),e7=e._internalRenderSubMenuItem,e9=e._internalComponents,e3=(0,r.default)(e,eH),te=i.useMemo(function(){return[eW(eh,ey,eU,e9,es),eW(eh,ey,eU,{},es)]},[eh,ey,e9]),tt=(0,l.default)(te,2),tn=tt[0],tl=tt[1],tr=i.useState(!1),to=(0,l.default)(tr,2),ta=to[0],tu=to[1],ti=i.useRef(),tc=(u=(0,w.default)(eE,{value:eE}),s=(c=(0,l.default)(u,2))[0],d=c[1],i.useEffect(function(){er+=1;var e="".concat(el,"-").concat(er);d("rc-menu-uuid-".concat(e))},[]),s),tf="rtl"===eg,ts=(0,w.default)(eI,{value:eK,postState:function(e){return e||eU}}),td=(0,l.default)(ts,2),tp=td[0],tv=td[1],tm=function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];function n(){tv(e),null==e6||e6(e)}t?(0,x.flushSync)(n):n()},tb=i.useState(tp),ty=(0,l.default)(tb,2),th=ty[0],tg=ty[1],tC=i.useRef(!1),tE=i.useMemo(function(){return("inline"===eR||"vertical"===eR)&&eM?["vertical",eM]:[eR,!1]},[eR,eM]),tw=(0,l.default)(tE,2),tR=tw[0],tM=tw[1],tx="inline"===tR,tk=i.useState(tR),tN=(0,l.default)(tk,2),tP=tN[0],tS=tN[1],tI=i.useState(tM),tK=(0,l.default)(tI,2),tO=tK[0],tA=tK[1];i.useEffect(function(){tS(tR),tA(tM),tC.current&&(tx?tv(th):tm(eU))},[tR,tM]);var tT=i.useState(0),tL=(0,l.default)(tT,2),tD=tL[0],t_=tL[1],tV=tD>=tn.length-1||"horizontal"!==tP||ek;i.useEffect(function(){tx&&tg(tp)},[tp]),i.useEffect(function(){return tC.current=!0,function(){tC.current=!1}},[]);var tF=(p=i.useState({}),v=(0,l.default)(p,2)[1],m=(0,i.useRef)(new Map),b=(0,i.useRef)(new Map),y=i.useState([]),M=(h=(0,l.default)(y,2))[0],N=h[1],P=(0,i.useRef)(0),S=(0,i.useRef)(!1),I=function(){S.current||v({})},K=(0,i.useCallback)(function(e,t){var n=ee(t);b.current.set(n,e),m.current.set(e,n),P.current+=1;var l=P.current;Promise.resolve().then(function(){l===P.current&&I()})},[]),T=(0,i.useCallback)(function(e,t){var n=ee(t);b.current.delete(n),m.current.delete(e)},[]),L=(0,i.useCallback)(function(e){N(e)},[]),D=(0,i.useCallback)(function(e,t){var n=(m.current.get(e)||"").split($);return t&&M.includes(n[0])&&n.unshift(et),n},[M]),F=(0,i.useCallback)(function(e,t){return e.filter(function(e){return void 0!==e}).some(function(e){return D(e,!0).includes(t)})},[D]),z=(0,i.useCallback)(function(e){var t="".concat(m.current.get(e)).concat($),n=new Set;return(0,C.default)(b.current.keys()).forEach(function(e){e.startsWith(t)&&n.add(b.current.get(e))}),n},[]),i.useEffect(function(){return function(){S.current=!0}},[]),{registerPath:K,unregisterPath:T,refreshOverflowKeys:L,isSubPathKey:F,getKeyPath:D,getKeys:function(){var e=(0,C.default)(m.current.keys());return M.length&&e.push(et),e},getSubPathKeys:z}),tz=tF.registerPath,tj=tF.unregisterPath,tB=tF.refreshOverflowKeys,tW=tF.isSubPathKey,tH=tF.getKeyPath,tU=tF.getKeys,tq=tF.getSubPathKeys,tG=i.useMemo(function(){return{registerPath:tz,unregisterPath:tj}},[tz,tj]),tX=i.useMemo(function(){return{isSubPathKey:tW}},[tW]);i.useEffect(function(){tB(tV?eU:tn.slice(tD+1).map(function(e){return e.key}))},[tD,tV]);var tY=(0,w.default)(eO||eA&&(null==(ec=tn[0])?void 0:ec.key),{value:eO}),tJ=(0,l.default)(tY,2),tQ=tJ[0],tZ=tJ[1],t$=en(function(e){tZ(e)}),t0=en(function(){tZ(void 0)});(0,i.useImperativeHandle)(o,function(){return{list:ti.current,focus:function(e){var t,n,l=Z(tU(),tc),r=l.elements,o=l.key2element,a=l.element2key,u=J(ti.current,r),i=null!=tQ?tQ:u[0]?a.get(u[0]):null==(t=tn.find(function(e){return!e.props.disabled}))?void 0:t.key,c=o.get(i);i&&c&&(null==c||null==(n=c.focus)||n.call(c,e))}}});var t1=(0,w.default)(eF||[],{value:ez,postState:function(e){return Array.isArray(e)?e:null==e?eU:[e]}}),t2=(0,l.default)(t1,2),t5=t2[0],t6=t2[1],t4=function(e){if(eL){var t,n=e.key,l=t5.includes(n);t6(t=eV?l?t5.filter(function(e){return e!==n}):[].concat((0,C.default)(t5),[n]):[n]);var r=(0,g.default)((0,g.default)({},e),{},{selectedKeys:t});l?null==eB||eB(r):null==ej||ej(r)}!eV&&tp.length&&"inline"!==tP&&tm(eU)},t8=en(function(e){null==e5||e5(ev(e)),t4(e)}),t7=en(function(e,t){var n=tp.filter(function(t){return t!==e});if(t)n.push(e);else if("inline"!==tP){var l=tq(e);n=n.filter(function(e){return!l.has(e)})}(0,R.default)(tp,n,!0)||tm(n,!0)}),t9=(eo=function(e,t){var n=null!=t?t:!tp.includes(e);t7(e,n)},ea=i.useRef(),(eu=i.useRef()).current=tQ,ei=function(){f.default.cancel(ea.current)},i.useEffect(function(){return function(){ei()}},[]),function(e){var t=e.which;if([].concat(Y,[U,q,G,X]).includes(t)){var l=tU(),r=Z(l,tc),o=r,a=o.elements,u=o.key2element,i=o.element2key,c=function(e,t){for(var n=e||document.activeElement;n;){if(t.has(n))return n;n=n.parentElement}return null}(u.get(tQ),a),s=i.get(c),d=function(e,t,l,r){var o,a="prev",u="next",i="children",c="parent";if("inline"===e&&r===U)return{inlineTrigger:!0};var f=(0,n.default)((0,n.default)({},W,a),H,u),s=(0,n.default)((0,n.default)((0,n.default)((0,n.default)({},j,l?u:a),B,l?a:u),H,i),U,i),d=(0,n.default)((0,n.default)((0,n.default)((0,n.default)((0,n.default)((0,n.default)({},W,a),H,u),U,i),q,c),j,l?i:c),B,l?c:i);switch(null==(o=({inline:f,horizontal:s,vertical:d,inlineSub:f,horizontalSub:d,verticalSub:d})["".concat(e).concat(t?"":"Sub")])?void 0:o[r]){case a:return{offset:-1,sibling:!0};case u:return{offset:1,sibling:!0};case c:return{offset:-1,sibling:!1};case i:return{offset:1,sibling:!1};default:return null}}(tP,1===tH(s,!0).length,tf,t);if(!d&&t!==G&&t!==X)return;(Y.includes(t)||[G,X].includes(t))&&e.preventDefault();var p=function(e){if(e){var t=e,n=e.querySelector("a");null!=n&&n.getAttribute("href")&&(t=n);var l=i.get(e);tZ(l),ei(),ea.current=(0,f.default)(function(){eu.current===l&&t.focus()})}};if([G,X].includes(t)||d.sibling||!c){var v=c&&"inline"!==tP?function(e){for(var t=e;t;){if(t.getAttribute("data-menu-list"))return t;t=t.parentElement}return null}(c):ti.current,m=J(v,a);p(t===G?m[0]:t===X?m[m.length-1]:Q(v,a,c,d.offset))}else if(d.inlineTrigger)eo(s);else if(d.offset>0)eo(s,!0),ei(),ea.current=(0,f.default)(function(){r=Z(l,tc);var e=c.getAttribute("aria-controls");p(Q(document.getElementById(e),r.elements))},5);else if(d.offset<0){var b=tH(s,!0),y=b[b.length-2],h=u.get(y);eo(y,!1),p(h)}}null==e4||e4(e)});i.useEffect(function(){tu(!0)},[]);var t3=i.useMemo(function(){return{_internalRenderMenuItem:e8,_internalRenderSubMenuItem:e7}},[e8,e7]),ne="horizontal"!==tP||ek?tn:tn.map(function(e,t){return i.createElement(O,{key:e.key,overflowDisabled:t>tD},e)}),nt=i.createElement(E.default,(0,t.default)({id:eE,ref:ti,prefixCls:"".concat(es,"-overflow"),component:"ul",itemComponent:eC,className:(0,a.default)(es,"".concat(es,"-root"),"".concat(es,"-").concat(tP),em,(0,n.default)((0,n.default)({},"".concat(es,"-inline-collapsed"),tO),"".concat(es,"-rtl"),tf),ed),dir:eg,style:ep,role:"menu",tabIndex:void 0===eb?0:eb,data:ne,renderRawItem:function(e){return e},renderRawRest:function(e){var t=e.length,n=t?tn.slice(-t):null;return i.createElement(eD,{eventKey:et,title:e0,disabled:tV,internalPopupClose:0===t,popupClassName:e1},n)},maxCount:"horizontal"!==tP||ek?E.default.INVALIDATE:E.default.RESPONSIVE,ssr:"full","data-menu-list":!0,onVisibleChange:function(e){t_(e)},onKeyDown:t9},e3));return i.createElement(V.Provider,{value:t3},i.createElement(k.Provider,{value:tc},i.createElement(O,{prefixCls:es,rootClassName:ed,mode:tP,openKeys:tp,rtl:tf,disabled:ex,motion:ta?eG:null,defaultMotions:ta?eX:null,activeKey:tQ,onActive:t$,onInactive:t0,selectedKeys:t5,inlineIndent:void 0===eq?24:eq,subMenuOpenDelay:void 0===eN?.1:eN,subMenuCloseDelay:void 0===eP?.1:eP,forceSubMenuRender:eS,builtinPlacements:eJ,triggerSubMenuAction:void 0===eY?"hover":eY,getPopupContainer:e2,itemIcon:eQ,expandIcon:eZ,onItemClick:t8,onOpenChange:t7},i.createElement(_.Provider,{value:tX},nt),i.createElement("div",{style:{display:"none"},"aria-hidden":!0},i.createElement(A.Provider,{value:tG},tl)))))});eq.Item=eC,eq.SubMenu=eD,eq.ItemGroup=ej,eq.Divider=eV,e.s(["default",0,eq],375565)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0teffxf7o_863.js b/litellm/proxy/_experimental/out/_next/static/chunks/0teffxf7o_863.js new file mode 100644 index 00000000000..397cf1baaad --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0teffxf7o_863.js @@ -0,0 +1 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,184163,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M505.7 661a8 8 0 0012.6 0l112-141.7c4.1-5.2.4-12.9-6.3-12.9h-74.1V168c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v338.3H400c-6.7 0-10.4 7.7-6.3 12.9l112 141.8zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"}}]},name:"download",theme:"outlined"};var n=e.i(9583),s=r.forwardRef(function(e,s){return r.createElement(n.default,(0,t.default)({},e,{ref:s,icon:i}))});e.s(["default",0,s],184163)},309821,e=>{"use strict";e.i(247167);var t=e.i(271645),r=e.i(135551),i=e.i(201072),n=e.i(121229),s=e.i(726289),o=e.i(864517),a=e.i(343794),l=e.i(529681),c=e.i(242064),u=e.i(931067),d=e.i(209428),h=e.i(703923),f={percent:0,prefixCls:"rc-progress",strokeColor:"#2db7f5",strokeLinecap:"round",strokeWidth:1,trailColor:"#D9D9D9",trailWidth:1,gapPosition:"bottom"},p=function(){var e=(0,t.useRef)([]),r=(0,t.useRef)(null);return(0,t.useEffect)(function(){var t=Date.now(),i=!1;e.current.forEach(function(e){if(e){i=!0;var n=e.style;n.transitionDuration=".3s, .3s, .3s, .06s",r.current&&t-r.current<100&&(n.transitionDuration="0s, 0s")}}),i&&(r.current=Date.now())}),e.current},g=e.i(410160),m=e.i(392221),y=e.i(654310),_=0,b=(0,y.default)();let k=function(e){var r=t.useState(),i=(0,m.default)(r,2),n=i[0],s=i[1];return t.useEffect(function(){var e;s("rc_progress_".concat((b?(e=_,_+=1):e="TEST_OR_SSR",e)))},[]),e||n};var v=function(e){var r=e.bg,i=e.children;return t.createElement("div",{style:{width:"100%",height:"100%",background:r}},i)};function C(e,t){return Object.keys(e).map(function(r){var i=parseFloat(r),n="".concat(Math.floor(i*t),"%");return"".concat(e[r]," ").concat(n)})}var E=t.forwardRef(function(e,r){var i=e.prefixCls,n=e.color,s=e.gradientId,o=e.radius,a=e.style,l=e.ptg,c=e.strokeLinecap,u=e.strokeWidth,d=e.size,h=e.gapDegree,f=n&&"object"===(0,g.default)(n),p=d/2,m=t.createElement("circle",{className:"".concat(i,"-circle-path"),r:o,cx:p,cy:p,stroke:f?"#FFF":void 0,strokeLinecap:c,strokeWidth:u,opacity:+(0!==l),style:a,ref:r});if(!f)return m;var y="".concat(s,"-conic"),_=C(n,(360-h)/360),b=C(n,1),k="conic-gradient(from ".concat(h?"".concat(180+h/2,"deg"):"0deg",", ").concat(_.join(", "),")"),E="linear-gradient(to ".concat(h?"bottom":"top",", ").concat(b.join(", "),")");return t.createElement(t.Fragment,null,t.createElement("mask",{id:y},m),t.createElement("foreignObject",{x:0,y:0,width:d,height:d,mask:"url(#".concat(y,")")},t.createElement(v,{bg:E},t.createElement(v,{bg:k}))))}),x=function(e,t,r,i,n,s,o,a,l,c){var u=arguments.length>10&&void 0!==arguments[10]?arguments[10]:0,d=(100-i)/100*t;return"round"===l&&100!==i&&(d+=c/2)>=t&&(d=t-.01),{stroke:"string"==typeof a?a:void 0,strokeDasharray:"".concat(t,"px ").concat(e),strokeDashoffset:d+u,transform:"rotate(".concat(n+r/100*360*((360-s)/360)+(0===s?0:({bottom:0,top:180,left:90,right:-90})[o]),"deg)"),transformOrigin:"".concat(50,"px ").concat(50,"px"),transition:"stroke-dashoffset .3s ease 0s, stroke-dasharray .3s ease 0s, stroke .3s, stroke-width .06s ease .3s, opacity .3s ease 0s",fillOpacity:0}},w=["id","prefixCls","steps","strokeWidth","trailWidth","gapDegree","gapPosition","trailColor","strokeLinecap","style","className","strokeColor","percent"];function S(e){var t=null!=e?e:[];return Array.isArray(t)?t:[t]}let $=function(e){var r,i,n,s,o=(0,d.default)((0,d.default)({},f),e),l=o.id,c=o.prefixCls,m=o.steps,y=o.strokeWidth,_=o.trailWidth,b=o.gapDegree,v=void 0===b?0:b,C=o.gapPosition,$=o.trailColor,O=o.strokeLinecap,R=o.style,I=o.className,A=o.strokeColor,j=o.percent,D=(0,h.default)(o,w),T=k(l),L="".concat(T,"-gradient"),F=50-y/2,z=2*Math.PI*F,M=v>0?90+v/2:-90,P=(360-v)/360*z,N="object"===(0,g.default)(m)?m:{count:m,gap:2},W=N.count,B=N.gap,U=S(j),q=S(A),H=q.find(function(e){return e&&"object"===(0,g.default)(e)}),K=H&&"object"===(0,g.default)(H)?"butt":O,X=x(z,P,0,100,M,v,C,$,K,y),Q=p();return t.createElement("svg",(0,u.default)({className:(0,a.default)("".concat(c,"-circle"),I),viewBox:"0 0 ".concat(100," ").concat(100),style:R,id:l,role:"presentation"},D),!W&&t.createElement("circle",{className:"".concat(c,"-circle-trail"),r:F,cx:50,cy:50,stroke:$,strokeLinecap:K,strokeWidth:_||y,style:X}),W?(r=Math.round(W*(U[0]/100)),i=100/W,n=0,Array(W).fill(null).map(function(e,s){var o=s<=r-1?q[0]:$,a=o&&"object"===(0,g.default)(o)?"url(#".concat(L,")"):void 0,l=x(z,P,n,i,M,v,C,o,"butt",y,B);return n+=(P-l.strokeDashoffset+B)*100/P,t.createElement("circle",{key:s,className:"".concat(c,"-circle-path"),r:F,cx:50,cy:50,stroke:a,strokeWidth:y,opacity:1,style:l,ref:function(e){Q[s]=e}})})):(s=0,U.map(function(e,r){var i=q[r]||q[q.length-1],n=x(z,P,s,e,M,v,C,i,K,y);return s+=e,t.createElement(E,{key:r,color:i,ptg:e,radius:F,prefixCls:c,gradientId:L,style:n,strokeLinecap:K,strokeWidth:y,gapDegree:v,ref:function(e){Q[r]=e},size:100})}).reverse()))};var O=e.i(491816);e.i(765846);var R=e.i(896091);function I(e){return!e||e<0?0:e>100?100:e}function A({success:e,successPercent:t}){let r=t;return e&&"progress"in e&&(r=e.progress),e&&"percent"in e&&(r=e.percent),r}let j=(e,t,r)=>{var i,n,s,o;let a=-1,l=-1;if("step"===t){let t=r.steps,i=r.strokeWidth;"string"==typeof e||void 0===e?(a="small"===e?2:14,l=null!=i?i:8):"number"==typeof e?[a,l]=[e,e]:[a=14,l=8]=Array.isArray(e)?e:[e.width,e.height],a*=t}else if("line"===t){let t=null==r?void 0:r.strokeWidth;"string"==typeof e||void 0===e?l=t||("small"===e?6:8):"number"==typeof e?[a,l]=[e,e]:[a=-1,l=8]=Array.isArray(e)?e:[e.width,e.height]}else("circle"===t||"dashboard"===t)&&("string"==typeof e||void 0===e?[a,l]="small"===e?[60,60]:[120,120]:"number"==typeof e?[a,l]=[e,e]:Array.isArray(e)&&(a=null!=(n=null!=(i=e[0])?i:e[1])?n:120,l=null!=(o=null!=(s=e[0])?s:e[1])?o:120));return[a,l]},D=e=>{let{prefixCls:r,trailColor:i=null,strokeLinecap:n="round",gapPosition:s,gapDegree:o,width:l=120,type:c,children:u,success:d,size:h=l,steps:f}=e,[p,g]=j(h,"circle"),{strokeWidth:m}=e;void 0===m&&(m=Math.max(3/p*100,6));let y=t.useMemo(()=>o||0===o?o:"dashboard"===c?75:void 0,[o,c]),_=(({percent:e,success:t,successPercent:r})=>{let i=I(A({success:t,successPercent:r}));return[i,I(I(e)-i)]})(e),b="[object Object]"===Object.prototype.toString.call(e.strokeColor),k=(({success:e={},strokeColor:t})=>{let{strokeColor:r}=e;return[r||R.presetPrimaryColors.green,t||null]})({success:d,strokeColor:e.strokeColor}),v=(0,a.default)(`${r}-inner`,{[`${r}-circle-gradient`]:b}),C=t.createElement($,{steps:f,percent:f?_[1]:_,strokeWidth:m,trailWidth:m,strokeColor:f?k[1]:k,strokeLinecap:n,trailColor:i,prefixCls:r,gapDegree:y,gapPosition:s||"dashboard"===c&&"bottom"||void 0}),E=p<=20,x=t.createElement("div",{className:v,style:{width:p,height:g,fontSize:.15*p+6}},C,!E&&u);return E?t.createElement(O.default,{title:u},x):x};e.i(296059);var T=e.i(694758),L=e.i(915654),F=e.i(183293),z=e.i(246422),M=e.i(838378);let P="--progress-line-stroke-color",N="--progress-percent",W=e=>{let t=e?"100%":"-100%";return new T.Keyframes(`antProgress${e?"RTL":"LTR"}Active`,{"0%":{transform:`translateX(${t}) scaleX(0)`,opacity:.1},"20%":{transform:`translateX(${t}) scaleX(0)`,opacity:.5},to:{transform:"translateX(0) scaleX(1)",opacity:0}})},B=(0,z.genStyleHooks)("Progress",e=>{let t=e.calc(e.marginXXS).div(2).equal(),r=(0,M.mergeToken)(e,{progressStepMarginInlineEnd:t,progressStepMinWidth:t,progressActiveMotionDuration:"2.4s"});return[(e=>{let{componentCls:t,iconCls:r}=e;return{[t]:Object.assign(Object.assign({},(0,F.resetComponent)(e)),{display:"inline-block","&-rtl":{direction:"rtl"},"&-line":{position:"relative",width:"100%",fontSize:e.fontSize},[`${t}-outer`]:{display:"inline-flex",alignItems:"center",width:"100%"},[`${t}-inner`]:{position:"relative",display:"inline-block",width:"100%",flex:1,overflow:"hidden",verticalAlign:"middle",backgroundColor:e.remainingColor,borderRadius:e.lineBorderRadius},[`${t}-inner:not(${t}-circle-gradient)`]:{[`${t}-circle-path`]:{stroke:e.defaultColor}},[`${t}-success-bg, ${t}-bg`]:{position:"relative",background:e.defaultColor,borderRadius:e.lineBorderRadius,transition:`all ${e.motionDurationSlow} ${e.motionEaseInOutCirc}`},[`${t}-layout-bottom`]:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",[`${t}-text`]:{width:"max-content",marginInlineStart:0,marginTop:e.marginXXS}},[`${t}-bg`]:{overflow:"hidden","&::after":{content:'""',background:{_multi_value_:!0,value:["inherit",`var(${P})`]},height:"100%",width:`calc(1 / var(${N}) * 100%)`,display:"block"},[`&${t}-bg-inner`]:{minWidth:"max-content","&::after":{content:"none"},[`${t}-text-inner`]:{color:e.colorWhite,[`&${t}-text-bright`]:{color:"rgba(0, 0, 0, 0.45)"}}}},[`${t}-success-bg`]:{position:"absolute",insetBlockStart:0,insetInlineStart:0,backgroundColor:e.colorSuccess},[`${t}-text`]:{display:"inline-block",marginInlineStart:e.marginXS,color:e.colorText,lineHeight:1,width:"2em",whiteSpace:"nowrap",textAlign:"start",verticalAlign:"middle",wordBreak:"normal",[r]:{fontSize:e.fontSize},[`&${t}-text-outer`]:{width:"max-content"},[`&${t}-text-outer${t}-text-start`]:{width:"max-content",marginInlineStart:0,marginInlineEnd:e.marginXS}},[`${t}-text-inner`]:{display:"flex",justifyContent:"center",alignItems:"center",width:"100%",height:"100%",marginInlineStart:0,padding:`0 ${(0,L.unit)(e.paddingXXS)}`,[`&${t}-text-start`]:{justifyContent:"start"},[`&${t}-text-end`]:{justifyContent:"end"}},[`&${t}-status-active`]:{[`${t}-bg::before`]:{position:"absolute",inset:0,backgroundColor:e.colorBgContainer,borderRadius:e.lineBorderRadius,opacity:0,animationName:W(),animationDuration:e.progressActiveMotionDuration,animationTimingFunction:e.motionEaseOutQuint,animationIterationCount:"infinite",content:'""'}},[`&${t}-rtl${t}-status-active`]:{[`${t}-bg::before`]:{animationName:W(!0)}},[`&${t}-status-exception`]:{[`${t}-bg`]:{backgroundColor:e.colorError},[`${t}-text`]:{color:e.colorError}},[`&${t}-status-exception ${t}-inner:not(${t}-circle-gradient)`]:{[`${t}-circle-path`]:{stroke:e.colorError}},[`&${t}-status-success`]:{[`${t}-bg`]:{backgroundColor:e.colorSuccess},[`${t}-text`]:{color:e.colorSuccess}},[`&${t}-status-success ${t}-inner:not(${t}-circle-gradient)`]:{[`${t}-circle-path`]:{stroke:e.colorSuccess}}})}})(r),(e=>{let{componentCls:t,iconCls:r}=e;return{[t]:{[`${t}-circle-trail`]:{stroke:e.remainingColor},[`&${t}-circle ${t}-inner`]:{position:"relative",lineHeight:1,backgroundColor:"transparent"},[`&${t}-circle ${t}-text`]:{position:"absolute",insetBlockStart:"50%",insetInlineStart:0,width:"100%",margin:0,padding:0,color:e.circleTextColor,fontSize:e.circleTextFontSize,lineHeight:1,whiteSpace:"normal",textAlign:"center",transform:"translateY(-50%)",[r]:{fontSize:e.circleIconFontSize}},[`${t}-circle&-status-exception`]:{[`${t}-text`]:{color:e.colorError}},[`${t}-circle&-status-success`]:{[`${t}-text`]:{color:e.colorSuccess}}},[`${t}-inline-circle`]:{lineHeight:1,[`${t}-inner`]:{verticalAlign:"bottom"}}}})(r),(e=>{let{componentCls:t}=e;return{[t]:{[`${t}-steps`]:{display:"inline-block","&-outer":{display:"flex",flexDirection:"row",alignItems:"center"},"&-item":{flexShrink:0,minWidth:e.progressStepMinWidth,marginInlineEnd:e.progressStepMarginInlineEnd,backgroundColor:e.remainingColor,transition:`all ${e.motionDurationSlow}`,"&-active":{backgroundColor:e.defaultColor}}}}}})(r),(e=>{let{componentCls:t,iconCls:r}=e;return{[t]:{[`${t}-small&-line, ${t}-small&-line ${t}-text ${r}`]:{fontSize:e.fontSizeSM}}}})(r)]},e=>({circleTextColor:e.colorText,defaultColor:e.colorInfo,remainingColor:e.colorFillSecondary,lineBorderRadius:100,circleTextFontSize:"1em",circleIconFontSize:`${e.fontSize/e.fontSizeSM}em`}));var U=function(e,t){var r={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&0>t.indexOf(i)&&(r[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var n=0,i=Object.getOwnPropertySymbols(e);nt.indexOf(i[n])&&Object.prototype.propertyIsEnumerable.call(e,i[n])&&(r[i[n]]=e[i[n]]);return r};let q=e=>{let{prefixCls:r,direction:i,percent:n,size:s,strokeWidth:o,strokeColor:l,strokeLinecap:c="round",children:u,trailColor:d=null,percentPosition:h,success:f}=e,{align:p,type:g}=h,m=l&&"string"!=typeof l?((e,t)=>{let{from:r=R.presetPrimaryColors.blue,to:i=R.presetPrimaryColors.blue,direction:n="rtl"===t?"to left":"to right"}=e,s=U(e,["from","to","direction"]);if(0!==Object.keys(s).length){let e,t=(e=[],Object.keys(s).forEach(t=>{let r=Number.parseFloat(t.replace(/%/g,""));Number.isNaN(r)||e.push({key:r,value:s[t]})}),(e=e.sort((e,t)=>e.key-t.key)).map(({key:e,value:t})=>`${t} ${e}%`).join(", ")),r=`linear-gradient(${n}, ${t})`;return{background:r,[P]:r}}let o=`linear-gradient(${n}, ${r}, ${i})`;return{background:o,[P]:o}})(l,i):{[P]:l,background:l},y="square"===c||"butt"===c?0:void 0,[_,b]=j(null!=s?s:[-1,o||("small"===s?6:8)],"line",{strokeWidth:o}),k=Object.assign(Object.assign({width:`${I(n)}%`,height:b,borderRadius:y},m),{[N]:I(n)/100}),v=A(e),C={width:`${I(v)}%`,height:b,borderRadius:y,backgroundColor:null==f?void 0:f.strokeColor},E=t.createElement("div",{className:`${r}-inner`,style:{backgroundColor:d||void 0,borderRadius:y}},t.createElement("div",{className:(0,a.default)(`${r}-bg`,`${r}-bg-${g}`),style:k},"inner"===g&&u),void 0!==v&&t.createElement("div",{className:`${r}-success-bg`,style:C})),x="outer"===g&&"start"===p,w="outer"===g&&"end"===p;return"outer"===g&&"center"===p?t.createElement("div",{className:`${r}-layout-bottom`},E,u):t.createElement("div",{className:`${r}-outer`,style:{width:_<0?"100%":_}},x&&u,E,w&&u)},H=e=>{let{size:r,steps:i,rounding:n=Math.round,percent:s=0,strokeWidth:o=8,strokeColor:l,trailColor:c=null,prefixCls:u,children:d}=e,h=n(s/100*i),[f,p]=j(null!=r?r:["small"===r?2:14,o],"step",{steps:i,strokeWidth:o}),g=f/i,m=Array.from({length:i});for(let e=0;et.indexOf(i)&&(r[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var n=0,i=Object.getOwnPropertySymbols(e);nt.indexOf(i[n])&&Object.prototype.propertyIsEnumerable.call(e,i[n])&&(r[i[n]]=e[i[n]]);return r};let X=["normal","exception","active","success"],Q=t.forwardRef((e,u)=>{let d,{prefixCls:h,className:f,rootClassName:p,steps:g,strokeColor:m,percent:y=0,size:_="default",showInfo:b=!0,type:k="line",status:v,format:C,style:E,percentPosition:x={}}=e,w=K(e,["prefixCls","className","rootClassName","steps","strokeColor","percent","size","showInfo","type","status","format","style","percentPosition"]),{align:S="end",type:$="outer"}=x,O=Array.isArray(m)?m[0]:m,R="string"==typeof m||Array.isArray(m)?m:void 0,T=t.useMemo(()=>{if(O){let e="string"==typeof O?O:Object.values(O)[0];return new r.FastColor(e).isLight()}return!1},[m]),L=t.useMemo(()=>{var t,r;let i=A(e);return Number.parseInt(void 0!==i?null==(t=null!=i?i:0)?void 0:t.toString():null==(r=null!=y?y:0)?void 0:r.toString(),10)},[y,e.success,e.successPercent]),F=t.useMemo(()=>!X.includes(v)&&L>=100?"success":v||"normal",[v,L]),{getPrefixCls:z,direction:M,progress:P}=t.useContext(c.ConfigContext),N=z("progress",h),[W,U,Q]=B(N),J="line"===k,V=J&&!g,Y=t.useMemo(()=>{let r;if(!b)return null;let l=A(e),c=C||(e=>`${e}%`),u=J&&T&&"inner"===$;return"inner"===$||C||"exception"!==F&&"success"!==F?r=c(I(y),I(l)):"exception"===F?r=J?t.createElement(s.default,null):t.createElement(o.default,null):"success"===F&&(r=J?t.createElement(i.default,null):t.createElement(n.default,null)),t.createElement("span",{className:(0,a.default)(`${N}-text`,{[`${N}-text-bright`]:u,[`${N}-text-${S}`]:V,[`${N}-text-${$}`]:V}),title:"string"==typeof r?r:void 0},r)},[b,y,L,F,k,N,C]);"line"===k?d=g?t.createElement(H,Object.assign({},e,{strokeColor:R,prefixCls:N,steps:"object"==typeof g?g.count:g}),Y):t.createElement(q,Object.assign({},e,{strokeColor:O,prefixCls:N,direction:M,percentPosition:{align:S,type:$}}),Y):("circle"===k||"dashboard"===k)&&(d=t.createElement(D,Object.assign({},e,{strokeColor:O,prefixCls:N,progressStatus:F}),Y));let Z=(0,a.default)(N,`${N}-status-${F}`,{[`${N}-${"dashboard"===k&&"circle"||k}`]:"line"!==k,[`${N}-inline-circle`]:"circle"===k&&j(_,"circle")[0]<=20,[`${N}-line`]:V,[`${N}-line-align-${S}`]:V,[`${N}-line-position-${$}`]:V,[`${N}-steps`]:g,[`${N}-show-info`]:b,[`${N}-${_}`]:"string"==typeof _,[`${N}-rtl`]:"rtl"===M},null==P?void 0:P.className,f,p,U,Q);return W(t.createElement("div",Object.assign({ref:u,style:Object.assign(Object.assign({},null==P?void 0:P.style),E),className:Z,role:"progressbar","aria-valuenow":L,"aria-valuemin":0,"aria-valuemax":100},(0,l.default)(w,["trailColor","strokeWidth","width","gapDegree","gapPosition","strokeLinecap","success","successPercent"])),d))});e.s(["default",0,Q],309821)},59935,(e,t,r)=>{var i;let n;e.e,i=function e(){var t,r="u">typeof self?self:"u">typeof window?window:void 0!==r?r:{},i=!r.document&&!!r.postMessage,n=r.IS_PAPA_WORKER||!1,s={},o=0,a={};function l(e){this._handle=null,this._finished=!1,this._completed=!1,this._halted=!1,this._input=null,this._baseIndex=0,this._partialLine="",this._rowCount=0,this._start=0,this._nextChunk=null,this.isFirstChunk=!0,this._completeResults={data:[],errors:[],meta:{}},(function(e){var t=b(e);t.chunkSize=parseInt(t.chunkSize),e.step||e.chunk||(t.chunkSize=null),this._handle=new f(t),(this._handle.streamer=this)._config=t}).call(this,e),this.parseChunk=function(e,t){var i=parseInt(this._config.skipFirstNLines)||0;if(this.isFirstChunk&&0=this._config.preview,n)r.postMessage({results:s,workerId:a.WORKER_ID,finished:i});else if(v(this._config.chunk)&&!t){if(this._config.chunk(s,this._handle),this._handle.paused()||this._handle.aborted())return void(this._halted=!0);this._completeResults=s=void 0}return this._config.step||this._config.chunk||(this._completeResults.data=this._completeResults.data.concat(s.data),this._completeResults.errors=this._completeResults.errors.concat(s.errors),this._completeResults.meta=s.meta),this._completed||!i||!v(this._config.complete)||s&&s.meta.aborted||(this._config.complete(this._completeResults,this._input),this._completed=!0),i||s&&s.meta.paused||this._nextChunk(),s}this._halted=!0},this._sendError=function(e){v(this._config.error)?this._config.error(e):n&&this._config.error&&r.postMessage({workerId:a.WORKER_ID,error:e,finished:!1})}}function c(e){var t;(e=e||{}).chunkSize||(e.chunkSize=a.RemoteChunkSize),l.call(this,e),this._nextChunk=i?function(){this._readChunk(),this._chunkLoaded()}:function(){this._readChunk()},this.stream=function(e){this._input=e,this._nextChunk()},this._readChunk=function(){if(this._finished)this._chunkLoaded();else{if(t=new XMLHttpRequest,this._config.withCredentials&&(t.withCredentials=this._config.withCredentials),i||(t.onload=k(this._chunkLoaded,this),t.onerror=k(this._chunkError,this)),t.open(this._config.downloadRequestBody?"POST":"GET",this._input,!i),this._config.downloadRequestHeaders){var e,r,n=this._config.downloadRequestHeaders;for(r in n)t.setRequestHeader(r,n[r])}this._config.chunkSize&&(e=this._start+this._config.chunkSize-1,t.setRequestHeader("Range","bytes="+this._start+"-"+e));try{t.send(this._config.downloadRequestBody)}catch(e){this._chunkError(e.message)}i&&0===t.status&&this._chunkError()}},this._chunkLoaded=function(){let e;4===t.readyState&&(t.status<200||400<=t.status?this._chunkError():(this._start+=this._config.chunkSize||t.responseText.length,this._finished=!this._config.chunkSize||this._start>=(null!==(e=(e=t).getResponseHeader("Content-Range"))?parseInt(e.substring(e.lastIndexOf("/")+1)):-1),this.parseChunk(t.responseText)))},this._chunkError=function(e){e=t.statusText||e,this._sendError(Error(e))}}function u(e){(e=e||{}).chunkSize||(e.chunkSize=a.LocalChunkSize),l.call(this,e);var t,r,i="u">typeof FileReader;this.stream=function(e){this._input=e,r=e.slice||e.webkitSlice||e.mozSlice,i?((t=new FileReader).onload=k(this._chunkLoaded,this),t.onerror=k(this._chunkError,this)):t=new FileReaderSync,this._nextChunk()},this._nextChunk=function(){this._finished||this._config.preview&&!(this._rowCount=this._input.size,this.parseChunk(e.target.result)},this._chunkError=function(){this._sendError(t.error)}}function d(e){var t;l.call(this,e=e||{}),this.stream=function(e){return t=e,this._nextChunk()},this._nextChunk=function(){var e,r;if(!this._finished)return t=(e=this._config.chunkSize)?(r=t.substring(0,e),t.substring(e)):(r=t,""),this._finished=!t,this.parseChunk(r)}}function h(e){l.call(this,e=e||{});var t=[],r=!0,i=!1;this.pause=function(){l.prototype.pause.apply(this,arguments),this._input.pause()},this.resume=function(){l.prototype.resume.apply(this,arguments),this._input.resume()},this.stream=function(e){this._input=e,this._input.on("data",this._streamData),this._input.on("end",this._streamEnd),this._input.on("error",this._streamError)},this._checkIsFinished=function(){i&&1===t.length&&(this._finished=!0)},this._nextChunk=function(){this._checkIsFinished(),t.length?this.parseChunk(t.shift()):r=!0},this._streamData=k(function(e){try{t.push("string"==typeof e?e:e.toString(this._config.encoding)),r&&(r=!1,this._checkIsFinished(),this.parseChunk(t.shift()))}catch(e){this._streamError(e)}},this),this._streamError=k(function(e){this._streamCleanUp(),this._sendError(e)},this),this._streamEnd=k(function(){this._streamCleanUp(),i=!0,this._streamData("")},this),this._streamCleanUp=k(function(){this._input.removeListener("data",this._streamData),this._input.removeListener("end",this._streamEnd),this._input.removeListener("error",this._streamError)},this)}function f(e){var t,r,i,n,s=/^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/,o=/^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/,l=this,c=0,u=0,d=!1,h=!1,f=[],m={data:[],errors:[],meta:{}};function y(t){return"greedy"===e.skipEmptyLines?""===t.join("").trim():1===t.length&&0===t[0].length}function _(){if(m&&i&&(C("Delimiter","UndetectableDelimiter","Unable to auto-detect delimiting character; defaulted to '"+a.DefaultDelimiter+"'"),i=!1),e.skipEmptyLines&&(m.data=m.data.filter(function(e){return!y(e)})),k()){if(m)if(Array.isArray(m.data[0])){for(var t,r=0;k()&&r(e.dynamicTypingFunction&&void 0===e.dynamicTyping[t]&&(e.dynamicTyping[t]=e.dynamicTypingFunction(t)),!0===(e.dynamicTyping[t]||e.dynamicTyping))?"true"===r||"TRUE"===r||"false"!==r&&"FALSE"!==r&&((e=>{if(s.test(e)&&-0x20000000000000<(e=parseFloat(e))&&e<0x20000000000000)return 1})(r)?parseFloat(r):o.test(r)?new Date(r):""===r?null:r):r)(a=e.header?n>=f.length?"__parsed_extra":f[n]:a,l=e.transform?e.transform(l,a):l);"__parsed_extra"===a?(i[a]=i[a]||[],i[a].push(l)):i[a]=l}return e.header&&(n>f.length?C("FieldMismatch","TooManyFields","Too many fields: expected "+f.length+" fields but parsed "+n,u+r):ne.preview?r.abort():(m.data=m.data[0],n(m,l))))}),this.parse=function(n,s,o){var l=e.quoteChar||'"',l=(e.newline||(e.newline=this.guessLineEndings(n,l)),i=!1,e.delimiter?v(e.delimiter)&&(e.delimiter=e.delimiter(n),m.meta.delimiter=e.delimiter):((l=((t,r,i,n,s)=>{var o,l,c,u;s=s||[","," ","|",";",a.RECORD_SEP,a.UNIT_SEP];for(var d=0;d=r.length/2?"\r\n":"\r"}}function p(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function g(e){var t=(e=e||{}).delimiter,r=e.newline,i=e.comments,n=e.step,s=e.preview,o=e.fastMode,l=null,c=!1,u=null==e.quoteChar?'"':e.quoteChar,d=u;if(void 0!==e.escapeChar&&(d=e.escapeChar),("string"!=typeof t||-1=s)return M(!0);break}x.push({type:"Quotes",code:"InvalidQuotes",message:"Trailing quote on quoted field is malformed",row:E.length,index:h}),j++}}else if(i&&0===w.length&&a.substring(h,h+k)===i){if(-1===I)return M();h=I+b,I=a.indexOf(r,h),R=a.indexOf(t,h)}else if(-1!==R&&(R=s)return M(!0)}return F();function T(e){E.push(e),S=h}function L(e){return -1!==e&&(e=a.substring(j+1,e))&&""===e.trim()?e.length:0}function F(e){return m||(void 0===e&&(e=a.substring(h)),w.push(e),h=y,T(w),C&&P()),M()}function z(e){h=e,T(w),w=[],I=a.indexOf(r,h)}function M(i){if(e.header&&!g&&E.length&&!c){var n=E[0],s=Object.create(null),o=new Set(n);let t=!1;for(let r=0;r{if("object"==typeof t){if("string"!=typeof t.delimiter||a.BAD_DELIMITERS.filter(function(e){return -1!==t.delimiter.indexOf(e)}).length||(n=t.delimiter),("boolean"==typeof t.quotes||"function"==typeof t.quotes||Array.isArray(t.quotes))&&(r=t.quotes),"boolean"!=typeof t.skipEmptyLines&&"string"!=typeof t.skipEmptyLines||(c=t.skipEmptyLines),"string"==typeof t.newline&&(s=t.newline),"string"==typeof t.quoteChar&&(o=t.quoteChar),"boolean"==typeof t.header&&(i=t.header),Array.isArray(t.columns)){if(0===t.columns.length)throw Error("Option columns is empty");u=t.columns}void 0!==t.escapeChar&&(l=t.escapeChar+o),t.escapeFormulae instanceof RegExp?d=t.escapeFormulae:"boolean"==typeof t.escapeFormulae&&t.escapeFormulae&&(d=/^[=+\-@\t\r].*$/)}})(),RegExp(p(o),"g"));if("string"==typeof e&&(e=JSON.parse(e)),Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return f(null,e,c);if("object"==typeof e[0])return f(u||Object.keys(e[0]),e,c)}else if("object"==typeof e)return"string"==typeof e.data&&(e.data=JSON.parse(e.data)),Array.isArray(e.data)&&(e.fields||(e.fields=e.meta&&e.meta.fields||u),e.fields||(e.fields=Array.isArray(e.data[0])?e.fields:"object"==typeof e.data[0]?Object.keys(e.data[0]):[]),Array.isArray(e.data[0])||"object"==typeof e.data[0]||(e.data=[e.data])),f(e.fields||[],e.data||[],c);throw Error("Unable to serialize unrecognized input");function f(e,t,r){var o="",a=("string"==typeof e&&(e=JSON.parse(e)),"string"==typeof t&&(t=JSON.parse(t)),Array.isArray(e)&&0{for(var r=0;r{"use strict";e.i(247167);var t=e.i(271645),r=e.i(343794),n=e.i(931067),a=e.i(392221),i=e.i(703923),o=e.i(211577),l=e.i(209428),s=e.i(410160),c=e.i(914949),u=e.i(529681),d=e.i(611935),f=e.i(361275),p=e.i(174428),m=function(e,t){if(!e)return null;var r={left:e.offsetLeft,right:e.parentElement.clientWidth-e.clientWidth-e.offsetLeft,width:e.clientWidth,top:e.offsetTop,bottom:e.parentElement.clientHeight-e.clientHeight-e.offsetTop,height:e.clientHeight};return t?{left:0,right:0,width:0,top:r.top,bottom:r.bottom,height:r.height}:{left:r.left,right:r.right,width:r.width,top:0,bottom:0,height:0}},y=function(e){return void 0!==e?"".concat(e,"px"):void 0};function h(e){var n=e.prefixCls,i=e.containerRef,o=e.value,s=e.getValueIndex,c=e.motionName,u=e.onMotionStart,h=e.onMotionEnd,v=e.direction,b=e.vertical,g=void 0!==b&&b,x=t.useRef(null),k=t.useState(o),A=(0,a.default)(k,2),O=A[0],w=A[1],j=function(e){var t,r=s(e),a=null==(t=i.current)?void 0:t.querySelectorAll(".".concat(n,"-item"))[r];return(null==a?void 0:a.offsetParent)&&a},P=t.useState(null),S=(0,a.default)(P,2),E=S[0],C=S[1],N=t.useState(null),T=(0,a.default)(N,2),L=T[0],D=T[1];(0,p.default)(function(){if(O!==o){var e=j(O),t=j(o),r=m(e,g),n=m(t,g);w(o),C(r),D(n),e&&t?u():h()}},[o]);var R=t.useMemo(function(){if(g){var e;return y(null!=(e=null==E?void 0:E.top)?e:0)}return"rtl"===v?y(-(null==E?void 0:E.right)):y(null==E?void 0:E.left)},[g,v,E]),I=t.useMemo(function(){if(g){var e;return y(null!=(e=null==L?void 0:L.top)?e:0)}return"rtl"===v?y(-(null==L?void 0:L.right)):y(null==L?void 0:L.left)},[g,v,L]);return E&&L?t.createElement(f.default,{visible:!0,motionName:c,motionAppear:!0,onAppearStart:function(){return g?{transform:"translateY(var(--thumb-start-top))",height:"var(--thumb-start-height)"}:{transform:"translateX(var(--thumb-start-left))",width:"var(--thumb-start-width)"}},onAppearActive:function(){return g?{transform:"translateY(var(--thumb-active-top))",height:"var(--thumb-active-height)"}:{transform:"translateX(var(--thumb-active-left))",width:"var(--thumb-active-width)"}},onVisibleChanged:function(){C(null),D(null),h()}},function(e,a){var i=e.className,o=e.style,s=(0,l.default)((0,l.default)({},o),{},{"--thumb-start-left":R,"--thumb-start-width":y(null==E?void 0:E.width),"--thumb-active-left":I,"--thumb-active-width":y(null==L?void 0:L.width),"--thumb-start-top":R,"--thumb-start-height":y(null==E?void 0:E.height),"--thumb-active-top":I,"--thumb-active-height":y(null==L?void 0:L.height)}),c={ref:(0,d.composeRef)(x,a),style:s,className:(0,r.default)("".concat(n,"-thumb"),i)};return t.createElement("div",c)}):null}var v=["prefixCls","direction","vertical","options","disabled","defaultValue","value","name","onChange","className","motionName"],b=function(e){var n=e.prefixCls,a=e.className,i=e.disabled,l=e.checked,s=e.label,c=e.title,u=e.value,d=e.name,f=e.onChange,p=e.onFocus,m=e.onBlur,y=e.onKeyDown,h=e.onKeyUp,v=e.onMouseDown;return t.createElement("label",{className:(0,r.default)(a,(0,o.default)({},"".concat(n,"-item-disabled"),i)),onMouseDown:v},t.createElement("input",{name:d,className:"".concat(n,"-item-input"),type:"radio",disabled:i,checked:l,onChange:function(e){i||f(e,u)},onFocus:p,onBlur:m,onKeyDown:y,onKeyUp:h}),t.createElement("div",{className:"".concat(n,"-item-label"),title:c},s))},g=t.forwardRef(function(e,f){var p,m=e.prefixCls,y=void 0===m?"rc-segmented":m,g=e.direction,x=e.vertical,k=e.options,A=void 0===k?[]:k,O=e.disabled,w=e.defaultValue,j=e.value,P=e.name,S=e.onChange,E=e.className,C=e.motionName,N=(0,i.default)(e,v),T=t.useRef(null),L=t.useMemo(function(){return(0,d.composeRef)(T,f)},[T,f]),D=t.useMemo(function(){return A.map(function(e){if("object"===(0,s.default)(e)&&null!==e){var t=function(e){if(void 0!==e.title)return e.title;if("object"!==(0,s.default)(e.label)){var t;return null==(t=e.label)?void 0:t.toString()}}(e);return(0,l.default)((0,l.default)({},e),{},{title:t})}return{label:null==e?void 0:e.toString(),title:null==e?void 0:e.toString(),value:e}})},[A]),R=(0,c.default)(null==(p=D[0])?void 0:p.value,{value:j,defaultValue:w}),I=(0,a.default)(R,2),B=I[0],M=I[1],_=t.useState(!1),$=(0,a.default)(_,2),K=$[0],V=$[1],F=function(e,t){M(t),null==S||S(t)},W=(0,u.default)(N,["children"]),z=t.useState(!1),G=(0,a.default)(z,2),H=G[0],q=G[1],U=t.useState(!1),X=(0,a.default)(U,2),Y=X[0],Z=X[1],J=function(){Z(!0)},Q=function(){Z(!1)},ee=function(){q(!1)},et=function(e){"Tab"===e.key&&q(!0)},er=function(e){var t=D.findIndex(function(e){return e.value===B}),r=D.length,n=D[(t+e+r)%r];n&&(M(n.value),null==S||S(n.value))},en=function(e){switch(e.key){case"ArrowLeft":case"ArrowUp":er(-1);break;case"ArrowRight":case"ArrowDown":er(1)}};return t.createElement("div",(0,n.default)({role:"radiogroup","aria-label":"segmented control",tabIndex:O?void 0:0,"aria-orientation":x?"vertical":"horizontal"},W,{className:(0,r.default)(y,(0,o.default)((0,o.default)((0,o.default)({},"".concat(y,"-rtl"),"rtl"===g),"".concat(y,"-disabled"),O),"".concat(y,"-vertical"),x),void 0===E?"":E),ref:L}),t.createElement("div",{className:"".concat(y,"-group")},t.createElement(h,{vertical:x,prefixCls:y,value:B,containerRef:T,motionName:"".concat(y,"-").concat(void 0===C?"thumb-motion":C),direction:g,getValueIndex:function(e){return D.findIndex(function(t){return t.value===e})},onMotionStart:function(){V(!0)},onMotionEnd:function(){V(!1)}}),D.map(function(e){return t.createElement(b,(0,n.default)({},e,{name:P,key:e.value,prefixCls:y,className:(0,r.default)(e.className,"".concat(y,"-item"),(0,o.default)((0,o.default)({},"".concat(y,"-item-selected"),e.value===B&&!K),"".concat(y,"-item-focused"),Y&&H&&e.value===B)),checked:e.value===B,onChange:F,onFocus:J,onBlur:Q,onKeyDown:en,onKeyUp:et,onMouseDown:ee,disabled:!!O||!!e.disabled}))})))}),x=e.i(981444),k=e.i(242064),A=e.i(517455);e.i(296059);var O=e.i(915654),w=e.i(183293),j=e.i(246422),P=e.i(838378);function S(e,t){return{[`${e}, ${e}:hover, ${e}:focus`]:{color:t.colorTextDisabled,cursor:"not-allowed"}}}function E(e){return{background:e.itemSelectedBg,boxShadow:e.boxShadowTertiary}}let C=Object.assign({overflow:"hidden"},w.textEllipsis),N=(0,j.genStyleHooks)("Segmented",e=>{let{lineWidth:t,calc:r}=e;return(e=>{let{componentCls:t}=e,r=e.calc(e.controlHeight).sub(e.calc(e.trackPadding).mul(2)).equal(),n=e.calc(e.controlHeightLG).sub(e.calc(e.trackPadding).mul(2)).equal(),a=e.calc(e.controlHeightSM).sub(e.calc(e.trackPadding).mul(2)).equal();return{[t]:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},(0,w.resetComponent)(e)),{display:"inline-block",padding:e.trackPadding,color:e.itemColor,background:e.trackBg,borderRadius:e.borderRadius,transition:`all ${e.motionDurationMid}`}),(0,w.genFocusStyle)(e)),{[`${t}-group`]:{position:"relative",display:"flex",alignItems:"stretch",justifyItems:"flex-start",flexDirection:"row",width:"100%"},[`&${t}-rtl`]:{direction:"rtl"},[`&${t}-vertical`]:{[`${t}-group`]:{flexDirection:"column"},[`${t}-thumb`]:{width:"100%",height:0,padding:`0 ${(0,O.unit)(e.paddingXXS)}`}},[`&${t}-block`]:{display:"flex"},[`&${t}-block ${t}-item`]:{flex:1,minWidth:0},[`${t}-item`]:{position:"relative",textAlign:"center",cursor:"pointer",transition:`color ${e.motionDurationMid}`,borderRadius:e.borderRadiusSM,transform:"translateZ(0)","&-selected":Object.assign(Object.assign({},E(e)),{color:e.itemSelectedColor}),"&-focused":(0,w.genFocusOutline)(e),"&::after":{content:'""',position:"absolute",zIndex:-1,width:"100%",height:"100%",top:0,insetInlineStart:0,borderRadius:"inherit",opacity:0,transition:`opacity ${e.motionDurationMid}, background-color ${e.motionDurationMid}`,pointerEvents:"none"},[`&:not(${t}-item-selected):not(${t}-item-disabled)`]:{"&:hover, &:active":{color:e.itemHoverColor},"&:hover::after":{opacity:1,backgroundColor:e.itemHoverBg},"&:active::after":{opacity:1,backgroundColor:e.itemActiveBg}},"&-label":Object.assign({minHeight:r,lineHeight:(0,O.unit)(r),padding:`0 ${(0,O.unit)(e.segmentedPaddingHorizontal)}`},C),"&-icon + *":{marginInlineStart:e.calc(e.marginSM).div(2).equal()},"&-input":{position:"absolute",insetBlockStart:0,insetInlineStart:0,width:0,height:0,opacity:0,pointerEvents:"none"}},[`${t}-thumb`]:Object.assign(Object.assign({},E(e)),{position:"absolute",insetBlockStart:0,insetInlineStart:0,width:0,height:"100%",padding:`${(0,O.unit)(e.paddingXXS)} 0`,borderRadius:e.borderRadiusSM,[`& ~ ${t}-item:not(${t}-item-selected):not(${t}-item-disabled)::after`]:{backgroundColor:"transparent"}}),[`&${t}-lg`]:{borderRadius:e.borderRadiusLG,[`${t}-item-label`]:{minHeight:n,lineHeight:(0,O.unit)(n),padding:`0 ${(0,O.unit)(e.segmentedPaddingHorizontal)}`,fontSize:e.fontSizeLG},[`${t}-item, ${t}-thumb`]:{borderRadius:e.borderRadius}},[`&${t}-sm`]:{borderRadius:e.borderRadiusSM,[`${t}-item-label`]:{minHeight:a,lineHeight:(0,O.unit)(a),padding:`0 ${(0,O.unit)(e.segmentedPaddingHorizontalSM)}`},[`${t}-item, ${t}-thumb`]:{borderRadius:e.borderRadiusXS}}}),S(`&-disabled ${t}-item`,e)),S(`${t}-item-disabled`,e)),{[`${t}-thumb-motion-appear-active`]:{transition:`transform ${e.motionDurationSlow} ${e.motionEaseInOut}, width ${e.motionDurationSlow} ${e.motionEaseInOut}`,willChange:"transform, width"},[`&${t}-shape-round`]:{borderRadius:9999,[`${t}-item, ${t}-thumb`]:{borderRadius:9999}}})}})((0,P.mergeToken)(e,{segmentedPaddingHorizontal:r(e.controlPaddingHorizontal).sub(t).equal(),segmentedPaddingHorizontalSM:r(e.controlPaddingHorizontalSM).sub(t).equal()}))},e=>{let{colorTextLabel:t,colorText:r,colorFillSecondary:n,colorBgElevated:a,colorFill:i,lineWidthBold:o,colorBgLayout:l}=e;return{trackPadding:o,trackBg:l,itemColor:t,itemHoverColor:r,itemHoverBg:n,itemSelectedBg:a,itemActiveBg:i,itemSelectedColor:r}});var T=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&0>t.indexOf(n)&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var a=0,n=Object.getOwnPropertySymbols(e);at.indexOf(n[a])&&Object.prototype.propertyIsEnumerable.call(e,n[a])&&(r[n[a]]=e[n[a]]);return r};let L=t.forwardRef((e,n)=>{let a=(0,x.default)(),{prefixCls:i,className:o,rootClassName:l,block:s,options:c=[],size:u="middle",style:d,vertical:f,shape:p="default",name:m=a}=e,y=T(e,["prefixCls","className","rootClassName","block","options","size","style","vertical","shape","name"]),{getPrefixCls:h,direction:v,className:b,style:O}=(0,k.useComponentConfig)("segmented"),w=h("segmented",i),[j,P,S]=N(w),E=(0,A.default)(u),C=t.useMemo(()=>c.map(e=>{if("object"==typeof e&&(null==e?void 0:e.icon)){let{icon:r,label:n}=e;return Object.assign(Object.assign({},T(e,["icon","label"])),{label:t.createElement(t.Fragment,null,t.createElement("span",{className:`${w}-item-icon`},r),n&&t.createElement("span",null,n))})}return e}),[c,w]),L=(0,r.default)(o,l,b,{[`${w}-block`]:s,[`${w}-sm`]:"small"===E,[`${w}-lg`]:"large"===E,[`${w}-vertical`]:f,[`${w}-shape-${p}`]:"round"===p},P,S),D=Object.assign(Object.assign({},O),d);return j(t.createElement(g,Object.assign({},y,{name:m,className:L,style:D,options:C,ref:n,prefixCls:w,direction:v,vertical:f})))});e.s(["Segmented",0,L],560025)},476961,555706,e=>{"use strict";var t=e.i(290571),r=e.i(271645),n=e.i(731195),a=e.i(883966),i=e.i(207670),o=e.i(273050),l=e.i(771223),s=e.i(86966),c=e.i(629873),u=e.i(878948),d=e.i(898892),f=e.i(372733),p=e.i(238279),m=e.i(997865),y=e.i(969212),h=e.i(562728),v=e.i(794395),b=e.i(198770),g=e.i(781977),x=["layout","type","stroke","connectNulls","isRange","ref"],k=["key"];function A(e){return(A="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function O(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}function w(){return(w=Object.assign.bind()).apply(this,arguments)}function j(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function P(e){for(var t=1;t0||!(0,d.default)(l,n)||!(0,d.default)(s,a))?this.renderAreaWithAnimation(e,t):this.renderAreaStatically(n,a,e,t)}},{key:"render",value:function(){var e,t=this.props,n=t.hide,a=t.dot,o=t.points,l=t.className,s=t.top,u=t.left,d=t.xAxis,f=t.yAxis,p=t.width,h=t.height,v=t.isAnimationActive,b=t.id;if(n||!o||!o.length)return null;var x=this.state.isAnimationFinished,k=1===o.length,A=(0,i.default)("recharts-area",l),O=d&&d.allowDataOverflow,w=f&&f.allowDataOverflow,j=O||w,P=(0,c.default)(b)?this.id:b,S=null!=(e=(0,g.filterProps)(a,!1))?e:{r:3,strokeWidth:2},E=S.r,C=S.strokeWidth,N=((0,g.hasClipDot)(a)?a:{}).clipDot,T=void 0===N||N,L=2*(void 0===E?3:E)+(void 0===C?2:C);return r.default.createElement(m.Layer,{className:A},O||w?r.default.createElement("defs",null,r.default.createElement("clipPath",{id:"clipPath-".concat(P)},r.default.createElement("rect",{x:O?u:u-p/2,y:w?s:s-h/2,width:O?p:2*p,height:w?h:2*h})),!T&&r.default.createElement("clipPath",{id:"clipPath-dots-".concat(P)},r.default.createElement("rect",{x:u-L/2,y:s-L/2,width:p+L,height:h+L}))):null,k?null:this.renderArea(j,P),(a||k)&&this.renderDots(j,T,P),(!v||x)&&y.LabelList.renderCallByParent(this.props,o))}}],n=[{key:"getDerivedStateFromProps",value:function(e,t){return e.animationId!==t.prevAnimationId?{prevAnimationId:e.animationId,curPoints:e.points,curBaseLine:e.baseLine,prevPoints:t.curPoints,prevBaseLine:t.curBaseLine}:e.points!==t.curPoints||e.baseLine!==t.curBaseLine?{curPoints:e.points,curBaseLine:e.baseLine}:null}}],t&&S(a.prototype,t),n&&S(a,n),Object.defineProperty(a,"prototype",{writable:!1}),a}(r.PureComponent);T(D,"displayName","Area"),T(D,"defaultProps",{stroke:"#3182bd",fill:"#3182bd",fillOpacity:.6,xAxisId:0,yAxisId:0,legendType:"line",connectNulls:!1,points:[],dot:!1,activeDot:!0,hide:!1,isAnimationActive:!h.Global.isSsr,animationBegin:0,animationDuration:1500,animationEasing:"ease"}),T(D,"getBaseValue",function(e,t,r,n){var a=e.layout,i=e.baseValue,o=t.props.baseValue,l=null!=o?o:i;if((0,v.isNumber)(l)&&"number"==typeof l)return l;var s="horizontal"===a?n:r,c=s.scale.domain();if("number"===s.type){var u=Math.max(c[0],c[1]),d=Math.min(c[0],c[1]);return"dataMin"===l?d:"dataMax"===l||u<0?u:Math.max(Math.min(c[0],c[1]),0)}return"dataMin"===l?c[0]:"dataMax"===l?c[1]:c[0]}),T(D,"getComposedData",function(e){var t,r=e.props,n=e.item,a=e.xAxis,i=e.yAxis,o=e.xAxisTicks,l=e.yAxisTicks,s=e.bandSize,c=e.dataKey,u=e.stackedData,d=e.dataStartIndex,f=e.displayedData,p=e.offset,m=r.layout,y=u&&u.length,h=D.getBaseValue(r,n,a,i),v="horizontal"===m,g=!1,x=f.map(function(e,t){y?r=u[d+t]:Array.isArray(r=(0,b.getValueByDataKey)(e,c))?g=!0:r=[h,r];var r,n=null==r[1]||y&&null==(0,b.getValueByDataKey)(e,c);return v?{x:(0,b.getCateCoordinateOfLine)({axis:a,ticks:o,bandSize:s,entry:e,index:t}),y:n?null:i.scale(r[1]),value:r,payload:e}:{x:n?null:a.scale(r[1]),y:(0,b.getCateCoordinateOfLine)({axis:i,ticks:l,bandSize:s,entry:e,index:t}),value:r,payload:e}});return t=y||g?x.map(function(e){var t=Array.isArray(e.value)?e.value[0]:null;return v?{x:e.x,y:null!=t&&null!=e.y?i.scale(t):null}:{x:null!=t?a.scale(t):null,y:e.y}}):v?i.scale(h):a.scale(h),P({points:x,baseLine:t,layout:m,isRange:g},p)}),T(D,"renderDotItem",function(e,t){var n;if(r.default.isValidElement(e))n=r.default.cloneElement(e,t);else if((0,l.default)(e))n=e(t);else{var a=(0,i.default)("recharts-area-dot","boolean"!=typeof e?e.className:""),o=t.key,s=O(t,k);n=r.default.createElement(p.Dot,w({},s,{key:o,className:a}))}return n});var R=e.i(785183),I=e.i(93230),B=e.i(844171),M=(0,a.generateCategoricalChart)({chartName:"AreaChart",GraphicalChild:D,axisComponents:[{axisType:"xAxis",AxisComp:R.XAxis},{axisType:"yAxis",AxisComp:I.YAxis}],formatAxisMap:B.formatAxisMap}),_=e.i(872526),$=e.i(800494),K=e.i(234239),V=e.i(559559),F=e.i(734251),W=["type","layout","connectNulls","ref"],z=["key"];function G(e){return(G="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function H(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}function q(){return(q=Object.assign.bind()).apply(this,arguments)}function U(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function X(e){for(var t=1;ttypeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e){if(e){if("string"==typeof e)return Z(e,void 0);var t=Object.prototype.toString.call(e).slice(8,-1);if("Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t)return Array.from(e);if("Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return Z(e,void 0)}}(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Z(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);rl){c=[].concat(Y(n.slice(0,u)),[l-d]);break}var f=c.length%2==0?[0,s]:[s];return[].concat(Y(a.repeat(n,o)),Y(c),f).map(function(e){return"".concat(e,"px")}).join(", ")}),er(e,"id",(0,v.uniqueId)("recharts-line-")),er(e,"pathRef",function(t){e.mainCurve=t}),er(e,"handleAnimationEnd",function(){e.setState({isAnimationFinished:!0}),e.props.onAnimationEnd&&e.props.onAnimationEnd()}),er(e,"handleAnimationStart",function(){e.setState({isAnimationFinished:!1}),e.props.onAnimationStart&&e.props.onAnimationStart()}),e}if("function"!=typeof e&&null!==e)throw TypeError("Super expression must either be null or a function");return a.prototype=Object.create(e&&e.prototype,{constructor:{value:a,writable:!0,configurable:!0}}),Object.defineProperty(a,"prototype",{writable:!1}),e&&et(a,e),t=[{key:"componentDidMount",value:function(){if(this.props.isAnimationActive){var e=this.getTotalLength();this.setState({totalLength:e})}}},{key:"componentDidUpdate",value:function(){if(this.props.isAnimationActive){var e=this.getTotalLength();e!==this.state.totalLength&&this.setState({totalLength:e})}}},{key:"getTotalLength",value:function(){var e=this.mainCurve;try{return e&&e.getTotalLength&&e.getTotalLength()||0}catch(e){return 0}}},{key:"renderErrorBar",value:function(e,t){if(this.props.isAnimationActive&&!this.state.isAnimationFinished)return null;var n=this.props,a=n.points,i=n.xAxis,o=n.yAxis,l=n.layout,s=n.children,c=(0,g.findAllByType)(s,F.ErrorBar);if(!c)return null;var u=function(e,t){return{x:e.x,y:e.y,value:e.value,errorVal:(0,b.getValueByDataKey)(e.payload,t)}};return r.default.createElement(m.Layer,{clipPath:e?"url(#clipPath-".concat(t,")"):null},c.map(function(e){return r.default.cloneElement(e,{key:"bar-".concat(e.props.dataKey),data:a,xAxis:i,yAxis:o,layout:l,dataPointFormatter:u})}))}},{key:"renderDots",value:function(e,t,n){if(this.props.isAnimationActive&&!this.state.isAnimationFinished)return null;var i=this.props,o=i.dot,l=i.points,s=i.dataKey,c=(0,g.filterProps)(this.props,!1),u=(0,g.filterProps)(o,!0),d=l.map(function(e,t){var r=X(X(X({key:"dot-".concat(t),r:3},c),u),{},{index:t,cx:e.x,cy:e.y,value:e.value,dataKey:s,payload:e.payload,points:l});return a.renderDotItem(o,r)}),f={clipPath:e?"url(#clipPath-".concat(t?"":"dots-").concat(n,")"):null};return r.default.createElement(m.Layer,q({className:"recharts-line-dots",key:"dots"},f),d)}},{key:"renderCurveStatically",value:function(e,t,n,a){var i=this.props,o=i.type,l=i.layout,s=i.connectNulls,c=(i.ref,H(i,W)),u=X(X(X({},(0,g.filterProps)(c,!0)),{},{fill:"none",className:"recharts-line-curve",clipPath:t?"url(#clipPath-".concat(n,")"):null,points:e},a),{},{type:o,layout:l,connectNulls:s});return r.default.createElement(f.Curve,q({},u,{pathRef:this.pathRef}))}},{key:"renderCurveWithAnimation",value:function(e,t){var n=this,a=this.props,i=a.points,l=a.strokeDasharray,s=a.isAnimationActive,c=a.animationBegin,u=a.animationDuration,d=a.animationEasing,f=a.animationId,p=a.animateNewValues,m=a.width,y=a.height,h=this.state,b=h.prevPoints,g=h.totalLength;return r.default.createElement(o.default,{begin:c,duration:u,isActive:s,easing:d,from:{t:0},to:{t:1},key:"line-".concat(f),onAnimationEnd:this.handleAnimationEnd,onAnimationStart:this.handleAnimationStart},function(r){var a,o=r.t;if(b){var s=b.length/i.length,c=i.map(function(e,t){var r=Math.floor(t*s);if(b[r]){var n=b[r],a=(0,v.interpolateNumber)(n.x,e.x),i=(0,v.interpolateNumber)(n.y,e.y);return X(X({},e),{},{x:a(o),y:i(o)})}if(p){var l=(0,v.interpolateNumber)(2*m,e.x),c=(0,v.interpolateNumber)(y/2,e.y);return X(X({},e),{},{x:l(o),y:c(o)})}return X(X({},e),{},{x:e.x,y:e.y})});return n.renderCurveStatically(c,e,t)}var u=(0,v.interpolateNumber)(0,g)(o);if(l){var d="".concat(l).split(/[,\s]+/gim).map(function(e){return parseFloat(e)});a=n.getStrokeDasharray(u,g,d)}else a=n.generateSimpleStrokeDasharray(g,u);return n.renderCurveStatically(i,e,t,{strokeDasharray:a})})}},{key:"renderCurve",value:function(e,t){var r=this.props,n=r.points,a=r.isAnimationActive,i=this.state,o=i.prevPoints,l=i.totalLength;return a&&n&&n.length&&(!o&&l>0||!(0,d.default)(o,n))?this.renderCurveWithAnimation(e,t):this.renderCurveStatically(n,e,t)}},{key:"render",value:function(){var e,t=this.props,n=t.hide,a=t.dot,o=t.points,l=t.className,s=t.xAxis,u=t.yAxis,d=t.top,f=t.left,p=t.width,h=t.height,v=t.isAnimationActive,b=t.id;if(n||!o||!o.length)return null;var x=this.state.isAnimationFinished,k=1===o.length,A=(0,i.default)("recharts-line",l),O=s&&s.allowDataOverflow,w=u&&u.allowDataOverflow,j=O||w,P=(0,c.default)(b)?this.id:b,S=null!=(e=(0,g.filterProps)(a,!1))?e:{r:3,strokeWidth:2},E=S.r,C=S.strokeWidth,N=((0,g.hasClipDot)(a)?a:{}).clipDot,T=void 0===N||N,L=2*(void 0===E?3:E)+(void 0===C?2:C);return r.default.createElement(m.Layer,{className:A},O||w?r.default.createElement("defs",null,r.default.createElement("clipPath",{id:"clipPath-".concat(P)},r.default.createElement("rect",{x:O?f:f-p/2,y:w?d:d-h/2,width:O?p:2*p,height:w?h:2*h})),!T&&r.default.createElement("clipPath",{id:"clipPath-dots-".concat(P)},r.default.createElement("rect",{x:f-L/2,y:d-L/2,width:p+L,height:h+L}))):null,!k&&this.renderCurve(j,P),this.renderErrorBar(j,P),(k||a)&&this.renderDots(j,T,P),(!v||x)&&y.LabelList.renderCallByParent(this.props,o))}}],n=[{key:"getDerivedStateFromProps",value:function(e,t){return e.animationId!==t.prevAnimationId?{prevAnimationId:e.animationId,curPoints:e.points,prevPoints:t.curPoints}:e.points!==t.curPoints?{curPoints:e.points}:null}},{key:"repeat",value:function(e,t){for(var r=e.length%2!=0?[].concat(Y(e),[0]):e,n=[],a=0;a{let{data:i=[],categories:o=[],index:l,stack:s=!1,colors:c=eu.themeColorRange,valueFormatter:u=ef.defaultValueFormatter,startEndOnly:d=!1,showXAxis:f=!0,showYAxis:m=!0,yAxisWidth:y=56,intervalType:h="equidistantPreserveStart",showAnimation:v=!1,animationDuration:b=900,showTooltip:g=!0,showLegend:x=!0,showGridLines:k=!0,showGradient:A=!0,autoMinValue:O=!1,curveType:w="linear",minValue:j,maxValue:P,connectNulls:S=!1,allowDecimals:E=!0,noDataText:C,className:N,onValueChange:T,enableLegendSlider:L=!1,customTooltip:B,rotateLabelX:F,padding:W=!f&&!m||d&&!m?{left:0,right:0}:{left:20,right:20},tickGap:z=5,xAxisLabel:G,yAxisLabel:H}=e,q=(0,t.__rest)(e,["data","categories","index","stack","colors","valueFormatter","startEndOnly","showXAxis","showYAxis","yAxisWidth","intervalType","showAnimation","animationDuration","showTooltip","showLegend","showGridLines","showGradient","autoMinValue","curveType","minValue","maxValue","connectNulls","allowDecimals","noDataText","className","onValueChange","enableLegendSlider","customTooltip","rotateLabelX","padding","tickGap","xAxisLabel","yAxisLabel"]),[U,X]=(0,r.useState)(60),[Y,Z]=(0,r.useState)(void 0),[J,Q]=(0,r.useState)(void 0),ee=(0,es.constructCategoryColors)(o,c),et=(0,es.getYAxisDomain)(O,j,P),er=!!T;function en(e){er&&(e===J&&!Y||(0,es.hasOnlyOneValueForThisKey)(i,e)&&Y&&Y.dataKey===e?(Q(void 0),null==T||T(null)):(Q(e),null==T||T({eventType:"category",categoryClicked:e})),Z(void 0))}return r.default.createElement("div",Object.assign({ref:a,className:(0,ed.tremorTwMerge)("w-full h-80",N)},q),r.default.createElement(n.ResponsiveContainer,{className:"h-full w-full"},(null==i?void 0:i.length)?r.default.createElement(M,{data:i,onClick:er&&(J||Y)?()=>{Z(void 0),Q(void 0),null==T||T(null)}:void 0,margin:{bottom:G?30:void 0,left:H?20:void 0,right:H?5:void 0,top:5}},k?r.default.createElement(_.CartesianGrid,{className:(0,ed.tremorTwMerge)("stroke-1","stroke-tremor-border","dark:stroke-dark-tremor-border"),horizontal:!0,vertical:!1}):null,r.default.createElement(R.XAxis,{padding:W,hide:!f,dataKey:l,tick:{transform:"translate(0, 6)"},ticks:d?[i[0][l],i[i.length-1][l]]:void 0,fill:"",stroke:"",className:(0,ed.tremorTwMerge)("text-tremor-label","fill-tremor-content","dark:fill-dark-tremor-content"),interval:d?"preserveStartEnd":h,tickLine:!1,axisLine:!1,minTickGap:z,angle:null==F?void 0:F.angle,dy:null==F?void 0:F.verticalShift,height:null==F?void 0:F.xAxisHeight},G&&r.default.createElement($.Label,{position:"insideBottom",offset:-20,className:"fill-tremor-content-emphasis text-tremor-default font-medium dark:fill-dark-tremor-content-emphasis"},G)),r.default.createElement(I.YAxis,{width:y,hide:!m,axisLine:!1,tickLine:!1,type:"number",domain:et,tick:{transform:"translate(-3, 0)"},fill:"",stroke:"",className:(0,ed.tremorTwMerge)("text-tremor-label","fill-tremor-content","dark:fill-dark-tremor-content"),tickFormatter:u,allowDecimals:E},H&&r.default.createElement($.Label,{position:"insideLeft",style:{textAnchor:"middle"},angle:-90,offset:-15,className:"fill-tremor-content-emphasis text-tremor-default font-medium dark:fill-dark-tremor-content-emphasis"},H)),r.default.createElement(K.Tooltip,{wrapperStyle:{outline:"none"},isAnimationActive:!1,cursor:{stroke:"#d1d5db",strokeWidth:1},content:g?({active:e,payload:t,label:n})=>B?r.default.createElement(B,{payload:null==t?void 0:t.map(e=>{var t;return Object.assign(Object.assign({},e),{color:null!=(t=ee.get(e.dataKey))?t:ec.BaseColors.Gray})}),active:e,label:n}):r.default.createElement(eo.default,{active:e,payload:t,label:n,valueFormatter:u,categoryColors:ee}):r.default.createElement(r.default.Fragment,null),position:{y:0}}),x?r.default.createElement(V.Legend,{verticalAlign:"top",height:U,content:({payload:e})=>(0,ei.default)({payload:e},ee,X,J,er?e=>en(e):void 0,L)}):null,o.map(e=>{var t,n,a;let i=(null!=(t=ee.get(e))?t:ec.BaseColors.Gray).replace("#","");return r.default.createElement("defs",{key:e},A?r.default.createElement("linearGradient",{className:(0,ef.getColorClassNames)(null!=(n=ee.get(e))?n:ec.BaseColors.Gray,eu.colorPalette.text).textColor,id:i,x1:"0",y1:"0",x2:"0",y2:"1"},r.default.createElement("stop",{offset:"5%",stopColor:"currentColor",stopOpacity:Y||J&&J!==e?.15:.4}),r.default.createElement("stop",{offset:"95%",stopColor:"currentColor",stopOpacity:0})):r.default.createElement("linearGradient",{className:(0,ef.getColorClassNames)(null!=(a=ee.get(e))?a:ec.BaseColors.Gray,eu.colorPalette.text).textColor,id:i,x1:"0",y1:"0",x2:"0",y2:"1"},r.default.createElement("stop",{stopColor:"currentColor",stopOpacity:Y||J&&J!==e?.1:.3})))}),o.map(e=>{var t,n;let a=(null!=(t=ee.get(e))?t:ec.BaseColors.Gray).replace("#","");return r.default.createElement(D,{className:(0,ef.getColorClassNames)(null!=(n=ee.get(e))?n:ec.BaseColors.Gray,eu.colorPalette.text).strokeColor,strokeOpacity:Y||J&&J!==e?.3:1,activeDot:e=>{var t;let{cx:n,cy:a,stroke:o,strokeLinecap:l,strokeLinejoin:s,strokeWidth:c,dataKey:u}=e;return r.default.createElement(p.Dot,{className:(0,ed.tremorTwMerge)("stroke-tremor-background dark:stroke-dark-tremor-background",T?"cursor-pointer":"",(0,ef.getColorClassNames)(null!=(t=ee.get(u))?t:ec.BaseColors.Gray,eu.colorPalette.text).fillColor),cx:n,cy:a,r:5,fill:"",stroke:o,strokeLinecap:l,strokeLinejoin:s,strokeWidth:c,onClick:(t,r)=>{r.stopPropagation(),er&&(e.index===(null==Y?void 0:Y.index)&&e.dataKey===(null==Y?void 0:Y.dataKey)||(0,es.hasOnlyOneValueForThisKey)(i,e.dataKey)&&J&&J===e.dataKey?(Q(void 0),Z(void 0),null==T||T(null)):(Q(e.dataKey),Z({index:e.index,dataKey:e.dataKey}),null==T||T(Object.assign({eventType:"dot",categoryClicked:e.dataKey},e.payload))))}})},dot:t=>{var n;let{stroke:a,strokeLinecap:o,strokeLinejoin:l,strokeWidth:s,cx:c,cy:u,dataKey:d,index:f}=t;return(0,es.hasOnlyOneValueForThisKey)(i,e)&&!(Y||J&&J!==e)||(null==Y?void 0:Y.index)===f&&(null==Y?void 0:Y.dataKey)===e?r.default.createElement(p.Dot,{key:f,cx:c,cy:u,r:5,stroke:a,fill:"",strokeLinecap:o,strokeLinejoin:l,strokeWidth:s,className:(0,ed.tremorTwMerge)("stroke-tremor-background dark:stroke-dark-tremor-background",T?"cursor-pointer":"",(0,ef.getColorClassNames)(null!=(n=ee.get(d))?n:ec.BaseColors.Gray,eu.colorPalette.text).fillColor)}):r.default.createElement(r.Fragment,{key:f})},key:e,name:e,type:w,dataKey:e,stroke:"",fill:`url(#${a})`,strokeWidth:2,strokeLinejoin:"round",strokeLinecap:"round",isAnimationActive:v,animationDuration:b,stackId:s?"a":void 0,connectNulls:S})}),T?o.map(e=>r.default.createElement(ea,{className:(0,ed.tremorTwMerge)("cursor-pointer"),strokeOpacity:0,key:e,name:e,type:w,dataKey:e,stroke:"transparent",fill:"transparent",legendType:"none",tooltipType:"none",strokeWidth:12,connectNulls:S,onClick:(e,t)=>{t.stopPropagation();let{name:r}=e;en(r)}})):null):r.default.createElement(el.default,{noDataText:C})))});ep.displayName="AreaChart",e.s(["AreaChart",0,ep],476961)},419530,(e,t,r)=>{var n=e.r(641015),a=e.r(580957),i=e.r(666305);t.exports=function(e,t){return e&&e.length?n(e,i(t,2),a):void 0}},549673,(e,t,r)=>{var n=e.r(641015),a=e.r(666305),i=e.r(298128);t.exports=function(e,t){return e&&e.length?n(e,a(t,2),i):void 0}},617802,413990,e=>{"use strict";var t=e.i(843476),r=e.i(271645),n=e.i(602869),a=e.i(500330),i=e.i(135214);e.s(["default",0,({userSpend:e,userMaxBudget:o,selectedTeam:l})=>{let{accessToken:s,userRole:c,userId:u}=(0,i.default)(),[d,f]=(0,r.useState)(null!==e?e:0),[p,m]=(0,r.useState)(l?Number((0,a.formatNumberWithCommas)(l.max_budget,4)):null);(0,r.useEffect)(()=>{if(l)if("Default Team"===l.team_alias)m(o);else{let e=!1;if(l.team_memberships)for(let t of l.team_memberships)t.user_id===u&&"max_budget"in t.litellm_budget_table&&null!==t.litellm_budget_table.max_budget&&(m(t.litellm_budget_table.max_budget),e=!0);e||m(l.max_budget)}else m(o)},[l,o]);let[y,h]=(0,r.useState)([]);(0,r.useEffect)(()=>{let e=async()=>{if(!s||!u||!c)return};(async()=>{try{if(null===u||null===c)return;if(null!==s){let e=(await (0,n.modelAvailableCall)(s,u,c)).data.map(e=>e.id);console.log("available_model_names:",e),h(e)}}catch(e){console.error("Error fetching user models:",e)}})(),e()},[c,s,u]),(0,r.useEffect)(()=>{null!==e&&f(e)},[e]);let v=[];l&&l.models&&(v=l.models),v&&v.includes("all-proxy-models")?(console.log("user models:",y),v=y):v&&v.includes("all-team-models")?v=l.models:v&&0===v.length&&(v=y);let b=null!==p?`$${(0,a.formatNumberWithCommas)(Number(p),4)} limit`:"No limit",g=void 0!==d?(0,a.formatNumberWithCommas)(d,4):null;return console.log(`spend in view user spend: ${d}`),(0,t.jsx)("div",{className:"flex items-center",children:(0,t.jsxs)("div",{className:"flex justify-between gap-x-6",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"text-tremor-default text-tremor-content dark:text-dark-tremor-content",children:"Total Spend"}),(0,t.jsxs)("p",{className:"text-2xl text-tremor-content-strong dark:text-dark-tremor-content-strong font-semibold",children:["$",g]})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"text-tremor-default text-tremor-content dark:text-dark-tremor-content",children:"Max Budget"}),(0,t.jsx)("p",{className:"text-2xl text-tremor-content-strong dark:text-dark-tremor-content-strong font-semibold",children:b})]})]})})}],617802);var o=e.i(290571),l=e.i(480731),s=e.i(95779),c=e.i(444755),u=e.i(673706),d=e.i(731195),f=e.i(883966),p=e.i(771223),m=e.i(207670),y=e.i(997865),h=e.i(238279),v=e.i(781977),b=["points","className","baseLinePoints","connectNulls"];function g(){return(g=Object.assign.bind()).apply(this,arguments)}function x(e){return function(e){if(Array.isArray(e))return k(e)}(e)||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e){if(e){if("string"==typeof e)return k(e,void 0);var t=Object.prototype.toString.call(e).slice(8,-1);if("Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t)return Array.from(e);if("Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return k(e,void 0)}}(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function k(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r0&&void 0!==arguments[0]?arguments[0]:[],t=[[]];return e.forEach(function(e){A(e)?t[t.length-1].push(e):t[t.length-1].length>0&&t.push([])}),A(e[0])&&t[t.length-1].push(e[0]),t[t.length-1].length<=0&&(t=t.slice(0,-1)),t},w=function(e,t){var r=O(e);t&&(r=[r.reduce(function(e,t){return[].concat(x(e),x(t))},[])]);var n=r.map(function(e){return e.reduce(function(e,t,r){return"".concat(e).concat(0===r?"M":"L").concat(t.x,",").concat(t.y)},"")}).join("");return 1===r.length?"".concat(n,"Z"):n},j=function(e,t,r){var n=w(e,r);return"".concat("Z"===n.slice(-1)?n.slice(0,-1):n,"L").concat(w(t.reverse(),r).slice(1))},P=function(e){var t=e.points,n=e.className,a=e.baseLinePoints,i=e.connectNulls,o=function(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}(e,b);if(!t||!t.length)return null;var l=(0,m.default)("recharts-polygon",n);if(a&&a.length){var s=o.stroke&&"none"!==o.stroke,c=j(t,a,i);return r.default.createElement("g",{className:l},r.default.createElement("path",g({},(0,v.filterProps)(o,!0),{fill:"Z"===c.slice(-1)?o.fill:"none",stroke:"none",d:c})),s?r.default.createElement("path",g({},(0,v.filterProps)(o,!0),{fill:"none",d:w(t,i)})):null,s?r.default.createElement("path",g({},(0,v.filterProps)(o,!0),{fill:"none",d:w(a,i)})):null)}var u=w(t,i);return r.default.createElement("path",g({},(0,v.filterProps)(o,!0),{fill:"Z"===u.slice(-1)?o.fill:"none",className:l,d:u}))},S=e.i(209516),E=e.i(373393),C=e.i(768970);function N(e){return(N="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function T(){return(T=Object.assign.bind()).apply(this,arguments)}function L(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function D(e){for(var t=1;t1e-5?"outer"===t?"start":"end":r<-1e-5?"outer"===t?"end":"start":"middle"}},{key:"renderAxisLine",value:function(){var e=this.props,t=e.cx,n=e.cy,a=e.radius,i=e.axisLine,o=e.axisLineType,l=D(D({},(0,v.filterProps)(this.props,!1)),{},{fill:"none"},(0,v.filterProps)(i,!1));if("circle"===o)return r.default.createElement(h.Dot,T({className:"recharts-polar-angle-axis-line"},l,{cx:t,cy:n,r:a}));var s=this.props.ticks.map(function(e){return(0,C.polarToCartesian)(t,n,a,e.coordinate)});return r.default.createElement(P,T({className:"recharts-polar-angle-axis-line"},l,{points:s}))}},{key:"renderTicks",value:function(){var e=this,t=this.props,n=t.ticks,i=t.tick,o=t.tickLine,l=t.tickFormatter,s=t.stroke,c=(0,v.filterProps)(this.props,!1),u=(0,v.filterProps)(i,!1),d=D(D({},c),{},{fill:"none"},(0,v.filterProps)(o,!1)),f=n.map(function(t,n){var f=e.getTickLineCoord(t),p=D(D(D({textAnchor:e.getTickTextAnchor(t)},c),{},{stroke:"none",fill:s},u),{},{index:n,payload:t,x:f.x2,y:f.y2});return r.default.createElement(y.Layer,T({className:(0,m.default)("recharts-polar-angle-axis-tick",(0,C.getTickClassName)(i)),key:"tick-".concat(t.coordinate)},(0,E.adaptEventsOfChild)(e.props,t,n)),o&&r.default.createElement("line",T({className:"recharts-polar-angle-axis-tick-line"},d,f)),i&&a.renderTickItem(i,p,l?l(t.value,n):t.value))});return r.default.createElement(y.Layer,{className:"recharts-polar-angle-axis-ticks"},f)}},{key:"render",value:function(){var e=this.props,t=e.ticks,n=e.radius,a=e.axisLine;return!(n<=0)&&t&&t.length?r.default.createElement(y.Layer,{className:(0,m.default)("recharts-polar-angle-axis",this.props.className)},a&&this.renderAxisLine(),this.renderTicks()):null}}],n=[{key:"renderTickItem",value:function(e,t,n){return r.default.isValidElement(e)?r.default.cloneElement(e,t):(0,p.default)(e)?e(t):r.default.createElement(S.Text,T({},t,{className:"recharts-polar-angle-axis-tick-value"}),n)}}],t&&R(a.prototype,t),n&&R(a,n),Object.defineProperty(a,"prototype",{writable:!1}),a}(r.PureComponent);_(V,"displayName","PolarAngleAxis"),_(V,"axisType","angleAxis"),_(V,"defaultProps",{type:"category",angleAxisId:0,scale:"auto",cx:0,cy:0,orientation:"outer",axisLine:!0,tickLine:!0,tickSize:8,tick:!0,hide:!1,allowDuplicatedCategory:!0});var F=e.i(419530),W=e.i(549673),z=e.i(800494),G=["cx","cy","angle","ticks","axisLine"],H=["ticks","tick","angle","tickFormatter","stroke"];function q(e){return(q="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function U(){return(U=Object.assign.bind()).apply(this,arguments)}function X(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function Y(e){for(var t=1;t=0)continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}function J(e,t){for(var r=0;r0?(0,eo.default)(e,"paddingAngle",0):0;if(r){var l=(0,ep.interpolateNumber)(r.endAngle-r.startAngle,e.endAngle-e.startAngle),s=ex(ex({},e),{},{startAngle:o+n,endAngle:o+l(a)+n});i.push(s),o=s.endAngle}else{var c=e.endAngle,d=e.startAngle,f=(0,ep.interpolateNumber)(0,c-d)(a),p=ex(ex({},e),{},{startAngle:o+n,endAngle:o+f+n});i.push(p),o=p.endAngle}}),r.default.createElement(y.Layer,null,e.renderSectorsStatically(i))})}},{key:"attachKeyboardHandlers",value:function(e){var t=this;e.onkeydown=function(e){if(!e.altKey)switch(e.key){case"ArrowLeft":var r=++t.state.sectorToFocus%t.sectorRefs.length;t.sectorRefs[r].focus(),t.setState({sectorToFocus:r});break;case"ArrowRight":var n=--t.state.sectorToFocus<0?t.sectorRefs.length-1:t.state.sectorToFocus%t.sectorRefs.length;t.sectorRefs[n].focus(),t.setState({sectorToFocus:n});break;case"Escape":t.sectorRefs[t.state.sectorToFocus].blur(),t.setState({sectorToFocus:0})}}}},{key:"renderSectors",value:function(){var e=this.props,t=e.sectors,r=e.isAnimationActive,n=this.state.prevSectors;return r&&t&&t.length&&(!n||!(0,el.default)(n,t))?this.renderSectorsWithAnimation():this.renderSectorsStatically(t)}},{key:"componentDidMount",value:function(){this.pieRef&&this.attachKeyboardHandlers(this.pieRef)}},{key:"render",value:function(){var e=this,t=this.props,n=t.hide,a=t.sectors,i=t.className,o=t.label,l=t.cx,s=t.cy,c=t.innerRadius,u=t.outerRadius,d=t.isAnimationActive,f=this.state.isAnimationFinished;if(n||!a||!a.length||!(0,ep.isNumber)(l)||!(0,ep.isNumber)(s)||!(0,ep.isNumber)(c)||!(0,ep.isNumber)(u))return null;var p=(0,m.default)("recharts-pie",i);return r.default.createElement(y.Layer,{tabIndex:this.props.rootTabIndex,className:p,ref:function(t){e.pieRef=t}},this.renderSectors(),o&&this.renderLabels(a),z.Label.renderCallByParent(this.props,null,!1),(!d||f)&&eu.LabelList.renderCallByParent(this.props,a,!1))}}],n=[{key:"getDerivedStateFromProps",value:function(e,t){return t.prevIsAnimationActive!==e.isAnimationActive?{prevIsAnimationActive:e.isAnimationActive,prevAnimationId:e.animationId,curSectors:e.sectors,prevSectors:[],isAnimationFinished:!0}:e.isAnimationActive&&e.animationId!==t.prevAnimationId?{prevAnimationId:e.animationId,curSectors:e.sectors,prevSectors:t.curSectors,isAnimationFinished:!0}:e.sectors!==t.curSectors?{curSectors:e.sectors,isAnimationFinished:!0}:null}},{key:"getTextAnchor",value:function(e,t){return e>t?"start":e=360?x:x-1)*u,A=o.reduce(function(e,t){var r=(0,em.getValueByDataKey)(t,g,0);return e+((0,ep.isNumber)(r)?r:0)},0);return A>0&&(t=o.map(function(e,t){var n,a=(0,em.getValueByDataKey)(e,g,0),i=(0,em.getValueByDataKey)(e,f,t),o=((0,ep.isNumber)(a)?a:0)/A,c=(n=t?r.endAngle+(0,ep.mathSign)(v)*u*(0!==a):s)+(0,ep.mathSign)(v)*((0!==a?y:0)+o*k),d=(n+c)/2,p=(h.innerRadius+h.outerRadius)/2,b=[{name:i,value:a,payload:e,dataKey:g,type:m}],x=(0,C.polarToCartesian)(h.cx,h.cy,p,d);return r=ex(ex(ex({percent:o,cornerRadius:l,name:i,tooltipPayload:b,midAngle:d,middleRadius:p,tooltipPosition:x},e),h),{},{value:(0,em.getValueByDataKey)(e,g),startAngle:n,endAngle:c,payload:e,paddingAngle:(0,ep.mathSign)(v)*u})})),ex(ex({},h),{},{sectors:t,data:o})});var eE=(0,f.generateCategoricalChart)({chartName:"PieChart",GraphicalChild:eS,validateTooltipEventTypes:["item"],defaultTooltipEventType:"item",legendContent:"children",axisComponents:[{axisType:"angleAxis",AxisComp:V},{axisType:"radiusAxis",AxisComp:ea}],formatAxisMap:C.formatAxisMap,defaultProps:{layout:"centric",startAngle:0,endAngle:360,cx:"50%",cy:"50%",innerRadius:0,outerRadius:"80%"}}),eC=e.i(234239),eN=e.i(239425),eT=e.i(628781),eL=e.i(933303);let eD=({active:e,payload:t,valueFormatter:n})=>{if(e&&(null==t?void 0:t[0])){let e=null==t?void 0:t[0];return r.default.createElement(eL.ChartTooltipFrame,null,r.default.createElement("div",{className:(0,c.tremorTwMerge)("px-4 py-2")},r.default.createElement(eL.ChartTooltipRow,{value:n(e.value),name:e.name,color:e.payload.color})))}return null},eR=e=>{let{cx:t,cy:n,innerRadius:a,outerRadius:i,startAngle:o,endAngle:l,className:s}=e;return r.default.createElement("g",null,r.default.createElement(eN.Sector,{cx:t,cy:n,innerRadius:a,outerRadius:i,startAngle:o,endAngle:l,className:s,fill:"",opacity:.3,style:{outline:"none"}}))},eI=r.default.forwardRef((e,t)=>{let{data:n=[],category:a="value",index:i="name",colors:f=s.themeColorRange,variant:p="donut",valueFormatter:m=u.defaultValueFormatter,label:y,showLabel:h=!0,animationDuration:v=900,showAnimation:b=!1,showTooltip:g=!0,noDataText:x,onValueChange:k,customTooltip:A,className:O}=e,w=(0,o.__rest)(e,["data","category","index","colors","variant","valueFormatter","label","showLabel","animationDuration","showAnimation","showTooltip","noDataText","onValueChange","customTooltip","className"]),j="donut"==p,P=y||m((0,u.sumNumericArray)(n.map(e=>e[a]))),[S,E]=r.default.useState(void 0),C=!!k;return(0,r.useEffect)(()=>{let e=document.querySelectorAll(".recharts-pie-sector");e&&e.forEach(e=>{e.setAttribute("style","outline: none")})},[S]),r.default.createElement("div",Object.assign({ref:t,className:(0,c.tremorTwMerge)("w-full h-40",O)},w),r.default.createElement(d.ResponsiveContainer,{className:"h-full w-full"},(null==n?void 0:n.length)?r.default.createElement(eE,{onClick:C&&S?()=>{E(void 0),null==k||k(null)}:void 0,margin:{top:0,left:0,right:0,bottom:0}},h&&j?r.default.createElement("text",{className:(0,c.tremorTwMerge)("fill-tremor-content-emphasis","dark:fill-dark-tremor-content-emphasis"),x:"50%",y:"50%",textAnchor:"middle",dominantBaseline:"middle"},P):null,r.default.createElement(eS,{className:(0,c.tremorTwMerge)("stroke-tremor-background dark:stroke-dark-tremor-background",k?"cursor-pointer":"cursor-default"),data:n.map((e,t)=>{let r=t{var n;return A?r.default.createElement(A,{payload:null==t?void 0:t.map(e=>{var r,n,a;return Object.assign(Object.assign({},e),{color:null!=(a=null==(n=null==(r=null==t?void 0:t[0])?void 0:r.payload)?void 0:n.color)?a:l.BaseColors.Gray})}),active:e,label:null==(n=null==t?void 0:t[0])?void 0:n.name}):r.default.createElement(eD,{active:e,payload:t,valueFormatter:m})}:r.default.createElement(r.default.Fragment,null)})):r.default.createElement(eT.default,{noDataText:x})))});eI.displayName="DonutChart",e.s(["DonutChart",0,eI],413990)},1023,e=>{"use strict";var t=e.i(843476),r=e.i(135214),n=e.i(871943),a=e.i(360820),i=e.i(584935),o=e.i(994388),l=e.i(560025),s=e.i(592968),c=e.i(271645),u=e.i(500330),d=e.i(602869),f=e.i(20147),p=e.i(149121);e.s(["default",0,({topKeys:e,teams:m,showTags:y=!1,topKeysLimit:h,setTopKeysLimit:v})=>{let{accessToken:b,userRole:g,userId:x,premiumUser:k}=(0,r.default)(),[A,O]=(0,c.useState)(!1),[w,j]=(0,c.useState)(null),[P,S]=(0,c.useState)(void 0),[E,C]=(0,c.useState)("table"),[N,T]=(0,c.useState)(new Set),L=async e=>{if(b)try{let t=await (0,d.keyInfoV1Call)(b,e.api_key),r=(e=>{let{key:t,info:r}=e;return{token:t,...r}})(t);S(r),j(e.api_key),O(!0)}catch(e){console.error("Error fetching key info:",e)}},D=()=>{O(!1),j(null),S(void 0)};c.default.useEffect(()=>{let e=e=>{"Escape"===e.key&&A&&D()};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[A]);let R=[{header:"Key ID",accessorKey:"api_key",cell:e=>(0,t.jsx)("div",{className:"overflow-hidden",children:(0,t.jsx)(s.Tooltip,{title:e.getValue(),children:(0,t.jsx)(o.Button,{size:"xs",variant:"light",className:"font-mono text-blue-500 bg-blue-50 hover:bg-blue-100 text-xs font-normal px-2 py-0.5 text-left overflow-hidden truncate max-w-[200px]",onClick:()=>L(e.row.original),children:e.getValue()?`${e.getValue().slice(0,7)}...`:"-"})})})},{header:"Key Alias",accessorKey:"key_alias",cell:e=>e.getValue()||"-"}],I={header:"Spend (USD)",accessorKey:"spend",cell:e=>{let t=e.getValue();return t>0&&t<.01?"<$0.01":`$${(0,u.formatNumberWithCommas)(t,2)}`}},B=y?[...R,{header:"Tags",accessorKey:"tags",cell:e=>{let r=e.getValue(),i=e.row.original.api_key,o=N.has(i);if(!r||0===r.length)return"-";let l=r.sort((e,t)=>t.usage-e.usage),c=o?l:l.slice(0,2),d=r.length>2;return(0,t.jsx)("div",{className:"overflow-hidden",children:(0,t.jsxs)("div",{className:"flex flex-wrap items-center gap-1",children:[c.map((e,r)=>(0,t.jsx)(s.Tooltip,{title:(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"text-gray-300",children:"Tag Name:"})," ",e.tag]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"text-gray-300",children:"Spend:"})," ",e.usage>0&&e.usage<.01?"<$0.01":`$${(0,u.formatNumberWithCommas)(e.usage,2)}`]})]}),children:(0,t.jsxs)("span",{className:"px-2 py-1 bg-gray-100 rounded-full text-xs",children:[e.tag.slice(0,7),"..."]})},r)),d&&(0,t.jsx)("button",{onClick:()=>{T(e=>{let t=new Set(e);return t.has(i)?t.delete(i):t.add(i),t})},className:"ml-1 p-1 hover:bg-gray-200 rounded-full transition-colors",title:o?"Show fewer tags":"Show all tags",children:o?(0,t.jsx)(a.ChevronUpIcon,{className:"h-3 w-3 text-gray-500"}):(0,t.jsx)(n.ChevronDownIcon,{className:"h-3 w-3 text-gray-500"})})]})})}},I]:[...R,I],M=e.map(e=>({...e,display_key_alias:e.key_alias&&e.key_alias.length>10?`${e.key_alias.slice(0,10)}...`:e.key_alias||"-"}));return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"mb-4 flex justify-between items-center",children:[(0,t.jsx)(l.Segmented,{options:[{label:"5",value:5},{label:"10",value:10},{label:"25",value:25},{label:"50",value:50}],value:h,onChange:e=>v(e)}),(0,t.jsxs)("div",{className:"flex space-x-2",children:[(0,t.jsx)("button",{onClick:()=>C("table"),className:`px-3 py-1 text-sm rounded-md ${"table"===E?"bg-blue-100 text-blue-700":"bg-gray-100 text-gray-700"}`,children:"Table View"}),(0,t.jsx)("button",{onClick:()=>C("chart"),className:`px-3 py-1 text-sm rounded-md ${"chart"===E?"bg-blue-100 text-blue-700":"bg-gray-100 text-gray-700"}`,children:"Chart View"})]})]}),"chart"===E?(0,t.jsx)("div",{className:"relative max-h-[600px] overflow-y-auto",children:(0,t.jsx)(i.BarChart,{className:"mt-4 cursor-pointer hover:opacity-90",style:{height:52*Math.min(M.length,h)},data:M,index:"display_key_alias",categories:["spend"],colors:["cyan"],yAxisWidth:120,tickGap:5,layout:"vertical",showLegend:!1,valueFormatter:e=>`$${(0,u.formatNumberWithCommas)(e,2)}`,onValueChange:e=>L(e),showTooltip:!0,customTooltip:e=>{let r=e.payload?.[0]?.payload;return(0,t.jsx)("div",{className:"relative z-50 p-3 bg-black/90 shadow-lg rounded-lg text-white max-w-xs",children:(0,t.jsxs)("div",{className:"space-y-1.5",children:[(0,t.jsxs)("div",{className:"text-sm",children:[(0,t.jsx)("span",{className:"text-gray-300",children:"Key Alias: "}),(0,t.jsx)("span",{className:"font-mono text-gray-100 break-all",children:r?.key_alias})]}),(0,t.jsxs)("div",{className:"text-sm",children:[(0,t.jsx)("span",{className:"text-gray-300",children:"Key ID: "}),(0,t.jsx)("span",{className:"font-mono text-gray-100 break-all",children:r?.api_key})]}),(0,t.jsxs)("div",{className:"text-sm",children:[(0,t.jsx)("span",{className:"text-gray-300",children:"Spend: "}),(0,t.jsxs)("span",{className:"text-white font-medium",children:["$",(0,u.formatNumberWithCommas)(r?.spend,2)]})]})]})})}})}):(0,t.jsx)("div",{className:"border rounded-lg overflow-hidden max-h-[600px] overflow-y-auto",children:(0,t.jsx)(p.DataTable,{columns:B,data:e,renderSubComponent:()=>(0,t.jsx)(t.Fragment,{}),getRowCanExpand:()=>!1,isLoading:!1})}),A&&w&&P&&(console.log("Rendering modal with:",{isModalOpen:A,selectedKey:w,keyData:P}),(0,t.jsx)("div",{className:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50",onClick:e=>{e.target===e.currentTarget&&D()},children:(0,t.jsxs)("div",{className:"bg-white rounded-lg shadow-xl relative w-11/12 max-w-6xl max-h-[90vh] overflow-y-auto min-h-[750px]",children:[(0,t.jsx)("button",{onClick:D,className:"absolute top-4 right-4 text-gray-500 hover:text-gray-700 focus:outline-none","aria-label":"Close",children:(0,t.jsx)("svg",{className:"w-6 h-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"2",d:"M6 18L18 6M6 6l12 12"})})}),(0,t.jsx)("div",{className:"p-6 h-full",children:(0,t.jsx)(f.default,{keyId:w,onClose:D,keyData:P,teams:m})})]})}))]})}],1023)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0u3_nka63vh6t.js b/litellm/proxy/_experimental/out/_next/static/chunks/0u3_nka63vh6t.js new file mode 100644 index 00000000000..780f6a9da53 --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0u3_nka63vh6t.js @@ -0,0 +1 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,94629,e=>{"use strict";var t=e.i(271645);let r=t.forwardRef(function(e,r){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:r},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M7 16V4m0 0L3 8m4-4l4 4m6 0v12m0 0l4-4m-4 4l-4-4"}))});e.s(["SwitchVerticalIcon",0,r],94629)},728889,e=>{"use strict";var t=e.i(290571),r=e.i(271645),a=e.i(829087),i=e.i(480731),l=e.i(444755),n=e.i(673706),o=e.i(95779);let d={xs:{paddingX:"px-1.5",paddingY:"py-1.5"},sm:{paddingX:"px-1.5",paddingY:"py-1.5"},md:{paddingX:"px-2",paddingY:"py-2"},lg:{paddingX:"px-2",paddingY:"py-2"},xl:{paddingX:"px-2.5",paddingY:"py-2.5"}},s={xs:{height:"h-3",width:"w-3"},sm:{height:"h-5",width:"w-5"},md:{height:"h-5",width:"w-5"},lg:{height:"h-7",width:"w-7"},xl:{height:"h-9",width:"w-9"}},c={simple:{rounded:"",border:"",ring:"",shadow:""},light:{rounded:"rounded-tremor-default",border:"",ring:"",shadow:""},shadow:{rounded:"rounded-tremor-default",border:"border",ring:"",shadow:"shadow-tremor-card dark:shadow-dark-tremor-card"},solid:{rounded:"rounded-tremor-default",border:"border-2",ring:"ring-1",shadow:""},outlined:{rounded:"rounded-tremor-default",border:"border",ring:"ring-2",shadow:""}},m=(0,n.makeClassName)("Icon"),u=r.default.forwardRef((e,u)=>{let{icon:g,variant:f="simple",tooltip:p,size:h=i.Sizes.SM,color:b,className:v}=e,$=(0,t.__rest)(e,["icon","variant","tooltip","size","color","className"]),x=((e,t)=>{switch(e){case"simple":return{textColor:t?(0,n.getColorClassNames)(t,o.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:"",borderColor:"",ringColor:""};case"light":return{textColor:t?(0,n.getColorClassNames)(t,o.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:t?(0,l.tremorTwMerge)((0,n.getColorClassNames)(t,o.colorPalette.background).bgColor,"bg-opacity-20"):"bg-tremor-brand-muted dark:bg-dark-tremor-brand-muted",borderColor:"",ringColor:""};case"shadow":return{textColor:t?(0,n.getColorClassNames)(t,o.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:t?(0,l.tremorTwMerge)((0,n.getColorClassNames)(t,o.colorPalette.background).bgColor,"bg-opacity-20"):"bg-tremor-background dark:bg-dark-tremor-background",borderColor:"border-tremor-border dark:border-dark-tremor-border",ringColor:""};case"solid":return{textColor:t?(0,n.getColorClassNames)(t,o.colorPalette.text).textColor:"text-tremor-brand-inverted dark:text-dark-tremor-brand-inverted",bgColor:t?(0,l.tremorTwMerge)((0,n.getColorClassNames)(t,o.colorPalette.background).bgColor,"bg-opacity-20"):"bg-tremor-brand dark:bg-dark-tremor-brand",borderColor:"border-tremor-brand-inverted dark:border-dark-tremor-brand-inverted",ringColor:"ring-tremor-ring dark:ring-dark-tremor-ring"};case"outlined":return{textColor:t?(0,n.getColorClassNames)(t,o.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:t?(0,l.tremorTwMerge)((0,n.getColorClassNames)(t,o.colorPalette.background).bgColor,"bg-opacity-20"):"bg-tremor-background dark:bg-dark-tremor-background",borderColor:t?(0,n.getColorClassNames)(t,o.colorPalette.ring).borderColor:"border-tremor-brand-subtle dark:border-dark-tremor-brand-subtle",ringColor:t?(0,l.tremorTwMerge)((0,n.getColorClassNames)(t,o.colorPalette.ring).ringColor,"ring-opacity-40"):"ring-tremor-brand-muted dark:ring-dark-tremor-brand-muted"}}})(f,b),{tooltipProps:C,getReferenceProps:y}=(0,a.useTooltip)();return r.default.createElement("span",Object.assign({ref:(0,n.mergeRefs)([u,C.refs.setReference]),className:(0,l.tremorTwMerge)(m("root"),"inline-flex shrink-0 items-center justify-center",x.bgColor,x.textColor,x.borderColor,x.ringColor,c[f].rounded,c[f].border,c[f].shadow,c[f].ring,d[h].paddingX,d[h].paddingY,v)},y,$),r.default.createElement(a.default,Object.assign({text:p},C)),r.default.createElement(g,{className:(0,l.tremorTwMerge)(m("icon"),"shrink-0",s[h].height,s[h].width)}))});u.displayName="Icon",e.s(["default",0,u],728889)},752978,e=>{"use strict";var t=e.i(728889);e.s(["Icon",()=>t.default])},360820,e=>{"use strict";var t=e.i(271645);let r=t.forwardRef(function(e,r){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:r},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M5 15l7-7 7 7"}))});e.s(["ChevronUpIcon",0,r],360820)},871943,e=>{"use strict";var t=e.i(271645);let r=t.forwardRef(function(e,r){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:r},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 9l-7 7-7-7"}))});e.s(["ChevronDownIcon",0,r],871943)},269200,e=>{"use strict";var t=e.i(290571),r=e.i(271645),a=e.i(444755);let i=(0,e.i(673706).makeClassName)("Table"),l=r.default.forwardRef((e,l)=>{let{children:n,className:o}=e,d=(0,t.__rest)(e,["children","className"]);return r.default.createElement("div",{className:(0,a.tremorTwMerge)(i("root"),"overflow-auto",o)},r.default.createElement("table",Object.assign({ref:l,className:(0,a.tremorTwMerge)(i("table"),"w-full text-tremor-default","text-tremor-content","dark:text-dark-tremor-content")},d),n))});l.displayName="Table",e.s(["Table",0,l],269200)},942232,e=>{"use strict";var t=e.i(290571),r=e.i(271645),a=e.i(444755);let i=(0,e.i(673706).makeClassName)("TableBody"),l=r.default.forwardRef((e,l)=>{let{children:n,className:o}=e,d=(0,t.__rest)(e,["children","className"]);return r.default.createElement(r.default.Fragment,null,r.default.createElement("tbody",Object.assign({ref:l,className:(0,a.tremorTwMerge)(i("root"),"align-top divide-y","divide-tremor-border","dark:divide-dark-tremor-border",o)},d),n))});l.displayName="TableBody",e.s(["TableBody",0,l],942232)},977572,e=>{"use strict";var t=e.i(290571),r=e.i(271645),a=e.i(444755);let i=(0,e.i(673706).makeClassName)("TableCell"),l=r.default.forwardRef((e,l)=>{let{children:n,className:o}=e,d=(0,t.__rest)(e,["children","className"]);return r.default.createElement(r.default.Fragment,null,r.default.createElement("td",Object.assign({ref:l,className:(0,a.tremorTwMerge)(i("root"),"align-middle whitespace-nowrap text-left p-4",o)},d),n))});l.displayName="TableCell",e.s(["TableCell",0,l],977572)},427612,e=>{"use strict";var t=e.i(290571),r=e.i(271645),a=e.i(444755);let i=(0,e.i(673706).makeClassName)("TableHead"),l=r.default.forwardRef((e,l)=>{let{children:n,className:o}=e,d=(0,t.__rest)(e,["children","className"]);return r.default.createElement(r.default.Fragment,null,r.default.createElement("thead",Object.assign({ref:l,className:(0,a.tremorTwMerge)(i("root"),"text-left","text-tremor-content","dark:text-dark-tremor-content",o)},d),n))});l.displayName="TableHead",e.s(["TableHead",0,l],427612)},64848,e=>{"use strict";var t=e.i(290571),r=e.i(271645),a=e.i(444755);let i=(0,e.i(673706).makeClassName)("TableHeaderCell"),l=r.default.forwardRef((e,l)=>{let{children:n,className:o}=e,d=(0,t.__rest)(e,["children","className"]);return r.default.createElement(r.default.Fragment,null,r.default.createElement("th",Object.assign({ref:l,className:(0,a.tremorTwMerge)(i("root"),"whitespace-nowrap text-left font-semibold top-0 px-4 py-3.5","text-tremor-content-strong","dark:text-dark-tremor-content-strong",o)},d),n))});l.displayName="TableHeaderCell",e.s(["TableHeaderCell",0,l],64848)},496020,e=>{"use strict";var t=e.i(290571),r=e.i(271645),a=e.i(444755);let i=(0,e.i(673706).makeClassName)("TableRow"),l=r.default.forwardRef((e,l)=>{let{children:n,className:o}=e,d=(0,t.__rest)(e,["children","className"]);return r.default.createElement(r.default.Fragment,null,r.default.createElement("tr",Object.assign({ref:l,className:(0,a.tremorTwMerge)(i("row"),o)},d),n))});l.displayName="TableRow",e.s(["TableRow",0,l],496020)},68155,e=>{"use strict";var t=e.i(271645);let r=t.forwardRef(function(e,r){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:r},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"}))});e.s(["TrashIcon",0,r],68155)},991124,e=>{"use strict";let t=(0,e.i(475254).default)("copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);e.s(["default",0,t])},678784,678745,e=>{"use strict";let t=(0,e.i(475254).default)("check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);e.s(["default",0,t],678745),e.s(["CheckIcon",0,t],678784)},118366,e=>{"use strict";var t=e.i(991124);e.s(["CopyIcon",()=>t.default])},54943,e=>{"use strict";let t=(0,e.i(475254).default)("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]);e.s(["default",0,t])},879664,e=>{"use strict";let t=(0,e.i(475254).default)("info",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]]);e.s(["default",0,t])},245094,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M516 673c0 4.4 3.4 8 7.5 8h185c4.1 0 7.5-3.6 7.5-8v-48c0-4.4-3.4-8-7.5-8h-185c-4.1 0-7.5 3.6-7.5 8v48zm-194.9 6.1l192-161c3.8-3.2 3.8-9.1 0-12.3l-192-160.9A7.95 7.95 0 00308 351v62.7c0 2.4 1 4.6 2.9 6.1L420.7 512l-109.8 92.2a8.1 8.1 0 00-2.9 6.1V673c0 6.8 7.9 10.5 13.1 6.1zM880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"}}]},name:"code",theme:"outlined"};var i=e.i(9583),l=r.forwardRef(function(e,l){return r.createElement(i.default,(0,t.default)({},e,{ref:l,icon:a}))});e.s(["CodeOutlined",0,l],245094)},362024,e=>{"use strict";var t=e.i(988122);e.s(["Collapse",()=>t.default])},245704,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M699 353h-46.9c-10.2 0-19.9 4.9-25.9 13.3L469 584.3l-71.2-98.8c-6-8.3-15.6-13.3-25.9-13.3H325c-6.5 0-10.3 7.4-6.5 12.7l124.6 172.8a31.8 31.8 0 0051.7 0l210.6-292c3.9-5.3.1-12.7-6.4-12.7z"}},{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}}]},name:"check-circle",theme:"outlined"};var i=e.i(9583),l=r.forwardRef(function(e,l){return r.createElement(i.default,(0,t.default)({},e,{ref:l,icon:a}))});e.s(["CheckCircleOutlined",0,l],245704)},149192,e=>{"use strict";var t=e.i(864517);e.s(["CloseOutlined",()=>t.default])},240647,e=>{"use strict";var t=e.i(286612);e.s(["RightOutlined",()=>t.default])},518617,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let a={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64c247.4 0 448 200.6 448 448S759.4 960 512 960 64 759.4 64 512 264.6 64 512 64zm0 76c-205.4 0-372 166.6-372 372s166.6 372 372 372 372-166.6 372-372-166.6-372-372-372zm128.01 198.83c.03 0 .05.01.09.06l45.02 45.01a.2.2 0 01.05.09.12.12 0 010 .07c0 .02-.01.04-.05.08L557.25 512l127.87 127.86a.27.27 0 01.05.06v.02a.12.12 0 010 .07c0 .03-.01.05-.05.09l-45.02 45.02a.2.2 0 01-.09.05.12.12 0 01-.07 0c-.02 0-.04-.01-.08-.05L512 557.25 384.14 685.12c-.04.04-.06.05-.08.05a.12.12 0 01-.07 0c-.03 0-.05-.01-.09-.05l-45.02-45.02a.2.2 0 01-.05-.09.12.12 0 010-.07c0-.02.01-.04.06-.08L466.75 512 338.88 384.14a.27.27 0 01-.05-.06l-.01-.02a.12.12 0 010-.07c0-.03.01-.05.05-.09l45.02-45.02a.2.2 0 01.09-.05.12.12 0 01.07 0c.02 0 .04.01.08.06L512 466.75l127.86-127.86c.04-.05.06-.06.08-.06a.12.12 0 01.07 0z"}}]},name:"close-circle",theme:"outlined"};var i=e.i(9583),l=r.forwardRef(function(e,l){return r.createElement(i.default,(0,t.default)({},e,{ref:l,icon:a}))});e.s(["CloseCircleOutlined",0,l],518617)},546467,e=>{"use strict";let t=(0,e.i(475254).default)("external-link",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]);e.s(["default",0,t])},987432,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M893.3 293.3L730.7 130.7c-7.5-7.5-16.7-13-26.7-16V112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V338.5c0-17-6.7-33.2-18.7-45.2zM384 184h256v104H384V184zm456 656H184V184h136v136c0 17.7 14.3 32 32 32h320c17.7 0 32-14.3 32-32V205.8l136 136V840zM512 442c-79.5 0-144 64.5-144 144s64.5 144 144 144 144-64.5 144-144-64.5-144-144-144zm0 224c-44.2 0-80-35.8-80-80s35.8-80 80-80 80 35.8 80 80-35.8 80-80 80z"}}]},name:"save",theme:"outlined"};var i=e.i(9583),l=r.forwardRef(function(e,l){return r.createElement(i.default,(0,t.default)({},e,{ref:l,icon:a}))});e.s(["SaveOutlined",0,l],987432)},21548,e=>{"use strict";var t=e.i(616303);e.s(["Empty",()=>t.default])},988846,e=>{"use strict";var t=e.i(54943);e.s(["SearchIcon",()=>t.default])},438100,e=>{"use strict";let t=(0,e.i(475254).default)("key",[["path",{d:"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4",key:"g0fldk"}],["path",{d:"m21 2-9.6 9.6",key:"1j0ho8"}],["circle",{cx:"7.5",cy:"15.5",r:"5.5",key:"yqb3hr"}]]);e.s(["KeyIcon",0,t],438100)},826910,e=>{"use strict";var t=e.i(201072);e.s(["CheckCircleFilled",()=>t.default])},302202,e=>{"use strict";let t=(0,e.i(475254).default)("server",[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]]);e.s(["ServerIcon",0,t],302202)},168118,e=>{"use strict";var t=e.i(879664);e.s(["InfoIcon",()=>t.default])},750113,e=>{"use strict";var t=e.i(684024);e.s(["QuestionCircleOutlined",()=>t.default])},54131,e=>{"use strict";var t=e.i(399219);e.s(["ChevronUpIcon",()=>t.default])},995926,e=>{"use strict";var t=e.i(841947);e.s(["XIcon",()=>t.default])},634831,e=>{"use strict";var t=e.i(546467);e.s(["ExternalLinkIcon",()=>t.default])},328196,e=>{"use strict";var t=e.i(361653);e.s(["AlertCircleIcon",()=>t.default])},724154,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372 0-89 31.3-170.8 83.5-234.8l523.3 523.3C682.8 852.7 601 884 512 884zm288.5-137.2L277.2 223.5C341.2 171.3 423 140 512 140c205.4 0 372 166.6 372 372 0 89-31.3 170.8-83.5 234.8z"}}]},name:"stop",theme:"outlined"};var i=e.i(9583),l=r.forwardRef(function(e,l){return r.createElement(i.default,(0,t.default)({},e,{ref:l,icon:a}))});e.s(["StopOutlined",0,l],724154)},573421,e=>{"use strict";e.i(247167);var t=e.i(8211),r=e.i(271645),a=e.i(343794),i=e.i(887719),l=e.i(908206),n=e.i(242064),o=e.i(721132),d=e.i(517455),s=e.i(264042),c=e.i(150073),m=e.i(165370),u=e.i(244451);let g=r.default.createContext({});g.Consumer;var f=e.i(763731),p=e.i(211576),h=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&0>t.indexOf(a)&&(r[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var i=0,a=Object.getOwnPropertySymbols(e);it.indexOf(a[i])&&Object.prototype.propertyIsEnumerable.call(e,a[i])&&(r[a[i]]=e[a[i]]);return r};let b=r.default.forwardRef((e,t)=>{let i,{prefixCls:l,children:o,actions:d,extra:s,styles:c,className:m,classNames:u,colStyle:b}=e,v=h(e,["prefixCls","children","actions","extra","styles","className","classNames","colStyle"]),{grid:$,itemLayout:x}=(0,r.useContext)(g),{getPrefixCls:C,list:y}=(0,r.useContext)(n.ConfigContext),k=e=>{var t,r;return(0,a.default)(null==(r=null==(t=null==y?void 0:y.item)?void 0:t.classNames)?void 0:r[e],null==u?void 0:u[e])},w=e=>{var t,r;return Object.assign(Object.assign({},null==(r=null==(t=null==y?void 0:y.item)?void 0:t.styles)?void 0:r[e]),null==c?void 0:c[e])},N=C("list",l),S=d&&d.length>0&&r.default.createElement("ul",{className:(0,a.default)(`${N}-item-action`,k("actions")),key:"actions",style:w("actions")},d.map((e,t)=>r.default.createElement("li",{key:`${N}-item-action-${t}`},e,t!==d.length-1&&r.default.createElement("em",{className:`${N}-item-action-split`})))),E=r.default.createElement($?"div":"li",Object.assign({},v,$?{}:{ref:t},{className:(0,a.default)(`${N}-item`,{[`${N}-item-no-flex`]:!("vertical"===x?!!s:(i=!1,r.Children.forEach(o,e=>{"string"==typeof e&&(i=!0)}),!(i&&r.Children.count(o)>1)))},m)}),"vertical"===x&&s?[r.default.createElement("div",{className:`${N}-item-main`,key:"content"},o,S),r.default.createElement("div",{className:(0,a.default)(`${N}-item-extra`,k("extra")),key:"extra",style:w("extra")},s)]:[o,S,(0,f.cloneElement)(s,{key:"extra"})]);return $?r.default.createElement(p.Col,{ref:t,flex:1,style:b},E):E});b.Meta=e=>{var{prefixCls:t,className:i,avatar:l,title:o,description:d}=e,s=h(e,["prefixCls","className","avatar","title","description"]);let{getPrefixCls:c}=(0,r.useContext)(n.ConfigContext),m=c("list",t),u=(0,a.default)(`${m}-item-meta`,i),g=r.default.createElement("div",{className:`${m}-item-meta-content`},o&&r.default.createElement("h4",{className:`${m}-item-meta-title`},o),d&&r.default.createElement("div",{className:`${m}-item-meta-description`},d));return r.default.createElement("div",Object.assign({},s,{className:u}),l&&r.default.createElement("div",{className:`${m}-item-meta-avatar`},l),(o||d)&&g)},e.i(296059);var v=e.i(915654),$=e.i(183293),x=e.i(246422),C=e.i(838378);let y=(0,x.genStyleHooks)("List",e=>{let t=(0,C.mergeToken)(e,{listBorderedCls:`${e.componentCls}-bordered`,minHeight:e.controlHeightLG});return[(e=>{let{componentCls:t,antCls:r,controlHeight:a,minHeight:i,paddingSM:l,marginLG:n,padding:o,itemPadding:d,colorPrimary:s,itemPaddingSM:c,itemPaddingLG:m,paddingXS:u,margin:g,colorText:f,colorTextDescription:p,motionDurationSlow:h,lineWidth:b,headerBg:x,footerBg:C,emptyTextPadding:y,metaMarginBottom:k,avatarMarginRight:w,titleMarginBottom:N,descriptionFontSize:S}=e;return{[t]:Object.assign(Object.assign({},(0,$.resetComponent)(e)),{position:"relative","--rc-virtual-list-scrollbar-bg":e.colorSplit,"*":{outline:"none"},[`${t}-header`]:{background:x},[`${t}-footer`]:{background:C},[`${t}-header, ${t}-footer`]:{paddingBlock:l},[`${t}-pagination`]:{marginBlockStart:n,[`${r}-pagination-options`]:{textAlign:"start"}},[`${t}-spin`]:{minHeight:i,textAlign:"center"},[`${t}-items`]:{margin:0,padding:0,listStyle:"none"},[`${t}-item`]:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:d,color:f,[`${t}-item-meta`]:{display:"flex",flex:1,alignItems:"flex-start",maxWidth:"100%",[`${t}-item-meta-avatar`]:{marginInlineEnd:w},[`${t}-item-meta-content`]:{flex:"1 0",width:0,color:f},[`${t}-item-meta-title`]:{margin:`0 0 ${(0,v.unit)(e.marginXXS)} 0`,color:f,fontSize:e.fontSize,lineHeight:e.lineHeight,"> a":{color:f,transition:`all ${h}`,"&:hover":{color:s}}},[`${t}-item-meta-description`]:{color:p,fontSize:S,lineHeight:e.lineHeight}},[`${t}-item-action`]:{flex:"0 0 auto",marginInlineStart:e.marginXXL,padding:0,fontSize:0,listStyle:"none","& > li":{position:"relative",display:"inline-block",padding:`0 ${(0,v.unit)(u)}`,color:p,fontSize:e.fontSize,lineHeight:e.lineHeight,textAlign:"center","&:first-child":{paddingInlineStart:0}},[`${t}-item-action-split`]:{position:"absolute",insetBlockStart:"50%",insetInlineEnd:0,width:b,height:e.calc(e.fontHeight).sub(e.calc(e.marginXXS).mul(2)).equal(),transform:"translateY(-50%)",backgroundColor:e.colorSplit}}},[`${t}-empty`]:{padding:`${(0,v.unit)(o)} 0`,color:p,fontSize:e.fontSizeSM,textAlign:"center"},[`${t}-empty-text`]:{padding:y,color:e.colorTextDisabled,fontSize:e.fontSize,textAlign:"center"},[`${t}-item-no-flex`]:{display:"block"}}),[`${t}-grid ${r}-col > ${t}-item`]:{display:"block",maxWidth:"100%",marginBlockEnd:g,paddingBlock:0,borderBlockEnd:"none"},[`${t}-vertical ${t}-item`]:{alignItems:"initial",[`${t}-item-main`]:{display:"block",flex:1},[`${t}-item-extra`]:{marginInlineStart:n},[`${t}-item-meta`]:{marginBlockEnd:k,[`${t}-item-meta-title`]:{marginBlockStart:0,marginBlockEnd:N,color:f,fontSize:e.fontSizeLG,lineHeight:e.lineHeightLG}},[`${t}-item-action`]:{marginBlockStart:o,marginInlineStart:"auto","> li":{padding:`0 ${(0,v.unit)(o)}`,"&:first-child":{paddingInlineStart:0}}}},[`${t}-split ${t}-item`]:{borderBlockEnd:`${(0,v.unit)(e.lineWidth)} ${e.lineType} ${e.colorSplit}`,"&:last-child":{borderBlockEnd:"none"}},[`${t}-split ${t}-header`]:{borderBlockEnd:`${(0,v.unit)(e.lineWidth)} ${e.lineType} ${e.colorSplit}`},[`${t}-split${t}-empty ${t}-footer`]:{borderTop:`${(0,v.unit)(e.lineWidth)} ${e.lineType} ${e.colorSplit}`},[`${t}-loading ${t}-spin-nested-loading`]:{minHeight:a},[`${t}-split${t}-something-after-last-item ${r}-spin-container > ${t}-items > ${t}-item:last-child`]:{borderBlockEnd:`${(0,v.unit)(e.lineWidth)} ${e.lineType} ${e.colorSplit}`},[`${t}-lg ${t}-item`]:{padding:m},[`${t}-sm ${t}-item`]:{padding:c},[`${t}:not(${t}-vertical)`]:{[`${t}-item-no-flex`]:{[`${t}-item-action`]:{float:"right"}}}}})(t),(e=>{let{listBorderedCls:t,componentCls:r,paddingLG:a,margin:i,itemPaddingSM:l,itemPaddingLG:n,marginLG:o,borderRadiusLG:d}=e,s=(0,v.unit)(e.calc(d).sub(e.lineWidth).equal());return{[t]:{border:`${(0,v.unit)(e.lineWidth)} ${e.lineType} ${e.colorBorder}`,borderRadius:d,[`${r}-header`]:{borderRadius:`${s} ${s} 0 0`},[`${r}-footer`]:{borderRadius:`0 0 ${s} ${s}`},[`${r}-header,${r}-footer,${r}-item`]:{paddingInline:a},[`${r}-pagination`]:{margin:`${(0,v.unit)(i)} ${(0,v.unit)(o)}`}},[`${t}${r}-sm`]:{[`${r}-item,${r}-header,${r}-footer`]:{padding:l}},[`${t}${r}-lg`]:{[`${r}-item,${r}-header,${r}-footer`]:{padding:n}}}})(t),(e=>{let{componentCls:t,screenSM:r,screenMD:a,marginLG:i,marginSM:l,margin:n}=e;return{[`@media screen and (max-width:${a}px)`]:{[t]:{[`${t}-item`]:{[`${t}-item-action`]:{marginInlineStart:i}}},[`${t}-vertical`]:{[`${t}-item`]:{[`${t}-item-extra`]:{marginInlineStart:i}}}},[`@media screen and (max-width: ${r}px)`]:{[t]:{[`${t}-item`]:{flexWrap:"wrap",[`${t}-action`]:{marginInlineStart:l}}},[`${t}-vertical`]:{[`${t}-item`]:{flexWrap:"wrap-reverse",[`${t}-item-main`]:{minWidth:e.contentWidth},[`${t}-item-extra`]:{margin:`auto auto ${(0,v.unit)(n)}`}}}}}})(t)]},e=>({contentWidth:220,itemPadding:`${(0,v.unit)(e.paddingContentVertical)} 0`,itemPaddingSM:`${(0,v.unit)(e.paddingContentVerticalSM)} ${(0,v.unit)(e.paddingContentHorizontal)}`,itemPaddingLG:`${(0,v.unit)(e.paddingContentVerticalLG)} ${(0,v.unit)(e.paddingContentHorizontalLG)}`,headerBg:"transparent",footerBg:"transparent",emptyTextPadding:e.padding,metaMarginBottom:e.padding,avatarMarginRight:e.padding,titleMarginBottom:e.paddingSM,descriptionFontSize:e.fontSize}));var k=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&0>t.indexOf(a)&&(r[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var i=0,a=Object.getOwnPropertySymbols(e);it.indexOf(a[i])&&Object.prototype.propertyIsEnumerable.call(e,a[i])&&(r[a[i]]=e[a[i]]);return r};let w=r.forwardRef(function(e,f){let{pagination:p=!1,prefixCls:h,bordered:b=!1,split:v=!0,className:$,rootClassName:x,style:C,children:w,itemLayout:N,loadMore:S,grid:E,dataSource:O=[],size:z,header:M,footer:T,loading:j=!1,rowKey:I,renderItem:B,locale:L}=e,R=k(e,["pagination","prefixCls","bordered","split","className","rootClassName","style","children","itemLayout","loadMore","grid","dataSource","size","header","footer","loading","rowKey","renderItem","locale"]),H=p&&"object"==typeof p?p:{},[P,W]=r.useState(H.defaultCurrent||1),[V,_]=r.useState(H.defaultPageSize||10),{getPrefixCls:X,direction:A,className:q,style:F}=(0,n.useComponentConfig)("list"),{renderEmpty:Y}=r.useContext(n.ConfigContext),G=e=>(t,r)=>{var a;W(t),_(r),p&&(null==(a=null==p?void 0:p[e])||a.call(p,t,r))},K=G("onChange"),U=G("onShowSizeChange"),D=!!(S||p||T),J=X("list",h),[Q,Z,ee]=y(J),et=j;"boolean"==typeof et&&(et={spinning:et});let er=!!(null==et?void 0:et.spinning),ea=(0,d.default)(z),ei="";switch(ea){case"large":ei="lg";break;case"small":ei="sm"}let el=(0,a.default)(J,{[`${J}-vertical`]:"vertical"===N,[`${J}-${ei}`]:ei,[`${J}-split`]:v,[`${J}-bordered`]:b,[`${J}-loading`]:er,[`${J}-grid`]:!!E,[`${J}-something-after-last-item`]:D,[`${J}-rtl`]:"rtl"===A},q,$,x,Z,ee),en=(0,i.default)({current:1,total:0,position:"bottom"},{total:O.length,current:P,pageSize:V},p||{}),eo=Math.ceil(en.total/en.pageSize);en.current=Math.min(en.current,eo);let ed=p&&r.createElement("div",{className:(0,a.default)(`${J}-pagination`)},r.createElement(m.default,Object.assign({align:"end"},en,{onChange:K,onShowSizeChange:U}))),es=(0,t.default)(O);p&&O.length>(en.current-1)*en.pageSize&&(es=(0,t.default)(O).splice((en.current-1)*en.pageSize,en.pageSize));let ec=Object.keys(E||{}).some(e=>["xs","sm","md","lg","xl","xxl"].includes(e)),em=(0,c.default)(ec),eu=r.useMemo(()=>{for(let e=0;e{if(!E)return;let e=eu&&E[eu]?E[eu]:E.column;if(e)return{width:`${100/e}%`,maxWidth:`${100/e}%`}},[JSON.stringify(E),eu]),ef=er&&r.createElement("div",{style:{minHeight:53}});if(es.length>0){let e=es.map((e,t)=>{let a;return B?((a="function"==typeof I?I(e):I?e[I]:e.key)||(a=`list-item-${t}`),r.createElement(r.Fragment,{key:a},B(e,t))):null});ef=E?r.createElement(s.Row,{gutter:E.gutter},r.Children.map(e,e=>r.createElement("div",{key:null==e?void 0:e.key,style:eg},e))):r.createElement("ul",{className:`${J}-items`},e)}else w||er||(ef=r.createElement("div",{className:`${J}-empty-text`},(null==L?void 0:L.emptyText)||(null==Y?void 0:Y("List"))||r.createElement(o.default,{componentName:"List"})));let ep=en.position,eh=r.useMemo(()=>({grid:E,itemLayout:N}),[JSON.stringify(E),N]);return Q(r.createElement(g.Provider,{value:eh},r.createElement("div",Object.assign({ref:f,style:Object.assign(Object.assign({},F),C),className:el},R),("top"===ep||"both"===ep)&&ed,M&&r.createElement("div",{className:`${J}-header`},M),r.createElement(u.default,Object.assign({},et),ef,w),T&&r.createElement("div",{className:`${J}-footer`},T),S||("bottom"===ep||"both"===ep)&&ed)))});w.Item=b,e.s(["List",0,w],573421)},837007,e=>{"use strict";var t=e.i(603908);e.s(["PlusIcon",()=>t.default])}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0us_9w7qaihte.js b/litellm/proxy/_experimental/out/_next/static/chunks/0us_9w7qaihte.js new file mode 100644 index 00000000000..d560e2ae144 --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0us_9w7qaihte.js @@ -0,0 +1 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,21548,e=>{"use strict";var r=e.i(616303);e.s(["Empty",()=>r.default])},362024,e=>{"use strict";var r=e.i(988122);e.s(["Collapse",()=>r.default])},596239,e=>{"use strict";e.i(247167);var r=e.i(931067),t=e.i(271645);let a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M574 665.4a8.03 8.03 0 00-11.3 0L446.5 781.6c-53.8 53.8-144.6 59.5-204 0-59.5-59.5-53.8-150.2 0-204l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3l-39.8-39.8a8.03 8.03 0 00-11.3 0L191.4 526.5c-84.6 84.6-84.6 221.5 0 306s221.5 84.6 306 0l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3L574 665.4zm258.6-474c-84.6-84.6-221.5-84.6-306 0L410.3 307.6a8.03 8.03 0 000 11.3l39.7 39.7c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c53.8-53.8 144.6-59.5 204 0 59.5 59.5 53.8 150.2 0 204L665.3 562.6a8.03 8.03 0 000 11.3l39.8 39.8c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c84.5-84.6 84.5-221.5 0-306.1zM610.1 372.3a8.03 8.03 0 00-11.3 0L372.3 598.7a8.03 8.03 0 000 11.3l39.6 39.6c3.1 3.1 8.2 3.1 11.3 0l226.4-226.4c3.1-3.1 3.1-8.2 0-11.3l-39.5-39.6z"}}]},name:"link",theme:"outlined"};var o=e.i(9583),l=t.forwardRef(function(e,l){return t.createElement(o.default,(0,r.default)({},e,{ref:l,icon:a}))});e.s(["LinkOutlined",0,l],596239)},751904,e=>{"use strict";var r=e.i(401361);e.s(["EditOutlined",()=>r.default])},823429,e=>{"use strict";let r=(0,e.i(475254).default)("square-pen",[["path",{d:"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7",key:"1m0v6g"}],["path",{d:"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z",key:"ohrbg2"}]]);e.s(["default",0,r])},166406,e=>{"use strict";var r=e.i(190144);e.s(["CopyOutlined",()=>r.default])},599724,936325,e=>{"use strict";var r=e.i(95779),t=e.i(444755),a=e.i(673706),o=e.i(271645);let l=o.default.forwardRef((e,l)=>{let{color:s,className:n,children:i}=e;return o.default.createElement("p",{ref:l,className:(0,t.tremorTwMerge)("text-tremor-default",s?(0,a.getColorClassNames)(s,r.colorPalette.text).textColor:(0,t.tremorTwMerge)("text-tremor-content","dark:text-dark-tremor-content"),n)},i)});l.displayName="Text",e.s(["default",0,l],936325),e.s(["Text",0,l],599724)},994388,e=>{"use strict";var r=e.i(290571),t=e.i(829087),a=e.i(271645);let o=["preEnter","entering","entered","preExit","exiting","exited","unmounted"],l=e=>({_s:e,status:o[e],isEnter:e<3,isMounted:6!==e,isResolved:2===e||e>4}),s=e=>e?6:5,n=(e,r,t,a,o)=>{clearTimeout(a.current);let s=l(e);r(s),t.current=s,o&&o({current:s})};var i=e.i(480731),d=e.i(444755),c=e.i(673706);let m=e=>{var t=(0,r.__rest)(e,[]);return a.default.createElement("svg",Object.assign({},t,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"}),a.default.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}),a.default.createElement("path",{d:"M18.364 5.636L16.95 7.05A7 7 0 1 0 19 12h2a9 9 0 1 1-2.636-6.364z"}))};var u=e.i(95779);let f={xs:{height:"h-4",width:"w-4"},sm:{height:"h-5",width:"w-5"},md:{height:"h-5",width:"w-5"},lg:{height:"h-6",width:"w-6"},xl:{height:"h-6",width:"w-6"}},g=(e,r)=>{switch(e){case"primary":return{textColor:r?(0,c.getColorClassNames)("white").textColor:"text-tremor-brand-inverted dark:text-dark-tremor-brand-inverted",hoverTextColor:r?(0,c.getColorClassNames)("white").textColor:"text-tremor-brand-inverted dark:text-dark-tremor-brand-inverted",bgColor:r?(0,c.getColorClassNames)(r,u.colorPalette.background).bgColor:"bg-tremor-brand dark:bg-dark-tremor-brand",hoverBgColor:r?(0,c.getColorClassNames)(r,u.colorPalette.darkBackground).hoverBgColor:"hover:bg-tremor-brand-emphasis dark:hover:bg-dark-tremor-brand-emphasis",borderColor:r?(0,c.getColorClassNames)(r,u.colorPalette.border).borderColor:"border-tremor-brand dark:border-dark-tremor-brand",hoverBorderColor:r?(0,c.getColorClassNames)(r,u.colorPalette.darkBorder).hoverBorderColor:"hover:border-tremor-brand-emphasis dark:hover:border-dark-tremor-brand-emphasis"};case"secondary":return{textColor:r?(0,c.getColorClassNames)(r,u.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",hoverTextColor:r?(0,c.getColorClassNames)(r,u.colorPalette.text).textColor:"hover:text-tremor-brand-emphasis dark:hover:text-dark-tremor-brand-emphasis",bgColor:(0,c.getColorClassNames)("transparent").bgColor,hoverBgColor:r?(0,d.tremorTwMerge)((0,c.getColorClassNames)(r,u.colorPalette.background).hoverBgColor,"hover:bg-opacity-20 dark:hover:bg-opacity-20"):"hover:bg-tremor-brand-faint dark:hover:bg-dark-tremor-brand-faint",borderColor:r?(0,c.getColorClassNames)(r,u.colorPalette.border).borderColor:"border-tremor-brand dark:border-dark-tremor-brand"};case"light":return{textColor:r?(0,c.getColorClassNames)(r,u.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",hoverTextColor:r?(0,c.getColorClassNames)(r,u.colorPalette.darkText).hoverTextColor:"hover:text-tremor-brand-emphasis dark:hover:text-dark-tremor-brand-emphasis",bgColor:(0,c.getColorClassNames)("transparent").bgColor,borderColor:"",hoverBorderColor:""}}},p=(0,c.makeClassName)("Button"),b=({loading:e,iconSize:r,iconPosition:t,Icon:o,needMargin:l,transitionStatus:s})=>{let n=l?t===i.HorizontalPositions.Left?(0,d.tremorTwMerge)("-ml-1","mr-1.5"):(0,d.tremorTwMerge)("-mr-1","ml-1.5"):"",c=(0,d.tremorTwMerge)("w-0 h-0"),u={default:c,entering:c,entered:r,exiting:r,exited:c};return e?a.default.createElement(m,{className:(0,d.tremorTwMerge)(p("icon"),"animate-spin shrink-0",n,u.default,u[s]),style:{transition:"width 150ms"}}):a.default.createElement(o,{className:(0,d.tremorTwMerge)(p("icon"),"shrink-0",r,n)})},h=a.default.forwardRef((e,o)=>{let{icon:m,iconPosition:u=i.HorizontalPositions.Left,size:h=i.Sizes.SM,color:y,variant:v="primary",disabled:x,loading:C=!1,loadingText:w,children:k,tooltip:N,className:T}=e,O=(0,r.__rest)(e,["icon","iconPosition","size","color","variant","disabled","loading","loadingText","children","tooltip","className"]),E=C||x,M=void 0!==m||C,j=C&&w,P=!(!k&&!j),S=(0,d.tremorTwMerge)(f[h].height,f[h].width),_="light"!==v?(0,d.tremorTwMerge)("rounded-tremor-default border","shadow-tremor-input","dark:shadow-dark-tremor-input"):"",z=g(v,y),R=("light"!==v?{xs:{paddingX:"px-2.5",paddingY:"py-1.5",fontSize:"text-xs"},sm:{paddingX:"px-4",paddingY:"py-2",fontSize:"text-sm"},md:{paddingX:"px-4",paddingY:"py-2",fontSize:"text-md"},lg:{paddingX:"px-4",paddingY:"py-2.5",fontSize:"text-lg"},xl:{paddingX:"px-4",paddingY:"py-3",fontSize:"text-xl"}}:{xs:{paddingX:"",paddingY:"",fontSize:"text-xs"},sm:{paddingX:"",paddingY:"",fontSize:"text-sm"},md:{paddingX:"",paddingY:"",fontSize:"text-md"},lg:{paddingX:"",paddingY:"",fontSize:"text-lg"},xl:{paddingX:"",paddingY:"",fontSize:"text-xl"}})[h],{tooltipProps:B,getReferenceProps:$}=(0,t.useTooltip)(300),[L,H]=(({enter:e=!0,exit:r=!0,preEnter:t,preExit:o,timeout:i,initialEntered:d,mountOnEnter:c,unmountOnExit:m,onStateChange:u}={})=>{let[f,g]=(0,a.useState)(()=>l(d?2:s(c))),p=(0,a.useRef)(f),b=(0,a.useRef)(0),[h,y]="object"==typeof i?[i.enter,i.exit]:[i,i],v=(0,a.useCallback)(()=>{let e=((e,r)=>{switch(e){case 1:case 0:return 2;case 4:case 3:return s(r)}})(p.current._s,m);e&&n(e,g,p,b,u)},[u,m]);return[f,(0,a.useCallback)(a=>{let l=e=>{switch(n(e,g,p,b,u),e){case 1:h>=0&&(b.current=((...e)=>setTimeout(...e))(v,h));break;case 4:y>=0&&(b.current=((...e)=>setTimeout(...e))(v,y));break;case 0:case 3:b.current=((...e)=>setTimeout(...e))(()=>{isNaN(document.body.offsetTop)||l(e+1)},0)}},i=p.current.isEnter;"boolean"!=typeof a&&(a=!i),a?i||l(e?+!t:2):i&&l(r?o?3:4:s(m))},[v,u,e,r,t,o,h,y,m]),v]})({timeout:50});return(0,a.useEffect)(()=>{H(C)},[C]),a.default.createElement("button",Object.assign({ref:(0,c.mergeRefs)([o,B.refs.setReference]),className:(0,d.tremorTwMerge)(p("root"),"shrink-0 inline-flex justify-center items-center group font-medium outline-none",_,R.paddingX,R.paddingY,R.fontSize,z.textColor,z.bgColor,z.borderColor,z.hoverBorderColor,E?"opacity-50 cursor-not-allowed":(0,d.tremorTwMerge)(g(v,y).hoverTextColor,g(v,y).hoverBgColor,g(v,y).hoverBorderColor),T),disabled:E},$,O),a.default.createElement(t.default,Object.assign({text:N},B)),M&&u!==i.HorizontalPositions.Right?a.default.createElement(b,{loading:C,iconSize:S,iconPosition:u,Icon:m,transitionStatus:L.status,needMargin:P}):null,j||k?a.default.createElement("span",{className:(0,d.tremorTwMerge)(p("text"),"text-tremor-default whitespace-nowrap")},j?w:k):null,M&&u===i.HorizontalPositions.Right?a.default.createElement(b,{loading:C,iconSize:S,iconPosition:u,Icon:m,transitionStatus:L.status,needMargin:P}):null)});h.displayName="Button",e.s(["Button",0,h],994388)},304967,e=>{"use strict";var r=e.i(290571),t=e.i(271645),a=e.i(480731),o=e.i(95779),l=e.i(444755),s=e.i(673706);let n=(0,s.makeClassName)("Card"),i=t.default.forwardRef((e,i)=>{let{decoration:d="",decorationColor:c,children:m,className:u}=e,f=(0,r.__rest)(e,["decoration","decorationColor","children","className"]);return t.default.createElement("div",Object.assign({ref:i,className:(0,l.tremorTwMerge)(n("root"),"relative w-full text-left ring-1 rounded-tremor-default p-6","bg-tremor-background ring-tremor-ring shadow-tremor-card","dark:bg-dark-tremor-background dark:ring-dark-tremor-ring dark:shadow-dark-tremor-card",c?(0,s.getColorClassNames)(c,o.colorPalette.border).borderColor:"border-tremor-brand dark:border-dark-tremor-brand",(e=>{if(!e)return"";switch(e){case a.HorizontalPositions.Left:return"border-l-4";case a.VerticalPositions.Top:return"border-t-4";case a.HorizontalPositions.Right:return"border-r-4";case a.VerticalPositions.Bottom:return"border-b-4";default:return""}})(d),u)},f),m)});i.displayName="Card",e.s(["Card",0,i],304967)},629569,e=>{"use strict";var r=e.i(290571),t=e.i(95779),a=e.i(444755),o=e.i(673706),l=e.i(271645);let s=l.default.forwardRef((e,s)=>{let{color:n,children:i,className:d}=e,c=(0,r.__rest)(e,["color","children","className"]);return l.default.createElement("p",Object.assign({ref:s,className:(0,a.tremorTwMerge)("font-medium text-tremor-title",n?(0,o.getColorClassNames)(n,t.colorPalette.darkText).textColor:"text-tremor-content-strong dark:text-dark-tremor-content-strong",d)},c),i)});s.displayName="Title",e.s(["Title",0,s],629569)},653496,e=>{"use strict";var r=e.i(721369);e.s(["Tabs",()=>r.default])},637235,e=>{"use strict";e.i(247167);var r=e.i(931067),t=e.i(271645);let a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M686.7 638.6L544.1 535.5V288c0-4.4-3.6-8-8-8H488c-4.4 0-8 3.6-8 8v275.4c0 2.6 1.2 5 3.3 6.5l165.4 120.6c3.6 2.6 8.6 1.8 11.2-1.7l28.6-39c2.6-3.7 1.8-8.7-1.8-11.2z"}}]},name:"clock-circle",theme:"outlined"};var o=e.i(9583),l=t.forwardRef(function(e,l){return t.createElement(o.default,(0,r.default)({},e,{ref:l,icon:a}))});e.s(["ClockCircleOutlined",0,l],637235)},525720,e=>{"use strict";e.i(247167);var r=e.i(271645),t=e.i(343794),a=e.i(529681),o=e.i(908286),l=e.i(242064),s=e.i(246422),n=e.i(838378);let i=["wrap","nowrap","wrap-reverse"],d=["flex-start","flex-end","start","end","center","space-between","space-around","space-evenly","stretch","normal","left","right"],c=["center","start","end","flex-start","flex-end","self-start","self-end","baseline","normal","stretch"],m=function(e,r){let a,o,l;return(0,t.default)(Object.assign(Object.assign(Object.assign({},(a=!0===r.wrap?"wrap":r.wrap,{[`${e}-wrap-${a}`]:a&&i.includes(a)})),(o={},c.forEach(t=>{o[`${e}-align-${t}`]=r.align===t}),o[`${e}-align-stretch`]=!r.align&&!!r.vertical,o)),(l={},d.forEach(t=>{l[`${e}-justify-${t}`]=r.justify===t}),l)))},u=(0,s.genStyleHooks)("Flex",e=>{let{paddingXS:r,padding:t,paddingLG:a}=e,o=(0,n.mergeToken)(e,{flexGapSM:r,flexGap:t,flexGapLG:a});return[(e=>{let{componentCls:r}=e;return{[r]:{display:"flex",margin:0,padding:0,"&-vertical":{flexDirection:"column"},"&-rtl":{direction:"rtl"},"&:empty":{display:"none"}}}})(o),(e=>{let{componentCls:r}=e;return{[r]:{"&-gap-small":{gap:e.flexGapSM},"&-gap-middle":{gap:e.flexGap},"&-gap-large":{gap:e.flexGapLG}}}})(o),(e=>{let{componentCls:r}=e,t={};return i.forEach(e=>{t[`${r}-wrap-${e}`]={flexWrap:e}}),t})(o),(e=>{let{componentCls:r}=e,t={};return c.forEach(e=>{t[`${r}-align-${e}`]={alignItems:e}}),t})(o),(e=>{let{componentCls:r}=e,t={};return d.forEach(e=>{t[`${r}-justify-${e}`]={justifyContent:e}}),t})(o)]},()=>({}),{resetStyle:!1});var f=function(e,r){var t={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&0>r.indexOf(a)&&(t[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,a=Object.getOwnPropertySymbols(e);or.indexOf(a[o])&&Object.prototype.propertyIsEnumerable.call(e,a[o])&&(t[a[o]]=e[a[o]]);return t};let g=r.default.forwardRef((e,s)=>{let{prefixCls:n,rootClassName:i,className:d,style:c,flex:g,gap:p,vertical:b=!1,component:h="div",children:y}=e,v=f(e,["prefixCls","rootClassName","className","style","flex","gap","vertical","component","children"]),{flex:x,direction:C,getPrefixCls:w}=r.default.useContext(l.ConfigContext),k=w("flex",n),[N,T,O]=u(k),E=null!=b?b:null==x?void 0:x.vertical,M=(0,t.default)(d,i,null==x?void 0:x.className,k,T,O,m(k,e),{[`${k}-rtl`]:"rtl"===C,[`${k}-gap-${p}`]:(0,o.isPresetSize)(p),[`${k}-vertical`]:E}),j=Object.assign(Object.assign({},null==x?void 0:x.style),c);return g&&(j.flex=g),p&&!(0,o.isPresetSize)(p)&&(j.gap=p),N(r.default.createElement(h,Object.assign({ref:s,className:M,style:j},(0,a.default)(v,["justify","wrap","align"])),y))});e.s(["Flex",0,g],525720)},269200,e=>{"use strict";var r=e.i(290571),t=e.i(271645),a=e.i(444755);let o=(0,e.i(673706).makeClassName)("Table"),l=t.default.forwardRef((e,l)=>{let{children:s,className:n}=e,i=(0,r.__rest)(e,["children","className"]);return t.default.createElement("div",{className:(0,a.tremorTwMerge)(o("root"),"overflow-auto",n)},t.default.createElement("table",Object.assign({ref:l,className:(0,a.tremorTwMerge)(o("table"),"w-full text-tremor-default","text-tremor-content","dark:text-dark-tremor-content")},i),s))});l.displayName="Table",e.s(["Table",0,l],269200)},942232,e=>{"use strict";var r=e.i(290571),t=e.i(271645),a=e.i(444755);let o=(0,e.i(673706).makeClassName)("TableBody"),l=t.default.forwardRef((e,l)=>{let{children:s,className:n}=e,i=(0,r.__rest)(e,["children","className"]);return t.default.createElement(t.default.Fragment,null,t.default.createElement("tbody",Object.assign({ref:l,className:(0,a.tremorTwMerge)(o("root"),"align-top divide-y","divide-tremor-border","dark:divide-dark-tremor-border",n)},i),s))});l.displayName="TableBody",e.s(["TableBody",0,l],942232)},977572,e=>{"use strict";var r=e.i(290571),t=e.i(271645),a=e.i(444755);let o=(0,e.i(673706).makeClassName)("TableCell"),l=t.default.forwardRef((e,l)=>{let{children:s,className:n}=e,i=(0,r.__rest)(e,["children","className"]);return t.default.createElement(t.default.Fragment,null,t.default.createElement("td",Object.assign({ref:l,className:(0,a.tremorTwMerge)(o("root"),"align-middle whitespace-nowrap text-left p-4",n)},i),s))});l.displayName="TableCell",e.s(["TableCell",0,l],977572)},427612,e=>{"use strict";var r=e.i(290571),t=e.i(271645),a=e.i(444755);let o=(0,e.i(673706).makeClassName)("TableHead"),l=t.default.forwardRef((e,l)=>{let{children:s,className:n}=e,i=(0,r.__rest)(e,["children","className"]);return t.default.createElement(t.default.Fragment,null,t.default.createElement("thead",Object.assign({ref:l,className:(0,a.tremorTwMerge)(o("root"),"text-left","text-tremor-content","dark:text-dark-tremor-content",n)},i),s))});l.displayName="TableHead",e.s(["TableHead",0,l],427612)},64848,e=>{"use strict";var r=e.i(290571),t=e.i(271645),a=e.i(444755);let o=(0,e.i(673706).makeClassName)("TableHeaderCell"),l=t.default.forwardRef((e,l)=>{let{children:s,className:n}=e,i=(0,r.__rest)(e,["children","className"]);return t.default.createElement(t.default.Fragment,null,t.default.createElement("th",Object.assign({ref:l,className:(0,a.tremorTwMerge)(o("root"),"whitespace-nowrap text-left font-semibold top-0 px-4 py-3.5","text-tremor-content-strong","dark:text-dark-tremor-content-strong",n)},i),s))});l.displayName="TableHeaderCell",e.s(["TableHeaderCell",0,l],64848)},496020,e=>{"use strict";var r=e.i(290571),t=e.i(271645),a=e.i(444755);let o=(0,e.i(673706).makeClassName)("TableRow"),l=t.default.forwardRef((e,l)=>{let{children:s,className:n}=e,i=(0,r.__rest)(e,["children","className"]);return t.default.createElement(t.default.Fragment,null,t.default.createElement("tr",Object.assign({ref:l,className:(0,a.tremorTwMerge)(o("row"),n)},i),s))});l.displayName="TableRow",e.s(["TableRow",0,l],496020)},536916,e=>{"use strict";var r=e.i(374276);e.s(["Checkbox",()=>r.default])},292639,e=>{"use strict";var r=e.i(602869),t=e.i(266027);let a=(0,e.i(243652).createQueryKeys)("uiSettings");e.s(["useUISettings",0,()=>(0,t.useQuery)({queryKey:a.list({}),queryFn:async()=>await (0,r.getUiSettings)(),staleTime:36e5,gcTime:36e5})])},350967,46757,e=>{"use strict";var r=e.i(290571),t=e.i(444755),a=e.i(673706),o=e.i(271645);let l={0:"grid-cols-none",1:"grid-cols-1",2:"grid-cols-2",3:"grid-cols-3",4:"grid-cols-4",5:"grid-cols-5",6:"grid-cols-6",7:"grid-cols-7",8:"grid-cols-8",9:"grid-cols-9",10:"grid-cols-10",11:"grid-cols-11",12:"grid-cols-12"},s={0:"sm:grid-cols-none",1:"sm:grid-cols-1",2:"sm:grid-cols-2",3:"sm:grid-cols-3",4:"sm:grid-cols-4",5:"sm:grid-cols-5",6:"sm:grid-cols-6",7:"sm:grid-cols-7",8:"sm:grid-cols-8",9:"sm:grid-cols-9",10:"sm:grid-cols-10",11:"sm:grid-cols-11",12:"sm:grid-cols-12"},n={0:"md:grid-cols-none",1:"md:grid-cols-1",2:"md:grid-cols-2",3:"md:grid-cols-3",4:"md:grid-cols-4",5:"md:grid-cols-5",6:"md:grid-cols-6",7:"md:grid-cols-7",8:"md:grid-cols-8",9:"md:grid-cols-9",10:"md:grid-cols-10",11:"md:grid-cols-11",12:"md:grid-cols-12"},i={0:"lg:grid-cols-none",1:"lg:grid-cols-1",2:"lg:grid-cols-2",3:"lg:grid-cols-3",4:"lg:grid-cols-4",5:"lg:grid-cols-5",6:"lg:grid-cols-6",7:"lg:grid-cols-7",8:"lg:grid-cols-8",9:"lg:grid-cols-9",10:"lg:grid-cols-10",11:"lg:grid-cols-11",12:"lg:grid-cols-12"};e.s(["colSpan",0,{1:"col-span-1",2:"col-span-2",3:"col-span-3",4:"col-span-4",5:"col-span-5",6:"col-span-6",7:"col-span-7",8:"col-span-8",9:"col-span-9",10:"col-span-10",11:"col-span-11",12:"col-span-12",13:"col-span-13"},"colSpanLg",0,{1:"lg:col-span-1",2:"lg:col-span-2",3:"lg:col-span-3",4:"lg:col-span-4",5:"lg:col-span-5",6:"lg:col-span-6",7:"lg:col-span-7",8:"lg:col-span-8",9:"lg:col-span-9",10:"lg:col-span-10",11:"lg:col-span-11",12:"lg:col-span-12",13:"lg:col-span-13"},"colSpanMd",0,{1:"md:col-span-1",2:"md:col-span-2",3:"md:col-span-3",4:"md:col-span-4",5:"md:col-span-5",6:"md:col-span-6",7:"md:col-span-7",8:"md:col-span-8",9:"md:col-span-9",10:"md:col-span-10",11:"md:col-span-11",12:"md:col-span-12",13:"md:col-span-13"},"colSpanSm",0,{1:"sm:col-span-1",2:"sm:col-span-2",3:"sm:col-span-3",4:"sm:col-span-4",5:"sm:col-span-5",6:"sm:col-span-6",7:"sm:col-span-7",8:"sm:col-span-8",9:"sm:col-span-9",10:"sm:col-span-10",11:"sm:col-span-11",12:"sm:col-span-12",13:"sm:col-span-13"},"gridCols",0,l,"gridColsLg",0,i,"gridColsMd",0,n,"gridColsSm",0,s],46757);let d=(0,a.makeClassName)("Grid"),c=(e,r)=>e&&Object.keys(r).includes(String(e))?r[e]:"",m=o.default.forwardRef((e,a)=>{let{numItems:m=1,numItemsSm:u,numItemsMd:f,numItemsLg:g,children:p,className:b}=e,h=(0,r.__rest)(e,["numItems","numItemsSm","numItemsMd","numItemsLg","children","className"]),y=c(m,l),v=c(u,s),x=c(f,n),C=c(g,i),w=(0,t.tremorTwMerge)(y,v,x,C);return o.default.createElement("div",Object.assign({ref:a,className:(0,t.tremorTwMerge)(d("root"),"grid",w,b)},h),p)});m.displayName="Grid",e.s(["Grid",0,m],350967)},981339,e=>{"use strict";var r=e.i(185793);e.s(["Skeleton",()=>r.default])},743151,(e,r,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.CopyToClipboard=void 0;var a=s(e.r(844343)),o=s(e.r(271645)),l=["text","onCopy","options","children"];function s(e){return e&&e.__esModule?e:{default:e}}function n(e){return(n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);r&&(a=a.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,a)}return t}function d(e){for(var r=1;r{"use strict";var a=e.r(743151).CopyToClipboard;a.CopyToClipboard=a,r.exports=a},700514,e=>{"use strict";var r=e.i(271645);e.s(["defaultPageSize",0,25,"useBaseUrl",0,()=>{let[e,t]=(0,r.useState)("http://localhost:4000");return(0,r.useEffect)(()=>{{let{protocol:e,host:r}=window.location;t(`${e}//${r}`)}},[]),e}])},98919,e=>{"use strict";let r=(0,e.i(475254).default)("shield",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]]);e.s(["Shield",0,r],98919)},727612,e=>{"use strict";let r=(0,e.i(475254).default)("trash-2",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]]);e.s(["Trash2",0,r],727612)},688511,e=>{"use strict";var r=e.i(823429);e.s(["Edit",()=>r.default])},114600,e=>{"use strict";var r=e.i(290571),t=e.i(444755),a=e.i(673706),o=e.i(271645);let l=(0,a.makeClassName)("Divider"),s=o.default.forwardRef((e,a)=>{let{className:s,children:n}=e,i=(0,r.__rest)(e,["className","children"]);return o.default.createElement("div",Object.assign({ref:a,className:(0,t.tremorTwMerge)(l("root"),"w-full mx-auto my-6 flex justify-between gap-3 items-center text-tremor-default","text-tremor-content","dark:text-dark-tremor-content",s)},i),n?o.default.createElement(o.default.Fragment,null,o.default.createElement("div",{className:(0,t.tremorTwMerge)("w-full h-[1px] bg-tremor-border dark:bg-dark-tremor-border")}),o.default.createElement("div",{className:(0,t.tremorTwMerge)("text-inherit whitespace-nowrap")},n),o.default.createElement("div",{className:(0,t.tremorTwMerge)("w-full h-[1px] bg-tremor-border dark:bg-dark-tremor-border")})):o.default.createElement("div",{className:(0,t.tremorTwMerge)("w-full h-[1px] bg-tremor-border dark:bg-dark-tremor-border")}))});s.displayName="Divider",e.s(["Divider",0,s],114600)},366283,e=>{"use strict";var r=e.i(290571),t=e.i(271645),a=e.i(95779),o=e.i(444755),l=e.i(673706);let s=(0,l.makeClassName)("Callout"),n=t.default.forwardRef((e,n)=>{let{title:i,icon:d,color:c,className:m,children:u}=e,f=(0,r.__rest)(e,["title","icon","color","className","children"]);return t.default.createElement("div",Object.assign({ref:n,className:(0,o.tremorTwMerge)(s("root"),"flex flex-col overflow-hidden rounded-tremor-default text-tremor-default border-l-4 py-3 pr-3 pl-4",c?(0,o.tremorTwMerge)((0,l.getColorClassNames)(c,a.colorPalette.background).bgColor,(0,l.getColorClassNames)(c,a.colorPalette.darkBorder).borderColor,(0,l.getColorClassNames)(c,a.colorPalette.darkText).textColor,"dark:bg-opacity-10 bg-opacity-10"):(0,o.tremorTwMerge)("bg-tremor-brand-faint border-tremor-brand-emphasis text-tremor-brand-emphasis","dark:bg-dark-tremor-brand-muted/70 dark:border-dark-tremor-brand-emphasis dark:text-dark-tremor-brand-emphasis"),m)},f),t.default.createElement("div",{className:(0,o.tremorTwMerge)(s("header"),"flex items-start")},d?t.default.createElement(d,{className:(0,o.tremorTwMerge)(s("icon"),"flex-none h-5 w-5 mr-1.5")}):null,t.default.createElement("h4",{className:(0,o.tremorTwMerge)(s("title"),"font-semibold")},i)),t.default.createElement("p",{className:(0,o.tremorTwMerge)(s("body"),"overflow-y-auto",u?"mt-2":"")},u))});n.displayName="Callout",e.s(["Callout",0,n],366283)},475647,e=>{"use strict";e.i(247167);var r=e.i(931067),t=e.i(271645);let a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M696 480H544V328c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v152H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h152v152c0 4.4 3.6 8 8 8h48c4.4 0 8-3.6 8-8V544h152c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z"}},{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}}]},name:"plus-circle",theme:"outlined"};var o=e.i(9583),l=t.forwardRef(function(e,l){return t.createElement(o.default,(0,r.default)({},e,{ref:l,icon:a}))});e.s(["PlusCircleOutlined",0,l],475647)},153472,e=>{"use strict";var r,t,a=e.i(266027),o=e.i(954616),l=e.i(912598),s=e.i(243652),n=e.i(135214),i=e.i(602869),d=e.i(431703),c=((r={}).GENERAL_SETTINGS="general_settings",r),m=((t={}).MAXIMUM_SPEND_LOGS_RETENTION_PERIOD="maximum_spend_logs_retention_period",t);let u=async(e,r)=>{try{let t=i.proxyBaseUrl?`${i.proxyBaseUrl}/config/list?config_type=${r}`:`/config/list?config_type=${r}`,a=await fetch(t,{method:"GET",headers:{[(0,i.getGlobalLitellmHeaderName)()]:`Bearer ${e}`,"Content-Type":"application/json"}});if(!a.ok){let e=await a.json(),r=(0,d.deriveErrorMessage)(e);throw(0,i.handleError)(r),Error(r)}return await a.json()}catch(e){throw console.error(`Failed to get proxy config for ${r}:`,e),e}},f=(0,s.createQueryKeys)("proxyConfig"),g=async(e,r)=>{try{let t=i.proxyBaseUrl?`${i.proxyBaseUrl}/config/field/delete`:"/config/field/delete",a=await fetch(t,{method:"POST",headers:{[(0,i.getGlobalLitellmHeaderName)()]:`Bearer ${e}`,"Content-Type":"application/json"},body:JSON.stringify(r)});if(!a.ok){let e=await a.json(),r=(0,d.deriveErrorMessage)(e);throw(0,i.handleError)(r),Error(r)}return await a.json()}catch(e){throw console.error(`Failed to delete proxy config field ${r.field_name}:`,e),e}};e.s(["ConfigType",()=>c,"GeneralSettingsFieldName",()=>m,"proxyConfigKeys",0,f,"useDeleteProxyConfigField",0,()=>{let{accessToken:e}=(0,n.default)(),r=(0,l.useQueryClient)();return(0,o.useMutation)({mutationFn:async r=>{if(!e)throw Error("Access token is required");return await g(e,r)},onSuccess:()=>{r.invalidateQueries({queryKey:f.all})}})},"useProxyConfig",0,e=>{let{accessToken:r}=(0,n.default)();return(0,a.useQuery)({queryKey:f.list({filters:{configType:e}}),queryFn:async()=>await u(r,e),enabled:!!r})}])},286536,77705,e=>{"use strict";var r=e.i(475254);let t=(0,r.default)("eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);e.s(["Eye",0,t],286536);let a=(0,r.default)("eye-off",[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]]);e.s(["EyeOff",0,a],77705)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0uu6lckpr0s15.js b/litellm/proxy/_experimental/out/_next/static/chunks/0uu6lckpr0s15.js new file mode 100644 index 00000000000..9b05cf6dc05 --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0uu6lckpr0s15.js @@ -0,0 +1,14 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,244451,e=>{"use strict";let t;e.i(247167);var n=e.i(271645),i=e.i(343794),a=e.i(242064),l=e.i(763731),o=e.i(174428);let r=80*Math.PI,s=e=>{let{dotClassName:t,style:a,hasCircleCls:l}=e;return n.createElement("circle",{className:(0,i.default)(`${t}-circle`,{[`${t}-circle-bg`]:l}),r:40,cx:50,cy:50,strokeWidth:20,style:a})},c=({percent:e,prefixCls:t})=>{let a=`${t}-dot`,l=`${a}-holder`,c=`${l}-hidden`,[d,u]=n.useState(!1);(0,o.default)(()=>{0!==e&&u(!0)},[0!==e]);let m=Math.max(Math.min(e,100),0);if(!d)return null;let g={strokeDashoffset:`${r/4}`,strokeDasharray:`${r*m/100} ${r*(100-m)/100}`};return n.createElement("span",{className:(0,i.default)(l,`${a}-progress`,m<=0&&c)},n.createElement("svg",{viewBox:"0 0 100 100",role:"progressbar","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":m},n.createElement(s,{dotClassName:a,hasCircleCls:!0}),n.createElement(s,{dotClassName:a,style:g})))};function d(e){let{prefixCls:t,percent:a=0}=e,l=`${t}-dot`,o=`${l}-holder`,r=`${o}-hidden`;return n.createElement(n.Fragment,null,n.createElement("span",{className:(0,i.default)(o,a>0&&r)},n.createElement("span",{className:(0,i.default)(l,`${t}-dot-spin`)},[1,2,3,4].map(e=>n.createElement("i",{className:`${t}-dot-item`,key:e})))),n.createElement(c,{prefixCls:t,percent:a}))}function u(e){var t;let{prefixCls:a,indicator:o,percent:r}=e,s=`${a}-dot`;return o&&n.isValidElement(o)?(0,l.cloneElement)(o,{className:(0,i.default)(null==(t=o.props)?void 0:t.className,s),percent:r}):n.createElement(d,{prefixCls:a,percent:r})}e.i(296059);var m=e.i(694758),g=e.i(183293),p=e.i(246422),f=e.i(838378);let b=new m.Keyframes("antSpinMove",{to:{opacity:1}}),h=new m.Keyframes("antRotate",{to:{transform:"rotate(405deg)"}}),$=(0,p.genStyleHooks)("Spin",e=>(e=>{let{componentCls:t,calc:n}=e;return{[t]:Object.assign(Object.assign({},(0,g.resetComponent)(e)),{position:"absolute",display:"none",color:e.colorPrimary,fontSize:0,textAlign:"center",verticalAlign:"middle",opacity:0,transition:`transform ${e.motionDurationSlow} ${e.motionEaseInOutCirc}`,"&-spinning":{position:"relative",display:"inline-block",opacity:1},[`${t}-text`]:{fontSize:e.fontSize,paddingTop:n(n(e.dotSize).sub(e.fontSize)).div(2).add(2).equal()},"&-fullscreen":{position:"fixed",width:"100vw",height:"100vh",backgroundColor:e.colorBgMask,zIndex:e.zIndexPopupBase,inset:0,display:"flex",alignItems:"center",flexDirection:"column",justifyContent:"center",opacity:0,visibility:"hidden",transition:`all ${e.motionDurationMid}`,"&-show":{opacity:1,visibility:"visible"},[t]:{[`${t}-dot-holder`]:{color:e.colorWhite},[`${t}-text`]:{color:e.colorTextLightSolid}}},"&-nested-loading":{position:"relative",[`> div > ${t}`]:{position:"absolute",top:0,insetInlineStart:0,zIndex:4,display:"block",width:"100%",height:"100%",maxHeight:e.contentHeight,[`${t}-dot`]:{position:"absolute",top:"50%",insetInlineStart:"50%",margin:n(e.dotSize).mul(-1).div(2).equal()},[`${t}-text`]:{position:"absolute",top:"50%",width:"100%",textShadow:`0 1px 2px ${e.colorBgContainer}`},[`&${t}-show-text ${t}-dot`]:{marginTop:n(e.dotSize).div(2).mul(-1).sub(10).equal()},"&-sm":{[`${t}-dot`]:{margin:n(e.dotSizeSM).mul(-1).div(2).equal()},[`${t}-text`]:{paddingTop:n(n(e.dotSizeSM).sub(e.fontSize)).div(2).add(2).equal()},[`&${t}-show-text ${t}-dot`]:{marginTop:n(e.dotSizeSM).div(2).mul(-1).sub(10).equal()}},"&-lg":{[`${t}-dot`]:{margin:n(e.dotSizeLG).mul(-1).div(2).equal()},[`${t}-text`]:{paddingTop:n(n(e.dotSizeLG).sub(e.fontSize)).div(2).add(2).equal()},[`&${t}-show-text ${t}-dot`]:{marginTop:n(e.dotSizeLG).div(2).mul(-1).sub(10).equal()}}},[`${t}-container`]:{position:"relative",transition:`opacity ${e.motionDurationSlow}`,"&::after":{position:"absolute",top:0,insetInlineEnd:0,bottom:0,insetInlineStart:0,zIndex:10,width:"100%",height:"100%",background:e.colorBgContainer,opacity:0,transition:`all ${e.motionDurationSlow}`,content:'""',pointerEvents:"none"}},[`${t}-blur`]:{clear:"both",opacity:.5,userSelect:"none",pointerEvents:"none","&::after":{opacity:.4,pointerEvents:"auto"}}},"&-tip":{color:e.spinDotDefault},[`${t}-dot-holder`]:{width:"1em",height:"1em",fontSize:e.dotSize,display:"inline-block",transition:`transform ${e.motionDurationSlow} ease, opacity ${e.motionDurationSlow} ease`,transformOrigin:"50% 50%",lineHeight:1,color:e.colorPrimary,"&-hidden":{transform:"scale(0.3)",opacity:0}},[`${t}-dot-progress`]:{position:"absolute",inset:0},[`${t}-dot`]:{position:"relative",display:"inline-block",fontSize:e.dotSize,width:"1em",height:"1em","&-item":{position:"absolute",display:"block",width:n(e.dotSize).sub(n(e.marginXXS).div(2)).div(2).equal(),height:n(e.dotSize).sub(n(e.marginXXS).div(2)).div(2).equal(),background:"currentColor",borderRadius:"100%",transform:"scale(0.75)",transformOrigin:"50% 50%",opacity:.3,animationName:b,animationDuration:"1s",animationIterationCount:"infinite",animationTimingFunction:"linear",animationDirection:"alternate","&:nth-child(1)":{top:0,insetInlineStart:0,animationDelay:"0s"},"&:nth-child(2)":{top:0,insetInlineEnd:0,animationDelay:"0.4s"},"&:nth-child(3)":{insetInlineEnd:0,bottom:0,animationDelay:"0.8s"},"&:nth-child(4)":{bottom:0,insetInlineStart:0,animationDelay:"1.2s"}},"&-spin":{transform:"rotate(45deg)",animationName:h,animationDuration:"1.2s",animationIterationCount:"infinite",animationTimingFunction:"linear"},"&-circle":{strokeLinecap:"round",transition:["stroke-dashoffset","stroke-dasharray","stroke","stroke-width","opacity"].map(t=>`${t} ${e.motionDurationSlow} ease`).join(","),fillOpacity:0,stroke:"currentcolor"},"&-circle-bg":{stroke:e.colorFillSecondary}},[`&-sm ${t}-dot`]:{"&, &-holder":{fontSize:e.dotSizeSM}},[`&-sm ${t}-dot-holder`]:{i:{width:n(n(e.dotSizeSM).sub(n(e.marginXXS).div(2))).div(2).equal(),height:n(n(e.dotSizeSM).sub(n(e.marginXXS).div(2))).div(2).equal()}},[`&-lg ${t}-dot`]:{"&, &-holder":{fontSize:e.dotSizeLG}},[`&-lg ${t}-dot-holder`]:{i:{width:n(n(e.dotSizeLG).sub(e.marginXXS)).div(2).equal(),height:n(n(e.dotSizeLG).sub(e.marginXXS)).div(2).equal()}},[`&${t}-show-text ${t}-text`]:{display:"block"}})}})((0,f.mergeToken)(e,{spinDotDefault:e.colorTextDescription})),e=>{let{controlHeightLG:t,controlHeight:n}=e;return{contentHeight:400,dotSize:t/2,dotSizeSM:.35*t,dotSizeLG:n}}),v=[[30,.05],[70,.03],[96,.01]];var y=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&0>t.indexOf(i)&&(n[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var a=0,i=Object.getOwnPropertySymbols(e);at.indexOf(i[a])&&Object.prototype.propertyIsEnumerable.call(e,i[a])&&(n[i[a]]=e[i[a]]);return n};let C=e=>{var l;let{prefixCls:o,spinning:r=!0,delay:s=0,className:c,rootClassName:d,size:m="default",tip:g,wrapperClassName:p,style:f,children:b,fullscreen:h=!1,indicator:C,percent:k}=e,x=y(e,["prefixCls","spinning","delay","className","rootClassName","size","tip","wrapperClassName","style","children","fullscreen","indicator","percent"]),{getPrefixCls:S,direction:O,className:w,style:E,indicator:j}=(0,a.useComponentConfig)("spin"),N=S("spin",o),[z,I,q]=$(N),[D,T]=n.useState(()=>r&&(!r||!s||!!Number.isNaN(Number(s)))),R=function(e,t){let[i,a]=n.useState(0),l=n.useRef(null),o="auto"===t;return n.useEffect(()=>(o&&e&&(a(0),l.current=setInterval(()=>{a(e=>{let t=100-e;for(let n=0;n{l.current&&(clearInterval(l.current),l.current=null)}),[o,e]),o?i:t}(D,k);n.useEffect(()=>{if(r){let e=function(e,t,n){var i,a=n||{},l=a.noTrailing,o=void 0!==l&&l,r=a.noLeading,s=void 0!==r&&r,c=a.debounceMode,d=void 0===c?void 0:c,u=!1,m=0;function g(){i&&clearTimeout(i)}function p(){for(var n=arguments.length,a=Array(n),l=0;le?s?(m=Date.now(),o||(i=setTimeout(d?f:p,e))):p():!0!==o&&(i=setTimeout(d?f:p,void 0===d?e-c:e)))}return p.cancel=function(e){var t=(e||{}).upcomingOnly;g(),u=!(void 0!==t&&t)},p}(s,()=>{T(!0)},{debounceMode:false});return e(),()=>{var t;null==(t=null==e?void 0:e.cancel)||t.call(e)}}T(!1)},[s,r]);let M=n.useMemo(()=>void 0!==b&&!h,[b,h]),P=(0,i.default)(N,w,{[`${N}-sm`]:"small"===m,[`${N}-lg`]:"large"===m,[`${N}-spinning`]:D,[`${N}-show-text`]:!!g,[`${N}-rtl`]:"rtl"===O},c,!h&&d,I,q),B=(0,i.default)(`${N}-container`,{[`${N}-blur`]:D}),H=null!=(l=null!=C?C:j)?l:t,L=Object.assign(Object.assign({},E),f),A=n.createElement("div",Object.assign({},x,{style:L,className:P,"aria-live":"polite","aria-busy":D}),n.createElement(u,{prefixCls:N,indicator:H,percent:R}),g&&(M||h)?n.createElement("div",{className:`${N}-text`},g):null);return z(M?n.createElement("div",Object.assign({},x,{className:(0,i.default)(`${N}-nested-loading`,p,I,q)}),D&&n.createElement("div",{key:"loading"},A),n.createElement("div",{className:B,key:"container"},b)):h?n.createElement("div",{className:(0,i.default)(`${N}-fullscreen`,{[`${N}-fullscreen-show`]:D},d,I,q)},A):A)};C.setDefaultIndicator=e=>{t=e},e.s(["default",0,C],244451)},185793,e=>{"use strict";e.i(247167);var t=e.i(271645),n=e.i(343794),i=e.i(242064),a=e.i(529681);let l=e=>{let{prefixCls:i,className:a,style:l,size:o,shape:r}=e,s=(0,n.default)({[`${i}-lg`]:"large"===o,[`${i}-sm`]:"small"===o}),c=(0,n.default)({[`${i}-circle`]:"circle"===r,[`${i}-square`]:"square"===r,[`${i}-round`]:"round"===r}),d=t.useMemo(()=>"number"==typeof o?{width:o,height:o,lineHeight:`${o}px`}:{},[o]);return t.createElement("span",{className:(0,n.default)(i,s,c,a),style:Object.assign(Object.assign({},d),l)})};e.i(296059);var o=e.i(694758),r=e.i(915654),s=e.i(246422),c=e.i(838378);let d=new o.Keyframes("ant-skeleton-loading",{"0%":{backgroundPosition:"100% 50%"},"100%":{backgroundPosition:"0 50%"}}),u=e=>({height:e,lineHeight:(0,r.unit)(e)}),m=e=>Object.assign({width:e},u(e)),g=(e,t)=>Object.assign({width:t(e).mul(5).equal(),minWidth:t(e).mul(5).equal()},u(e)),p=e=>Object.assign({width:e},u(e)),f=(e,t,n)=>{let{skeletonButtonCls:i}=e;return{[`${n}${i}-circle`]:{width:t,minWidth:t,borderRadius:"50%"},[`${n}${i}-round`]:{borderRadius:t}}},b=(e,t)=>Object.assign({width:t(e).mul(2).equal(),minWidth:t(e).mul(2).equal()},u(e)),h=(0,s.genStyleHooks)("Skeleton",e=>{let{componentCls:t,calc:n}=e;return(e=>{let{componentCls:t,skeletonAvatarCls:n,skeletonTitleCls:i,skeletonParagraphCls:a,skeletonButtonCls:l,skeletonInputCls:o,skeletonImageCls:r,controlHeight:s,controlHeightLG:c,controlHeightSM:u,gradientFromColor:h,padding:$,marginSM:v,borderRadius:y,titleHeight:C,blockRadius:k,paragraphLiHeight:x,controlHeightXS:S,paragraphMarginTop:O}=e;return{[t]:{display:"table",width:"100%",[`${t}-header`]:{display:"table-cell",paddingInlineEnd:$,verticalAlign:"top",[n]:Object.assign({display:"inline-block",verticalAlign:"top",background:h},m(s)),[`${n}-circle`]:{borderRadius:"50%"},[`${n}-lg`]:Object.assign({},m(c)),[`${n}-sm`]:Object.assign({},m(u))},[`${t}-content`]:{display:"table-cell",width:"100%",verticalAlign:"top",[i]:{width:"100%",height:C,background:h,borderRadius:k,[`+ ${a}`]:{marginBlockStart:u}},[a]:{padding:0,"> li":{width:"100%",height:x,listStyle:"none",background:h,borderRadius:k,"+ li":{marginBlockStart:S}}},[`${a}> li:last-child:not(:first-child):not(:nth-child(2))`]:{width:"61%"}},[`&-round ${t}-content`]:{[`${i}, ${a} > li`]:{borderRadius:y}}},[`${t}-with-avatar ${t}-content`]:{[i]:{marginBlockStart:v,[`+ ${a}`]:{marginBlockStart:O}}},[`${t}${t}-element`]:Object.assign(Object.assign(Object.assign(Object.assign({display:"inline-block",width:"auto"},(e=>{let{borderRadiusSM:t,skeletonButtonCls:n,controlHeight:i,controlHeightLG:a,controlHeightSM:l,gradientFromColor:o,calc:r}=e;return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({[n]:Object.assign({display:"inline-block",verticalAlign:"top",background:o,borderRadius:t,width:r(i).mul(2).equal(),minWidth:r(i).mul(2).equal()},b(i,r))},f(e,i,n)),{[`${n}-lg`]:Object.assign({},b(a,r))}),f(e,a,`${n}-lg`)),{[`${n}-sm`]:Object.assign({},b(l,r))}),f(e,l,`${n}-sm`))})(e)),(e=>{let{skeletonAvatarCls:t,gradientFromColor:n,controlHeight:i,controlHeightLG:a,controlHeightSM:l}=e;return{[t]:Object.assign({display:"inline-block",verticalAlign:"top",background:n},m(i)),[`${t}${t}-circle`]:{borderRadius:"50%"},[`${t}${t}-lg`]:Object.assign({},m(a)),[`${t}${t}-sm`]:Object.assign({},m(l))}})(e)),(e=>{let{controlHeight:t,borderRadiusSM:n,skeletonInputCls:i,controlHeightLG:a,controlHeightSM:l,gradientFromColor:o,calc:r}=e;return{[i]:Object.assign({display:"inline-block",verticalAlign:"top",background:o,borderRadius:n},g(t,r)),[`${i}-lg`]:Object.assign({},g(a,r)),[`${i}-sm`]:Object.assign({},g(l,r))}})(e)),(e=>{let{skeletonImageCls:t,imageSizeBase:n,gradientFromColor:i,borderRadiusSM:a,calc:l}=e;return{[t]:Object.assign(Object.assign({display:"inline-flex",alignItems:"center",justifyContent:"center",verticalAlign:"middle",background:i,borderRadius:a},p(l(n).mul(2).equal())),{[`${t}-path`]:{fill:"#bfbfbf"},[`${t}-svg`]:Object.assign(Object.assign({},p(n)),{maxWidth:l(n).mul(4).equal(),maxHeight:l(n).mul(4).equal()}),[`${t}-svg${t}-svg-circle`]:{borderRadius:"50%"}}),[`${t}${t}-circle`]:{borderRadius:"50%"}}})(e)),[`${t}${t}-block`]:{width:"100%",[l]:{width:"100%"},[o]:{width:"100%"}},[`${t}${t}-active`]:{[` + ${i}, + ${a} > li, + ${n}, + ${l}, + ${o}, + ${r} + `]:Object.assign({},{background:e.skeletonLoadingBackground,backgroundSize:"400% 100%",animationName:d,animationDuration:e.skeletonLoadingMotionDuration,animationTimingFunction:"ease",animationIterationCount:"infinite"})}}})((0,c.mergeToken)(e,{skeletonAvatarCls:`${t}-avatar`,skeletonTitleCls:`${t}-title`,skeletonParagraphCls:`${t}-paragraph`,skeletonButtonCls:`${t}-button`,skeletonInputCls:`${t}-input`,skeletonImageCls:`${t}-image`,imageSizeBase:n(e.controlHeight).mul(1.5).equal(),borderRadius:100,skeletonLoadingBackground:`linear-gradient(90deg, ${e.gradientFromColor} 25%, ${e.gradientToColor} 37%, ${e.gradientFromColor} 63%)`,skeletonLoadingMotionDuration:"1.4s"}))},e=>{let{colorFillContent:t,colorFill:n}=e;return{color:t,colorGradientEnd:n,gradientFromColor:t,gradientToColor:n,titleHeight:e.controlHeight/2,blockRadius:e.borderRadiusSM,paragraphMarginTop:e.marginLG+e.marginXXS,paragraphLiHeight:e.controlHeight/2}},{deprecatedTokens:[["color","gradientFromColor"],["colorGradientEnd","gradientToColor"]]}),$=e=>{let{prefixCls:i,className:a,style:l,rows:o=0}=e,r=Array.from({length:o}).map((n,i)=>t.createElement("li",{key:i,style:{width:((e,t)=>{let{width:n,rows:i=2}=t;return Array.isArray(n)?n[e]:i-1===e?n:void 0})(i,e)}}));return t.createElement("ul",{className:(0,n.default)(i,a),style:l},r)},v=({prefixCls:e,className:i,width:a,style:l})=>t.createElement("h3",{className:(0,n.default)(e,i),style:Object.assign({width:a},l)});function y(e){return e&&"object"==typeof e?e:{}}let C=e=>{let{prefixCls:a,loading:o,className:r,rootClassName:s,style:c,children:d,avatar:u=!1,title:m=!0,paragraph:g=!0,active:p,round:f}=e,{getPrefixCls:b,direction:C,className:k,style:x}=(0,i.useComponentConfig)("skeleton"),S=b("skeleton",a),[O,w,E]=h(S);if(o||!("loading"in e)){let e,i,a=!!u,o=!!m,d=!!g;if(a){let n=Object.assign(Object.assign({prefixCls:`${S}-avatar`},o&&!d?{size:"large",shape:"square"}:{size:"large",shape:"circle"}),y(u));e=t.createElement("div",{className:`${S}-header`},t.createElement(l,Object.assign({},n)))}if(o||d){let e,n;if(o){let n=Object.assign(Object.assign({prefixCls:`${S}-title`},!a&&d?{width:"38%"}:a&&d?{width:"50%"}:{}),y(m));e=t.createElement(v,Object.assign({},n))}if(d){let e,i=Object.assign(Object.assign({prefixCls:`${S}-paragraph`},(e={},a&&o||(e.width="61%"),!a&&o?e.rows=3:e.rows=2,e)),y(g));n=t.createElement($,Object.assign({},i))}i=t.createElement("div",{className:`${S}-content`},e,n)}let b=(0,n.default)(S,{[`${S}-with-avatar`]:a,[`${S}-active`]:p,[`${S}-rtl`]:"rtl"===C,[`${S}-round`]:f},k,r,s,w,E);return O(t.createElement("div",{className:b,style:Object.assign(Object.assign({},x),c)},e,i))}return null!=d?d:null};C.Button=e=>{let{prefixCls:o,className:r,rootClassName:s,active:c,block:d=!1,size:u="default"}=e,{getPrefixCls:m}=t.useContext(i.ConfigContext),g=m("skeleton",o),[p,f,b]=h(g),$=(0,a.default)(e,["prefixCls"]),v=(0,n.default)(g,`${g}-element`,{[`${g}-active`]:c,[`${g}-block`]:d},r,s,f,b);return p(t.createElement("div",{className:v},t.createElement(l,Object.assign({prefixCls:`${g}-button`,size:u},$))))},C.Avatar=e=>{let{prefixCls:o,className:r,rootClassName:s,active:c,shape:d="circle",size:u="default"}=e,{getPrefixCls:m}=t.useContext(i.ConfigContext),g=m("skeleton",o),[p,f,b]=h(g),$=(0,a.default)(e,["prefixCls","className"]),v=(0,n.default)(g,`${g}-element`,{[`${g}-active`]:c},r,s,f,b);return p(t.createElement("div",{className:v},t.createElement(l,Object.assign({prefixCls:`${g}-avatar`,shape:d,size:u},$))))},C.Input=e=>{let{prefixCls:o,className:r,rootClassName:s,active:c,block:d,size:u="default"}=e,{getPrefixCls:m}=t.useContext(i.ConfigContext),g=m("skeleton",o),[p,f,b]=h(g),$=(0,a.default)(e,["prefixCls"]),v=(0,n.default)(g,`${g}-element`,{[`${g}-active`]:c,[`${g}-block`]:d},r,s,f,b);return p(t.createElement("div",{className:v},t.createElement(l,Object.assign({prefixCls:`${g}-input`,size:u},$))))},C.Image=e=>{let{prefixCls:a,className:l,rootClassName:o,style:r,active:s}=e,{getPrefixCls:c}=t.useContext(i.ConfigContext),d=c("skeleton",a),[u,m,g]=h(d),p=(0,n.default)(d,`${d}-element`,{[`${d}-active`]:s},l,o,m,g);return u(t.createElement("div",{className:p},t.createElement("div",{className:(0,n.default)(`${d}-image`,l),style:r},t.createElement("svg",{viewBox:"0 0 1098 1024",xmlns:"http://www.w3.org/2000/svg",className:`${d}-image-svg`},t.createElement("title",null,"Image placeholder"),t.createElement("path",{d:"M365.714286 329.142857q0 45.714286-32.036571 77.677714t-77.677714 32.036571-77.677714-32.036571-32.036571-77.677714 32.036571-77.677714 77.677714-32.036571 77.677714 32.036571 32.036571 77.677714zM950.857143 548.571429l0 256-804.571429 0 0-109.714286 182.857143-182.857143 91.428571 91.428571 292.571429-292.571429zM1005.714286 146.285714l-914.285714 0q-7.460571 0-12.873143 5.412571t-5.412571 12.873143l0 694.857143q0 7.460571 5.412571 12.873143t12.873143 5.412571l914.285714 0q7.460571 0 12.873143-5.412571t5.412571-12.873143l0-694.857143q0-7.460571-5.412571-12.873143t-12.873143-5.412571zM1097.142857 164.571429l0 694.857143q0 37.741714-26.843429 64.585143t-64.585143 26.843429l-914.285714 0q-37.741714 0-64.585143-26.843429t-26.843429-64.585143l0-694.857143q0-37.741714 26.843429-64.585143t64.585143-26.843429l914.285714 0q37.741714 0 64.585143 26.843429t26.843429 64.585143z",className:`${d}-image-path`})))))},C.Node=e=>{let{prefixCls:a,className:l,rootClassName:o,style:r,active:s,children:c}=e,{getPrefixCls:d}=t.useContext(i.ConfigContext),u=d("skeleton",a),[m,g,p]=h(u),f=(0,n.default)(u,`${u}-element`,{[`${u}-active`]:s},g,l,o,p);return m(t.createElement("div",{className:f},t.createElement("div",{className:(0,n.default)(`${u}-image`,l),style:r},c)))},e.s(["default",0,C],185793)},922611,e=>{"use strict";var t=e.i(271645),n=e.i(175066);function i(){}let a=t.createContext({add:i,remove:i});e.s(["usePanelRef",0,function(e){let i=t.useContext(a),l=t.useRef(null);return(0,n.default)(t=>{if(t){let n=e?t.querySelector(e):t;n&&(i.add(n),l.current=n)}else i.remove(l.current)})}])},91874,e=>{"use strict";var t=e.i(931067),n=e.i(209428),i=e.i(211577),a=e.i(392221),l=e.i(703923),o=e.i(343794),r=e.i(914949),s=e.i(271645),c=["prefixCls","className","style","checked","disabled","defaultChecked","type","title","onChange"],d=(0,s.forwardRef)(function(e,d){var u=e.prefixCls,m=void 0===u?"rc-checkbox":u,g=e.className,p=e.style,f=e.checked,b=e.disabled,h=e.defaultChecked,$=e.type,v=void 0===$?"checkbox":$,y=e.title,C=e.onChange,k=(0,l.default)(e,c),x=(0,s.useRef)(null),S=(0,s.useRef)(null),O=(0,r.default)(void 0!==h&&h,{value:f}),w=(0,a.default)(O,2),E=w[0],j=w[1];(0,s.useImperativeHandle)(d,function(){return{focus:function(e){var t;null==(t=x.current)||t.focus(e)},blur:function(){var e;null==(e=x.current)||e.blur()},input:x.current,nativeElement:S.current}});var N=(0,o.default)(m,g,(0,i.default)((0,i.default)({},"".concat(m,"-checked"),E),"".concat(m,"-disabled"),b));return s.createElement("span",{className:N,title:y,style:p,ref:S},s.createElement("input",(0,t.default)({},k,{className:"".concat(m,"-input"),ref:x,onChange:function(t){b||("checked"in e||j(t.target.checked),null==C||C({target:(0,n.default)((0,n.default)({},e),{},{type:v,checked:t.target.checked}),stopPropagation:function(){t.stopPropagation()},preventDefault:function(){t.preventDefault()},nativeEvent:t.nativeEvent}))},disabled:b,checked:!!E,type:v})),s.createElement("span",{className:"".concat(m,"-inner")}))});e.s(["default",0,d])},681216,e=>{"use strict";var t=e.i(271645),n=e.i(963188);e.s(["default",0,function(e){let i=t.default.useRef(null),a=()=>{n.default.cancel(i.current),i.current=null};return[()=>{a(),i.current=(0,n.default)(()=>{i.current=null})},t=>{i.current&&(t.stopPropagation(),a()),null==e||e(t)}]}])},421512,236836,e=>{"use strict";let t=e.i(271645).default.createContext(null);e.s(["default",0,t],421512),e.i(296059);var n=e.i(915654),i=e.i(183293),a=e.i(246422),l=e.i(838378);function o(e,t){return(e=>{let{checkboxCls:t}=e,a=`${t}-wrapper`;return[{[`${t}-group`]:Object.assign(Object.assign({},(0,i.resetComponent)(e)),{display:"inline-flex",flexWrap:"wrap",columnGap:e.marginXS,[`> ${e.antCls}-row`]:{flex:1}}),[a]:Object.assign(Object.assign({},(0,i.resetComponent)(e)),{display:"inline-flex",alignItems:"baseline",cursor:"pointer","&:after":{display:"inline-block",width:0,overflow:"hidden",content:"'\\a0'"},[`& + ${a}`]:{marginInlineStart:0},[`&${a}-in-form-item`]:{'input[type="checkbox"]':{width:14,height:14}}}),[t]:Object.assign(Object.assign({},(0,i.resetComponent)(e)),{position:"relative",whiteSpace:"nowrap",lineHeight:1,cursor:"pointer",borderRadius:e.borderRadiusSM,alignSelf:"center",[`${t}-input`]:{position:"absolute",inset:0,zIndex:1,cursor:"pointer",opacity:0,margin:0,[`&:focus-visible + ${t}-inner`]:(0,i.genFocusOutline)(e)},[`${t}-inner`]:{boxSizing:"border-box",display:"block",width:e.checkboxSize,height:e.checkboxSize,direction:"ltr",backgroundColor:e.colorBgContainer,border:`${(0,n.unit)(e.lineWidth)} ${e.lineType} ${e.colorBorder}`,borderRadius:e.borderRadiusSM,borderCollapse:"separate",transition:`all ${e.motionDurationSlow}`,"&:after":{boxSizing:"border-box",position:"absolute",top:"50%",insetInlineStart:"25%",display:"table",width:e.calc(e.checkboxSize).div(14).mul(5).equal(),height:e.calc(e.checkboxSize).div(14).mul(8).equal(),border:`${(0,n.unit)(e.lineWidthBold)} solid ${e.colorWhite}`,borderTop:0,borderInlineStart:0,transform:"rotate(45deg) scale(0) translate(-50%,-50%)",opacity:0,content:'""',transition:`all ${e.motionDurationFast} ${e.motionEaseInBack}, opacity ${e.motionDurationFast}`}},"& + span":{paddingInlineStart:e.paddingXS,paddingInlineEnd:e.paddingXS}})},{[` + ${a}:not(${a}-disabled), + ${t}:not(${t}-disabled) + `]:{[`&:hover ${t}-inner`]:{borderColor:e.colorPrimary}},[`${a}:not(${a}-disabled)`]:{[`&:hover ${t}-checked:not(${t}-disabled) ${t}-inner`]:{backgroundColor:e.colorPrimaryHover,borderColor:"transparent"},[`&:hover ${t}-checked:not(${t}-disabled):after`]:{borderColor:e.colorPrimaryHover}}},{[`${t}-checked`]:{[`${t}-inner`]:{backgroundColor:e.colorPrimary,borderColor:e.colorPrimary,"&:after":{opacity:1,transform:"rotate(45deg) scale(1) translate(-50%,-50%)",transition:`all ${e.motionDurationMid} ${e.motionEaseOutBack} ${e.motionDurationFast}`}}},[` + ${a}-checked:not(${a}-disabled), + ${t}-checked:not(${t}-disabled) + `]:{[`&:hover ${t}-inner`]:{backgroundColor:e.colorPrimaryHover,borderColor:"transparent"}}},{[t]:{"&-indeterminate":{"&":{[`${t}-inner`]:{backgroundColor:`${e.colorBgContainer}`,borderColor:`${e.colorBorder}`,"&:after":{top:"50%",insetInlineStart:"50%",width:e.calc(e.fontSizeLG).div(2).equal(),height:e.calc(e.fontSizeLG).div(2).equal(),backgroundColor:e.colorPrimary,border:0,transform:"translate(-50%, -50%) scale(1)",opacity:1,content:'""'}},[`&:hover ${t}-inner`]:{backgroundColor:`${e.colorBgContainer}`,borderColor:`${e.colorPrimary}`}}}}},{[`${a}-disabled`]:{cursor:"not-allowed"},[`${t}-disabled`]:{[`&, ${t}-input`]:{cursor:"not-allowed",pointerEvents:"none"},[`${t}-inner`]:{background:e.colorBgContainerDisabled,borderColor:e.colorBorder,"&:after":{borderColor:e.colorTextDisabled}},"&:after":{display:"none"},"& + span":{color:e.colorTextDisabled},[`&${t}-indeterminate ${t}-inner::after`]:{background:e.colorTextDisabled}}}]})((0,l.mergeToken)(t,{checkboxCls:`.${e}`,checkboxSize:t.controlInteractiveSize}))}let r=(0,a.genStyleHooks)("Checkbox",(e,{prefixCls:t})=>[o(t,e)]);e.s(["default",0,r,"getStyle",0,o],236836)},374276,e=>{"use strict";e.i(247167);var t=e.i(271645),n=e.i(343794),i=e.i(91874),a=e.i(611935),l=e.i(121872),o=e.i(26905),r=e.i(242064),s=e.i(937328),c=e.i(321883),d=e.i(62139),u=e.i(421512),m=e.i(236836),g=e.i(681216),p=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&0>t.indexOf(i)&&(n[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var a=0,i=Object.getOwnPropertySymbols(e);at.indexOf(i[a])&&Object.prototype.propertyIsEnumerable.call(e,i[a])&&(n[i[a]]=e[i[a]]);return n};let f=t.forwardRef((e,f)=>{var b;let{prefixCls:h,className:$,rootClassName:v,children:y,indeterminate:C=!1,style:k,onMouseEnter:x,onMouseLeave:S,skipGroup:O=!1,disabled:w}=e,E=p(e,["prefixCls","className","rootClassName","children","indeterminate","style","onMouseEnter","onMouseLeave","skipGroup","disabled"]),{getPrefixCls:j,direction:N,checkbox:z}=t.useContext(r.ConfigContext),I=t.useContext(u.default),{isFormItemInput:q}=t.useContext(d.FormItemInputContext),D=t.useContext(s.default),T=null!=(b=(null==I?void 0:I.disabled)||w)?b:D,R=t.useRef(E.value),M=t.useRef(null),P=(0,a.composeRef)(f,M);t.useEffect(()=>{null==I||I.registerValue(E.value)},[]),t.useEffect(()=>{if(!O)return E.value!==R.current&&(null==I||I.cancelValue(R.current),null==I||I.registerValue(E.value),R.current=E.value),()=>null==I?void 0:I.cancelValue(E.value)},[E.value]),t.useEffect(()=>{var e;(null==(e=M.current)?void 0:e.input)&&(M.current.input.indeterminate=C)},[C]);let B=j("checkbox",h),H=(0,c.default)(B),[L,A,X]=(0,m.default)(B,H),G=Object.assign({},E);I&&!O&&(G.onChange=(...e)=>{E.onChange&&E.onChange.apply(E,e),I.toggleOption&&I.toggleOption({label:y,value:E.value})},G.name=I.name,G.checked=I.value.includes(E.value));let F=(0,n.default)(`${B}-wrapper`,{[`${B}-rtl`]:"rtl"===N,[`${B}-wrapper-checked`]:G.checked,[`${B}-wrapper-disabled`]:T,[`${B}-wrapper-in-form-item`]:q},null==z?void 0:z.className,$,v,X,H,A),W=(0,n.default)({[`${B}-indeterminate`]:C},o.TARGET_CLS,A),[K,V]=(0,g.default)(G.onClick);return L(t.createElement(l.default,{component:"Checkbox",disabled:T},t.createElement("label",{className:F,style:Object.assign(Object.assign({},null==z?void 0:z.style),k),onMouseEnter:x,onMouseLeave:S,onClick:K},t.createElement(i.default,Object.assign({},G,{onClick:V,prefixCls:B,className:W,disabled:T,ref:P})),null!=y&&t.createElement("span",{className:`${B}-label`},y))))});var b=e.i(8211),h=e.i(529681),$=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&0>t.indexOf(i)&&(n[i]=e[i]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var a=0,i=Object.getOwnPropertySymbols(e);at.indexOf(i[a])&&Object.prototype.propertyIsEnumerable.call(e,i[a])&&(n[i[a]]=e[i[a]]);return n};let v=t.forwardRef((e,i)=>{let{defaultValue:a,children:l,options:o=[],prefixCls:s,className:d,rootClassName:g,style:p,onChange:v}=e,y=$(e,["defaultValue","children","options","prefixCls","className","rootClassName","style","onChange"]),{getPrefixCls:C,direction:k}=t.useContext(r.ConfigContext),[x,S]=t.useState(y.value||a||[]),[O,w]=t.useState([]);t.useEffect(()=>{"value"in y&&S(y.value||[])},[y.value]);let E=t.useMemo(()=>o.map(e=>"string"==typeof e||"number"==typeof e?{label:e,value:e}:e),[o]),j=e=>{w(t=>t.filter(t=>t!==e))},N=e=>{w(t=>[].concat((0,b.default)(t),[e]))},z=e=>{let t=x.indexOf(e.value),n=(0,b.default)(x);-1===t?n.push(e.value):n.splice(t,1),"value"in y||S(n),null==v||v(n.filter(e=>O.includes(e)).sort((e,t)=>E.findIndex(t=>t.value===e)-E.findIndex(e=>e.value===t)))},I=C("checkbox",s),q=`${I}-group`,D=(0,c.default)(I),[T,R,M]=(0,m.default)(I,D),P=(0,h.default)(y,["value","disabled"]),B=o.length?E.map(e=>t.createElement(f,{prefixCls:I,key:e.value.toString(),disabled:"disabled"in e?e.disabled:y.disabled,value:e.value,checked:x.includes(e.value),onChange:e.onChange,className:(0,n.default)(`${q}-item`,e.className),style:e.style,title:e.title,id:e.id,required:e.required},e.label)):l,H=t.useMemo(()=>({toggleOption:z,value:x,disabled:y.disabled,name:y.name,registerValue:N,cancelValue:j}),[z,x,y.disabled,y.name,N,j]),L=(0,n.default)(q,{[`${q}-rtl`]:"rtl"===k},d,g,M,D,R);return T(t.createElement("div",Object.assign({className:L,style:p},P,{ref:i}),t.createElement(u.default.Provider,{value:H},B)))});f.Group=v,f.__ANT_CHECKBOX=!0,e.s(["default",0,f],374276)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0uy6wzxw5oh5v.js b/litellm/proxy/_experimental/out/_next/static/chunks/0uy6wzxw5oh5v.js new file mode 100644 index 00000000000..c4511742c49 --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0uy6wzxw5oh5v.js @@ -0,0 +1 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,400157,e=>{"use strict";var t,r=e.i(843476),s=e.i(271645),l=e.i(752978),o=e.i(994388),a=e.i(309426),i=e.i(599724),n=e.i(350967),c=e.i(653824),d=e.i(881073),m=e.i(197647),x=e.i(723731),u=e.i(404206),h=e.i(278587),p=e.i(602869),v=e.i(871943),g=e.i(360820),j=e.i(94629),f=e.i(152990),b=e.i(682830),y=e.i(269200),_=e.i(942232),S=e.i(977572),w=e.i(427612),N=e.i(64848),I=e.i(496020),C=e.i(592968),T=e.i(902555),k=e.i(916925);let A=({data:e,onView:t,onEdit:l,onDelete:o})=>{let[a,i]=s.default.useState([{id:"created_at",desc:!0}]),n=[{header:"Vector Store ID",accessorKey:"vector_store_id",cell:({row:e})=>{let s=e.original;return(0,r.jsx)("button",{onClick:()=>t(s.vector_store_id),className:"font-mono text-blue-500 bg-blue-50 hover:bg-blue-100 text-xs font-normal px-2 py-0.5 text-left w-full truncate whitespace-nowrap cursor-pointer max-w-[15ch]",children:s.vector_store_id.length>15?`${s.vector_store_id.slice(0,15)}...`:s.vector_store_id})}},{header:"Name",accessorKey:"vector_store_name",cell:({row:e})=>{let t=e.original;return(0,r.jsx)(C.Tooltip,{title:t.vector_store_name,children:(0,r.jsx)("span",{className:"text-xs",children:t.vector_store_name||"-"})})}},{header:"Description",accessorKey:"vector_store_description",cell:({row:e})=>{let t=e.original;return(0,r.jsx)(C.Tooltip,{title:t.vector_store_description,children:(0,r.jsx)("span",{className:"text-xs",children:t.vector_store_description||"-"})})}},{header:"Files",accessorKey:"vector_store_metadata",cell:({row:e})=>{let t=e.original,s=t.vector_store_metadata?.ingested_files||[];if(0===s.length)return(0,r.jsx)("span",{className:"text-xs text-gray-400",children:"-"});let l=s.map(e=>e.filename||e.file_url||"Unknown").join(", "),o=1===s.length?s[0].filename||s[0].file_url||"1 file":`${s.length} files`;return(0,r.jsx)(C.Tooltip,{title:l,children:(0,r.jsx)("span",{className:"text-xs text-blue-600",children:o})})}},{header:"Provider",accessorKey:"custom_llm_provider",cell:({row:e})=>{let t=e.original,{displayName:s,logo:l}=(0,k.getProviderLogoAndName)(t.custom_llm_provider);return(0,r.jsxs)("div",{className:"flex items-center space-x-2",children:[l&&(0,r.jsx)("img",{src:l,alt:s,className:"h-4 w-4"}),(0,r.jsx)("span",{className:"text-xs",children:s})]})}},{header:"Created At",accessorKey:"created_at",sortingFn:"datetime",cell:({row:e})=>{let t=e.original;return(0,r.jsx)("span",{className:"text-xs",children:new Date(t.created_at).toLocaleDateString()})}},{header:"Updated At",accessorKey:"updated_at",sortingFn:"datetime",cell:({row:e})=>{let t=e.original;return(0,r.jsx)("span",{className:"text-xs",children:new Date(t.updated_at).toLocaleDateString()})}},{id:"actions",header:"",cell:({row:e})=>{let t=e.original;return(0,r.jsxs)("div",{className:"flex space-x-2",children:[(0,r.jsx)(T.default,{variant:"Edit",tooltipText:"Edit vector store",onClick:()=>l(t.vector_store_id)}),(0,r.jsx)(T.default,{variant:"Delete",tooltipText:"Delete vector store",onClick:()=>o(t.vector_store_id)})]})}}],c=(0,f.useReactTable)({data:e,columns:n,state:{sorting:a},onSortingChange:i,getCoreRowModel:(0,b.getCoreRowModel)(),getSortedRowModel:(0,b.getSortedRowModel)(),enableSorting:!0});return(0,r.jsx)("div",{className:"rounded-lg custom-border relative",children:(0,r.jsx)("div",{className:"overflow-x-auto",children:(0,r.jsxs)(y.Table,{className:"[&_td]:py-0.5 [&_th]:py-1",children:[(0,r.jsx)(w.TableHead,{children:c.getHeaderGroups().map(e=>(0,r.jsx)(I.TableRow,{children:e.headers.map(e=>(0,r.jsx)(N.TableHeaderCell,{className:`py-1 h-8 ${"actions"===e.id?"sticky right-0 bg-white shadow-[-4px_0_8px_-6px_rgba(0,0,0,0.1)]":""}`,onClick:e.column.getToggleSortingHandler(),children:(0,r.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,r.jsx)("div",{className:"flex items-center",children:e.isPlaceholder?null:(0,f.flexRender)(e.column.columnDef.header,e.getContext())}),"actions"!==e.id&&(0,r.jsx)("div",{className:"w-4",children:e.column.getIsSorted()?({asc:(0,r.jsx)(g.ChevronUpIcon,{className:"h-4 w-4 text-blue-500"}),desc:(0,r.jsx)(v.ChevronDownIcon,{className:"h-4 w-4 text-blue-500"})})[e.column.getIsSorted()]:(0,r.jsx)(j.SwitchVerticalIcon,{className:"h-4 w-4 text-gray-400"})})]})},e.id))},e.id))}),(0,r.jsx)(_.TableBody,{children:c.getRowModel().rows.length>0?c.getRowModel().rows.map(e=>(0,r.jsx)(I.TableRow,{className:"h-8",children:e.getVisibleCells().map(e=>(0,r.jsx)(S.TableCell,{className:`py-0.5 max-h-8 overflow-hidden text-ellipsis whitespace-nowrap ${"actions"===e.column.id?"sticky right-0 bg-white shadow-[-4px_0_8px_-6px_rgba(0,0,0,0.1)]":""}`,children:(0,f.flexRender)(e.column.columnDef.cell,e.getContext())},e.id))},e.id)):(0,r.jsx)(I.TableRow,{children:(0,r.jsx)(S.TableCell,{colSpan:n.length,className:"h-8 text-center",children:(0,r.jsx)("div",{className:"text-center text-gray-500",children:(0,r.jsx)("p",{children:"No vector stores found"})})})})})]})})})};var L=e.i(779241),V=e.i(212931),D=e.i(808613),E=e.i(199133),O=e.i(311451),P=e.i(560445),F=e.i(827252),B=e.i(555987),z=((t={}).Bedrock="Amazon Bedrock",t.S3Vectors="Amazon S3 Vectors",t.PgVector="PostgreSQL pgvector (LiteLLM Connector)",t.VertexRagEngine="Vertex AI RAG Engine",t.VertexAiSearch="Vertex AI Search",t.OpenAI="OpenAI",t.Azure="Azure OpenAI",t.Milvus="Milvus",t);let R={Bedrock:"bedrock",PgVector:"pg_vector",VertexRagEngine:"vertex_ai",VertexAiSearch:"vertex_ai/search_api",OpenAI:"openai",Azure:"azure",Milvus:"milvus",S3Vectors:"s3_vectors"},q="/ui/assets/logos/",M={"Amazon Bedrock":`${q}bedrock.svg`,"PostgreSQL pgvector (LiteLLM Connector)":`${q}postgresql.svg`,"Vertex AI RAG Engine":`${q}google.svg`,"Vertex AI Search":`${q}google.svg`,OpenAI:`${q}openai_small.svg`,"Azure OpenAI":`${q}microsoft_azure.svg`,Milvus:`${q}milvus.svg`,"Amazon S3 Vectors":`${q}s3_vector.png`},$={bedrock:[],pg_vector:[{name:"api_base",label:"API Base",tooltip:"Enter the base URL of your deployed litellm-pgvector server (e.g., http://your-server:8000)",placeholder:"http://your-deployed-server:8000",required:!0,type:"text"},{name:"api_key",label:"API Key",tooltip:"Enter the API key from your deployed litellm-pgvector server",placeholder:"your-deployed-api-key",required:!0,type:"password"}],vertex_rag_engine:[],"vertex_ai/search_api":[{name:"vertex_project",label:"Vertex Project",tooltip:"Google Cloud project ID that hosts the Vertex AI Search data store.",placeholder:"my-gcp-project-id",required:!0,type:"text"},{name:"vertex_location",label:"Vertex Location",tooltip:"Vertex AI Search data store location. Must be one of global, us, or eu.",required:!0,type:"select",options:[{value:"global",label:"global"},{value:"us",label:"us"},{value:"eu",label:"eu"}],initialValue:"global"},{name:"vertex_collection_id",label:"Collection ID (optional)",tooltip:"Discovery Engine collection ID. Leave blank to use the default collection.",placeholder:"e.g. my-custom-collection",required:!1,type:"text"},{name:"vertex_engine_id",label:"Engine ID (optional)",tooltip:"Search app (engine) ID. Required for website, healthcare, and connector-based data stores (Workspace, Slack, Jira, etc.) because these sources route search through an engine. Leave blank to query the data store directly.",placeholder:"e.g. my-search-app_1234567890",required:!1,type:"text"}],openai:[{name:"api_key",label:"API Key",tooltip:"Enter your OpenAI API key",placeholder:"sk-...",required:!0,type:"password"}],azure:[{name:"api_key",label:"API Key",tooltip:"Enter your Azure OpenAI API key",placeholder:"your-azure-api-key",required:!0,type:"password"},{name:"api_base",label:"API Base",tooltip:"Enter your Azure OpenAI endpoint (e.g., https://your-resource.openai.azure.com/)",placeholder:"https://your-resource.openai.azure.com/",required:!0,type:"text"}],milvus:[{name:"api_key",label:"API Key",tooltip:"To obtain a token, you should use a colon (:) to concatenate the username and password that you use to access your Milvus instance (e.g., username:password)",placeholder:"username:password or api key",required:!0,type:"password"},{name:"api_base",label:"API Base",tooltip:"Enter your Milvus endpoint (e.g., https://your-milvus-endpoint.com/)",placeholder:"https://your-milvus-endpoint.com/",required:!0,type:"text"},{name:"embedding_model",label:"Embedding Model",tooltip:"Select the embedding model to use",placeholder:"text-embedding-3-small",required:!0,type:"select"}],s3_vectors:[{name:"vector_bucket_name",label:"Vector Bucket Name",tooltip:"S3 bucket name for vector storage (will be auto-created if it doesn't exist)",placeholder:"my-vector-bucket",required:!0,type:"text"},{name:"index_name",label:"Index Name",tooltip:"Name for the vector index (optional, will be auto-generated if not provided)",placeholder:"my-vector-index",required:!1,type:"text"},{name:"aws_region_name",label:"AWS Region",tooltip:"AWS region where the S3 bucket is located (e.g., us-west-2)",placeholder:"us-west-2",required:!0,type:"text"},{name:"embedding_model",label:"Embedding Model",tooltip:"Select the embedding model to use for vector generation",placeholder:"text-embedding-3-small",required:!0,type:"select"}]},G=e=>$[e]||[];var U=e.i(695411),K=e.i(727749);let J=({isVisible:e,onCancel:t,onSuccess:l,accessToken:a,credentials:i})=>{let[n]=D.Form.useForm(),[c,d]=(0,s.useState)("{}"),[m,x]=(0,s.useState)("bedrock"),[u,h]=(0,s.useState)([]),v=D.Form.useWatch("vertex_engine_id",n);(0,s.useEffect)(()=>{a&&(async()=>{try{let e=await (0,U.fetchAvailableModels)(a);e.length>0&&h(e)}catch(e){console.error("Error fetching model info:",e)}})()},[a]);let g=async e=>{if(a)try{let t={};try{t=c.trim()?JSON.parse(c):{}}catch(e){K.default.fromBackend("Invalid JSON in metadata field");return}let r={vector_store_id:e.vector_store_id,custom_llm_provider:e.custom_llm_provider,vector_store_name:e.vector_store_name,vector_store_description:e.vector_store_description,vector_store_metadata:t,litellm_credential_name:e.litellm_credential_name};r.litellm_params=G(e.custom_llm_provider).reduce((t,r)=>("milvus"===e.custom_llm_provider&&"embedding_model"===r.name?t.litellm_embedding_model=e[r.name]:t[r.name]=e[r.name],t),{}),await (0,p.vectorStoreCreateCall)(a,r),K.default.success("Vector store created successfully"),n.resetFields(),d("{}"),l()}catch(e){console.error("Error creating vector store:",e),K.default.fromBackend("Error creating vector store: "+e)}},j=()=>{n.resetFields(),d("{}"),x("bedrock"),t()};return(0,r.jsx)(V.Modal,{title:"Add New Vector Store",open:e,width:1e3,footer:null,onCancel:j,children:(0,r.jsxs)(D.Form,{form:n,onFinish:g,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,r.jsx)(D.Form.Item,{label:(0,r.jsxs)("span",{children:["Provider"," ",(0,r.jsx)(C.Tooltip,{title:"Select the provider for this vector store",children:(0,r.jsx)(F.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"custom_llm_provider",rules:[{required:!0,message:"Please select a provider"}],initialValue:"bedrock",children:(0,r.jsx)(E.Select,{onChange:e=>x(e),children:Object.entries(z).map(([e,t])=>(0,r.jsx)(E.Select.Option,{value:R[e],children:(0,r.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,r.jsx)("img",{src:(0,B.resolveLogoSrc)(M[t]),alt:`${e} logo`,className:"w-5 h-5",onError:e=>{let r=e.target,s=r.parentElement;if(s){let e=document.createElement("div");e.className="w-5 h-5 rounded-full bg-gray-200 flex items-center justify-center text-xs",e.textContent=t.charAt(0),s.replaceChild(e,r)}}}),(0,r.jsx)("span",{children:t})]})},e))})}),"pg_vector"===m&&(0,r.jsx)(P.Alert,{message:"PG Vector Setup Required",description:(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{children:"LiteLLM provides a server to connect to PG Vector. To use this provider:"}),(0,r.jsxs)("ol",{style:{marginLeft:"16px",marginTop:"8px"},children:[(0,r.jsxs)("li",{children:["Deploy the litellm-pgvector server from:"," ",(0,r.jsx)("a",{href:"https://github.com/BerriAI/litellm-pgvector",target:"_blank",rel:"noopener noreferrer",children:"https://github.com/BerriAI/litellm-pgvector"})]}),(0,r.jsx)("li",{children:"Configure your PostgreSQL database with pgvector extension"}),(0,r.jsx)("li",{children:"Start the server and note the API base URL and API key"}),(0,r.jsx)("li",{children:"Enter those details in the fields below"})]})]}),type:"info",showIcon:!0,style:{marginBottom:"16px"}}),"vertex_rag_engine"===m&&(0,r.jsx)(P.Alert,{message:"Vertex AI RAG Engine Setup",description:(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{children:"To use Vertex AI RAG Engine:"}),(0,r.jsxs)("ol",{style:{marginLeft:"16px",marginTop:"8px"},children:[(0,r.jsxs)("li",{children:["Set up your Vertex AI RAG Engine corpus following the guide:"," ",(0,r.jsx)("a",{href:"https://cloud.google.com/vertex-ai/generative-ai/docs/rag-engine/rag-overview",target:"_blank",rel:"noopener noreferrer",children:"Vertex AI RAG Engine Overview"})]}),(0,r.jsx)("li",{children:"Create a corpus in your Google Cloud project"}),(0,r.jsx)("li",{children:"Note the corpus ID from the Vertex AI console"}),(0,r.jsx)("li",{children:"Enter the corpus ID in the Vector Store ID field below"})]})]}),type:"info",showIcon:!0,style:{marginBottom:"16px"}}),"vertex_ai/search_api"===m&&(0,r.jsx)(P.Alert,{message:"Vertex AI Search Setup",description:(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{children:"To use Vertex AI Search (Discovery Engine):"}),(0,r.jsxs)("ol",{style:{marginLeft:"16px",marginTop:"8px"},children:[(0,r.jsxs)("li",{children:["Enable the Discovery Engine API on your Google Cloud project and create a data store following the guide:"," ",(0,r.jsx)("a",{href:"https://cloud.google.com/generative-ai-app-builder/docs/create-data-store-es",target:"_blank",rel:"noopener noreferrer",style:{textDecoration:"underline"},children:"Create a Vertex AI Search data store"})]}),(0,r.jsx)("li",{children:"Pick a supported location: global, us, or eu"}),(0,r.jsx)("li",{children:"For most data store types (Cloud Storage, BigQuery, Media): copy the data store ID and enter it in the Vector Store ID field below."}),(0,r.jsxs)("li",{children:["For website, healthcare, and connector-based sources (Drive, Gmail, Slack, Jira, etc.): create a search app on top of the data store, then copy the ",(0,r.jsx)("strong",{children:"Engine ID"})," and enter it in the Engine ID field. The Vector Store ID is still required as the LiteLLM-side name for this record, but it isn't used in the GCP URL when Engine ID is set."]})]})]}),type:"info",showIcon:!0,style:{marginBottom:"16px"}}),(0,r.jsx)(D.Form.Item,{label:(0,r.jsxs)("span",{children:["Vector Store ID"," ",(0,r.jsx)(C.Tooltip,{title:"Enter the vector store ID from your api provider",children:(0,r.jsx)(F.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"vector_store_id",rules:[{required:!0,message:"Please input the vector store ID from your api provider"}],children:(0,r.jsx)(L.TextInput,{placeholder:"vertex_rag_engine"===m?"6917529027641081856 (Get corpus ID from Vertex AI console)":"vertex_ai/search_api"===m?v?"Any identifier you'll use to reference this in LiteLLM":"my-datastore_1234567890 (Get data store ID from Vertex AI Search console)":"Enter vector store ID from your provider"})}),G(m).map(e=>{if("select"===e.type){let t=e.options??u.filter(e=>"embedding"===e.mode||null===e.mode).map(e=>({value:e.model_group,label:e.model_group}));return(0,r.jsx)(D.Form.Item,{label:(0,r.jsxs)("span",{children:[e.label," ",(0,r.jsx)(C.Tooltip,{title:e.tooltip,children:(0,r.jsx)(F.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:e.name,initialValue:e.initialValue,rules:e.required?[{required:!0,message:`Please select the ${e.label.toLowerCase()}`}]:[],children:(0,r.jsx)(E.Select,{placeholder:e.placeholder,showSearch:!0,filterOption:(e,t)=>(t?.label??"").toLowerCase().includes(e.toLowerCase()),options:t,style:{width:"100%"}})},e.name)}return(0,r.jsx)(D.Form.Item,{label:(0,r.jsxs)("span",{children:[e.label," ",(0,r.jsx)(C.Tooltip,{title:e.tooltip,children:(0,r.jsx)(F.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:e.name,rules:e.required?[{required:!0,message:`Please input the ${e.label.toLowerCase()}`}]:[],children:(0,r.jsx)(L.TextInput,{type:e.type||"text",placeholder:e.placeholder})},e.name)}),(0,r.jsx)(D.Form.Item,{label:(0,r.jsxs)("span",{children:["Vector Store Name"," ",(0,r.jsx)(C.Tooltip,{title:"Custom name you want to give to the vector store, this name will be rendered on the LiteLLM UI",children:(0,r.jsx)(F.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"vector_store_name",children:(0,r.jsx)(L.TextInput,{})}),(0,r.jsx)(D.Form.Item,{label:"Description",name:"vector_store_description",children:(0,r.jsx)(O.Input.TextArea,{rows:4})}),(0,r.jsx)(D.Form.Item,{label:(0,r.jsxs)("span",{children:["Existing Credentials"," ",(0,r.jsx)(C.Tooltip,{title:"Optionally select API provider credentials for this vector store eg. Bedrock API KEY",children:(0,r.jsx)(F.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"litellm_credential_name",children:(0,r.jsx)(E.Select,{showSearch:!0,placeholder:"Select or search for existing credentials",optionFilterProp:"children",filterOption:(e,t)=>(t?.label??"").toLowerCase().includes(e.toLowerCase()),options:[{value:null,label:"None"},...i.map(e=>({value:e.credential_name,label:e.credential_name}))],allowClear:!0})}),(0,r.jsx)(D.Form.Item,{label:(0,r.jsxs)("span",{children:["Metadata"," ",(0,r.jsx)(C.Tooltip,{title:"JSON metadata for the vector store (optional)",children:(0,r.jsx)(F.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),children:(0,r.jsx)(O.Input.TextArea,{rows:4,value:c,onChange:e=>d(e.target.value),placeholder:'{"key": "value"}'})}),(0,r.jsxs)("div",{className:"flex justify-end space-x-3",children:[(0,r.jsx)(o.Button,{onClick:j,variant:"secondary",children:"Cancel"}),(0,r.jsx)(o.Button,{variant:"primary",type:"submit",children:"Create"})]})]})})};var W=e.i(127952),H=e.i(304967),X=e.i(629569),Q=e.i(389083),Y=e.i(464571),Z=e.i(530212),ee=e.i(175712),et=e.i(898586),er=e.i(482725),es=e.i(312361),el=e.i(888259),eo=e.i(84899),ea=e.i(210612),ei=e.i(56456),en=e.i(755151),ec=e.i(240647);let{TextArea:ed}=O.Input,{Text:em,Title:ex}=et.Typography,eu=({vectorStoreId:e,accessToken:t,className:l=""})=>{let[o,a]=(0,s.useState)(""),[i,n]=(0,s.useState)(!1),[c,d]=(0,s.useState)([]),[m,x]=(0,s.useState)({}),u=async()=>{if(!o.trim())return void el.default.warning("Please enter a search query");n(!0);try{let r=await (0,p.vectorStoreSearchCall)(t,e,o),s={query:o,response:r,timestamp:Date.now()};d(e=>[s,...e]),a("")}catch(e){console.error("Error searching vector store:",e),K.default.fromBackend("Failed to search vector store")}finally{n(!1)}};return(0,r.jsx)(ee.Card,{className:"w-full rounded-xl shadow-md",children:(0,r.jsxs)("div",{className:"flex flex-col h-[600px]",children:[(0,r.jsxs)("div",{className:"p-4 border-b border-gray-200 flex justify-between items-center",children:[(0,r.jsxs)("div",{className:"flex items-center",children:[(0,r.jsx)(ea.DatabaseOutlined,{className:"mr-2 text-blue-500"}),(0,r.jsx)(ex,{level:4,className:"mb-0",children:"Test Vector Store"})]}),c.length>0&&(0,r.jsx)(Y.Button,{onClick:()=>{d([]),x({}),K.default.success("Search history cleared")},size:"small",children:"Clear History"})]}),(0,r.jsxs)("div",{className:"flex-1 overflow-auto p-4 pb-0",children:[0===c.length?(0,r.jsxs)("div",{className:"h-full flex flex-col items-center justify-center text-gray-400",children:[(0,r.jsx)(ea.DatabaseOutlined,{style:{fontSize:"48px",marginBottom:"16px"}}),(0,r.jsx)(em,{children:"Test your vector store by entering a search query below"})]}):(0,r.jsx)("div",{className:"space-y-4",children:c.map((e,t)=>(0,r.jsxs)("div",{className:"space-y-2",children:[(0,r.jsx)("div",{className:"text-right",children:(0,r.jsxs)("div",{className:"inline-block max-w-[80%] rounded-lg shadow-sm p-3 bg-blue-50 border border-blue-200",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 mb-1",children:[(0,r.jsx)("strong",{className:"text-sm",children:"Query"}),(0,r.jsx)("span",{className:"text-xs text-gray-500",children:new Date(e.timestamp).toLocaleString()})]}),(0,r.jsx)("div",{className:"text-left",children:e.query})]})}),(0,r.jsx)("div",{className:"text-left",children:(0,r.jsxs)("div",{className:"inline-block max-w-[80%] rounded-lg shadow-sm p-3 bg-white border border-gray-200",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 mb-2",children:[(0,r.jsx)(ea.DatabaseOutlined,{className:"text-green-500"}),(0,r.jsx)("strong",{className:"text-sm",children:"Vector Store Results"}),e.response&&(0,r.jsxs)("span",{className:"text-xs px-2 py-0.5 rounded bg-gray-100 text-gray-600",children:[e.response.data?.length||0," results"]})]}),e.response&&e.response.data&&e.response.data.length>0?(0,r.jsx)("div",{className:"space-y-3",children:e.response.data.map((e,s)=>{let l=m[`${t}-${s}`]||!1;return(0,r.jsxs)("div",{className:"border rounded-lg overflow-hidden bg-gray-50",children:[(0,r.jsxs)("div",{className:"flex justify-between items-center p-3 cursor-pointer hover:bg-gray-100 transition-colors",onClick:()=>{let e;return e=`${t}-${s}`,void x(t=>({...t,[e]:!t[e]}))},children:[(0,r.jsxs)("div",{className:"flex items-center",children:[l?(0,r.jsx)(en.DownOutlined,{className:"text-gray-500 mr-2"}):(0,r.jsx)(ec.RightOutlined,{className:"text-gray-500 mr-2"}),(0,r.jsxs)("span",{className:"font-medium text-sm",children:["Result ",s+1]}),!l&&e.content&&e.content[0]&&(0,r.jsxs)("span",{className:"ml-2 text-xs text-gray-500 truncate max-w-md",children:["- ",e.content[0].text.substring(0,100),"..."]})]}),(0,r.jsxs)("span",{className:"text-xs bg-blue-100 text-blue-800 px-2 py-1 rounded",children:["Score: ",e.score.toFixed(4)]})]}),l&&(0,r.jsxs)("div",{className:"border-t bg-white p-3",children:[e.content&&e.content.map((e,t)=>(0,r.jsxs)("div",{className:"mb-3",children:[(0,r.jsxs)("div",{className:"text-xs text-gray-500 mb-1",children:["Content (",e.type,")"]}),(0,r.jsx)("div",{className:"text-sm bg-gray-50 p-3 rounded border text-gray-800 max-h-40 overflow-y-auto",children:e.text})]},t)),(e.file_id||e.filename||e.attributes)&&(0,r.jsxs)("div",{className:"mt-3 pt-3 border-t border-gray-200",children:[(0,r.jsx)("div",{className:"text-xs text-gray-500 mb-2 font-medium",children:"Metadata"}),(0,r.jsxs)("div",{className:"space-y-2 text-xs",children:[e.file_id&&(0,r.jsxs)("div",{className:"bg-gray-50 p-2 rounded",children:[(0,r.jsx)("span",{className:"font-medium",children:"File ID:"})," ",e.file_id]}),e.filename&&(0,r.jsxs)("div",{className:"bg-gray-50 p-2 rounded",children:[(0,r.jsx)("span",{className:"font-medium",children:"Filename:"})," ",e.filename]}),e.attributes&&Object.keys(e.attributes).length>0&&(0,r.jsxs)("div",{className:"bg-gray-50 p-2 rounded",children:[(0,r.jsx)("span",{className:"font-medium block mb-1",children:"Attributes:"}),(0,r.jsx)("pre",{className:"text-xs bg-white p-2 rounded border overflow-x-auto",children:JSON.stringify(e.attributes,null,2)})]})]})]})]})]},s)})}):(0,r.jsx)("div",{className:"text-gray-500 text-sm",children:"No results found"})]})}),ta(e.target.value),onKeyDown:e=>{"Enter"!==e.key||e.shiftKey||(e.preventDefault(),u())},placeholder:"Enter your search query... (Shift+Enter for new line)",disabled:i,autoSize:{minRows:1,maxRows:4},style:{resize:"none"}})}),(0,r.jsx)(Y.Button,{type:"primary",onClick:u,disabled:i||!o.trim(),icon:(0,r.jsx)(eo.SendOutlined,{}),loading:i,children:"Search"})]})})]})})},eh=({vectorStoreId:e,onClose:t,accessToken:l,is_admin:a,editVectorStore:n})=>{let[h]=D.Form.useForm(),[v,g]=(0,s.useState)(null),[j,f]=(0,s.useState)(n),[b,y]=(0,s.useState)("{}"),[_,S]=(0,s.useState)([]),[w,N]=(0,s.useState)("details"),I=async()=>{if(l)try{let t=await (0,p.vectorStoreInfoCall)(l,e);if(t&&t.vector_store){if(g(t.vector_store),t.vector_store.vector_store_metadata){let e="string"==typeof t.vector_store.vector_store_metadata?JSON.parse(t.vector_store.vector_store_metadata):t.vector_store.vector_store_metadata;y(JSON.stringify(e,null,2))}n&&h.setFieldsValue({vector_store_id:t.vector_store.vector_store_id,custom_llm_provider:t.vector_store.custom_llm_provider,vector_store_name:t.vector_store.vector_store_name,vector_store_description:t.vector_store.vector_store_description})}}catch(e){console.error("Error fetching vector store details:",e),K.default.fromBackend("Error fetching vector store details: "+e)}},T=async()=>{if(l)try{let e=await (0,p.credentialListCall)(l);console.log("List credentials response:",e),S(e.credentials||[])}catch(e){console.error("Error fetching credentials:",e)}};(0,s.useEffect)(()=>{I(),T()},[e,l]);let A=async e=>{if(l)try{let t={};try{t=b?JSON.parse(b):{}}catch(e){K.default.fromBackend("Invalid JSON in metadata field");return}let r={vector_store_id:e.vector_store_id,custom_llm_provider:e.custom_llm_provider,vector_store_name:e.vector_store_name,vector_store_description:e.vector_store_description,vector_store_metadata:t};await (0,p.vectorStoreUpdateCall)(l,r),K.default.success("Vector store updated successfully"),f(!1),I()}catch(e){console.error("Error updating vector store:",e),K.default.fromBackend("Error updating vector store: "+e)}};return v?(0,r.jsxs)("div",{className:"p-4 max-w-full",children:[(0,r.jsxs)("div",{className:"flex justify-between items-center mb-6",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)(o.Button,{icon:Z.ArrowLeftIcon,variant:"light",className:"mb-4",onClick:t,children:"Back to Vector Stores"}),(0,r.jsxs)(X.Title,{children:["Vector Store ID: ",v.vector_store_id]}),(0,r.jsx)(i.Text,{className:"text-gray-500",children:v.vector_store_description||"No description"})]}),a&&!j&&(0,r.jsx)(o.Button,{onClick:()=>f(!0),children:"Edit Vector Store"})]}),(0,r.jsxs)(c.TabGroup,{children:[(0,r.jsxs)(d.TabList,{className:"mb-6",children:[(0,r.jsx)(m.Tab,{children:"Details"}),(0,r.jsx)(m.Tab,{children:"Test Vector Store"})]}),(0,r.jsxs)(x.TabPanels,{children:[(0,r.jsx)(u.TabPanel,{children:j?(0,r.jsxs)("div",{children:[(0,r.jsx)("div",{className:"flex justify-between items-center mb-4",children:(0,r.jsx)(X.Title,{children:"Edit Vector Store"})}),(0,r.jsx)(H.Card,{children:(0,r.jsxs)(D.Form,{form:h,onFinish:A,layout:"vertical",initialValues:v,children:[(0,r.jsx)(D.Form.Item,{label:"Vector Store ID",name:"vector_store_id",rules:[{required:!0,message:"Please input a vector store ID"}],children:(0,r.jsx)(O.Input,{disabled:!0})}),(0,r.jsx)(D.Form.Item,{label:"Vector Store Name",name:"vector_store_name",children:(0,r.jsx)(O.Input,{})}),(0,r.jsx)(D.Form.Item,{label:"Description",name:"vector_store_description",children:(0,r.jsx)(O.Input.TextArea,{rows:4})}),(0,r.jsx)(D.Form.Item,{label:(0,r.jsxs)("span",{children:["Provider"," ",(0,r.jsx)(C.Tooltip,{title:"Select the provider for this vector store",children:(0,r.jsx)(F.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"custom_llm_provider",rules:[{required:!0,message:"Please select a provider"}],children:(0,r.jsx)(E.Select,{children:Object.entries(k.Providers).map(([e,t])=>"Bedrock"===e?(0,r.jsx)(E.Select.Option,{value:k.provider_map[e],children:(0,r.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,r.jsx)("img",{src:(0,B.resolveLogoSrc)(k.providerLogoMap[t]),alt:`${e} logo`,className:"w-5 h-5",onError:e=>{let r=e.target,s=r.parentElement;if(s){let e=document.createElement("div");e.className="w-5 h-5 rounded-full bg-gray-200 flex items-center justify-center text-xs",e.textContent=t.charAt(0),s.replaceChild(e,r)}}}),(0,r.jsx)("span",{children:t})]})},e):null)})}),(0,r.jsx)("div",{className:"mb-4",children:(0,r.jsx)(i.Text,{className:"text-sm text-gray-500 mb-2",children:"Either select existing credentials OR enter provider credentials below"})}),(0,r.jsx)(D.Form.Item,{label:"Existing Credentials",name:"litellm_credential_name",children:(0,r.jsx)(E.Select,{showSearch:!0,placeholder:"Select or search for existing credentials",optionFilterProp:"children",filterOption:(e,t)=>(t?.label??"").toLowerCase().includes(e.toLowerCase()),options:[{value:null,label:"None"},..._.map(e=>({value:e.credential_name,label:e.credential_name}))],allowClear:!0})}),(0,r.jsxs)("div",{className:"flex items-center my-4",children:[(0,r.jsx)("div",{className:"flex-grow border-t border-gray-200"}),(0,r.jsx)("span",{className:"px-4 text-gray-500 text-sm",children:"OR"}),(0,r.jsx)("div",{className:"flex-grow border-t border-gray-200"})]}),(0,r.jsx)(D.Form.Item,{label:(0,r.jsxs)("span",{children:["Metadata"," ",(0,r.jsx)(C.Tooltip,{title:"JSON metadata for the vector store",children:(0,r.jsx)(F.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),children:(0,r.jsx)(O.Input.TextArea,{rows:4,value:b,onChange:e=>y(e.target.value),placeholder:'{"key": "value"}'})}),(0,r.jsxs)("div",{className:"flex justify-end space-x-2",children:[(0,r.jsx)(Y.Button,{onClick:()=>f(!1),children:"Cancel"}),(0,r.jsx)(Y.Button,{type:"primary",htmlType:"submit",children:"Save Changes"})]})]})})]}):(0,r.jsxs)("div",{children:[(0,r.jsxs)("div",{className:"flex justify-between items-center mb-4",children:[(0,r.jsx)(X.Title,{children:"Vector Store Details"}),a&&(0,r.jsx)(o.Button,{onClick:()=>f(!0),children:"Edit Vector Store"})]}),(0,r.jsx)(H.Card,{children:(0,r.jsxs)("div",{className:"space-y-4",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)(i.Text,{className:"font-medium",children:"ID"}),(0,r.jsx)(i.Text,{children:v.vector_store_id})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)(i.Text,{className:"font-medium",children:"Name"}),(0,r.jsx)(i.Text,{children:v.vector_store_name||"-"})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)(i.Text,{className:"font-medium",children:"Description"}),(0,r.jsx)(i.Text,{children:v.vector_store_description||"-"})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)(i.Text,{className:"font-medium",children:"Provider"}),(0,r.jsx)("div",{className:"flex items-center space-x-2 mt-1",children:(()=>{let e=v.custom_llm_provider||"bedrock",{displayName:t,logo:s}=(()=>{let t=Object.keys(k.provider_map).find(t=>k.provider_map[t].toLowerCase()===e.toLowerCase());if(!t)return{displayName:e,logo:""};let r=k.Providers[t],s=(0,B.resolveLogoSrc)(k.providerLogoMap[r])??"";return{displayName:r,logo:s}})();return(0,r.jsxs)(r.Fragment,{children:[s&&(0,r.jsx)("img",{src:s,alt:`${t} logo`,className:"w-5 h-5",onError:e=>{let r=e.target,s=r.parentElement;if(s){let e=document.createElement("div");e.className="w-5 h-5 rounded-full bg-gray-200 flex items-center justify-center text-xs",e.textContent=t.charAt(0),s.replaceChild(e,r)}}}),(0,r.jsx)(Q.Badge,{color:"blue",children:t})]})})()})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)(i.Text,{className:"font-medium",children:"Metadata"}),(0,r.jsx)("div",{className:"bg-gray-50 p-3 rounded mt-2 font-mono text-xs overflow-auto max-h-48",children:(0,r.jsx)("pre",{children:b})})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)(i.Text,{className:"font-medium",children:"Created"}),(0,r.jsx)(i.Text,{children:v.created_at?new Date(v.created_at).toLocaleString():"-"})]}),(0,r.jsxs)("div",{children:[(0,r.jsx)(i.Text,{className:"font-medium",children:"Last Updated"}),(0,r.jsx)(i.Text,{children:v.updated_at?new Date(v.updated_at).toLocaleString():"-"})]})]})})]})}),(0,r.jsx)(u.TabPanel,{children:(0,r.jsx)(eu,{vectorStoreId:v.vector_store_id,accessToken:l||""})})]})]})]}):(0,r.jsx)("div",{children:"Loading..."})};var ep=e.i(515831);e.i(247167);var ev=e.i(931067);let eg={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M885.2 446.3l-.2-.8-112.2-285.1c-5-16.1-19.9-27.2-36.8-27.2H281.2c-17 0-32.1 11.3-36.9 27.6L139.4 443l-.3.7-.2.8c-1.3 4.9-1.7 9.9-1 14.8-.1 1.6-.2 3.2-.2 4.8V830a60.9 60.9 0 0060.8 60.8h627.2c33.5 0 60.8-27.3 60.9-60.8V464.1c0-1.3 0-2.6-.1-3.7.4-4.9 0-9.6-1.3-14.1zm-295.8-43l-.3 15.7c-.8 44.9-31.8 75.1-77.1 75.1-22.1 0-41.1-7.1-54.8-20.6S436 441.2 435.6 419l-.3-15.7H229.5L309 210h399.2l81.7 193.3H589.4zm-375 76.8h157.3c24.3 57.1 76 90.8 140.4 90.8 33.7 0 65-9.4 90.3-27.2 22.2-15.6 39.5-37.4 50.7-63.6h156.5V814H214.4V480.1z"}}]},name:"inbox",theme:"outlined"};var ej=e.i(9583),ef=s.forwardRef(function(e,t){return s.createElement(ej.default,(0,ev.default)({},e,{ref:t,icon:eg}))}),eb=e.i(291542),ey=e.i(906579),e_=e.i(123521),eS=e.i(166406),ew=e.i(955135);let eN=({documents:e,onRemove:t})=>{let s=[{title:"Name",dataIndex:"name",key:"name",render:(e,t)=>(0,r.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,r.jsx)("span",{className:"text-sm",children:e}),t.size&&(0,r.jsxs)("span",{className:"text-xs text-gray-400",children:["(",(e=>{if(!e)return"-";let t=e/1024;return t<1024?`${t.toFixed(2)} KB`:`${(t/1024).toFixed(2)} MB`})(t.size),")"]})]})},{title:"Status",dataIndex:"status",key:"status",width:150,render:e=>{let t;return t=({uploading:{color:"blue",text:"Uploading"},done:{color:"green",text:"Ready"},error:{color:"red",text:"Error"},removed:{color:"default",text:"Removed"}})[e],(0,r.jsx)(ey.Badge,{color:t.color,text:t.text})}},{title:"Actions",key:"actions",width:120,render:(e,s)=>(0,r.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,r.jsx)(C.Tooltip,{title:"View details",children:(0,r.jsx)(e_.EyeOutlined,{className:"cursor-pointer text-gray-600 hover:text-blue-500",onClick:()=>console.log("View",s)})}),(0,r.jsx)(C.Tooltip,{title:"Copy ID",children:(0,r.jsx)(eS.CopyOutlined,{className:"cursor-pointer text-gray-600 hover:text-blue-500",onClick:()=>{var e;return e=s.uid,void(navigator.clipboard.writeText(e),el.default.success("Document ID copied to clipboard"))}})}),(0,r.jsx)(C.Tooltip,{title:"Remove",children:(0,r.jsx)(ew.DeleteOutlined,{className:"cursor-pointer text-gray-600 hover:text-red-500",onClick:()=>t(s.uid)})})]})}];return(0,r.jsx)(eb.Table,{dataSource:e,columns:s,rowKey:"uid",pagination:!1,locale:{emptyText:"No documents uploaded yet. Upload documents above to get started."},size:"small"})},eI=({accessToken:e,providerParams:t,onParamsChange:l})=>{let[o,a]=(0,s.useState)([]),[i,n]=(0,s.useState)(!1);(0,s.useEffect)(()=>{e&&(async()=>{n(!0);try{let t=(await (0,U.fetchAvailableModels)(e)).filter(e=>"embedding"===e.mode);a(t)}catch(e){console.error("Error fetching embedding models:",e)}finally{n(!1)}})()},[e]);let c=(e,r)=>{l({...t,[e]:r})};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(P.Alert,{message:"AWS S3 Vectors Setup",description:(0,r.jsxs)("div",{children:[(0,r.jsx)("p",{children:"AWS S3 Vectors allows you to store and query vector embeddings directly in S3:"}),(0,r.jsxs)("ul",{style:{marginLeft:"16px",marginTop:"8px"},children:[(0,r.jsx)("li",{children:"Vector buckets and indexes will be automatically created if they don't exist"}),(0,r.jsx)("li",{children:"Vector dimensions are auto-detected from your selected embedding model"}),(0,r.jsx)("li",{children:"Ensure your AWS credentials have permissions for S3 Vectors operations"}),(0,r.jsxs)("li",{children:["Learn more:"," ",(0,r.jsx)("a",{href:"https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-vector-buckets.html",target:"_blank",rel:"noopener noreferrer",children:"AWS S3 Vectors Documentation"})]})]})]}),type:"info",showIcon:!0,style:{marginBottom:"16px"}}),(0,r.jsx)(D.Form.Item,{label:(0,r.jsxs)("span",{children:["Vector Bucket Name"," ",(0,r.jsx)(C.Tooltip,{title:"S3 bucket name for vector storage (must be at least 3 characters, lowercase letters, numbers, hyphens, and periods only)",children:(0,r.jsx)(F.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),required:!0,validateStatus:t.vector_bucket_name&&t.vector_bucket_name.length<3?"error":void 0,help:t.vector_bucket_name&&t.vector_bucket_name.length<3?"Bucket name must be at least 3 characters":void 0,children:(0,r.jsx)(O.Input,{value:t.vector_bucket_name||"",onChange:e=>c("vector_bucket_name",e.target.value),placeholder:"my-vector-bucket (min 3 chars)",size:"large",className:"rounded-md"})}),(0,r.jsx)(D.Form.Item,{label:(0,r.jsxs)("span",{children:["Index Name"," ",(0,r.jsx)(C.Tooltip,{title:"Name for the vector index (optional, will be auto-generated if not provided). If provided, must be at least 3 characters.",children:(0,r.jsx)(F.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),validateStatus:t.index_name&&t.index_name.length>0&&t.index_name.length<3?"error":void 0,help:t.index_name&&t.index_name.length>0&&t.index_name.length<3?"Index name must be at least 3 characters if provided":void 0,children:(0,r.jsx)(O.Input,{value:t.index_name||"",onChange:e=>c("index_name",e.target.value),placeholder:"my-vector-index (optional, min 3 chars)",size:"large",className:"rounded-md"})}),(0,r.jsx)(D.Form.Item,{label:(0,r.jsxs)("span",{children:["AWS Region"," ",(0,r.jsx)(C.Tooltip,{title:"AWS region where the S3 bucket is located (e.g., us-west-2)",children:(0,r.jsx)(F.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),required:!0,children:(0,r.jsx)(O.Input,{value:t.aws_region_name||"",onChange:e=>c("aws_region_name",e.target.value),placeholder:"us-west-2",size:"large",className:"rounded-md"})}),(0,r.jsx)(D.Form.Item,{label:(0,r.jsxs)("span",{children:["Embedding Model"," ",(0,r.jsx)(C.Tooltip,{title:"Select the embedding model to use for vector generation",children:(0,r.jsx)(F.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),required:!0,children:(0,r.jsx)(E.Select,{value:t.embedding_model||void 0,onChange:e=>c("embedding_model",e),placeholder:"Select an embedding model",size:"large",showSearch:!0,loading:i,filterOption:(e,t)=>(t?.label??"").toLowerCase().includes(e.toLowerCase()),options:o.map(e=>({value:e.model_group,label:e.model_group})),style:{width:"100%"}})})]})},{Dragger:eC}=ep.Upload,eT=({accessToken:e,onSuccess:t})=>{let[l]=D.Form.useForm(),[o,a]=(0,s.useState)([]),[n,c]=(0,s.useState)(!1),[d,m]=(0,s.useState)("bedrock"),[x,u]=(0,s.useState)(""),[h,v]=(0,s.useState)(""),[g,j]=(0,s.useState)([]),[f,b]=(0,s.useState)({}),y={name:"file",multiple:!0,accept:".pdf,.txt,.docx,.md,.doc",beforeUpload:e=>{if(!["application/pdf","text/plain","application/vnd.openxmlformats-officedocument.wordprocessingml.document","application/msword","text/markdown"].includes(e.type))return el.default.error(`${e.name} is not a supported file type. Please upload PDF, TXT, DOCX, or MD files.`),ep.Upload.LIST_IGNORE;if(!(e.size/1024/1024<50))return el.default.error(`${e.name} must be smaller than 50MB!`),ep.Upload.LIST_IGNORE;let t={uid:e.uid,name:e.name,status:"done",size:e.size,type:e.type,originFileObj:e};return a(e=>[...e,t]),!1},onRemove:e=>{a(t=>t.filter(t=>t.uid!==e.uid))},fileList:o.map(e=>({uid:e.uid,name:e.name,status:e.status,size:e.size})),showUploadList:!1},_=async()=>{let r;if(0===o.length)return void el.default.warning("Please upload at least one document");if(!d)return void el.default.warning("Please select a provider");for(let e of G(d).filter(e=>e.required))if(!f[e.name])return void el.default.warning(`Please provide ${e.label}`);if("s3_vectors"===d){if(f.vector_bucket_name&&f.vector_bucket_name.length<3)return void el.default.warning("Vector bucket name must be at least 3 characters");if(f.index_name&&f.index_name.length>0&&f.index_name.length<3)return void el.default.warning("Index name must be at least 3 characters if provided")}if(!e)return void el.default.error("No access token available");c(!0);let s=[];try{for(let t of o)if(t.originFileObj){a(e=>e.map(e=>e.uid===t.uid?{...e,status:"uploading"}:e));try{let l=await (0,p.ragIngestCall)(e,t.originFileObj,d,r,x||void 0,h||void 0,f);!r&&l.vector_store_id&&(r=l.vector_store_id),s.push(l),a(e=>e.map(e=>e.uid===t.uid?{...e,status:"done"}:e))}catch(e){throw console.error(`Error ingesting ${t.name}:`,e),a(e=>e.map(e=>e.uid===t.uid?{...e,status:"error"}:e)),e}}j(s),K.default.success(`Successfully created vector store with ${s.length} document(s). Vector Store ID: ${r}`),t&&r&&t(r),setTimeout(()=>{a([]),j([])},3e3)}catch(e){console.error("Error creating vector store:",e),K.default.fromBackend(`Failed to create vector store: ${e}`)}finally{c(!1)}};return(0,r.jsxs)("div",{className:"space-y-6",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)(X.Title,{children:"Create Vector Store"}),(0,r.jsx)(i.Text,{className:"text-gray-500",children:"Upload documents and select a provider to create a new vector store with embedded content."})]}),(0,r.jsxs)(H.Card,{children:[(0,r.jsxs)("div",{className:"mb-4",children:[(0,r.jsx)(i.Text,{className:"font-medium",children:"Step 1: Upload Documents"}),(0,r.jsx)(i.Text,{className:"text-sm text-gray-500 block mt-1",children:"Upload one or more documents (PDF, TXT, DOCX, MD). Maximum file size: 50MB per file."})]}),(0,r.jsxs)(eC,{...y,children:[(0,r.jsx)("p",{className:"ant-upload-drag-icon",children:(0,r.jsx)(ef,{style:{fontSize:"48px",color:"#1890ff"}})}),(0,r.jsx)("p",{className:"ant-upload-text",children:"Click or drag files to this area to upload"}),(0,r.jsx)("p",{className:"ant-upload-hint",children:"Support for single or bulk upload. Supported formats: PDF, TXT, DOCX, MD"})]})]}),o.length>0&&(0,r.jsxs)(H.Card,{children:[(0,r.jsx)("div",{className:"mb-4",children:(0,r.jsxs)(i.Text,{className:"font-medium",children:["Uploaded Documents (",o.length,")"]})}),(0,r.jsx)(eN,{documents:o,onRemove:e=>{a(t=>t.filter(t=>t.uid!==e))}})]}),(0,r.jsx)(H.Card,{children:(0,r.jsxs)("div",{className:"space-y-4",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)(i.Text,{className:"font-medium",children:"Step 2: Configure Vector Store"}),(0,r.jsx)(i.Text,{className:"text-sm text-gray-500 block mt-1",children:"Choose the provider and optionally provide a name and description for your vector store."})]}),(0,r.jsxs)(D.Form,{form:l,layout:"vertical",children:[(0,r.jsx)(D.Form.Item,{label:(0,r.jsxs)("span",{children:["Vector Store Name"," ",(0,r.jsx)(C.Tooltip,{title:"Optional: Give your vector store a meaningful name",children:(0,r.jsx)(F.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),children:(0,r.jsx)(O.Input,{value:x,onChange:e=>u(e.target.value),placeholder:"e.g., Product Documentation, Customer Support KB",size:"large",className:"rounded-md"})}),(0,r.jsx)(D.Form.Item,{label:(0,r.jsxs)("span",{children:["Description"," ",(0,r.jsx)(C.Tooltip,{title:"Optional: Describe what this vector store contains",children:(0,r.jsx)(F.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),children:(0,r.jsx)(O.Input.TextArea,{value:h,onChange:e=>v(e.target.value),placeholder:"e.g., Contains all product documentation and user guides",rows:2,size:"large",className:"rounded-md"})}),(0,r.jsx)(D.Form.Item,{label:(0,r.jsxs)("span",{children:["Provider"," ",(0,r.jsx)(C.Tooltip,{title:"Select the provider for embedding and vector store operations",children:(0,r.jsx)(F.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),required:!0,children:(0,r.jsx)(E.Select,{value:d,onChange:m,placeholder:"Select a provider",size:"large",style:{width:"100%"},children:Object.entries(z).map(([e,t])=>(0,r.jsx)(E.Select.Option,{value:R[e],children:(0,r.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,r.jsx)("img",{src:(0,B.resolveLogoSrc)(M[t]),alt:`${e} logo`,className:"w-5 h-5",onError:e=>{let r=e.target,s=r.parentElement;if(s){let e=document.createElement("div");e.className="w-5 h-5 rounded-full bg-gray-200 flex items-center justify-center text-xs",e.textContent=t.charAt(0),s.replaceChild(e,r)}}}),(0,r.jsx)("span",{children:t})]})},e))})}),"s3_vectors"===d&&(0,r.jsx)(eI,{accessToken:e,providerParams:f,onParamsChange:b}),"s3_vectors"!==d&&G(d).map(e=>"select"===e.type?(0,r.jsx)(D.Form.Item,{label:(0,r.jsxs)("span",{children:[e.label," ",(0,r.jsx)(C.Tooltip,{title:e.tooltip,children:(0,r.jsx)(F.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),required:e.required,children:(0,r.jsx)(O.Input,{value:f[e.name]||"",onChange:t=>b(r=>({...r,[e.name]:t.target.value})),placeholder:e.placeholder,size:"large",className:"rounded-md"})},e.name):(0,r.jsx)(D.Form.Item,{label:(0,r.jsxs)("span",{children:[e.label," ",(0,r.jsx)(C.Tooltip,{title:e.tooltip,children:(0,r.jsx)(F.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),required:e.required,children:(0,r.jsx)(O.Input,{type:"password"===e.type?"password":"text",value:f[e.name]||"",onChange:t=>b(r=>({...r,[e.name]:t.target.value})),placeholder:e.placeholder,size:"large",className:"rounded-md"})},e.name))]}),(0,r.jsx)("div",{className:"flex justify-end",children:(0,r.jsx)(Y.Button,{type:"primary",size:"large",onClick:_,loading:n,disabled:0===o.length||!d,children:n?"Creating Vector Store...":"Create Vector Store"})})]})}),g.length>0&&(0,r.jsx)(P.Alert,{message:"Vector Store Created Successfully",description:(0,r.jsxs)("div",{children:[(0,r.jsxs)("p",{children:[(0,r.jsx)("strong",{children:"Vector Store ID:"})," ",g[0]?.vector_store_id]}),(0,r.jsxs)("p",{children:[(0,r.jsx)("strong",{children:"Documents Ingested:"})," ",g.length]})]}),type:"success",showIcon:!0,closable:!0})]})},{Text:ek,Title:eA}=et.Typography,eL=({accessToken:e,vectorStores:t})=>{let[l,o]=(0,s.useState)(t.length>0?t[0].vector_store_id:void 0);return e?0===t.length?(0,r.jsx)(ee.Card,{children:(0,r.jsx)("div",{className:"text-center py-8",children:(0,r.jsx)(ek,{type:"secondary",children:"No vector stores available. Create one first to test it."})})}):(0,r.jsxs)("div",{className:"space-y-4",children:[(0,r.jsx)(ee.Card,{children:(0,r.jsxs)("div",{className:"space-y-4",children:[(0,r.jsxs)("div",{children:[(0,r.jsx)(eA,{level:5,children:"Select Vector Store"}),(0,r.jsx)(ek,{type:"secondary",children:"Choose a vector store to test search queries against"})]}),(0,r.jsx)(E.Select,{value:l,onChange:o,placeholder:"Select a vector store",size:"large",style:{width:"100%"},showSearch:!0,optionFilterProp:"children",children:t.map(e=>(0,r.jsx)(E.Select.Option,{value:e.vector_store_id,children:(0,r.jsxs)("div",{className:"flex flex-col",children:[(0,r.jsx)("span",{className:"font-medium",children:e.vector_store_name||e.vector_store_id}),e.vector_store_name&&(0,r.jsx)("span",{className:"text-xs text-gray-500 font-mono",children:e.vector_store_id})]})},e.vector_store_id))})]})}),l&&(0,r.jsx)(eu,{vectorStoreId:l,accessToken:e})]}):(0,r.jsx)(ee.Card,{children:(0,r.jsx)(ek,{type:"secondary",children:"Access token is required to test vector stores."})})};var eV=e.i(708347);let eD=({accessToken:e,userID:t,userRole:v})=>{let[g,j]=(0,s.useState)([]),[f,b]=(0,s.useState)(!1),[y,_]=(0,s.useState)(!1),[S,w]=(0,s.useState)(null),[N,I]=(0,s.useState)(""),[C,T]=(0,s.useState)([]),[k,L]=(0,s.useState)(null),[V,D]=(0,s.useState)(!1),[E,O]=(0,s.useState)(!1),P=async()=>{if(e)try{let t=await (0,p.vectorStoreListCall)(e);console.log("List vector stores response:",t),j(t.data||[])}catch(e){console.error("Error fetching vector stores:",e),K.default.fromBackend("Error fetching vector stores: "+e)}},F=async()=>{if(e)try{let t=await (0,p.credentialListCall)(e);console.log("List credentials response:",t),T(t.credentials||[])}catch(e){console.error("Error fetching credentials:",e),K.default.fromBackend("Error fetching credentials: "+e)}},B=async e=>{w(e),_(!0)},z=async()=>{if(e&&S){O(!0);try{await (0,p.vectorStoreDeleteCall)(e,S),K.default.success("Vector store deleted successfully"),P()}catch(e){console.error("Error deleting vector store:",e),K.default.fromBackend("Error deleting vector store: "+e)}finally{O(!1),_(!1),w(null)}}};return(0,s.useEffect)(()=>{P(),F()},[e]),k?(0,r.jsx)("div",{className:"w-full h-full",children:(0,r.jsx)(eh,{vectorStoreId:k,onClose:()=>{L(null),D(!1),P()},accessToken:e,is_admin:(0,eV.isAdminRole)(v||""),editVectorStore:V})}):(0,r.jsx)("div",{className:"w-full mx-4 h-[75vh]",children:(0,r.jsxs)("div",{className:"gap-2 p-8 h-[75vh] w-full mt-2",children:[(0,r.jsxs)("div",{className:"flex justify-between mt-2 w-full items-center mb-4",children:[(0,r.jsx)("h1",{children:"Vector Store Management"}),(0,r.jsxs)("div",{className:"flex items-center space-x-2",children:[N&&(0,r.jsxs)(i.Text,{children:["Last Refreshed: ",N]}),(0,r.jsx)(l.Icon,{icon:h.RefreshIcon,variant:"shadow",size:"xs",className:"self-center cursor-pointer",onClick:()=>{P(),F(),I(new Date().toLocaleString())}})]})]}),(0,r.jsx)(i.Text,{className:"mb-4",children:(0,r.jsx)("p",{children:"You can use vector stores to store and retrieve LLM embeddings."})}),(0,r.jsxs)(c.TabGroup,{children:[(0,r.jsxs)(d.TabList,{className:"mb-6",children:[(0,r.jsx)(m.Tab,{children:"Create Vector Store"}),(0,r.jsx)(m.Tab,{children:"Manage Vector Stores"}),(0,r.jsx)(m.Tab,{children:"Test Vector Store"})]}),(0,r.jsxs)(x.TabPanels,{children:[(0,r.jsx)(u.TabPanel,{children:(0,r.jsx)(eT,{accessToken:e,onSuccess:e=>{console.log("Vector store created:",e),P()}})}),(0,r.jsxs)(u.TabPanel,{children:[(0,r.jsx)(o.Button,{className:"mb-4",onClick:()=>b(!0),children:"+ Add Vector Store"}),(0,r.jsx)(n.Grid,{numItems:1,className:"gap-2 pt-2 pb-2 w-full mt-2",children:(0,r.jsx)(a.Col,{numColSpan:1,children:(0,r.jsx)(A,{data:g,onView:e=>{L(e),D(!1)},onEdit:e=>{L(e),D(!0)},onDelete:B})})})]}),(0,r.jsx)(u.TabPanel,{children:(0,r.jsx)(eL,{accessToken:e,vectorStores:g})})]})]}),(0,r.jsx)(J,{isVisible:f,onCancel:()=>b(!1),onSuccess:()=>{b(!1),P()},accessToken:e,credentials:C}),(0,r.jsx)(W.default,{isOpen:y,title:"Delete Vector Store",message:"Are you sure you want to delete this vector store? This action cannot be undone.",resourceInformationTitle:"Vector Store Information",resourceInformation:[{label:"Vector Store ID",value:S,code:!0}],onCancel:()=>_(!1),onOk:z,confirmLoading:E})]})})};var eE=e.i(135214);e.s(["default",0,function(){let{accessToken:e,userRole:t,userId:s}=(0,eE.default)();return(0,r.jsx)(eD,{accessToken:e,userRole:t,userID:s})}],400157)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0v1rxqc1hqmrl.js b/litellm/proxy/_experimental/out/_next/static/chunks/0v1rxqc1hqmrl.js new file mode 100644 index 00000000000..cde8446c0d1 --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0v1rxqc1hqmrl.js @@ -0,0 +1,4 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,783222,433336,80758,402155,368578,544508,746725,835696,941444,914189,394487,e=>{"use strict";let t;e.i(247167);let r=e=>e?.ownerDocument??document,n=e=>e&&"window"in e&&e.window===e?e:r(e).defaultView||window;function o(e,t){return!!t&&!!e&&e.contains(t)}function s(e){return e.target}let a=null;"u">typeof Element&&Element.prototype;let i=["input:not([disabled]):not([type=hidden])","select:not([disabled])","textarea:not([disabled])","button:not([disabled])","a[href]","area[href]","summary","iframe","object","embed","audio[controls]","video[controls]",'[contenteditable]:not([contenteditable^="false"])',"permission"];i.join(":not([hidden]),"),i.push('[tabindex]:not([tabindex="-1"]):not([disabled])'),i.join(':not([hidden]):not([tabindex="-1"]),');var l=e.i(271645);let u="u">typeof document?l.default.useLayoutEffect:()=>{};function c(e){return e.nativeEvent=e,e.isDefaultPrevented=()=>e.defaultPrevented,e.isPropagationStopped=()=>e.cancelBubble,e.persist=()=>{},e}function d(e){let t=(0,l.useRef)({isFocused:!1,observer:null});return u(()=>{let e=t.current;return()=>{e.observer&&(e.observer.disconnect(),e.observer=null)}},[]),(0,l.useCallback)(r=>{let n=s(r);(n instanceof HTMLButtonElement||n instanceof HTMLInputElement||n instanceof HTMLTextAreaElement||n instanceof HTMLSelectElement)&&(t.current.isFocused=!0,n.addEventListener("focusout",r=>{if(t.current.isFocused=!1,n.disabled){let t=c(r);e?.(t)}t.current.observer&&(t.current.observer.disconnect(),t.current.observer=null)},{once:!0}),t.current.observer=new MutationObserver(()=>{if(t.current.isFocused&&n.disabled){t.current.observer?.disconnect();let e=n===((e=document)=>e.activeElement)()?null:((e=document)=>e.activeElement)();n.dispatchEvent(new FocusEvent("blur",{relatedTarget:e})),n.dispatchEvent(new FocusEvent("focusout",{bubbles:!0,relatedTarget:e}))}}),t.current.observer.observe(n,{attributes:!0,attributeFilter:["disabled"]}))},[e])}function f(e){if("u"e.test(t.brand))||e.test(window.navigator.userAgent)}function p(e){return"u">typeof window&&null!=window.navigator&&e.test(window.navigator.userAgentData?.platform||window.navigator.platform)}function m(e){let t=null;return()=>(null==t&&(t=e()),t)}let b=m(function(){return p(/^Mac/i)}),v=m(function(){return p(/^iPhone/i)}),h=m(function(){return p(/^iPad/i)||b()&&navigator.maxTouchPoints>1}),g=m(function(){return v()||h()});m(function(){return b()||g()});let y=m(function(){return f(/AppleWebKit/i)&&!E()}),E=m(function(){return f(/Chrome/i)}),T=m(function(){return f(/Android/i)}),w=m(function(){return f(/Firefox/i)});function x(e,t,r=!0){let{metaKey:n,ctrlKey:o,altKey:s,shiftKey:i}=t;w()&&window.event?.type?.startsWith("key")&&"_blank"===e.target&&(b()?n=!0:o=!0);let l=y()&&b()&&!h()&&1?new KeyboardEvent("keydown",{keyIdentifier:"Enter",metaKey:n,ctrlKey:o,altKey:s,shiftKey:i}):new MouseEvent("click",{metaKey:n,ctrlKey:o,altKey:s,shiftKey:i,detail:1,bubbles:!0,cancelable:!0});x.isOpening=r;if(function(){if(null==a){a=!1;try{document.createElement("div").focus({get preventScroll(){return a=!0,!0}})}catch{}}return a}())e.focus({preventScroll:!0});else{let t=function(e){let t=e.parentNode,r=[],n=document.scrollingElement||document.documentElement;for(;t instanceof HTMLElement&&t!==n;)(t.offsetHeighttypeof window&&window.document&&window.document.createElement,new WeakMap;l.default.useId;let P=null,k=new Set,L=new Map,N=!1,C=!1,I={Tab:!0,Escape:!0};function S(e,t){for(let r of k)r(e,t)}function A(e){N=!0,x.isOpening||e.metaKey||!b()&&e.altKey||e.ctrlKey||"Control"===e.key||"Shift"===e.key||"Meta"===e.key||(P="keyboard",S("keyboard",e))}function M(e){P="pointer","pointerType"in e&&e.pointerType,("mousedown"===e.type||"pointerdown"===e.type)&&(N=!0,S("pointer",e))}function R(e){x.isOpening||(""!==e.pointerType||!e.isTrusted)&&(T()&&e.pointerType?"click"!==e.type||1!==e.buttons:0!==e.detail||e.pointerType)||(N=!0,P="virtual")}function O(e){let t=n(s(e)),o=r(s(e));s(e)!==t&&s(e)!==o&&e.isTrusted&&(N||C||(P="virtual",S("virtual",e)),N=!1,C=!1)}function D(){N=!1,C=!0}function H(e){if("u"typeof PointerEvent&&(o.addEventListener("pointerdown",M,!0),o.addEventListener("pointermove",M,!0),o.addEventListener("pointerup",M,!0)),t.addEventListener("beforeunload",()=>{j(e)},{once:!0}),L.set(t,{focus:s})}let j=(e,t)=>{let o=n(e),s=r(e);t&&s.removeEventListener("DOMContentLoaded",t),L.has(o)&&(o.HTMLElement.prototype.focus=L.get(o).focus,s.removeEventListener("keydown",A,!0),s.removeEventListener("keyup",A,!0),s.removeEventListener("click",R,!0),o.removeEventListener("focus",O,!0),o.removeEventListener("blur",D,!1),"u">typeof PointerEvent&&(s.removeEventListener("pointerdown",M,!0),s.removeEventListener("pointermove",M,!0),s.removeEventListener("pointerup",M,!0)),L.delete(o))};function K(){return"pointer"!==P}"u">typeof document&&("loading"!==(t=r(void 0)).readyState?H(void 0):t.addEventListener("DOMContentLoaded",()=>{H(void 0)}));let W=new Set(["checkbox","radio","range","color","file","image","button","submit","reset"]);function B(){let e=(0,l.useRef)(new Map),t=(0,l.useCallback)((t,r,n,o)=>{let s=o?.once?(...t)=>{e.current.delete(n),n(...t)}:n;e.current.set(n,{type:r,eventTarget:t,fn:s,options:o}),t.addEventListener(r,s,o)},[]),r=(0,l.useCallback)((t,r,n,o)=>{let s=e.current.get(n)?.fn||n;t.removeEventListener(r,s,o),e.current.delete(n)},[]),n=(0,l.useCallback)(()=>{e.current.forEach((e,t)=>{r(e.eventTarget,e.type,t,e.options)})},[r]);return(0,l.useEffect)(()=>n,[n]),{addGlobalListener:t,removeGlobalListener:r,removeAllGlobalListeners:n}}e.s(["useFocusRing",0,function(e={}){var t;let{autoFocus:a=!1,isTextInput:i,within:u}=e,f=(0,l.useRef)({isFocused:!1,isFocusVisible:a||K()}),[p,m]=(0,l.useState)(!1),[b,v]=(0,l.useState)(()=>f.current.isFocused&&f.current.isFocusVisible),h=(0,l.useCallback)(()=>v(f.current.isFocused&&f.current.isFocusVisible),[]),g=(0,l.useCallback)(e=>{f.current.isFocused=e,f.current.isFocusVisible=K(),m(e),h()},[h]);t={enabled:p,isTextInput:i},H(),(0,l.useEffect)(()=>{if(t?.enabled===!1)return;let e=(e,o)=>{var a;let i,l,u,c,d,p,m,b;a=!!t?.isTextInput,l=r(i=o?s(o):void 0),c=void 0!==(u=n(i))?u.HTMLInputElement:HTMLInputElement,d=void 0!==u?u.HTMLTextAreaElement:HTMLTextAreaElement,p=void 0!==u?u.HTMLElement:HTMLElement,m=void 0!==u?u.KeyboardEvent:KeyboardEvent,b=((e=document)=>e.activeElement)(l),(a=a||b instanceof c&&!W.has(b.type)||b instanceof d||b instanceof p&&b.isContentEditable)&&"keyboard"===e&&o instanceof m&&!I[o.key]||(e=>{f.current.isFocusVisible=e,h()})(K())};return k.add(e),()=>{k.delete(e)}},[i,p]);let{focusProps:y}=function(e){let{isDisabled:t,onFocus:n,onBlur:o,onFocusChange:a}=e,i=(0,l.useCallback)(e=>{if(s(e)===e.currentTarget)return o&&o(e),a&&a(!1),!0},[o,a]),u=d(i),c=(0,l.useCallback)(e=>{let t=s(e),o=r(t),i=o?((e=document)=>e.activeElement)(o):((e=document)=>e.activeElement)();t===e.currentTarget&&t===i&&(n&&n(e),a&&a(!0),u(e))},[a,n,u]);return{focusProps:{onFocus:!t&&(n||a||o)?c:void 0,onBlur:!t&&(o||a)?i:void 0}}}({isDisabled:u,onFocusChange:g}),{focusWithinProps:E}=function(e){let{isDisabled:t,onBlurWithin:n,onFocusWithin:a,onFocusWithinChange:i}=e,u=(0,l.useRef)({isFocusWithin:!1}),{addGlobalListener:f,removeAllGlobalListeners:p}=B(),m=(0,l.useCallback)(e=>{o(e.currentTarget,s(e))&&u.current.isFocusWithin&&!o(e.currentTarget,e.relatedTarget)&&(u.current.isFocusWithin=!1,p(),n&&n(e),i&&i(!1))},[n,i,u,p]),b=d(m),v=(0,l.useCallback)(e=>{if(!o(e.currentTarget,s(e)))return;let t=s(e),n=r(t),l=((e=document)=>e.activeElement)(n);if(!u.current.isFocusWithin&&l===t){a&&a(e),i&&i(!0),u.current.isFocusWithin=!0,b(e);let t=e.currentTarget;f(n,"focus",e=>{let r=s(e);if(u.current.isFocusWithin&&!o(t,r)){let e=new n.defaultView.FocusEvent("blur",{relatedTarget:r});Object.defineProperty(e,"target",{value:t}),Object.defineProperty(e,"currentTarget",{value:t}),m(c(e))}},{capture:!0})}},[a,i,b,f,m]);return t?{focusWithinProps:{onFocus:void 0,onBlur:void 0}}:{focusWithinProps:{onFocus:v,onBlur:m}}}({isDisabled:!u,onFocusWithinChange:g});return{isFocused:p,isFocusVisible:b,focusProps:u?E:y}}],783222);let V=!1,_=0;function G(e){"touch"===e.pointerType&&(V=!0,setTimeout(()=>{V=!1},500))}function U(){let e=r(null);if(void 0!==e)return 0===_&&"u">typeof PointerEvent&&e.addEventListener("pointerup",G),_++,()=>{!(--_>0)&&"u">typeof PointerEvent&&e.removeEventListener("pointerup",G)}}e.s(["useHover",0,function(e){let{onHoverStart:t,onHoverChange:n,onHoverEnd:a,isDisabled:i}=e,[u,c]=(0,l.useState)(!1),d=(0,l.useRef)({isHovered:!1,ignoreEmulatedMouseEvents:!1,pointerType:"",target:null}).current;(0,l.useEffect)(U,[]);let{addGlobalListener:f,removeAllGlobalListeners:p}=B(),{hoverProps:m,triggerHoverEnd:b}=(0,l.useMemo)(()=>{let e=(e,t)=>{let r=d.target;d.pointerType="",d.target=null,"touch"!==t&&d.isHovered&&r&&(d.isHovered=!1,p(),a&&a({type:"hoverend",target:r,pointerType:t}),n&&n(!1),c(!1))},l={};return"u">typeof PointerEvent&&(l.onPointerEnter=a=>{V&&"mouse"===a.pointerType||((a,l)=>{if(d.pointerType=l,i||"touch"===l||d.isHovered||!o(a.currentTarget,s(a)))return;d.isHovered=!0;let u=a.currentTarget;d.target=u,f(r(s(a)),"pointerover",t=>{d.isHovered&&d.target&&!o(d.target,s(t))&&e(t,t.pointerType)},{capture:!0}),t&&t({type:"hoverstart",target:u,pointerType:l}),n&&n(!0),c(!0)})(a,a.pointerType)},l.onPointerLeave=t=>{!i&&o(t.currentTarget,s(t))&&e(t,t.pointerType)}),{hoverProps:l,triggerHoverEnd:e}},[t,n,a,i,d,f,p]);return(0,l.useEffect)(()=>{i&&b({currentTarget:d.target},d.pointerType)},[i]),{hoverProps:m,isHovered:u}}],433336);var $=Object.defineProperty,q=(e,t,r)=>{let n;return(n="symbol"!=typeof t?t+"":t)in e?$(e,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[n]=r,r};let X=new class{constructor(){q(this,"current",this.detect()),q(this,"handoffState","pending"),q(this,"currentId",0)}set(e){this.current!==e&&(this.handoffState="pending",this.currentId=0,this.current=e)}reset(){this.set(this.detect())}nextId(){return++this.currentId}get isServer(){return"server"===this.current}get isClient(){return"client"===this.current}detect(){return"u"setTimeout(()=>{throw e}))}function Z(){let e=[],t={addEventListener:(e,r,n,o)=>(e.addEventListener(r,n,o),t.add(()=>e.removeEventListener(r,n,o))),requestAnimationFrame(...e){let r=requestAnimationFrame(...e);return t.add(()=>cancelAnimationFrame(r))},nextFrame:(...e)=>t.requestAnimationFrame(()=>t.requestAnimationFrame(...e)),setTimeout(...e){let r=setTimeout(...e);return t.add(()=>clearTimeout(r))},microTask(...e){let r={current:!0};return z(()=>{r.current&&e[0]()}),t.add(()=>{r.current=!1})},style(e,t,r){let n=e.style.getPropertyValue(t);return Object.assign(e.style,{[t]:r}),this.add(()=>{Object.assign(e.style,{[t]:n})})},group(e){let t=Z();return e(t),this.add(()=>t.dispose())},add:t=>(e.includes(t)||e.push(t),()=>{let r=e.indexOf(t);if(r>=0)for(let t of e.splice(r,1))t()}),dispose(){for(let t of e.splice(0))t()}};return t}function J(){let[e]=(0,l.useState)(Z);return(0,l.useEffect)(()=>()=>e.dispose(),[e]),e}e.s(["env",0,X],80758),e.s(["getOwnerDocument",0,Y],402155),e.s(["microTask",0,z],368578),e.s(["disposables",0,Z],544508),e.s(["useDisposables",0,J],746725);let Q=(e,t)=>{X.isServer?(0,l.useEffect)(e,t):(0,l.useLayoutEffect)(e,t)};function ee(e){let t=(0,l.useRef)(e);return Q(()=>{t.current=e},[e]),t}e.s(["useIsoMorphicEffect",0,Q],835696),e.s(["useLatestValue",0,ee],941444);let et=function(e){let t=ee(e);return l.default.useCallback((...e)=>t.current(...e),[t])};e.s(["useEvent",0,et],914189),e.s(["useActivePress",0,function({disabled:e=!1}={}){let t=(0,l.useRef)(null),[r,n]=(0,l.useState)(!1),o=J(),s=et(()=>{t.current=null,n(!1),o.dispose()}),a=et(e=>{if(o.dispose(),null===t.current){t.current=e.currentTarget,n(!0);{let r=Y(e.currentTarget);o.addEventListener(r,"pointerup",s,!1),o.addEventListener(r,"pointermove",e=>{if(t.current){var r,o;let s,a;n((s=e.width/2,a=e.height/2,r={top:e.clientY-a,right:e.clientX+s,bottom:e.clientY+a,left:e.clientX-s},o=t.current.getBoundingClientRect(),!(!r||!o||r.righto.right||r.bottomo.bottom)))}},!1),o.addEventListener(r,"pointercancel",s,!1)}}});return{pressed:r,pressProps:e?{}:{onPointerDown:a,onPointerUp:s,onClick:s}}}],394487)},144279,294316,e=>{"use strict";var t=e.i(271645);e.s(["useResolveButtonType",0,function(e,r){return(0,t.useMemo)(()=>{var t;if(e.type)return e.type;let n=null!=(t=e.as)?t:"button";if("string"==typeof n&&"button"===n.toLowerCase()||(null==r?void 0:r.tagName)==="BUTTON"&&!r.hasAttribute("type"))return"button"},[e.type,e.as,r])}],144279);var r=e.i(914189);let n=Symbol();e.s(["optionalRef",0,function(e,t=!0){return Object.assign(e,{[n]:t})},"useSyncRefs",0,function(...e){let o=(0,t.useRef)(e);(0,t.useEffect)(()=>{o.current=e},[e]);let s=(0,r.useEvent)(e=>{for(let t of o.current)null!=t&&("function"==typeof t?t(e):t.current=e)});return e.every(e=>null==e||(null==e?void 0:e[n]))?void 0:s}],294316)},553521,e=>{"use strict";var t=e.i(271645),r=e.i(835696);e.s(["useIsMounted",0,function(){let e=(0,t.useRef)(!1);return(0,r.useIsoMorphicEffect)(()=>(e.current=!0,()=>{e.current=!1}),[]),e}])},732607,e=>{"use strict";e.s(["classNames",0,function(...e){return Array.from(new Set(e.flatMap(e=>"string"==typeof e?e.split(" "):[]))).filter(Boolean).join(" ")}])},397701,e=>{"use strict";e.s(["match",0,function e(t,r,...n){if(t in r){let e=r[t];return"function"==typeof e?e(...n):e}let o=Error(`Tried to handle "${t}" but there is no handler defined. Only defined handlers are: ${Object.keys(r).map(e=>`"${e}"`).join(", ")}.`);throw Error.captureStackTrace&&Error.captureStackTrace(o,e),o}])},700020,e=>{"use strict";let t,r;var n=e.i(271645),o=e.i(732607),s=e.i(397701),a=((t=a||{})[t.None=0]="None",t[t.RenderStrategy=1]="RenderStrategy",t[t.Static=2]="Static",t),i=((r=i||{})[r.Unmount=0]="Unmount",r[r.Hidden=1]="Hidden",r);function l(e,t={},r,s,a){let{as:i=r,children:u,refName:p="ref",...m}=f(e,["unmount","static"]),b=void 0!==e.ref?{[p]:e.ref}:{},v="function"==typeof u?u(t):u;"className"in m&&m.className&&"function"==typeof m.className&&(m.className=m.className(t)),m["aria-labelledby"]&&m["aria-labelledby"]===m.id&&(m["aria-labelledby"]=void 0);let h={};if(t){let e=!1,r=[];for(let[n,o]of Object.entries(t))"boolean"==typeof o&&(e=!0),!0===o&&r.push(n.replace(/([A-Z])/g,e=>`-${e.toLowerCase()}`));if(e)for(let e of(h["data-headlessui-state"]=r.join(" "),r))h[`data-${e}`]=""}if(i===n.Fragment&&(Object.keys(d(m)).length>0||Object.keys(d(h)).length>0))if(!(0,n.isValidElement)(v)||Array.isArray(v)&&v.length>1){if(Object.keys(d(m)).length>0)throw Error(['Passing props on "Fragment"!',"",`The current component <${s} /> is rendering a "Fragment".`,"However we need to passthrough the following props:",Object.keys(d(m)).concat(Object.keys(d(h))).map(e=>` - ${e}`).join(` +`),"","You can apply a few solutions:",['Add an `as="..."` prop, to ensure that we render an actual element instead of a "Fragment".',"Render a single element as the child so that we can forward the props onto that element."].map(e=>` - ${e}`).join(` +`)].join(` +`))}else{var g;let e=v.props,t=null==e?void 0:e.className,r="function"==typeof t?(...e)=>(0,o.classNames)(t(...e),m.className):(0,o.classNames)(t,m.className),s=c(v.props,d(f(m,["ref"])));for(let e in h)e in s&&delete h[e];return(0,n.cloneElement)(v,Object.assign({},s,h,b,{ref:a((g=v,n.default.version.split(".")[0]>="19"?g.props.ref:g.ref),b.ref)},r?{className:r}:{}))}return(0,n.createElement)(i,Object.assign({},f(m,["ref"]),i!==n.Fragment&&b,i!==n.Fragment&&h),v)}function u(...e){return e.every(e=>null==e)?void 0:t=>{for(let r of e)null!=r&&("function"==typeof r?r(t):r.current=t)}}function c(...e){if(0===e.length)return{};if(1===e.length)return e[0];let t={},r={};for(let n of e)for(let e in n)e.startsWith("on")&&"function"==typeof n[e]?(null!=r[e]||(r[e]=[]),r[e].push(n[e])):t[e]=n[e];if(t.disabled||t["aria-disabled"])for(let e in r)/^(on(?:Click|Pointer|Mouse|Key)(?:Down|Up|Press)?)$/.test(e)&&(r[e]=[e=>{var t;return null==(t=null==e?void 0:e.preventDefault)?void 0:t.call(e)}]);for(let e in r)Object.assign(t,{[e](t,...n){for(let o of r[e]){if((t instanceof Event||(null==t?void 0:t.nativeEvent)instanceof Event)&&t.defaultPrevented)return;o(t,...n)}}});return t}function d(e){let t=Object.assign({},e);for(let e in t)void 0===t[e]&&delete t[e];return t}function f(e,t=[]){let r=Object.assign({},e);for(let e of t)e in r&&delete r[e];return r}e.s(["RenderFeatures",0,a,"RenderStrategy",0,i,"compact",0,d,"forwardRefWithAs",0,function(e){var t;return Object.assign((0,n.forwardRef)(e),{displayName:null!=(t=e.displayName)?t:e.name})},"mergeProps",0,function(...e){if(0===e.length)return{};if(1===e.length)return e[0];let t={},r={};for(let n of e)for(let e in n)e.startsWith("on")&&"function"==typeof n[e]?(null!=r[e]||(r[e]=[]),r[e].push(n[e])):t[e]=n[e];for(let e in r)Object.assign(t,{[e](...t){for(let n of r[e])null==n||n(...t)}});return t},"useRender",0,function(){let e,t,r=(e=(0,n.useRef)([]),t=(0,n.useCallback)(t=>{for(let r of e.current)null!=r&&("function"==typeof r?r(t):r.current=t)},[]),(...r)=>{if(!r.every(e=>null==e))return e.current=r,t});return(0,n.useCallback)(e=>(function({ourProps:e,theirProps:t,slot:r,defaultTag:n,features:o,visible:a=!0,name:i,mergeRefs:d}){d=null!=d?d:u;let f=c(t,e);if(a)return l(f,r,n,i,d);let p=null!=o?o:0;if(2&p){let{static:e=!1,...t}=f;if(e)return l(t,r,n,i,d)}if(1&p){let{unmount:e=!0,...t}=f;return(0,s.match)(+!e,{0:()=>null,1:()=>l({...t,hidden:!0,style:{display:"none"}},r,n,i,d)})}return l(f,r,n,i,d)})({mergeRefs:r,...e}),[r])}])},2788,e=>{"use strict";let t;var r=e.i(700020),n=((t=n||{})[t.None=1]="None",t[t.Focusable=2]="Focusable",t[t.Hidden=4]="Hidden",t);let o=(0,r.forwardRefWithAs)(function(e,t){var n;let{features:o=1,...s}=e,a={ref:t,"aria-hidden":(2&o)==2||(null!=(n=s["aria-hidden"])?n:void 0),hidden:(4&o)==4||void 0,style:{position:"fixed",top:1,left:1,width:1,height:0,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0",...(4&o)==4&&(2&o)!=2&&{display:"none"}}};return(0,r.useRender)()({ourProps:a,theirProps:s,slot:{},defaultTag:"span",name:"Hidden"})});e.s(["Hidden",0,o,"HiddenFeatures",0,n])},640497,e=>{"use strict";var t=e.i(271645),r=e.i(553521),n=e.i(2788);e.s(["FocusSentinel",0,function({onFocus:e}){let[o,s]=(0,t.useState)(!0),a=(0,r.useIsMounted)();return o?t.default.createElement(n.Hidden,{as:"button",type:"button",features:n.HiddenFeatures.Focusable,onFocus:t=>{t.preventDefault();let r,n=50;r=requestAnimationFrame(function t(){if(n--<=0){r&&cancelAnimationFrame(r);return}if(e()){if(cancelAnimationFrame(r),!a.current)return;s(!1);return}r=requestAnimationFrame(t)})}}):null}])},652265,e=>{"use strict";let t,r,n,o,s;e.i(544508);var a=e.i(397701),i=e.i(402155);let l=["[contentEditable=true]","[tabindex]","a[href]","area[href]","button:not([disabled])","iframe","input:not([disabled])","select:not([disabled])","textarea:not([disabled])"].map(e=>`${e}:not([tabindex='-1'])`).join(","),u=["[data-autofocus]"].map(e=>`${e}:not([tabindex='-1'])`).join(",");var c=((t=c||{})[t.First=1]="First",t[t.Previous=2]="Previous",t[t.Next=4]="Next",t[t.Last=8]="Last",t[t.WrapAround=16]="WrapAround",t[t.NoScroll=32]="NoScroll",t[t.AutoFocus=64]="AutoFocus",t),d=((r=d||{})[r.Error=0]="Error",r[r.Overflow=1]="Overflow",r[r.Success=2]="Success",r[r.Underflow=3]="Underflow",r),f=((n=f||{})[n.Previous=-1]="Previous",n[n.Next=1]="Next",n);function p(e=document.body){return null==e?[]:Array.from(e.querySelectorAll(l)).sort((e,t)=>Math.sign((e.tabIndex||Number.MAX_SAFE_INTEGER)-(t.tabIndex||Number.MAX_SAFE_INTEGER)))}var m=((o=m||{})[o.Strict=0]="Strict",o[o.Loose=1]="Loose",o),b=((s=b||{})[s.Keyboard=0]="Keyboard",s[s.Mouse=1]="Mouse",s);function v(e,t=e=>e){return e.slice().sort((e,r)=>{let n=t(e),o=t(r);if(null===n||null===o)return 0;let s=n.compareDocumentPosition(o);return s&Node.DOCUMENT_POSITION_FOLLOWING?-1:s&Node.DOCUMENT_POSITION_PRECEDING?1:0})}function h(e,t,{sorted:r=!0,relativeTo:n=null,skipElements:o=[]}={}){var s,a,i;let l=Array.isArray(e)?e.length>0?e[0].ownerDocument:document:e.ownerDocument,c=Array.isArray(e)?r?v(e):e:64&t?function(e=document.body){return null==e?[]:Array.from(e.querySelectorAll(u)).sort((e,t)=>Math.sign((e.tabIndex||Number.MAX_SAFE_INTEGER)-(t.tabIndex||Number.MAX_SAFE_INTEGER)))}(e):p(e);o.length>0&&c.length>1&&(c=c.filter(e=>!o.some(t=>null!=t&&"current"in t?(null==t?void 0:t.current)===e:t===e))),n=null!=n?n:l.activeElement;let d=(()=>{if(5&t)return 1;if(10&t)return -1;throw Error("Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last")})(),f=(()=>{if(1&t)return 0;if(2&t)return Math.max(0,c.indexOf(n))-1;if(4&t)return Math.max(0,c.indexOf(n))+1;if(8&t)return c.length-1;throw Error("Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last")})(),m=32&t?{preventScroll:!0}:{},b=0,g=c.length,y;do{if(b>=g||b+g<=0)return 0;let e=f+b;if(16&t)e=(e+g)%g;else{if(e<0)return 3;if(e>=g)return 1}null==(y=c[e])||y.focus(m),b+=d}while(y!==l.activeElement)return 6&t&&null!=(i=null==(a=null==(s=y)?void 0:s.matches)?void 0:a.call(s,"textarea,input"))&&i&&y.select(),2}"u">typeof window&&"u">typeof document&&(document.addEventListener("keydown",e=>{e.metaKey||e.altKey||e.ctrlKey||(document.documentElement.dataset.headlessuiFocusVisible="")},!0),document.addEventListener("click",e=>{1===e.detail?delete document.documentElement.dataset.headlessuiFocusVisible:0===e.detail&&(document.documentElement.dataset.headlessuiFocusVisible="")},!0)),e.s(["Focus",0,c,"FocusResult",0,d,"FocusableMode",0,m,"focusFrom",0,function(e,t){return h(p(),t,{relativeTo:e})},"focusIn",0,h,"getFocusableElements",0,p,"isFocusableElement",0,function(e,t=0){var r;return e!==(null==(r=(0,i.getOwnerDocument)(e))?void 0:r.body)&&(0,a.match)(t,{0:()=>e.matches(l),1(){let t=e;for(;null!==t;){if(t.matches(l))return!0;t=t.parentElement}return!1}})},"sortByDomNode",0,v])},963703,e=>{"use strict";var t=e.i(271645);let r=t.createContext(null);e.s(["StableCollection",0,function({children:e}){let n=t.useRef({groups:new Map,get(e,t){var r;let n=this.groups.get(e);n||(n=new Map,this.groups.set(e,n));let o=null!=(r=n.get(t))?r:0;return n.set(t,o+1),[Array.from(n.keys()).indexOf(t),function(){let e=n.get(t);e>1?n.set(t,e-1):n.delete(t)}]}});return t.createElement(r.Provider,{value:n},e)},"useStableCollectionIndex",0,function(e){let n=t.useContext(r);if(!n)throw Error("You must wrap your component in a ");let o=t.useId(),[s,a]=n.current.get(e,o);return t.useEffect(()=>a,[]),s}])},998348,e=>{"use strict";let t;var r=((t=r||{}).Space=" ",t.Enter="Enter",t.Escape="Escape",t.Backspace="Backspace",t.Delete="Delete",t.ArrowLeft="ArrowLeft",t.ArrowUp="ArrowUp",t.ArrowRight="ArrowRight",t.ArrowDown="ArrowDown",t.Home="Home",t.End="End",t.PageUp="PageUp",t.PageDown="PageDown",t.Tab="Tab",t);e.s(["Keys",0,r])},970554,e=>{"use strict";let t,r,n;var o=e.i(783222),s=e.i(433336),a=e.i(271645),i=e.i(394487),l=e.i(914189),u=e.i(835696),c=e.i(941444),d=e.i(144279),f=e.i(294316),p=e.i(640497),m=e.i(2788),b=e.i(652265),v=e.i(397701),h=e.i(368578),g=e.i(402155),y=e.i(700020),E=e.i(963703),T=e.i(998348),w=((t=w||{})[t.Forwards=0]="Forwards",t[t.Backwards=1]="Backwards",t),x=((r=x||{})[r.Less=-1]="Less",r[r.Equal=0]="Equal",r[r.Greater=1]="Greater",r),F=((n=F||{})[n.SetSelectedIndex=0]="SetSelectedIndex",n[n.RegisterTab=1]="RegisterTab",n[n.UnregisterTab=2]="UnregisterTab",n[n.RegisterPanel=3]="RegisterPanel",n[n.UnregisterPanel=4]="UnregisterPanel",n);let P={0(e,t){var r;let n=(0,b.sortByDomNode)(e.tabs,e=>e.current),o=(0,b.sortByDomNode)(e.panels,e=>e.current),s=n.filter(e=>{var t;return!(null!=(t=e.current)&&t.hasAttribute("disabled"))}),a={...e,tabs:n,panels:o};if(t.index<0||t.index>n.length-1){let r=(0,v.match)(Math.sign(t.index-e.selectedIndex),{[-1]:()=>1,0:()=>(0,v.match)(Math.sign(t.index),{[-1]:()=>0,0:()=>0,1:()=>1}),1:()=>0});if(0===s.length)return a;let o=(0,v.match)(r,{0:()=>n.indexOf(s[0]),1:()=>n.indexOf(s[s.length-1])});return{...a,selectedIndex:-1===o?e.selectedIndex:o}}let i=n.slice(0,t.index),l=[...n.slice(t.index),...i].find(e=>s.includes(e));if(!l)return a;let u=null!=(r=n.indexOf(l))?r:e.selectedIndex;return -1===u&&(u=e.selectedIndex),{...a,selectedIndex:u}},1(e,t){if(e.tabs.includes(t.tab))return e;let r=e.tabs[e.selectedIndex],n=(0,b.sortByDomNode)([...e.tabs,t.tab],e=>e.current),o=e.selectedIndex;return e.info.current.isControlled||-1===(o=n.indexOf(r))&&(o=e.selectedIndex),{...e,tabs:n,selectedIndex:o}},2:(e,t)=>({...e,tabs:e.tabs.filter(e=>e!==t.tab)}),3:(e,t)=>e.panels.includes(t.panel)?e:{...e,panels:(0,b.sortByDomNode)([...e.panels,t.panel],e=>e.current)},4:(e,t)=>({...e,panels:e.panels.filter(e=>e!==t.panel)})},k=(0,a.createContext)(null);function L(e){let t=(0,a.useContext)(k);if(null===t){let t=Error(`<${e} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,L),t}return t}k.displayName="TabsDataContext";let N=(0,a.createContext)(null);function C(e){let t=(0,a.useContext)(N);if(null===t){let t=Error(`<${e} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,C),t}return t}function I(e,t){return(0,v.match)(t.type,P,e,t)}N.displayName="TabsActionsContext";let S=y.RenderFeatures.RenderStrategy|y.RenderFeatures.Static,A=Object.assign((0,y.forwardRefWithAs)(function(e,t){var r,n;let c=(0,a.useId)(),{id:p=`headlessui-tabs-tab-${c}`,disabled:m=!1,autoFocus:w=!1,...x}=e,{orientation:F,activation:P,selectedIndex:k,tabs:N,panels:I}=L("Tab"),S=C("Tab"),A=L("Tab"),[M,R]=(0,a.useState)(null),O=(0,a.useRef)(null),D=(0,f.useSyncRefs)(O,t,R);(0,u.useIsoMorphicEffect)(()=>S.registerTab(O),[S,O]);let H=(0,E.useStableCollectionIndex)("tabs"),j=N.indexOf(O);-1===j&&(j=H);let K=j===k,W=(0,l.useEvent)(e=>{var t;let r=e();if(r===b.FocusResult.Success&&"auto"===P){let e=null==(t=(0,g.getOwnerDocument)(O))?void 0:t.activeElement,r=A.tabs.findIndex(t=>t.current===e);-1!==r&&S.change(r)}return r}),B=(0,l.useEvent)(e=>{let t=N.map(e=>e.current).filter(Boolean);if(e.key===T.Keys.Space||e.key===T.Keys.Enter){e.preventDefault(),e.stopPropagation(),S.change(j);return}switch(e.key){case T.Keys.Home:case T.Keys.PageUp:return e.preventDefault(),e.stopPropagation(),W(()=>(0,b.focusIn)(t,b.Focus.First));case T.Keys.End:case T.Keys.PageDown:return e.preventDefault(),e.stopPropagation(),W(()=>(0,b.focusIn)(t,b.Focus.Last))}if(W(()=>(0,v.match)(F,{vertical:()=>e.key===T.Keys.ArrowUp?(0,b.focusIn)(t,b.Focus.Previous|b.Focus.WrapAround):e.key===T.Keys.ArrowDown?(0,b.focusIn)(t,b.Focus.Next|b.Focus.WrapAround):b.FocusResult.Error,horizontal:()=>e.key===T.Keys.ArrowLeft?(0,b.focusIn)(t,b.Focus.Previous|b.Focus.WrapAround):e.key===T.Keys.ArrowRight?(0,b.focusIn)(t,b.Focus.Next|b.Focus.WrapAround):b.FocusResult.Error}))===b.FocusResult.Success)return e.preventDefault()}),V=(0,a.useRef)(!1),_=(0,l.useEvent)(()=>{var e;V.current||(V.current=!0,null==(e=O.current)||e.focus({preventScroll:!0}),S.change(j),(0,h.microTask)(()=>{V.current=!1}))}),G=(0,l.useEvent)(e=>{e.preventDefault()}),{isFocusVisible:U,focusProps:$}=(0,o.useFocusRing)({autoFocus:w}),{isHovered:q,hoverProps:X}=(0,s.useHover)({isDisabled:m}),{pressed:Y,pressProps:z}=(0,i.useActivePress)({disabled:m}),Z=(0,a.useMemo)(()=>({selected:K,hover:q,active:Y,focus:U,autofocus:w,disabled:m}),[K,q,U,Y,w,m]),J=(0,y.mergeProps)({ref:D,onKeyDown:B,onMouseDown:G,onClick:_,id:p,role:"tab",type:(0,d.useResolveButtonType)(e,M),"aria-controls":null==(n=null==(r=I[j])?void 0:r.current)?void 0:n.id,"aria-selected":K,tabIndex:K?0:-1,disabled:m||void 0,autoFocus:w},$,X,z);return(0,y.useRender)()({ourProps:J,theirProps:x,slot:Z,defaultTag:"button",name:"Tabs.Tab"})}),{Group:(0,y.forwardRefWithAs)(function(e,t){let{defaultIndex:r=0,vertical:n=!1,manual:o=!1,onChange:s,selectedIndex:i=null,...d}=e,m=n?"vertical":"horizontal",v=o?"manual":"auto",h=null!==i,g=(0,c.useLatestValue)({isControlled:h}),T=(0,f.useSyncRefs)(t),[w,x]=(0,a.useReducer)(I,{info:g,selectedIndex:null!=i?i:r,tabs:[],panels:[]}),F=(0,a.useMemo)(()=>({selectedIndex:w.selectedIndex}),[w.selectedIndex]),P=(0,c.useLatestValue)(s||(()=>{})),L=(0,c.useLatestValue)(w.tabs),C=(0,a.useMemo)(()=>({orientation:m,activation:v,...w}),[m,v,w]),S=(0,l.useEvent)(e=>(x({type:1,tab:e}),()=>x({type:2,tab:e}))),A=(0,l.useEvent)(e=>(x({type:3,panel:e}),()=>x({type:4,panel:e}))),M=(0,l.useEvent)(e=>{R.current!==e&&P.current(e),h||x({type:0,index:e})}),R=(0,c.useLatestValue)(h?e.selectedIndex:w.selectedIndex),O=(0,a.useMemo)(()=>({registerTab:S,registerPanel:A,change:M}),[]);(0,u.useIsoMorphicEffect)(()=>{x({type:0,index:null!=i?i:r})},[i]),(0,u.useIsoMorphicEffect)(()=>{if(void 0===R.current||w.tabs.length<=0)return;let e=(0,b.sortByDomNode)(w.tabs,e=>e.current);e.some((e,t)=>w.tabs[t]!==e)&&M(e.indexOf(w.tabs[R.current]))});let D=(0,y.useRender)();return a.default.createElement(E.StableCollection,null,a.default.createElement(N.Provider,{value:O},a.default.createElement(k.Provider,{value:C},C.tabs.length<=0&&a.default.createElement(p.FocusSentinel,{onFocus:()=>{var e,t;for(let r of L.current)if((null==(e=r.current)?void 0:e.tabIndex)===0)return null==(t=r.current)||t.focus(),!0;return!1}}),D({ourProps:{ref:T},theirProps:d,slot:F,defaultTag:"div",name:"Tabs"}))))}),List:(0,y.forwardRefWithAs)(function(e,t){let{orientation:r,selectedIndex:n}=L("Tab.List"),o=(0,f.useSyncRefs)(t),s=(0,a.useMemo)(()=>({selectedIndex:n}),[n]);return(0,y.useRender)()({ourProps:{ref:o,role:"tablist","aria-orientation":r},theirProps:e,slot:s,defaultTag:"div",name:"Tabs.List"})}),Panels:(0,y.forwardRefWithAs)(function(e,t){let{selectedIndex:r}=L("Tab.Panels"),n=(0,f.useSyncRefs)(t),o=(0,a.useMemo)(()=>({selectedIndex:r}),[r]);return(0,y.useRender)()({ourProps:{ref:n},theirProps:e,slot:o,defaultTag:"div",name:"Tabs.Panels"})}),Panel:(0,y.forwardRefWithAs)(function(e,t){var r,n,s,i;let l=(0,a.useId)(),{id:c=`headlessui-tabs-panel-${l}`,tabIndex:d=0,...p}=e,{selectedIndex:b,tabs:v,panels:h}=L("Tab.Panel"),g=C("Tab.Panel"),T=(0,a.useRef)(null),w=(0,f.useSyncRefs)(T,t);(0,u.useIsoMorphicEffect)(()=>g.registerPanel(T),[g,T]);let x=(0,E.useStableCollectionIndex)("panels"),F=h.indexOf(T);-1===F&&(F=x);let P=F===b,{isFocusVisible:k,focusProps:N}=(0,o.useFocusRing)(),I=(0,a.useMemo)(()=>({selected:P,focus:k}),[P,k]),A=(0,y.mergeProps)({ref:w,id:c,role:"tabpanel","aria-labelledby":null==(n=null==(r=v[F])?void 0:r.current)?void 0:n.id,tabIndex:P?d:-1},N),M=(0,y.useRender)();return P||null!=(s=p.unmount)&&!s||null!=(i=p.static)&&i?M({ourProps:A,theirProps:p,slot:I,defaultTag:"div",features:S,visible:P,name:"Tabs.Panel"}):a.default.createElement(m.Hidden,{"aria-hidden":"true",...A})})});e.s(["Tab",0,A])},405371,910342,e=>{"use strict";var t=e.i(290571),r=e.i(271645),n=e.i(480731);let o=(0,r.createContext)(n.BaseColors.Blue);e.s(["default",0,o],910342);var s=e.i(970554),a=e.i(444755);let i=(0,e.i(673706).makeClassName)("TabList"),l=(0,r.createContext)("line"),u={line:(0,a.tremorTwMerge)("flex border-b space-x-4","border-tremor-border","dark:border-dark-tremor-border"),solid:(0,a.tremorTwMerge)("inline-flex p-0.5 rounded-tremor-default space-x-1.5","bg-tremor-background-subtle","dark:bg-dark-tremor-background-subtle")},c=r.default.forwardRef((e,n)=>{let{color:c,variant:d="line",children:f,className:p}=e,m=(0,t.__rest)(e,["color","variant","children","className"]);return r.default.createElement(s.Tab.List,Object.assign({ref:n,className:(0,a.tremorTwMerge)(i("root"),"justify-start overflow-x-clip",u[d],p)},m),r.default.createElement(l.Provider,{value:d},r.default.createElement(o.Provider,{value:c},f)))});c.displayName="TabList",e.s(["TabVariantContext",0,l,"default",0,c],405371)},197647,e=>{"use strict";var t=e.i(290571),r=e.i(970554),n=e.i(95779),o=e.i(444755),s=e.i(673706),a=e.i(271645),i=e.i(405371),l=e.i(910342);let u=(0,s.makeClassName)("Tab"),c=a.default.forwardRef((e,c)=>{let{icon:d,className:f,children:p}=e,m=(0,t.__rest)(e,["icon","className","children"]),b=(0,a.useContext)(i.TabVariantContext),v=(0,a.useContext)(l.default);return a.default.createElement(r.Tab,Object.assign({ref:c,className:(0,o.tremorTwMerge)(u("root"),"flex whitespace-nowrap truncate max-w-xs outline-none data-focus-visible:ring text-tremor-default transition duration-100",function(e,t){switch(e){case"line":return(0,o.tremorTwMerge)("data-[selected]:border-b-2 hover:border-b-2 border-transparent transition duration-100 -mb-px px-2 py-2","hover:border-tremor-content hover:text-tremor-content-emphasis text-tremor-content","[&:not([data-selected])]:dark:hover:border-dark-tremor-content-emphasis [&:not([data-selected])]:dark:hover:text-dark-tremor-content-emphasis [&:not([data-selected])]:dark:text-dark-tremor-content",t?(0,s.getColorClassNames)(t,n.colorPalette.border).selectBorderColor:["data-[selected]:border-tremor-brand data-[selected]:text-tremor-brand","data-[selected]:dark:border-dark-tremor-brand data-[selected]:dark:text-dark-tremor-brand"]);case"solid":return(0,o.tremorTwMerge)("border-transparent border rounded-tremor-small px-2.5 py-1","data-[selected]:border-tremor-border data-[selected]:bg-tremor-background data-[selected]:shadow-tremor-input [&:not([data-selected])]:hover:text-tremor-content-emphasis data-[selected]:text-tremor-brand [&:not([data-selected])]:text-tremor-content","dark:data-[selected]:border-dark-tremor-border dark:data-[selected]:bg-dark-tremor-background dark:data-[selected]:shadow-dark-tremor-input dark:[&:not([data-selected])]:hover:text-dark-tremor-content-emphasis dark:data-[selected]:text-dark-tremor-brand dark:[&:not([data-selected])]:text-dark-tremor-content",t?(0,s.getColorClassNames)(t,n.colorPalette.text).selectTextColor:"text-tremor-content dark:text-dark-tremor-content")}}(b,v),f,v&&(0,s.getColorClassNames)(v,n.colorPalette.text).selectTextColor)},m),d?a.default.createElement(d,{className:(0,o.tremorTwMerge)(u("icon"),"flex-none h-5 w-5",p?"mr-2":"")}):null,p?a.default.createElement("span",null,p):null)});c.displayName="Tab",e.s(["Tab",0,c],197647)},653824,e=>{"use strict";var t=e.i(290571),r=e.i(970554),n=e.i(444755),o=e.i(673706),s=e.i(271645);let a=(0,o.makeClassName)("TabGroup"),i=s.default.forwardRef((e,o)=>{let{defaultIndex:i,index:l,onIndexChange:u,children:c,className:d}=e,f=(0,t.__rest)(e,["defaultIndex","index","onIndexChange","children","className"]);return s.default.createElement(r.Tab.Group,Object.assign({as:"div",ref:o,defaultIndex:i,selectedIndex:l,onChange:u,className:(0,n.tremorTwMerge)(a("root"),"w-full",d)},f),c)});i.displayName="TabGroup",e.s(["TabGroup",0,i],653824)},881073,e=>{"use strict";var t=e.i(405371);e.s(["TabList",()=>t.default])},751734,e=>{"use strict";let t=(0,e.i(271645).createContext)(0);e.s(["default",0,t])},144582,e=>{"use strict";let t=(0,e.i(271645).createContext)({selectedValue:void 0,handleValueChange:void 0});e.s(["default",0,t])},404206,e=>{"use strict";var t=e.i(290571),r=e.i(751734),n=e.i(144582),o=e.i(444755),s=e.i(673706),a=e.i(271645);let i=(0,s.makeClassName)("TabPanel"),l=a.default.forwardRef((e,s)=>{let{children:l,className:u}=e,c=(0,t.__rest)(e,["children","className"]),{selectedValue:d}=(0,a.useContext)(n.default),f=d===(0,a.useContext)(r.default);return a.default.createElement("div",Object.assign({ref:s,className:(0,o.tremorTwMerge)(i("root"),"w-full mt-2",f?"":"hidden",u),"aria-selected":f?"true":"false"},c),l)});l.displayName="TabPanel",e.s(["TabPanel",0,l],404206)},723731,e=>{"use strict";var t=e.i(290571),r=e.i(970554),n=e.i(751734),o=e.i(144582),s=e.i(444755),a=e.i(673706),i=e.i(271645);let l=(0,a.makeClassName)("TabPanels"),u=i.default.forwardRef((e,a)=>{let{children:u,className:c}=e,d=(0,t.__rest)(e,["children","className"]);return i.default.createElement(r.Tab.Panels,Object.assign({as:"div",ref:a,className:(0,s.tremorTwMerge)(l("root"),"w-full",c)},d),({selectedIndex:e})=>i.default.createElement(o.default.Provider,{value:{selectedValue:e}},i.default.Children.map(u,(e,t)=>i.default.createElement(n.default.Provider,{value:t},e))))});u.displayName="TabPanels",e.s(["TabPanels",0,u],723731)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0vo11_94ear6l.js b/litellm/proxy/_experimental/out/_next/static/chunks/0vo11_94ear6l.js new file mode 100644 index 00000000000..a92876debb2 --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0vo11_94ear6l.js @@ -0,0 +1 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,94629,e=>{"use strict";var t=e.i(271645);let a=t.forwardRef(function(e,a){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:a},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M7 16V4m0 0L3 8m4-4l4 4m6 0v12m0 0l4-4m-4 4l-4-4"}))});e.s(["SwitchVerticalIcon",0,a],94629)},916925,e=>{"use strict";var t,a=e.i(555987),n=((t={}).A2A_Agent="A2A Agent",t.AI21="Ai21",t.AI21_CHAT="Ai21 Chat",t.AIML="AI/ML API",t.AIOHTTP_OPENAI="Aiohttp Openai",t.Anthropic="Anthropic",t.ANTHROPIC_TEXT="Anthropic Text",t.AssemblyAI="AssemblyAI",t.AUTO_ROUTER="Auto Router",t.Bedrock="Amazon Bedrock",t.BedrockMantle="Amazon Bedrock Mantle",t.SageMaker="AWS SageMaker",t.Azure="Azure",t.Azure_AI_Studio="Azure AI Foundry (Studio)",t.AZURE_TEXT="Azure Text",t.BASETEN="Baseten",t.BYTEZ="Bytez",t.Cerebras="Cerebras",t.CLARIFAI="Clarifai",t.CLOUDFLARE="Cloudflare",t.CODESTRAL="Codestral",t.Cohere="Cohere",t.COHERE_CHAT="Cohere Chat",t.COMETAPI="Cometapi",t.COMPACTIFAI="Compactifai",t.Cursor="Cursor",t.Dashscope="Dashscope",t.Databricks="Databricks (Qwen API)",t.DATAROBOT="Datarobot",t.DeepInfra="DeepInfra",t.Deepgram="Deepgram",t.Deepseek="Deepseek",t.DOCKER_MODEL_RUNNER="Docker Model Runner",t.DOTPROMPT="Dotprompt",t.ElevenLabs="ElevenLabs",t.EMPOWER="Empower",t.FalAI="Fal AI",t.FEATHERLESS_AI="Featherless Ai",t.FireworksAI="Fireworks AI",t.FRIENDLIAI="Friendliai",t.GALADRIEL="Galadriel",t.GITHUB_COPILOT="Github Copilot",t.Google_AI_Studio="Google AI Studio",t.GradientAI="GradientAI",t.Groq="Groq",t.HEROKU="Heroku",t.Hosted_Vllm="vllm",t.HUGGINGFACE="Huggingface",t.HYPERBOLIC="Hyperbolic",t.Infinity="Infinity",t.JinaAI="Jina AI",t.LAMBDA_AI="Lambda Ai",t.LEMONADE="Lemonade",t.LLAMAFILE="Llamafile",t.LM_STUDIO="Lm Studio",t.LLAMA="Meta Llama",t.MARITALK="Maritalk",t.MiniMax="MiniMax",t.MistralAI="Mistral AI",t.MOONSHOT="Moonshot",t.MORPH="Morph",t.NEBIUS="Nebius",t.NLP_CLOUD="Nlp Cloud",t.NOVITA="Novita",t.NSCALE="Nscale",t.NVIDIA_NIM="Nvidia Nim",t.Ollama="Ollama",t.OLLAMA_CHAT="Ollama Chat",t.OOBABOOGA="Oobabooga",t.OpenAI="OpenAI",t.OPENAI_LIKE="Openai Like",t.OpenAI_Compatible="OpenAI-Compatible Chat Completions (Together AI, vLLM, etc.)",t.OpenAI_Text="OpenAI Text Completion",t.OpenAI_Text_Compatible="OpenAI-Compatible Completions (legacy /v1/completions)",t.Openrouter="Openrouter",t.Oracle="Oracle Cloud Infrastructure (OCI)",t.OVHCLOUD="Ovhcloud",t.Perplexity="Perplexity",t.PETALS="Petals",t.PG_VECTOR="Pg Vector",t.PREDIBASE="Predibase",t.RECRAFT="Recraft",t.REPLICATE="Replicate",t.RunwayML="RunwayML",t.SAGEMAKER_LEGACY="Sagemaker",t.Sambanova="Sambanova",t.SAP="SAP Generative AI Hub",t.Snowflake="Snowflake",t.Soniox="Soniox",t.TEXT_COMPLETION_CODESTRAL="Text-Completion-Codestral",t.TogetherAI="TogetherAI",t.TOPAZ="Topaz",t.Triton="Triton",t.V0="V0",t.VERCEL_AI_GATEWAY="Vercel Ai Gateway",t.Vertex_AI="Vertex AI (Anthropic, Gemini, etc.)",t.VERTEX_AI_BETA="Vertex Ai Beta",t.VLLM="Vllm",t.VolcEngine="VolcEngine",t.Voyage="Voyage AI",t.WANDB="Wandb",t.WATSONX="Watsonx",t.WATSONX_TEXT="Watsonx Text",t.xAI="xAI",t.XINFERENCE="Xinference",t.ZAI="Z.AI (Zhipu AI)",t);let o={A2A_Agent:"a2a_agent",AI21:"ai21",AI21_CHAT:"ai21_chat",AIML:"aiml",AIOHTTP_OPENAI:"aiohttp_openai",Anthropic:"anthropic",ANTHROPIC_TEXT:"anthropic_text",AssemblyAI:"assemblyai",AUTO_ROUTER:"auto_router",Azure:"azure",Azure_AI_Studio:"azure_ai",AZURE_TEXT:"azure_text",BASETEN:"baseten",Bedrock:"bedrock",BedrockMantle:"bedrock_mantle",BYTEZ:"bytez",Cerebras:"cerebras",CLARIFAI:"clarifai",CLOUDFLARE:"cloudflare",CODESTRAL:"codestral",Cohere:"cohere",COHERE_CHAT:"cohere_chat",COMETAPI:"cometapi",COMPACTIFAI:"compactifai",Cursor:"cursor",Dashscope:"dashscope",Databricks:"databricks",DATAROBOT:"datarobot",DeepInfra:"deepinfra",Deepgram:"deepgram",Deepseek:"deepseek",DOCKER_MODEL_RUNNER:"docker_model_runner",DOTPROMPT:"dotprompt",ElevenLabs:"elevenlabs",EMPOWER:"empower",FalAI:"fal_ai",FEATHERLESS_AI:"featherless_ai",FireworksAI:"fireworks_ai",FRIENDLIAI:"friendliai",GALADRIEL:"galadriel",GITHUB_COPILOT:"github_copilot",Google_AI_Studio:"gemini",GradientAI:"gradient_ai",Groq:"groq",HEROKU:"heroku",Hosted_Vllm:"hosted_vllm",HUGGINGFACE:"huggingface",HYPERBOLIC:"hyperbolic",Infinity:"infinity",JinaAI:"jina_ai",LAMBDA_AI:"lambda_ai",LEMONADE:"lemonade",LLAMAFILE:"llamafile",LLAMA:"meta_llama",LM_STUDIO:"lm_studio",MARITALK:"maritalk",MiniMax:"minimax",MistralAI:"mistral",MOONSHOT:"moonshot",MORPH:"morph",NEBIUS:"nebius",NLP_CLOUD:"nlp_cloud",NOVITA:"novita",NSCALE:"nscale",NVIDIA_NIM:"nvidia_nim",Ollama:"ollama",OLLAMA_CHAT:"ollama_chat",OOBABOOGA:"oobabooga",OpenAI:"openai",OPENAI_LIKE:"openai_like",OpenAI_Compatible:"openai",OpenAI_Text:"text-completion-openai",OpenAI_Text_Compatible:"text-completion-openai",Openrouter:"openrouter",Oracle:"oci",OVHCLOUD:"ovhcloud",Perplexity:"perplexity",PETALS:"petals",PG_VECTOR:"pg_vector",PREDIBASE:"predibase",RECRAFT:"recraft",REPLICATE:"replicate",RunwayML:"runwayml",SAGEMAKER_LEGACY:"sagemaker",SageMaker:"sagemaker_chat",Sambanova:"sambanova",SAP:"sap",Snowflake:"snowflake",Soniox:"soniox",TEXT_COMPLETION_CODESTRAL:"text-completion-codestral",TogetherAI:"together_ai",TOPAZ:"topaz",Triton:"triton",V0:"v0",VERCEL_AI_GATEWAY:"vercel_ai_gateway",Vertex_AI:"vertex_ai",VERTEX_AI_BETA:"vertex_ai_beta",VLLM:"vllm",VolcEngine:"volcengine",Voyage:"voyage",WANDB:"wandb",WATSONX:"watsonx",WATSONX_TEXT:"watsonx_text",xAI:"xai",XINFERENCE:"xinference",ZAI:"zai"},i=new Set(["bedrock_mantle"]),l="/ui/assets/logos/",r={"A2A Agent":`${l}a2a_agent.png`,Ai21:`${l}ai21.svg`,"Ai21 Chat":`${l}ai21.svg`,"AI/ML API":`${l}aiml_api.svg`,"Aiohttp Openai":`${l}openai_small.svg`,Anthropic:`${l}anthropic.svg`,"Anthropic Text":`${l}anthropic.svg`,AssemblyAI:`${l}assemblyai_small.png`,Azure:`${l}microsoft_azure.svg`,"Azure AI Foundry (Studio)":`${l}microsoft_azure.svg`,"Azure Text":`${l}microsoft_azure.svg`,Baseten:`${l}baseten.svg`,"Amazon Bedrock":`${l}bedrock.svg`,"Amazon Bedrock Mantle":`${l}bedrock.svg`,"AWS SageMaker":`${l}bedrock.svg`,Cerebras:`${l}cerebras.svg`,Cloudflare:`${l}cloudflare.svg`,Codestral:`${l}mistral.svg`,Cohere:`${l}cohere.svg`,"Cohere Chat":`${l}cohere.svg`,Cometapi:`${l}cometapi.svg`,Cursor:`${l}cursor.svg`,"Databricks (Qwen API)":`${l}databricks.svg`,Dashscope:`${l}dashscope.svg`,Deepseek:`${l}deepseek.svg`,Deepgram:`${l}deepgram.png`,DeepInfra:`${l}deepinfra.png`,ElevenLabs:`${l}elevenlabs.png`,"Fal AI":`${l}fal_ai.jpg`,"Featherless Ai":`${l}featherless.svg`,"Fireworks AI":`${l}fireworks.svg`,Friendliai:`${l}friendli.svg`,"Github Copilot":`${l}github_copilot.svg`,"Google AI Studio":`${l}google.svg`,GradientAI:`${l}gradientai.svg`,Groq:`${l}groq.svg`,vllm:`${l}vllm.png`,Huggingface:`${l}huggingface.svg`,Hyperbolic:`${l}hyperbolic.svg`,Infinity:`${l}infinity.png`,"Jina AI":`${l}jina.png`,"Lambda Ai":`${l}lambda.svg`,"Lm Studio":`${l}lmstudio.svg`,"Meta Llama":`${l}meta_llama.svg`,MiniMax:`${l}minimax.svg`,"Mistral AI":`${l}mistral.svg`,Moonshot:`${l}moonshot.svg`,Morph:`${l}morph.svg`,Nebius:`${l}nebius.svg`,Novita:`${l}novita.svg`,"Nvidia Nim":`${l}nvidia_nim.svg`,Ollama:`${l}ollama.svg`,"Ollama Chat":`${l}ollama.svg`,Oobabooga:`${l}openai_small.svg`,OpenAI:`${l}openai_small.svg`,"Openai Like":`${l}openai_small.svg`,"OpenAI Text Completion":`${l}openai_small.svg`,"OpenAI-Compatible Completions (legacy /v1/completions)":`${l}openai_small.svg`,"OpenAI-Compatible Chat Completions (Together AI, vLLM, etc.)":`${l}openai_small.svg`,Openrouter:`${l}openrouter.svg`,"Oracle Cloud Infrastructure (OCI)":`${l}oracle.svg`,Perplexity:`${l}perplexity-ai.svg`,Recraft:`${l}recraft.svg`,Replicate:`${l}replicate.svg`,RunwayML:`${l}runwayml.png`,Sagemaker:`${l}bedrock.svg`,Sambanova:`${l}sambanova.svg`,"SAP Generative AI Hub":`${l}sap.png`,Snowflake:`${l}snowflake.svg`,Soniox:`${l}soniox.svg`,"Text-Completion-Codestral":`${l}mistral.svg`,TogetherAI:`${l}togetherai.svg`,Topaz:`${l}topaz.svg`,Triton:`${l}nvidia_triton.png`,V0:`${l}v0.svg`,"Vercel Ai Gateway":`${l}vercel.svg`,"Vertex AI (Anthropic, Gemini, etc.)":`${l}google.svg`,"Vertex Ai Beta":`${l}google.svg`,Vllm:`${l}vllm.png`,VolcEngine:`${l}volcengine.png`,"Voyage AI":`${l}voyage.webp`,Watsonx:`${l}watsonx.svg`,"Watsonx Text":`${l}watsonx.svg`,xAI:`${l}xai.svg`,Xinference:`${l}xinference.svg`};e.s(["Providers",()=>n,"getPlaceholder",0,e=>{if("AI/ML API"===e)return"aiml/flux-pro/v1.1";if("Vertex AI (Anthropic, Gemini, etc.)"===e)return"gemini-pro";if("Anthropic"==e)return"claude-3-opus";if("Amazon Bedrock"==e)return"claude-3-opus";if("AWS SageMaker"==e)return"sagemaker/jumpstart-dft-meta-textgeneration-llama-2-7b";else if("Google AI Studio"==e)return"gemini-pro";else if("Azure AI Foundry (Studio)"==e)return"azure_ai/command-r-plus";else if("Azure"==e)return"my-deployment";else if("Oracle Cloud Infrastructure (OCI)"==e)return"oci/xai.grok-4";else if("Snowflake"==e)return"snowflake/mistral-7b";else if("Voyage AI"==e)return"voyage/";else if("Jina AI"==e)return"jina_ai/";else if("VolcEngine"==e)return"volcengine/";else if("DeepInfra"==e)return"deepinfra/";else if("Fal AI"==e)return"fal_ai/fal-ai/flux-pro/v1.1-ultra";else if("RunwayML"==e)return"runwayml/gen4_turbo";else if("Watsonx"===e)return"watsonx/ibm/granite-3-3-8b-instruct";else if("Cursor"===e)return"cursor/claude-4-sonnet";else if("Z.AI (Zhipu AI)"===e)return"zai/glm-4.5";else return"gpt-3.5-turbo"},"getProviderLogoAndName",0,e=>{if(!e)return{logo:"",displayName:"-"};if("gemini"===e.toLowerCase()){let e="Google AI Studio";return{logo:(0,a.resolveLogoSrc)(r[e])??"",displayName:e}}let t=Object.keys(o).find(t=>o[t].toLowerCase()===e.toLowerCase())??Object.keys(o).find(t=>t.toLowerCase()===e.toLowerCase());if(!t)return{logo:"",displayName:e};let i=n[t];return{logo:(0,a.resolveLogoSrc)(r[i])??"",displayName:i}},"getProviderModels",0,(e,t)=>{console.log(`Provider key: ${e}`);let a=o[e];console.log(`Provider mapped to: ${a}`);let n=[];return e&&"object"==typeof t&&(Object.entries(t).forEach(([e,t])=>{if(null!==t&&"object"==typeof t&&"litellm_provider"in t){let o=t.litellm_provider,l="string"==typeof o&&(o.startsWith(`${a}_`)||o.startsWith(`${a}-`));(o===a||l&&!i.has(o))&&n.push(e)}}),"Cohere"==e&&(console.log("Adding cohere chat models"),Object.entries(t).forEach(([e,t])=>{null!==t&&"object"==typeof t&&"litellm_provider"in t&&"cohere_chat"===t.litellm_provider&&n.push(e)})),"AWS SageMaker"==e&&(console.log("Adding sagemaker chat models"),Object.entries(t).forEach(([e,t])=>{null!==t&&"object"==typeof t&&"litellm_provider"in t&&"sagemaker_chat"===t.litellm_provider&&n.push(e)}))),n},"providerLogoMap",0,r,"provider_map",0,o])},991124,e=>{"use strict";let t=(0,e.i(475254).default)("copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);e.s(["default",0,t])},678784,678745,e=>{"use strict";let t=(0,e.i(475254).default)("check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);e.s(["default",0,t],678745),e.s(["CheckIcon",0,t],678784)},118366,e=>{"use strict";var t=e.i(991124);e.s(["CopyIcon",()=>t.default])},751904,e=>{"use strict";var t=e.i(401361);e.s(["EditOutlined",()=>t.default])},608856,e=>{"use strict";e.i(247167);var t=e.i(271645),a=e.i(343794),n=e.i(209428),o=e.i(392221),i=e.i(951160),l=e.i(174428),r=t.createContext(null),s=t.createContext({}),c=e.i(211577),d=e.i(931067),u=e.i(361275),m=e.i(404948),p=e.i(244009),g=e.i(703923),f=e.i(611935),h=["prefixCls","className","containerRef"];let v=function(e){var n=e.prefixCls,o=e.className,i=e.containerRef,l=(0,g.default)(e,h),r=t.useContext(s).panel,c=(0,f.useComposeRef)(r,i);return t.createElement("div",(0,d.default)({className:(0,a.default)("".concat(n,"-content"),o),role:"dialog",ref:c},(0,p.default)(e,{aria:!0}),{"aria-modal":"true"},l))};var b=e.i(883110);function x(e){return"string"==typeof e&&String(Number(e))===e?((0,b.default)(!1,"Invalid value type of `width` or `height` which should be number type instead."),Number(e)):e}var A={width:0,height:0,overflow:"hidden",outline:"none",position:"absolute"},$=t.forwardRef(function(e,i){var l,s,g,f=e.prefixCls,h=e.open,b=e.placement,$=e.inline,y=e.push,O=e.forceRender,C=e.autoFocus,I=e.keyboard,k=e.classNames,E=e.rootClassName,S=e.rootStyle,w=e.zIndex,T=e.className,N=e.id,_=e.style,L=e.motion,M=e.width,z=e.height,R=e.children,j=e.mask,H=e.maskClosable,D=e.maskMotion,B=e.maskClassName,P=e.maskStyle,V=e.afterOpenChange,W=e.onClose,G=e.onMouseEnter,F=e.onMouseOver,U=e.onMouseLeave,X=e.onClick,K=e.onKeyDown,Y=e.onKeyUp,Z=e.styles,q=e.drawerRender,J=t.useRef(),Q=t.useRef(),ee=t.useRef();t.useImperativeHandle(i,function(){return J.current}),t.useEffect(function(){if(h&&C){var e;null==(e=J.current)||e.focus({preventScroll:!0})}},[h]);var et=t.useState(!1),ea=(0,o.default)(et,2),en=ea[0],eo=ea[1],ei=t.useContext(r),el=null!=(l=null!=(s=null==(g="boolean"==typeof y?y?{}:{distance:0}:y||{})?void 0:g.distance)?s:null==ei?void 0:ei.pushDistance)?l:180,er=t.useMemo(function(){return{pushDistance:el,push:function(){eo(!0)},pull:function(){eo(!1)}}},[el]);t.useEffect(function(){var e,t;h?null==ei||null==(e=ei.push)||e.call(ei):null==ei||null==(t=ei.pull)||t.call(ei)},[h]),t.useEffect(function(){return function(){var e;null==ei||null==(e=ei.pull)||e.call(ei)}},[]);var es=t.createElement(u.default,(0,d.default)({key:"mask"},D,{visible:j&&h}),function(e,o){var i=e.className,l=e.style;return t.createElement("div",{className:(0,a.default)("".concat(f,"-mask"),i,null==k?void 0:k.mask,B),style:(0,n.default)((0,n.default)((0,n.default)({},l),P),null==Z?void 0:Z.mask),onClick:H&&h?W:void 0,ref:o})}),ec="function"==typeof L?L(b):L,ed={};if(en&&el)switch(b){case"top":ed.transform="translateY(".concat(el,"px)");break;case"bottom":ed.transform="translateY(".concat(-el,"px)");break;case"left":ed.transform="translateX(".concat(el,"px)");break;default:ed.transform="translateX(".concat(-el,"px)")}"left"===b||"right"===b?ed.width=x(M):ed.height=x(z);var eu={onMouseEnter:G,onMouseOver:F,onMouseLeave:U,onClick:X,onKeyDown:K,onKeyUp:Y},em=t.createElement(u.default,(0,d.default)({key:"panel"},ec,{visible:h,forceRender:O,onVisibleChanged:function(e){null==V||V(e)},removeOnLeave:!1,leavedClassName:"".concat(f,"-content-wrapper-hidden")}),function(o,i){var l=o.className,r=o.style,s=t.createElement(v,(0,d.default)({id:N,containerRef:i,prefixCls:f,className:(0,a.default)(T,null==k?void 0:k.content),style:(0,n.default)((0,n.default)({},_),null==Z?void 0:Z.content)},(0,p.default)(e,{aria:!0}),eu),R);return t.createElement("div",(0,d.default)({className:(0,a.default)("".concat(f,"-content-wrapper"),null==k?void 0:k.wrapper,l),style:(0,n.default)((0,n.default)((0,n.default)({},ed),r),null==Z?void 0:Z.wrapper)},(0,p.default)(e,{data:!0})),q?q(s):s)}),ep=(0,n.default)({},S);return w&&(ep.zIndex=w),t.createElement(r.Provider,{value:er},t.createElement("div",{className:(0,a.default)(f,"".concat(f,"-").concat(b),E,(0,c.default)((0,c.default)({},"".concat(f,"-open"),h),"".concat(f,"-inline"),$)),style:ep,tabIndex:-1,ref:J,onKeyDown:function(e){var t,a,n=e.keyCode,o=e.shiftKey;switch(n){case m.default.TAB:n===m.default.TAB&&(o||document.activeElement!==ee.current?o&&document.activeElement===Q.current&&(null==(a=ee.current)||a.focus({preventScroll:!0})):null==(t=Q.current)||t.focus({preventScroll:!0}));break;case m.default.ESC:W&&I&&(e.stopPropagation(),W(e))}}},es,t.createElement("div",{tabIndex:0,ref:Q,style:A,"aria-hidden":"true","data-sentinel":"start"}),em,t.createElement("div",{tabIndex:0,ref:ee,style:A,"aria-hidden":"true","data-sentinel":"end"})))});let y=function(e){var a=e.open,r=e.prefixCls,c=e.placement,d=e.autoFocus,u=e.keyboard,m=e.width,p=e.mask,g=void 0===p||p,f=e.maskClosable,h=e.getContainer,v=e.forceRender,b=e.afterOpenChange,x=e.destroyOnClose,A=e.onMouseEnter,y=e.onMouseOver,O=e.onMouseLeave,C=e.onClick,I=e.onKeyDown,k=e.onKeyUp,E=e.panelRef,S=t.useState(!1),w=(0,o.default)(S,2),T=w[0],N=w[1],_=t.useState(!1),L=(0,o.default)(_,2),M=L[0],z=L[1];(0,l.default)(function(){z(!0)},[]);var R=!!M&&void 0!==a&&a,j=t.useRef(),H=t.useRef();(0,l.default)(function(){R&&(H.current=document.activeElement)},[R]);var D=t.useMemo(function(){return{panel:E}},[E]);if(!v&&!T&&!R&&x)return null;var B=(0,n.default)((0,n.default)({},e),{},{open:R,prefixCls:void 0===r?"rc-drawer":r,placement:void 0===c?"right":c,autoFocus:void 0===d||d,keyboard:void 0===u||u,width:void 0===m?378:m,mask:g,maskClosable:void 0===f||f,inline:!1===h,afterOpenChange:function(e){var t,a;N(e),null==b||b(e),e||!H.current||null!=(t=j.current)&&t.contains(H.current)||null==(a=H.current)||a.focus({preventScroll:!0})},ref:j},{onMouseEnter:A,onMouseOver:y,onMouseLeave:O,onClick:C,onKeyDown:I,onKeyUp:k});return t.createElement(s.Provider,{value:D},t.createElement(i.default,{open:R||v||T,autoDestroy:!1,getContainer:h,autoLock:g&&(R||T)},t.createElement($,B)))};var O=e.i(981444),C=e.i(617206),I=e.i(122767),k=e.i(613541),E=e.i(340010),S=e.i(242064),w=e.i(922611),T=e.i(563113),N=e.i(185793);let _=e=>{var n,o,i,l;let r,{prefixCls:s,ariaId:c,title:d,footer:u,extra:m,closable:p,loading:g,onClose:f,headerStyle:h,bodyStyle:v,footerStyle:b,children:x,classNames:A,styles:$}=e,y=(0,S.useComponentConfig)("drawer");r=!1===p?void 0:void 0===p||!0===p?"start":(null==p?void 0:p.placement)==="end"?"end":"start";let O=t.useCallback(e=>t.createElement("button",{type:"button",onClick:f,className:(0,a.default)(`${s}-close`,{[`${s}-close-${r}`]:"end"===r})},e),[f,s,r]),[C,I]=(0,T.useClosable)((0,T.pickClosable)(e),(0,T.pickClosable)(y),{closable:!0,closeIconRender:O});return t.createElement(t.Fragment,null,d||C?t.createElement("div",{style:Object.assign(Object.assign(Object.assign({},null==(i=y.styles)?void 0:i.header),h),null==$?void 0:$.header),className:(0,a.default)(`${s}-header`,{[`${s}-header-close-only`]:C&&!d&&!m},null==(l=y.classNames)?void 0:l.header,null==A?void 0:A.header)},t.createElement("div",{className:`${s}-header-title`},"start"===r&&I,d&&t.createElement("div",{className:`${s}-title`,id:c},d)),m&&t.createElement("div",{className:`${s}-extra`},m),"end"===r&&I):null,t.createElement("div",{className:(0,a.default)(`${s}-body`,null==A?void 0:A.body,null==(n=y.classNames)?void 0:n.body),style:Object.assign(Object.assign(Object.assign({},null==(o=y.styles)?void 0:o.body),v),null==$?void 0:$.body)},g?t.createElement(N.default,{active:!0,title:!1,paragraph:{rows:5},className:`${s}-body-skeleton`}):x),(()=>{var e,n;if(!u)return null;let o=`${s}-footer`;return t.createElement("div",{className:(0,a.default)(o,null==(e=y.classNames)?void 0:e.footer,null==A?void 0:A.footer),style:Object.assign(Object.assign(Object.assign({},null==(n=y.styles)?void 0:n.footer),b),null==$?void 0:$.footer)},u)})())};e.i(296059);var L=e.i(915654),M=e.i(183293),z=e.i(246422),R=e.i(838378);let j=(e,t)=>({"&-enter, &-appear":Object.assign(Object.assign({},e),{"&-active":t}),"&-leave":Object.assign(Object.assign({},t),{"&-active":e})}),H=(e,t)=>Object.assign({"&-enter, &-appear, &-leave":{"&-start":{transition:"none"},"&-active":{transition:`all ${t}`}}},j({opacity:e},{opacity:1})),D=(0,z.genStyleHooks)("Drawer",e=>{let t=(0,R.mergeToken)(e,{});return[(e=>{let{borderRadiusSM:t,componentCls:a,zIndexPopup:n,colorBgMask:o,colorBgElevated:i,motionDurationSlow:l,motionDurationMid:r,paddingXS:s,padding:c,paddingLG:d,fontSizeLG:u,lineHeightLG:m,lineWidth:p,lineType:g,colorSplit:f,marginXS:h,colorIcon:v,colorIconHover:b,colorBgTextHover:x,colorBgTextActive:A,colorText:$,fontWeightStrong:y,footerPaddingBlock:O,footerPaddingInline:C,calc:I}=e,k=`${a}-content-wrapper`;return{[a]:{position:"fixed",inset:0,zIndex:n,pointerEvents:"none",color:$,"&-pure":{position:"relative",background:i,display:"flex",flexDirection:"column",[`&${a}-left`]:{boxShadow:e.boxShadowDrawerLeft},[`&${a}-right`]:{boxShadow:e.boxShadowDrawerRight},[`&${a}-top`]:{boxShadow:e.boxShadowDrawerUp},[`&${a}-bottom`]:{boxShadow:e.boxShadowDrawerDown}},"&-inline":{position:"absolute"},[`${a}-mask`]:{position:"absolute",inset:0,zIndex:n,background:o,pointerEvents:"auto"},[k]:{position:"absolute",zIndex:n,maxWidth:"100vw",transition:`all ${l}`,"&-hidden":{display:"none"}},[`&-left > ${k}`]:{top:0,bottom:0,left:{_skip_check_:!0,value:0},boxShadow:e.boxShadowDrawerLeft},[`&-right > ${k}`]:{top:0,right:{_skip_check_:!0,value:0},bottom:0,boxShadow:e.boxShadowDrawerRight},[`&-top > ${k}`]:{top:0,insetInline:0,boxShadow:e.boxShadowDrawerUp},[`&-bottom > ${k}`]:{bottom:0,insetInline:0,boxShadow:e.boxShadowDrawerDown},[`${a}-content`]:{display:"flex",flexDirection:"column",width:"100%",height:"100%",overflow:"auto",background:i,pointerEvents:"auto"},[`${a}-header`]:{display:"flex",flex:0,alignItems:"center",padding:`${(0,L.unit)(c)} ${(0,L.unit)(d)}`,fontSize:u,lineHeight:m,borderBottom:`${(0,L.unit)(p)} ${g} ${f}`,"&-title":{display:"flex",flex:1,alignItems:"center",minWidth:0,minHeight:0}},[`${a}-extra`]:{flex:"none"},[`${a}-close`]:Object.assign({display:"inline-flex",width:I(u).add(s).equal(),height:I(u).add(s).equal(),borderRadius:t,justifyContent:"center",alignItems:"center",color:v,fontWeight:y,fontSize:u,fontStyle:"normal",lineHeight:1,textAlign:"center",textTransform:"none",textDecoration:"none",background:"transparent",border:0,cursor:"pointer",transition:`all ${r}`,textRendering:"auto",[`&${a}-close-end`]:{marginInlineStart:h},[`&:not(${a}-close-end)`]:{marginInlineEnd:h},"&:hover":{color:b,backgroundColor:x,textDecoration:"none"},"&:active":{backgroundColor:A}},(0,M.genFocusStyle)(e)),[`${a}-title`]:{flex:1,margin:0,fontWeight:e.fontWeightStrong,fontSize:u,lineHeight:m},[`${a}-body`]:{flex:1,minWidth:0,minHeight:0,padding:d,overflow:"auto",[`${a}-body-skeleton`]:{width:"100%",height:"100%",display:"flex",justifyContent:"center"}},[`${a}-footer`]:{flexShrink:0,padding:`${(0,L.unit)(O)} ${(0,L.unit)(C)}`,borderTop:`${(0,L.unit)(p)} ${g} ${f}`},"&-rtl":{direction:"rtl"}}}})(t),(e=>{let{componentCls:t,motionDurationSlow:a}=e;return{[t]:{[`${t}-mask-motion`]:H(0,a),[`${t}-panel-motion`]:["left","right","top","bottom"].reduce((e,t)=>{let n;return Object.assign(Object.assign({},e),{[`&-${t}`]:[H(.7,a),j({transform:(n="100%",({left:`translateX(-${n})`,right:`translateX(${n})`,top:`translateY(-${n})`,bottom:`translateY(${n})`})[t])},{transform:"none"})]})},{})}}})(t)]},e=>({zIndexPopup:e.zIndexPopupBase,footerPaddingBlock:e.paddingXS,footerPaddingInline:e.padding}));var B=function(e,t){var a={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&0>t.indexOf(n)&&(a[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,n=Object.getOwnPropertySymbols(e);ot.indexOf(n[o])&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(a[n[o]]=e[n[o]]);return a};let P={distance:180},V=e=>{let{rootClassName:n,width:o,height:i,size:l="default",mask:r=!0,push:s=P,open:c,afterOpenChange:d,onClose:u,prefixCls:m,getContainer:p,panelRef:g=null,style:h,className:v,"aria-labelledby":b,visible:x,afterVisibleChange:A,maskStyle:$,drawerStyle:T,contentWrapperStyle:N,destroyOnClose:L,destroyOnHidden:M}=e,z=B(e,["rootClassName","width","height","size","mask","push","open","afterOpenChange","onClose","prefixCls","getContainer","panelRef","style","className","aria-labelledby","visible","afterVisibleChange","maskStyle","drawerStyle","contentWrapperStyle","destroyOnClose","destroyOnHidden"]),R=(0,O.default)(),j=z.title?R:void 0,{getPopupContainer:H,getPrefixCls:V,direction:W,className:G,style:F,classNames:U,styles:X}=(0,S.useComponentConfig)("drawer"),K=V("drawer",m),[Y,Z,q]=D(K),J=void 0===p&&H?()=>H(document.body):p,Q=(0,a.default)({"no-mask":!r,[`${K}-rtl`]:"rtl"===W},n,Z,q),ee=t.useMemo(()=>null!=o?o:"large"===l?736:378,[o,l]),et=t.useMemo(()=>null!=i?i:"large"===l?736:378,[i,l]),ea={motionName:(0,k.getTransitionName)(K,"mask-motion"),motionAppear:!0,motionEnter:!0,motionLeave:!0,motionDeadline:500},en=(0,w.usePanelRef)(),eo=(0,f.composeRef)(g,en),[ei,el]=(0,I.useZIndex)("Drawer",z.zIndex),{classNames:er={},styles:es={}}=z;return Y(t.createElement(C.default,{form:!0,space:!0},t.createElement(E.default.Provider,{value:el},t.createElement(y,Object.assign({prefixCls:K,onClose:u,maskMotion:ea,motion:e=>({motionName:(0,k.getTransitionName)(K,`panel-motion-${e}`),motionAppear:!0,motionEnter:!0,motionLeave:!0,motionDeadline:500})},z,{classNames:{mask:(0,a.default)(er.mask,U.mask),content:(0,a.default)(er.content,U.content),wrapper:(0,a.default)(er.wrapper,U.wrapper)},styles:{mask:Object.assign(Object.assign(Object.assign({},es.mask),$),X.mask),content:Object.assign(Object.assign(Object.assign({},es.content),T),X.content),wrapper:Object.assign(Object.assign(Object.assign({},es.wrapper),N),X.wrapper)},open:null!=c?c:x,mask:r,push:s,width:ee,height:et,style:Object.assign(Object.assign({},F),h),className:(0,a.default)(G,v),rootClassName:Q,getContainer:J,afterOpenChange:null!=d?d:A,panelRef:eo,zIndex:ei,"aria-labelledby":null!=b?b:j,destroyOnClose:null!=M?M:L}),t.createElement(_,Object.assign({prefixCls:K},z,{ariaId:j,onClose:u}))))))};V._InternalPanelDoNotUseOrYouWillBeFired=e=>{let{prefixCls:n,style:o,className:i,placement:l="right"}=e,r=B(e,["prefixCls","style","className","placement"]),{getPrefixCls:s}=t.useContext(S.ConfigContext),c=s("drawer",n),[d,u,m]=D(c),p=(0,a.default)(c,`${c}-pure`,`${c}-${l}`,u,m,i);return d(t.createElement("div",{className:p,style:o},t.createElement(_,Object.assign({prefixCls:c},r))))},e.s(["Drawer",0,V],608856)},516430,e=>{"use strict";let t=(0,e.i(475254).default)("arrow-left",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);e.s(["ArrowLeftIcon",0,t],516430)},245094,e=>{"use strict";e.i(247167);var t=e.i(931067),a=e.i(271645);let n={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M516 673c0 4.4 3.4 8 7.5 8h185c4.1 0 7.5-3.6 7.5-8v-48c0-4.4-3.4-8-7.5-8h-185c-4.1 0-7.5 3.6-7.5 8v48zm-194.9 6.1l192-161c3.8-3.2 3.8-9.1 0-12.3l-192-160.9A7.95 7.95 0 00308 351v62.7c0 2.4 1 4.6 2.9 6.1L420.7 512l-109.8 92.2a8.1 8.1 0 00-2.9 6.1V673c0 6.8 7.9 10.5 13.1 6.1zM880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"}}]},name:"code",theme:"outlined"};var o=e.i(9583),i=a.forwardRef(function(e,i){return a.createElement(o.default,(0,t.default)({},e,{ref:i,icon:n}))});e.s(["CodeOutlined",0,i],245094)},903446,e=>{"use strict";let t=(0,e.i(475254).default)("settings",[["path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z",key:"1qme2f"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);e.s(["default",0,t])},458505,e=>{"use strict";e.i(247167);var t=e.i(931067),a=e.i(271645);let n={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372zm47.7-395.2l-25.4-5.9V348.6c38 5.2 61.5 29 65.5 58.2.5 4 3.9 6.9 7.9 6.9h44.9c4.7 0 8.4-4.1 8-8.8-6.1-62.3-57.4-102.3-125.9-109.2V263c0-4.4-3.6-8-8-8h-28.1c-4.4 0-8 3.6-8 8v33c-70.8 6.9-126.2 46-126.2 119 0 67.6 49.8 100.2 102.1 112.7l24.7 6.3v142.7c-44.2-5.9-69-29.5-74.1-61.3-.6-3.8-4-6.6-7.9-6.6H363c-4.7 0-8.4 4-8 8.7 4.5 55 46.2 105.6 135.2 112.1V761c0 4.4 3.6 8 8 8h28.4c4.4 0 8-3.6 8-8.1l-.2-31.7c78.3-6.9 134.3-48.8 134.3-124-.1-69.4-44.2-100.4-109-116.4zm-68.6-16.2c-5.6-1.6-10.3-3.1-15-5-33.8-12.2-49.5-31.9-49.5-57.3 0-36.3 27.5-57 64.5-61.7v124zM534.3 677V543.3c3.1.9 5.9 1.6 8.8 2.2 47.3 14.4 63.2 34.4 63.2 65.1 0 39.1-29.4 62.6-72 66.4z"}}]},name:"dollar",theme:"outlined"};var o=e.i(9583),i=a.forwardRef(function(e,i){return a.createElement(o.default,(0,t.default)({},e,{ref:i,icon:n}))});e.s(["DollarOutlined",0,i],458505)},440987,e=>{"use strict";var t=e.i(903446);e.s(["SettingsIcon",()=>t.default])},219470,e=>{"use strict";e.s(["coy",0,{'code[class*="language-"]':{color:"black",background:"none",fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",fontSize:"1em",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",maxHeight:"inherit",height:"inherit",padding:"0 1em",display:"block",overflow:"auto"},'pre[class*="language-"]':{color:"black",background:"none",fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",fontSize:"1em",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",position:"relative",margin:".5em 0",overflow:"visible",padding:"1px",backgroundColor:"#fdfdfd",WebkitBoxSizing:"border-box",MozBoxSizing:"border-box",boxSizing:"border-box",marginBottom:"1em"},'pre[class*="language-"] > code':{position:"relative",zIndex:"1",borderLeft:"10px solid #358ccb",boxShadow:"-1px 0px 0px 0px #358ccb, 0px 0px 0px 1px #dfdfdf",backgroundColor:"#fdfdfd",backgroundImage:"linear-gradient(transparent 50%, rgba(69, 142, 209, 0.04) 50%)",backgroundSize:"3em 3em",backgroundOrigin:"content-box",backgroundAttachment:"local"},':not(pre) > code[class*="language-"]':{backgroundColor:"#fdfdfd",WebkitBoxSizing:"border-box",MozBoxSizing:"border-box",boxSizing:"border-box",marginBottom:"1em",position:"relative",padding:".2em",borderRadius:"0.3em",color:"#c92c2c",border:"1px solid rgba(0, 0, 0, 0.1)",display:"inline",whiteSpace:"normal"},'pre[class*="language-"]:before':{content:"''",display:"block",position:"absolute",bottom:"0.75em",left:"0.18em",width:"40%",height:"20%",maxHeight:"13em",boxShadow:"0px 13px 8px #979797",WebkitTransform:"rotate(-2deg)",MozTransform:"rotate(-2deg)",msTransform:"rotate(-2deg)",OTransform:"rotate(-2deg)",transform:"rotate(-2deg)"},'pre[class*="language-"]:after':{content:"''",display:"block",position:"absolute",bottom:"0.75em",left:"auto",width:"40%",height:"20%",maxHeight:"13em",boxShadow:"0px 13px 8px #979797",WebkitTransform:"rotate(2deg)",MozTransform:"rotate(2deg)",msTransform:"rotate(2deg)",OTransform:"rotate(2deg)",transform:"rotate(2deg)",right:"0.75em"},comment:{color:"#7D8B99"},"block-comment":{color:"#7D8B99"},prolog:{color:"#7D8B99"},doctype:{color:"#7D8B99"},cdata:{color:"#7D8B99"},punctuation:{color:"#5F6364"},property:{color:"#c92c2c"},tag:{color:"#c92c2c"},boolean:{color:"#c92c2c"},number:{color:"#c92c2c"},"function-name":{color:"#c92c2c"},constant:{color:"#c92c2c"},symbol:{color:"#c92c2c"},deleted:{color:"#c92c2c"},selector:{color:"#2f9c0a"},"attr-name":{color:"#2f9c0a"},string:{color:"#2f9c0a"},char:{color:"#2f9c0a"},function:{color:"#2f9c0a"},builtin:{color:"#2f9c0a"},inserted:{color:"#2f9c0a"},operator:{color:"#a67f59",background:"rgba(255, 255, 255, 0.5)"},entity:{color:"#a67f59",background:"rgba(255, 255, 255, 0.5)",cursor:"help"},url:{color:"#a67f59",background:"rgba(255, 255, 255, 0.5)"},variable:{color:"#a67f59",background:"rgba(255, 255, 255, 0.5)"},atrule:{color:"#1990b8"},"attr-value":{color:"#1990b8"},keyword:{color:"#1990b8"},"class-name":{color:"#1990b8"},regex:{color:"#e90"},important:{color:"#e90",fontWeight:"normal"},".language-css .token.string":{color:"#a67f59",background:"rgba(255, 255, 255, 0.5)"},".style .token.string":{color:"#a67f59",background:"rgba(255, 255, 255, 0.5)"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},namespace:{Opacity:".7"},'pre[class*="language-"].line-numbers.line-numbers':{paddingLeft:"0"},'pre[class*="language-"].line-numbers.line-numbers code':{paddingLeft:"3.8em"},'pre[class*="language-"].line-numbers.line-numbers .line-numbers-rows':{left:"0"},'pre[class*="language-"][data-line]':{paddingTop:"0",paddingBottom:"0",paddingLeft:"0"},"pre[data-line] code":{position:"relative",paddingLeft:"4em"},"pre .line-highlight":{marginTop:"0"}}],219470)},447593,e=>{"use strict";e.i(247167);var t=e.i(931067),a=e.i(271645),n={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"defs",attrs:{},children:[{tag:"style",attrs:{}}]},{tag:"path",attrs:{d:"M899.1 869.6l-53-305.6H864c14.4 0 26-11.6 26-26V346c0-14.4-11.6-26-26-26H618V138c0-14.4-11.6-26-26-26H432c-14.4 0-26 11.6-26 26v182H160c-14.4 0-26 11.6-26 26v192c0 14.4 11.6 26 26 26h17.9l-53 305.6a25.95 25.95 0 0025.6 30.4h723c1.5 0 3-.1 4.4-.4a25.88 25.88 0 0021.2-30zM204 390h272V182h72v208h272v104H204V390zm468 440V674c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v156H416V674c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v156H202.8l45.1-260H776l45.1 260H672z"}}]},name:"clear",theme:"outlined"},o=e.i(9583),i=a.forwardRef(function(e,i){return a.createElement(o.default,(0,t.default)({},e,{ref:i,icon:n}))});e.s(["ClearOutlined",0,i],447593)},589362,464398,e=>{"use strict";e.i(247167);var t=e.i(931067),a=e.i(271645);let n={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M872 394c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8H708V152c0-4.4-3.6-8-8-8h-64c-4.4 0-8 3.6-8 8v166H400V152c0-4.4-3.6-8-8-8h-64c-4.4 0-8 3.6-8 8v166H152c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h168v236H152c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h168v166c0 4.4 3.6 8 8 8h64c4.4 0 8-3.6 8-8V706h228v166c0 4.4 3.6 8 8 8h64c4.4 0 8-3.6 8-8V706h164c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8H708V394h164zM628 630H400V394h228v236z"}}]},name:"number",theme:"outlined"};var o=e.i(9583),i=a.forwardRef(function(e,i){return a.createElement(o.default,(0,t.default)({},e,{ref:i,icon:n}))});e.s(["NumberOutlined",0,i],589362);let l={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M880 912H144c-17.7 0-32-14.3-32-32V144c0-17.7 14.3-32 32-32h360c4.4 0 8 3.6 8 8v56c0 4.4-3.6 8-8 8H184v656h656V520c0-4.4 3.6-8 8-8h56c4.4 0 8 3.6 8 8v360c0 17.7-14.3 32-32 32zM653.3 424.6l52.2 52.2a8.01 8.01 0 01-4.7 13.6l-179.4 21c-5.1.6-9.5-3.7-8.9-8.9l21-179.4c.8-6.6 8.9-9.4 13.6-4.7l52.4 52.4 256.2-256.2c3.1-3.1 8.2-3.1 11.3 0l42.4 42.4c3.1 3.1 3.1 8.2 0 11.3L653.3 424.6z"}}]},name:"import",theme:"outlined"};var r=a.forwardRef(function(e,n){return a.createElement(o.default,(0,t.default)({},e,{ref:n,icon:l}))});e.s(["ImportOutlined",0,r],464398)},812618,e=>{"use strict";e.i(247167);var t=e.i(931067),a=e.i(271645);let n={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M632 888H392c-4.4 0-8 3.6-8 8v32c0 17.7 14.3 32 32 32h192c17.7 0 32-14.3 32-32v-32c0-4.4-3.6-8-8-8zM512 64c-181.1 0-328 146.9-328 328 0 121.4 66 227.4 164 284.1V792c0 17.7 14.3 32 32 32h264c17.7 0 32-14.3 32-32V676.1c98-56.7 164-162.7 164-284.1 0-181.1-146.9-328-328-328zm127.9 549.8L604 634.6V752H420V634.6l-35.9-20.8C305.4 568.3 256 484.5 256 392c0-141.4 114.6-256 256-256s256 114.6 256 256c0 92.5-49.4 176.3-128.1 221.8z"}}]},name:"bulb",theme:"outlined"};var o=e.i(9583),i=a.forwardRef(function(e,i){return a.createElement(o.default,(0,t.default)({},e,{ref:i,icon:n}))});e.s(["BulbOutlined",0,i],812618)},285903,e=>{"use strict";var t=e.i(843476),a=e.i(592968),n=e.i(637235),o=e.i(589362),i=e.i(464398),l=e.i(872934),r=e.i(812618),s=e.i(366308),c=e.i(458505);e.s(["default",0,({timeToFirstToken:e,totalLatency:d,usage:u,toolName:m})=>e||d||u?(0,t.jsxs)("div",{className:"response-metrics mt-2 pt-2 border-t border-gray-100 text-xs text-gray-500 flex flex-wrap gap-3",children:[void 0!==e&&(0,t.jsx)(a.Tooltip,{title:"Time to first token",children:(0,t.jsxs)("div",{className:"flex items-center",children:[(0,t.jsx)(n.ClockCircleOutlined,{className:"mr-1"}),(0,t.jsxs)("span",{children:["TTFT: ",(e/1e3).toFixed(2),"s"]})]})}),void 0!==d&&(0,t.jsx)(a.Tooltip,{title:"Total latency",children:(0,t.jsxs)("div",{className:"flex items-center",children:[(0,t.jsx)(n.ClockCircleOutlined,{className:"mr-1"}),(0,t.jsxs)("span",{children:["Total Latency: ",(d/1e3).toFixed(2),"s"]})]})}),u?.promptTokens!==void 0&&(0,t.jsx)(a.Tooltip,{title:"Prompt tokens",children:(0,t.jsxs)("div",{className:"flex items-center",children:[(0,t.jsx)(i.ImportOutlined,{className:"mr-1"}),(0,t.jsxs)("span",{children:["In: ",u.promptTokens]})]})}),u?.completionTokens!==void 0&&(0,t.jsx)(a.Tooltip,{title:"Completion tokens",children:(0,t.jsxs)("div",{className:"flex items-center",children:[(0,t.jsx)(l.ExportOutlined,{className:"mr-1"}),(0,t.jsxs)("span",{children:["Out: ",u.completionTokens]})]})}),u?.reasoningTokens!==void 0&&(0,t.jsx)(a.Tooltip,{title:"Reasoning tokens",children:(0,t.jsxs)("div",{className:"flex items-center",children:[(0,t.jsx)(r.BulbOutlined,{className:"mr-1"}),(0,t.jsxs)("span",{children:["Reasoning: ",u.reasoningTokens]})]})}),u?.totalTokens!==void 0&&(0,t.jsx)(a.Tooltip,{title:"Total tokens",children:(0,t.jsxs)("div",{className:"flex items-center",children:[(0,t.jsx)(o.NumberOutlined,{className:"mr-1"}),(0,t.jsxs)("span",{children:["Total: ",u.totalTokens]})]})}),u?.cost!==void 0&&(0,t.jsx)(a.Tooltip,{title:"Cost",children:(0,t.jsxs)("div",{className:"flex items-center",children:[(0,t.jsx)(c.DollarOutlined,{className:"mr-1"}),(0,t.jsxs)("span",{children:["$",u.cost.toFixed(6)]})]})}),m&&(0,t.jsx)(a.Tooltip,{title:"Tool used",children:(0,t.jsxs)("div",{className:"flex items-center",children:[(0,t.jsx)(s.ToolOutlined,{className:"mr-1"}),(0,t.jsxs)("span",{children:["Tool: ",m]})]})})]}):null])},132104,e=>{"use strict";e.i(247167);var t=e.i(931067),a=e.i(271645);let n={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M868 545.5L536.1 163a31.96 31.96 0 00-48.3 0L156 545.5a7.97 7.97 0 006 13.2h81c4.6 0 9-2 12.1-5.5L474 300.9V864c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V300.9l218.9 252.3c3 3.5 7.4 5.5 12.1 5.5h81c6.8 0 10.5-8 6-13.2z"}}]},name:"arrow-up",theme:"outlined"};var o=e.i(9583),i=a.forwardRef(function(e,i){return a.createElement(o.default,(0,t.default)({},e,{ref:i,icon:n}))});e.s(["ArrowUpOutlined",0,i],132104)},573421,e=>{"use strict";e.i(247167);var t=e.i(8211),a=e.i(271645),n=e.i(343794),o=e.i(887719),i=e.i(908206),l=e.i(242064),r=e.i(721132),s=e.i(517455),c=e.i(264042),d=e.i(150073),u=e.i(165370),m=e.i(244451);let p=a.default.createContext({});p.Consumer;var g=e.i(763731),f=e.i(211576),h=function(e,t){var a={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&0>t.indexOf(n)&&(a[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,n=Object.getOwnPropertySymbols(e);ot.indexOf(n[o])&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(a[n[o]]=e[n[o]]);return a};let v=a.default.forwardRef((e,t)=>{let o,{prefixCls:i,children:r,actions:s,extra:c,styles:d,className:u,classNames:m,colStyle:v}=e,b=h(e,["prefixCls","children","actions","extra","styles","className","classNames","colStyle"]),{grid:x,itemLayout:A}=(0,a.useContext)(p),{getPrefixCls:$,list:y}=(0,a.useContext)(l.ConfigContext),O=e=>{var t,a;return(0,n.default)(null==(a=null==(t=null==y?void 0:y.item)?void 0:t.classNames)?void 0:a[e],null==m?void 0:m[e])},C=e=>{var t,a;return Object.assign(Object.assign({},null==(a=null==(t=null==y?void 0:y.item)?void 0:t.styles)?void 0:a[e]),null==d?void 0:d[e])},I=$("list",i),k=s&&s.length>0&&a.default.createElement("ul",{className:(0,n.default)(`${I}-item-action`,O("actions")),key:"actions",style:C("actions")},s.map((e,t)=>a.default.createElement("li",{key:`${I}-item-action-${t}`},e,t!==s.length-1&&a.default.createElement("em",{className:`${I}-item-action-split`})))),E=a.default.createElement(x?"div":"li",Object.assign({},b,x?{}:{ref:t},{className:(0,n.default)(`${I}-item`,{[`${I}-item-no-flex`]:!("vertical"===A?!!c:(o=!1,a.Children.forEach(r,e=>{"string"==typeof e&&(o=!0)}),!(o&&a.Children.count(r)>1)))},u)}),"vertical"===A&&c?[a.default.createElement("div",{className:`${I}-item-main`,key:"content"},r,k),a.default.createElement("div",{className:(0,n.default)(`${I}-item-extra`,O("extra")),key:"extra",style:C("extra")},c)]:[r,k,(0,g.cloneElement)(c,{key:"extra"})]);return x?a.default.createElement(f.Col,{ref:t,flex:1,style:v},E):E});v.Meta=e=>{var{prefixCls:t,className:o,avatar:i,title:r,description:s}=e,c=h(e,["prefixCls","className","avatar","title","description"]);let{getPrefixCls:d}=(0,a.useContext)(l.ConfigContext),u=d("list",t),m=(0,n.default)(`${u}-item-meta`,o),p=a.default.createElement("div",{className:`${u}-item-meta-content`},r&&a.default.createElement("h4",{className:`${u}-item-meta-title`},r),s&&a.default.createElement("div",{className:`${u}-item-meta-description`},s));return a.default.createElement("div",Object.assign({},c,{className:m}),i&&a.default.createElement("div",{className:`${u}-item-meta-avatar`},i),(r||s)&&p)},e.i(296059);var b=e.i(915654),x=e.i(183293),A=e.i(246422),$=e.i(838378);let y=(0,A.genStyleHooks)("List",e=>{let t=(0,$.mergeToken)(e,{listBorderedCls:`${e.componentCls}-bordered`,minHeight:e.controlHeightLG});return[(e=>{let{componentCls:t,antCls:a,controlHeight:n,minHeight:o,paddingSM:i,marginLG:l,padding:r,itemPadding:s,colorPrimary:c,itemPaddingSM:d,itemPaddingLG:u,paddingXS:m,margin:p,colorText:g,colorTextDescription:f,motionDurationSlow:h,lineWidth:v,headerBg:A,footerBg:$,emptyTextPadding:y,metaMarginBottom:O,avatarMarginRight:C,titleMarginBottom:I,descriptionFontSize:k}=e;return{[t]:Object.assign(Object.assign({},(0,x.resetComponent)(e)),{position:"relative","--rc-virtual-list-scrollbar-bg":e.colorSplit,"*":{outline:"none"},[`${t}-header`]:{background:A},[`${t}-footer`]:{background:$},[`${t}-header, ${t}-footer`]:{paddingBlock:i},[`${t}-pagination`]:{marginBlockStart:l,[`${a}-pagination-options`]:{textAlign:"start"}},[`${t}-spin`]:{minHeight:o,textAlign:"center"},[`${t}-items`]:{margin:0,padding:0,listStyle:"none"},[`${t}-item`]:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:s,color:g,[`${t}-item-meta`]:{display:"flex",flex:1,alignItems:"flex-start",maxWidth:"100%",[`${t}-item-meta-avatar`]:{marginInlineEnd:C},[`${t}-item-meta-content`]:{flex:"1 0",width:0,color:g},[`${t}-item-meta-title`]:{margin:`0 0 ${(0,b.unit)(e.marginXXS)} 0`,color:g,fontSize:e.fontSize,lineHeight:e.lineHeight,"> a":{color:g,transition:`all ${h}`,"&:hover":{color:c}}},[`${t}-item-meta-description`]:{color:f,fontSize:k,lineHeight:e.lineHeight}},[`${t}-item-action`]:{flex:"0 0 auto",marginInlineStart:e.marginXXL,padding:0,fontSize:0,listStyle:"none","& > li":{position:"relative",display:"inline-block",padding:`0 ${(0,b.unit)(m)}`,color:f,fontSize:e.fontSize,lineHeight:e.lineHeight,textAlign:"center","&:first-child":{paddingInlineStart:0}},[`${t}-item-action-split`]:{position:"absolute",insetBlockStart:"50%",insetInlineEnd:0,width:v,height:e.calc(e.fontHeight).sub(e.calc(e.marginXXS).mul(2)).equal(),transform:"translateY(-50%)",backgroundColor:e.colorSplit}}},[`${t}-empty`]:{padding:`${(0,b.unit)(r)} 0`,color:f,fontSize:e.fontSizeSM,textAlign:"center"},[`${t}-empty-text`]:{padding:y,color:e.colorTextDisabled,fontSize:e.fontSize,textAlign:"center"},[`${t}-item-no-flex`]:{display:"block"}}),[`${t}-grid ${a}-col > ${t}-item`]:{display:"block",maxWidth:"100%",marginBlockEnd:p,paddingBlock:0,borderBlockEnd:"none"},[`${t}-vertical ${t}-item`]:{alignItems:"initial",[`${t}-item-main`]:{display:"block",flex:1},[`${t}-item-extra`]:{marginInlineStart:l},[`${t}-item-meta`]:{marginBlockEnd:O,[`${t}-item-meta-title`]:{marginBlockStart:0,marginBlockEnd:I,color:g,fontSize:e.fontSizeLG,lineHeight:e.lineHeightLG}},[`${t}-item-action`]:{marginBlockStart:r,marginInlineStart:"auto","> li":{padding:`0 ${(0,b.unit)(r)}`,"&:first-child":{paddingInlineStart:0}}}},[`${t}-split ${t}-item`]:{borderBlockEnd:`${(0,b.unit)(e.lineWidth)} ${e.lineType} ${e.colorSplit}`,"&:last-child":{borderBlockEnd:"none"}},[`${t}-split ${t}-header`]:{borderBlockEnd:`${(0,b.unit)(e.lineWidth)} ${e.lineType} ${e.colorSplit}`},[`${t}-split${t}-empty ${t}-footer`]:{borderTop:`${(0,b.unit)(e.lineWidth)} ${e.lineType} ${e.colorSplit}`},[`${t}-loading ${t}-spin-nested-loading`]:{minHeight:n},[`${t}-split${t}-something-after-last-item ${a}-spin-container > ${t}-items > ${t}-item:last-child`]:{borderBlockEnd:`${(0,b.unit)(e.lineWidth)} ${e.lineType} ${e.colorSplit}`},[`${t}-lg ${t}-item`]:{padding:u},[`${t}-sm ${t}-item`]:{padding:d},[`${t}:not(${t}-vertical)`]:{[`${t}-item-no-flex`]:{[`${t}-item-action`]:{float:"right"}}}}})(t),(e=>{let{listBorderedCls:t,componentCls:a,paddingLG:n,margin:o,itemPaddingSM:i,itemPaddingLG:l,marginLG:r,borderRadiusLG:s}=e,c=(0,b.unit)(e.calc(s).sub(e.lineWidth).equal());return{[t]:{border:`${(0,b.unit)(e.lineWidth)} ${e.lineType} ${e.colorBorder}`,borderRadius:s,[`${a}-header`]:{borderRadius:`${c} ${c} 0 0`},[`${a}-footer`]:{borderRadius:`0 0 ${c} ${c}`},[`${a}-header,${a}-footer,${a}-item`]:{paddingInline:n},[`${a}-pagination`]:{margin:`${(0,b.unit)(o)} ${(0,b.unit)(r)}`}},[`${t}${a}-sm`]:{[`${a}-item,${a}-header,${a}-footer`]:{padding:i}},[`${t}${a}-lg`]:{[`${a}-item,${a}-header,${a}-footer`]:{padding:l}}}})(t),(e=>{let{componentCls:t,screenSM:a,screenMD:n,marginLG:o,marginSM:i,margin:l}=e;return{[`@media screen and (max-width:${n}px)`]:{[t]:{[`${t}-item`]:{[`${t}-item-action`]:{marginInlineStart:o}}},[`${t}-vertical`]:{[`${t}-item`]:{[`${t}-item-extra`]:{marginInlineStart:o}}}},[`@media screen and (max-width: ${a}px)`]:{[t]:{[`${t}-item`]:{flexWrap:"wrap",[`${t}-action`]:{marginInlineStart:i}}},[`${t}-vertical`]:{[`${t}-item`]:{flexWrap:"wrap-reverse",[`${t}-item-main`]:{minWidth:e.contentWidth},[`${t}-item-extra`]:{margin:`auto auto ${(0,b.unit)(l)}`}}}}}})(t)]},e=>({contentWidth:220,itemPadding:`${(0,b.unit)(e.paddingContentVertical)} 0`,itemPaddingSM:`${(0,b.unit)(e.paddingContentVerticalSM)} ${(0,b.unit)(e.paddingContentHorizontal)}`,itemPaddingLG:`${(0,b.unit)(e.paddingContentVerticalLG)} ${(0,b.unit)(e.paddingContentHorizontalLG)}`,headerBg:"transparent",footerBg:"transparent",emptyTextPadding:e.padding,metaMarginBottom:e.padding,avatarMarginRight:e.padding,titleMarginBottom:e.paddingSM,descriptionFontSize:e.fontSize}));var O=function(e,t){var a={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&0>t.indexOf(n)&&(a[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,n=Object.getOwnPropertySymbols(e);ot.indexOf(n[o])&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(a[n[o]]=e[n[o]]);return a};let C=a.forwardRef(function(e,g){let{pagination:f=!1,prefixCls:h,bordered:v=!1,split:b=!0,className:x,rootClassName:A,style:$,children:C,itemLayout:I,loadMore:k,grid:E,dataSource:S=[],size:w,header:T,footer:N,loading:_=!1,rowKey:L,renderItem:M,locale:z}=e,R=O(e,["pagination","prefixCls","bordered","split","className","rootClassName","style","children","itemLayout","loadMore","grid","dataSource","size","header","footer","loading","rowKey","renderItem","locale"]),j=f&&"object"==typeof f?f:{},[H,D]=a.useState(j.defaultCurrent||1),[B,P]=a.useState(j.defaultPageSize||10),{getPrefixCls:V,direction:W,className:G,style:F}=(0,l.useComponentConfig)("list"),{renderEmpty:U}=a.useContext(l.ConfigContext),X=e=>(t,a)=>{var n;D(t),P(a),f&&(null==(n=null==f?void 0:f[e])||n.call(f,t,a))},K=X("onChange"),Y=X("onShowSizeChange"),Z=!!(k||f||N),q=V("list",h),[J,Q,ee]=y(q),et=_;"boolean"==typeof et&&(et={spinning:et});let ea=!!(null==et?void 0:et.spinning),en=(0,s.default)(w),eo="";switch(en){case"large":eo="lg";break;case"small":eo="sm"}let ei=(0,n.default)(q,{[`${q}-vertical`]:"vertical"===I,[`${q}-${eo}`]:eo,[`${q}-split`]:b,[`${q}-bordered`]:v,[`${q}-loading`]:ea,[`${q}-grid`]:!!E,[`${q}-something-after-last-item`]:Z,[`${q}-rtl`]:"rtl"===W},G,x,A,Q,ee),el=(0,o.default)({current:1,total:0,position:"bottom"},{total:S.length,current:H,pageSize:B},f||{}),er=Math.ceil(el.total/el.pageSize);el.current=Math.min(el.current,er);let es=f&&a.createElement("div",{className:(0,n.default)(`${q}-pagination`)},a.createElement(u.default,Object.assign({align:"end"},el,{onChange:K,onShowSizeChange:Y}))),ec=(0,t.default)(S);f&&S.length>(el.current-1)*el.pageSize&&(ec=(0,t.default)(S).splice((el.current-1)*el.pageSize,el.pageSize));let ed=Object.keys(E||{}).some(e=>["xs","sm","md","lg","xl","xxl"].includes(e)),eu=(0,d.default)(ed),em=a.useMemo(()=>{for(let e=0;e{if(!E)return;let e=em&&E[em]?E[em]:E.column;if(e)return{width:`${100/e}%`,maxWidth:`${100/e}%`}},[JSON.stringify(E),em]),eg=ea&&a.createElement("div",{style:{minHeight:53}});if(ec.length>0){let e=ec.map((e,t)=>{let n;return M?((n="function"==typeof L?L(e):L?e[L]:e.key)||(n=`list-item-${t}`),a.createElement(a.Fragment,{key:n},M(e,t))):null});eg=E?a.createElement(c.Row,{gutter:E.gutter},a.Children.map(e,e=>a.createElement("div",{key:null==e?void 0:e.key,style:ep},e))):a.createElement("ul",{className:`${q}-items`},e)}else C||ea||(eg=a.createElement("div",{className:`${q}-empty-text`},(null==z?void 0:z.emptyText)||(null==U?void 0:U("List"))||a.createElement(r.default,{componentName:"List"})));let ef=el.position,eh=a.useMemo(()=>({grid:E,itemLayout:I}),[JSON.stringify(E),I]);return J(a.createElement(p.Provider,{value:eh},a.createElement("div",Object.assign({ref:g,style:Object.assign(Object.assign({},F),$),className:ei},R),("top"===ef||"both"===ef)&&es,T&&a.createElement("div",{className:`${q}-header`},T),a.createElement(m.default,Object.assign({},et),eg,C),N&&a.createElement("div",{className:`${q}-footer`},N),k||("bottom"===ef||"both"===ef)&&es)))});C.Item=v,e.s(["List",0,C],573421)},837007,e=>{"use strict";var t=e.i(603908);e.s(["PlusIcon",()=>t.default])}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0w39dn9x3dp9g.js b/litellm/proxy/_experimental/out/_next/static/chunks/0w39dn9x3dp9g.js new file mode 100644 index 00000000000..70fced32595 --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0w39dn9x3dp9g.js @@ -0,0 +1 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,599724,936325,e=>{"use strict";var t=e.i(95779),r=e.i(444755),s=e.i(673706),l=e.i(271645);let a=l.default.forwardRef((e,a)=>{let{color:o,className:i,children:n}=e;return l.default.createElement("p",{ref:a,className:(0,r.tremorTwMerge)("text-tremor-default",o?(0,s.getColorClassNames)(o,t.colorPalette.text).textColor:(0,r.tremorTwMerge)("text-tremor-content","dark:text-dark-tremor-content"),i)},n)});a.displayName="Text",e.s(["default",0,a],936325),e.s(["Text",0,a],599724)},994388,e=>{"use strict";var t=e.i(290571),r=e.i(829087),s=e.i(271645);let l=["preEnter","entering","entered","preExit","exiting","exited","unmounted"],a=e=>({_s:e,status:l[e],isEnter:e<3,isMounted:6!==e,isResolved:2===e||e>4}),o=e=>e?6:5,i=(e,t,r,s,l)=>{clearTimeout(s.current);let o=a(e);t(o),r.current=o,l&&l({current:o})};var n=e.i(480731),d=e.i(444755),c=e.i(673706);let m=e=>{var r=(0,t.__rest)(e,[]);return s.default.createElement("svg",Object.assign({},r,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"}),s.default.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}),s.default.createElement("path",{d:"M18.364 5.636L16.95 7.05A7 7 0 1 0 19 12h2a9 9 0 1 1-2.636-6.364z"}))};var u=e.i(95779);let g={xs:{height:"h-4",width:"w-4"},sm:{height:"h-5",width:"w-5"},md:{height:"h-5",width:"w-5"},lg:{height:"h-6",width:"w-6"},xl:{height:"h-6",width:"w-6"}},p=(e,t)=>{switch(e){case"primary":return{textColor:t?(0,c.getColorClassNames)("white").textColor:"text-tremor-brand-inverted dark:text-dark-tremor-brand-inverted",hoverTextColor:t?(0,c.getColorClassNames)("white").textColor:"text-tremor-brand-inverted dark:text-dark-tremor-brand-inverted",bgColor:t?(0,c.getColorClassNames)(t,u.colorPalette.background).bgColor:"bg-tremor-brand dark:bg-dark-tremor-brand",hoverBgColor:t?(0,c.getColorClassNames)(t,u.colorPalette.darkBackground).hoverBgColor:"hover:bg-tremor-brand-emphasis dark:hover:bg-dark-tremor-brand-emphasis",borderColor:t?(0,c.getColorClassNames)(t,u.colorPalette.border).borderColor:"border-tremor-brand dark:border-dark-tremor-brand",hoverBorderColor:t?(0,c.getColorClassNames)(t,u.colorPalette.darkBorder).hoverBorderColor:"hover:border-tremor-brand-emphasis dark:hover:border-dark-tremor-brand-emphasis"};case"secondary":return{textColor:t?(0,c.getColorClassNames)(t,u.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",hoverTextColor:t?(0,c.getColorClassNames)(t,u.colorPalette.text).textColor:"hover:text-tremor-brand-emphasis dark:hover:text-dark-tremor-brand-emphasis",bgColor:(0,c.getColorClassNames)("transparent").bgColor,hoverBgColor:t?(0,d.tremorTwMerge)((0,c.getColorClassNames)(t,u.colorPalette.background).hoverBgColor,"hover:bg-opacity-20 dark:hover:bg-opacity-20"):"hover:bg-tremor-brand-faint dark:hover:bg-dark-tremor-brand-faint",borderColor:t?(0,c.getColorClassNames)(t,u.colorPalette.border).borderColor:"border-tremor-brand dark:border-dark-tremor-brand"};case"light":return{textColor:t?(0,c.getColorClassNames)(t,u.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",hoverTextColor:t?(0,c.getColorClassNames)(t,u.colorPalette.darkText).hoverTextColor:"hover:text-tremor-brand-emphasis dark:hover:text-dark-tremor-brand-emphasis",bgColor:(0,c.getColorClassNames)("transparent").bgColor,borderColor:"",hoverBorderColor:""}}},h=(0,c.makeClassName)("Button"),x=({loading:e,iconSize:t,iconPosition:r,Icon:l,needMargin:a,transitionStatus:o})=>{let i=a?r===n.HorizontalPositions.Left?(0,d.tremorTwMerge)("-ml-1","mr-1.5"):(0,d.tremorTwMerge)("-mr-1","ml-1.5"):"",c=(0,d.tremorTwMerge)("w-0 h-0"),u={default:c,entering:c,entered:t,exiting:t,exited:c};return e?s.default.createElement(m,{className:(0,d.tremorTwMerge)(h("icon"),"animate-spin shrink-0",i,u.default,u[o]),style:{transition:"width 150ms"}}):s.default.createElement(l,{className:(0,d.tremorTwMerge)(h("icon"),"shrink-0",t,i)})},f=s.default.forwardRef((e,l)=>{let{icon:m,iconPosition:u=n.HorizontalPositions.Left,size:f=n.Sizes.SM,color:b,variant:y="primary",disabled:v,loading:w=!1,loadingText:C,children:N,tooltip:k,className:j}=e,S=(0,t.__rest)(e,["icon","iconPosition","size","color","variant","disabled","loading","loadingText","children","tooltip","className"]),M=w||v,_=void 0!==m||w,T=w&&C,E=!(!N&&!T),P=(0,d.tremorTwMerge)(g[f].height,g[f].width),L="light"!==y?(0,d.tremorTwMerge)("rounded-tremor-default border","shadow-tremor-input","dark:shadow-dark-tremor-input"):"",R=p(y,b),O=("light"!==y?{xs:{paddingX:"px-2.5",paddingY:"py-1.5",fontSize:"text-xs"},sm:{paddingX:"px-4",paddingY:"py-2",fontSize:"text-sm"},md:{paddingX:"px-4",paddingY:"py-2",fontSize:"text-md"},lg:{paddingX:"px-4",paddingY:"py-2.5",fontSize:"text-lg"},xl:{paddingX:"px-4",paddingY:"py-3",fontSize:"text-xl"}}:{xs:{paddingX:"",paddingY:"",fontSize:"text-xs"},sm:{paddingX:"",paddingY:"",fontSize:"text-sm"},md:{paddingX:"",paddingY:"",fontSize:"text-md"},lg:{paddingX:"",paddingY:"",fontSize:"text-lg"},xl:{paddingX:"",paddingY:"",fontSize:"text-xl"}})[f],{tooltipProps:z,getReferenceProps:I}=(0,r.useTooltip)(300),[A,B]=(({enter:e=!0,exit:t=!0,preEnter:r,preExit:l,timeout:n,initialEntered:d,mountOnEnter:c,unmountOnExit:m,onStateChange:u}={})=>{let[g,p]=(0,s.useState)(()=>a(d?2:o(c))),h=(0,s.useRef)(g),x=(0,s.useRef)(0),[f,b]="object"==typeof n?[n.enter,n.exit]:[n,n],y=(0,s.useCallback)(()=>{let e=((e,t)=>{switch(e){case 1:case 0:return 2;case 4:case 3:return o(t)}})(h.current._s,m);e&&i(e,p,h,x,u)},[u,m]);return[g,(0,s.useCallback)(s=>{let a=e=>{switch(i(e,p,h,x,u),e){case 1:f>=0&&(x.current=((...e)=>setTimeout(...e))(y,f));break;case 4:b>=0&&(x.current=((...e)=>setTimeout(...e))(y,b));break;case 0:case 3:x.current=((...e)=>setTimeout(...e))(()=>{isNaN(document.body.offsetTop)||a(e+1)},0)}},n=h.current.isEnter;"boolean"!=typeof s&&(s=!n),s?n||a(e?+!r:2):n&&a(t?l?3:4:o(m))},[y,u,e,t,r,l,f,b,m]),y]})({timeout:50});return(0,s.useEffect)(()=>{B(w)},[w]),s.default.createElement("button",Object.assign({ref:(0,c.mergeRefs)([l,z.refs.setReference]),className:(0,d.tremorTwMerge)(h("root"),"shrink-0 inline-flex justify-center items-center group font-medium outline-none",L,O.paddingX,O.paddingY,O.fontSize,R.textColor,R.bgColor,R.borderColor,R.hoverBorderColor,M?"opacity-50 cursor-not-allowed":(0,d.tremorTwMerge)(p(y,b).hoverTextColor,p(y,b).hoverBgColor,p(y,b).hoverBorderColor),j),disabled:M},I,S),s.default.createElement(r.default,Object.assign({text:k},z)),_&&u!==n.HorizontalPositions.Right?s.default.createElement(x,{loading:w,iconSize:P,iconPosition:u,Icon:m,transitionStatus:A.status,needMargin:E}):null,T||N?s.default.createElement("span",{className:(0,d.tremorTwMerge)(h("text"),"text-tremor-default whitespace-nowrap")},T?C:N):null,_&&u===n.HorizontalPositions.Right?s.default.createElement(x,{loading:w,iconSize:P,iconPosition:u,Icon:m,transitionStatus:A.status,needMargin:E}):null)});f.displayName="Button",e.s(["Button",0,f],994388)},304967,e=>{"use strict";var t=e.i(290571),r=e.i(271645),s=e.i(480731),l=e.i(95779),a=e.i(444755),o=e.i(673706);let i=(0,o.makeClassName)("Card"),n=r.default.forwardRef((e,n)=>{let{decoration:d="",decorationColor:c,children:m,className:u}=e,g=(0,t.__rest)(e,["decoration","decorationColor","children","className"]);return r.default.createElement("div",Object.assign({ref:n,className:(0,a.tremorTwMerge)(i("root"),"relative w-full text-left ring-1 rounded-tremor-default p-6","bg-tremor-background ring-tremor-ring shadow-tremor-card","dark:bg-dark-tremor-background dark:ring-dark-tremor-ring dark:shadow-dark-tremor-card",c?(0,o.getColorClassNames)(c,l.colorPalette.border).borderColor:"border-tremor-brand dark:border-dark-tremor-brand",(e=>{if(!e)return"";switch(e){case s.HorizontalPositions.Left:return"border-l-4";case s.VerticalPositions.Top:return"border-t-4";case s.HorizontalPositions.Right:return"border-r-4";case s.VerticalPositions.Bottom:return"border-b-4";default:return""}})(d),u)},g),m)});n.displayName="Card",e.s(["Card",0,n],304967)},629569,e=>{"use strict";var t=e.i(290571),r=e.i(95779),s=e.i(444755),l=e.i(673706),a=e.i(271645);let o=a.default.forwardRef((e,o)=>{let{color:i,children:n,className:d}=e,c=(0,t.__rest)(e,["color","children","className"]);return a.default.createElement("p",Object.assign({ref:o,className:(0,s.tremorTwMerge)("font-medium text-tremor-title",i?(0,l.getColorClassNames)(i,r.colorPalette.darkText).textColor:"text-tremor-content-strong dark:text-dark-tremor-content-strong",d)},c),n)});o.displayName="Title",e.s(["Title",0,o],629569)},653496,e=>{"use strict";var t=e.i(721369);e.s(["Tabs",()=>t.default])},536916,e=>{"use strict";var t=e.i(374276);e.s(["Checkbox",()=>t.default])},292639,e=>{"use strict";var t=e.i(602869),r=e.i(266027);let s=(0,e.i(243652).createQueryKeys)("uiSettings");e.s(["useUISettings",0,()=>(0,r.useQuery)({queryKey:s.list({}),queryFn:async()=>await (0,t.getUiSettings)(),staleTime:36e5,gcTime:36e5})])},250980,e=>{"use strict";var t=e.i(271645);let r=t.forwardRef(function(e,r){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:r},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 9v3m0 0v3m0-3h3m-3 0H9m12 0a9 9 0 11-18 0 9 9 0 0118 0z"}))});e.s(["PlusCircleIcon",0,r],250980)},603908,e=>{"use strict";let t=(0,e.i(475254).default)("plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);e.s(["default",0,t])},107233,37727,e=>{"use strict";var t=e.i(603908);e.s(["Plus",()=>t.default],107233);var r=e.i(841947);e.s(["X",()=>r.default],37727)},158392,419470,e=>{"use strict";var t=e.i(843476),r=e.i(311451);let s={ttl:3600,lowest_latency_buffer:0},l=({routingStrategyArgs:e})=>{let l={ttl:"Sliding window to look back over when calculating the average latency of a deployment. Default - 1 hour (in seconds).",lowest_latency_buffer:"Shuffle between deployments within this % of the lowest latency. Default - 0 (i.e. always pick lowest latency)."};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsxs)("div",{className:"max-w-3xl",children:[(0,t.jsx)("h3",{className:"text-sm font-medium text-gray-900",children:"Latency-Based Configuration"}),(0,t.jsx)("p",{className:"text-xs text-gray-500 mt-1",children:"Fine-tune latency-based routing behavior"})]}),(0,t.jsx)("div",{className:"grid grid-cols-1 gap-6 lg:grid-cols-2 xl:grid-cols-3",children:Object.entries(e||s).map(([e,s])=>(0,t.jsx)("div",{className:"space-y-2",children:(0,t.jsxs)("label",{className:"block",children:[(0,t.jsx)("span",{className:"text-xs font-medium text-gray-700 uppercase tracking-wide",children:e.replace(/_/g," ")}),(0,t.jsx)("p",{className:"text-xs text-gray-500 mt-0.5 mb-2",children:l[e]||""}),(0,t.jsx)(r.Input,{name:e,defaultValue:"object"==typeof s?JSON.stringify(s,null,2):s?.toString(),className:"font-mono text-sm w-full"})]})},e))})]}),(0,t.jsx)("div",{className:"border-t border-gray-200"})]})},a=({routerSettings:e,routerFieldsMetadata:s})=>(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsxs)("div",{className:"max-w-3xl",children:[(0,t.jsx)("h3",{className:"text-sm font-medium text-gray-900",children:"Reliability & Retries"}),(0,t.jsx)("p",{className:"text-xs text-gray-500 mt-1",children:"Configure retry logic and failure handling"})]}),(0,t.jsx)("div",{className:"grid grid-cols-1 gap-6 lg:grid-cols-2 xl:grid-cols-3",children:Object.entries(e).filter(([e,t])=>"fallbacks"!=e&&"context_window_fallbacks"!=e&&"routing_strategy_args"!=e&&"routing_strategy"!=e&&"enable_tag_filtering"!=e&&"retry_policy"!=e&&"model_group_retry_policy"!=e).map(([e,l])=>(0,t.jsx)("div",{className:"space-y-2",children:(0,t.jsxs)("label",{className:"block",children:[(0,t.jsx)("span",{className:"text-xs font-medium text-gray-700 uppercase tracking-wide",children:s[e]?.ui_field_name||e}),(0,t.jsx)("p",{className:"text-xs text-gray-500 mt-0.5 mb-2",children:s[e]?.field_description||""}),(0,t.jsx)(r.Input,{name:e,defaultValue:null==l||"null"===l?"":"object"==typeof l?JSON.stringify(l,null,2):l?.toString()||"",placeholder:"—",className:"font-mono text-sm w-full"})]})},e))})]});var o=e.i(199133);let i=({selectedStrategy:e,availableStrategies:r,routingStrategyDescriptions:s,routerFieldsMetadata:l,onStrategyChange:a})=>(0,t.jsxs)("div",{className:"space-y-2 max-w-3xl",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"text-xs font-medium text-gray-700 uppercase tracking-wide",children:l.routing_strategy?.ui_field_name||"Routing Strategy"}),(0,t.jsx)("p",{className:"text-xs text-gray-500 mt-0.5 mb-2",children:l.routing_strategy?.field_description||""})]}),(0,t.jsx)("div",{className:"routing-strategy-select max-w-3xl",children:(0,t.jsx)(o.Select,{value:e,onChange:a,style:{width:"100%"},size:"large",children:r.map(e=>(0,t.jsx)(o.Select.Option,{value:e,label:e,children:(0,t.jsxs)("div",{className:"flex flex-col gap-0.5 py-1",children:[(0,t.jsx)("span",{className:"font-mono text-sm font-medium",children:e}),s[e]&&(0,t.jsx)("span",{className:"text-xs text-gray-500 font-normal",children:s[e]})]})},e))})})]});var n=e.i(790848);let d=({enabled:e,routerFieldsMetadata:r,onToggle:s})=>(0,t.jsx)("div",{className:"space-y-3 max-w-3xl",children:(0,t.jsxs)("div",{className:"flex items-start justify-between",children:[(0,t.jsxs)("div",{className:"flex-1",children:[(0,t.jsx)("label",{className:"text-xs font-medium text-gray-700 uppercase tracking-wide",children:r.enable_tag_filtering?.ui_field_name||"Enable Tag Filtering"}),(0,t.jsxs)("p",{className:"text-xs text-gray-500 mt-0.5",children:[r.enable_tag_filtering?.field_description||"",r.enable_tag_filtering?.link&&(0,t.jsxs)(t.Fragment,{children:[" ",(0,t.jsx)("a",{href:r.enable_tag_filtering.link,target:"_blank",rel:"noopener noreferrer",className:"text-blue-600 hover:text-blue-800 underline",children:"Learn more"})]})]})]}),(0,t.jsx)(n.Switch,{checked:e,onChange:s,className:"ml-4"})]})});e.s(["default",0,({value:e,onChange:r,routerFieldsMetadata:s,availableRoutingStrategies:o,routingStrategyDescriptions:n})=>(0,t.jsxs)("div",{className:"w-full space-y-8 py-2",children:[(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsxs)("div",{className:"max-w-3xl",children:[(0,t.jsx)("h3",{className:"text-sm font-medium text-gray-900",children:"Routing Settings"}),(0,t.jsx)("p",{className:"text-xs text-gray-500 mt-1",children:"Configure how requests are routed to deployments"})]}),o.length>0&&(0,t.jsx)(i,{selectedStrategy:e.selectedStrategy||e.routerSettings.routing_strategy||null,availableStrategies:o,routingStrategyDescriptions:n,routerFieldsMetadata:s,onStrategyChange:t=>{r({...e,selectedStrategy:t})}}),(0,t.jsx)(d,{enabled:e.enableTagFiltering,routerFieldsMetadata:s,onToggle:t=>{r({...e,enableTagFiltering:t})}})]}),(0,t.jsx)("div",{className:"border-t border-gray-200"}),"latency-based-routing"===e.selectedStrategy&&(0,t.jsx)(l,{routingStrategyArgs:e.routerSettings.routing_strategy_args}),(0,t.jsx)(a,{routerSettings:e.routerSettings,routerFieldsMetadata:s})]})],158392);var c=e.i(994388),m=e.i(653496),u=e.i(107233),g=e.i(271645),p=e.i(888259),h=e.i(592968),x=e.i(361653),x=x;let f=(0,e.i(475254).default)("arrow-down",[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]]);var b=e.i(37727);function y({group:e,onChange:r,availableModels:s,maxFallbacks:l}){let a=s.filter(t=>t!==e.primaryModel),i=e.fallbackModels.length{let s=[...e.fallbackModels];s.includes(t)&&(s=s.filter(e=>e!==t)),r({...e,primaryModel:t,fallbackModels:s})},showSearch:!0,getPopupContainer:e=>e.parentElement||document.body,filterOption:(e,t)=>(t?.label??"").toLowerCase().includes(e.toLowerCase()),options:s.map(e=>({label:e,value:e}))}),!e.primaryModel&&(0,t.jsxs)("div",{className:"mt-2 flex items-center gap-2 text-amber-600 text-xs bg-amber-50 p-2 rounded",children:[(0,t.jsx)(x.default,{className:"w-4 h-4"}),(0,t.jsx)("span",{children:"Select a model to begin configuring fallbacks"})]})]}),(0,t.jsx)("div",{className:"flex items-center justify-center -my-4 z-10",children:(0,t.jsxs)("div",{className:"bg-indigo-50 text-indigo-500 px-4 py-1 rounded-full text-xs font-bold border border-indigo-100 flex items-center gap-2 shadow-sm",children:[(0,t.jsx)(f,{className:"w-4 h-4"}),"IF FAILS, TRY..."]})}),(0,t.jsxs)("div",{className:`transition-opacity duration-300 ${!e.primaryModel?"opacity-50 pointer-events-none":"opacity-100"}`,children:[(0,t.jsxs)("label",{className:"block text-sm font-semibold text-gray-700 mb-2",children:["Fallback Chain ",(0,t.jsx)("span",{className:"text-red-500",children:"*"}),(0,t.jsxs)("span",{className:"text-xs text-gray-500 font-normal ml-2",children:["(Max ",l," fallbacks at a time)"]})]}),(0,t.jsxs)("div",{className:"bg-gray-50 rounded-xl p-4 border border-gray-200",children:[(0,t.jsxs)("div",{className:"mb-4",children:[(0,t.jsx)(o.Select,{mode:"multiple",className:"w-full",size:"large",placeholder:i?"Select fallback models to add...":`Maximum ${l} fallbacks reached`,value:e.fallbackModels,onChange:t=>{let s=t.slice(0,l);r({...e,fallbackModels:s})},disabled:!e.primaryModel,getPopupContainer:e=>e.parentElement||document.body,options:a.map(e=>({label:e,value:e})),optionRender:(r,s)=>{let l=e.fallbackModels.includes(r.value),a=l?e.fallbackModels.indexOf(r.value)+1:null;return(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[l&&null!==a&&(0,t.jsx)("span",{className:"flex items-center justify-center w-5 h-5 rounded bg-indigo-100 text-indigo-600 text-xs font-bold",children:a}),(0,t.jsx)("span",{children:r.label})]})},maxTagCount:"responsive",maxTagPlaceholder:e=>(0,t.jsx)(h.Tooltip,{styles:{root:{pointerEvents:"none"}},title:e.map(({value:e})=>e).join(", "),children:(0,t.jsxs)("span",{children:["+",e.length," more"]})}),showSearch:!0,filterOption:(e,t)=>(t?.label??"").toLowerCase().includes(e.toLowerCase())}),(0,t.jsx)("p",{className:"text-xs text-gray-500 mt-1 ml-1",children:i?`Search and select multiple models. Selected models will appear below in order. (${e.fallbackModels.length}/${l} used)`:`Maximum ${l} fallbacks reached. Remove some to add more.`})]}),(0,t.jsx)("div",{className:"space-y-2 min-h-[100px]",children:0===e.fallbackModels.length?(0,t.jsxs)("div",{className:"h-32 border-2 border-dashed border-gray-300 rounded-lg flex flex-col items-center justify-center text-gray-400",children:[(0,t.jsx)("span",{className:"text-sm",children:"No fallback models selected"}),(0,t.jsx)("span",{className:"text-xs mt-1",children:"Add models from the dropdown above"})]}):e.fallbackModels.map((s,l)=>(0,t.jsxs)("div",{className:"group flex items-center justify-between p-3 bg-white rounded-lg border border-gray-200 hover:border-indigo-300 hover:shadow-sm transition-all",children:[(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsx)("div",{className:"flex items-center justify-center w-6 h-6 rounded bg-gray-100 text-gray-400 group-hover:text-indigo-500 group-hover:bg-indigo-50",children:(0,t.jsx)("span",{className:"text-xs font-bold",children:l+1})}),(0,t.jsx)("div",{children:(0,t.jsx)("span",{className:"font-medium text-gray-800",children:s})})]}),(0,t.jsx)("button",{type:"button",onClick:()=>{let t;return t=e.fallbackModels.filter((e,t)=>t!==l),void r({...e,fallbackModels:t})},className:"opacity-0 group-hover:opacity-100 transition-opacity text-gray-400 hover:text-red-500 p-1",children:(0,t.jsx)(b.X,{className:"w-4 h-4"})})]},`${s}-${l}`))})]})]})]})}e.s(["FallbackSelectionForm",0,function({groups:e,onGroupsChange:r,availableModels:s,maxFallbacks:l=10,maxGroups:a=5}){let[o,i]=(0,g.useState)(e.length>0?e[0].id:"1");(0,g.useEffect)(()=>{e.length>0?e.some(e=>e.id===o)||i(e[0].id):i("1")},[e]);let n=()=>{if(e.length>=a)return;let t=Date.now().toString();r([...e,{id:t,primaryModel:null,fallbackModels:[]}]),i(t)},d=t=>{r(e.map(e=>e.id===t.id?t:e))},h=e.map((r,a)=>{let o=r.primaryModel?r.primaryModel:`Group ${a+1}`;return{key:r.id,label:o,closable:e.length>1,children:(0,t.jsx)(y,{group:r,onChange:d,availableModels:s,maxFallbacks:l})}});return 0===e.length?(0,t.jsxs)("div",{className:"text-center py-12 bg-gray-50 rounded-lg border border-dashed border-gray-300",children:[(0,t.jsx)("p",{className:"text-gray-500 mb-4",children:"No fallback groups configured"}),(0,t.jsx)(c.Button,{variant:"primary",onClick:n,icon:()=>(0,t.jsx)(u.Plus,{className:"w-4 h-4"}),children:"Create First Group"})]}):(0,t.jsx)(m.Tabs,{type:"editable-card",activeKey:o,onChange:i,onEdit:(t,s)=>{"add"===s?n():"remove"===s&&e.length>1&&(t=>{if(1===e.length)return p.default.warning("At least one group is required");let s=e.filter(e=>e.id!==t);r(s),o===t&&s.length>0&&i(s[s.length-1].id)})(t)},items:h,className:"fallback-tabs",tabBarStyle:{marginBottom:0},hideAdd:e.length>=a})}],419470)},988297,e=>{"use strict";var t=e.i(271645);let r=t.forwardRef(function(e,r){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:r},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 4v16m8-8H4"}))});e.s(["PlusIcon",0,r],988297)},797672,e=>{"use strict";var t=e.i(271645);let r=t.forwardRef(function(e,r){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:r},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z"}))});e.s(["PencilIcon",0,r],797672)},992619,e=>{"use strict";var t=e.i(843476),r=e.i(271645),s=e.i(779241),l=e.i(599724),a=e.i(199133),o=e.i(983561),i=e.i(695411);e.s(["default",0,({accessToken:e,value:n,placeholder:d="Select a Model",onChange:c,disabled:m=!1,style:u,className:g,showLabel:p=!0,labelText:h="Select Model"})=>{let[x,f]=(0,r.useState)(n),[b,y]=(0,r.useState)(!1),[v,w]=(0,r.useState)([]),C=(0,r.useRef)(null);return(0,r.useEffect)(()=>{f(n)},[n]),(0,r.useEffect)(()=>{e&&(async()=>{try{let t=await (0,i.fetchAvailableModels)(e);console.log("Fetched models for selector:",t),t.length>0&&w(t)}catch(e){console.error("Error fetching model info:",e)}})()},[e]),(0,t.jsxs)("div",{children:[p&&(0,t.jsxs)(l.Text,{className:"font-medium block mb-2 text-gray-700 flex items-center",children:[(0,t.jsx)(o.RobotOutlined,{className:"mr-2"})," ",h]}),(0,t.jsx)(a.Select,{value:x,placeholder:d,onChange:e=>{"custom"===e?(y(!0),f(void 0)):(y(!1),f(e),c&&c(e))},options:[...Array.from(new Set(v.map(e=>e.model_group))).map((e,t)=>({value:e,label:e,key:t})),{value:"custom",label:"Enter custom model",key:"custom"}],style:{width:"100%",...u},showSearch:!0,className:`rounded-md ${g||""}`,disabled:m}),b&&(0,t.jsx)(s.TextInput,{className:"mt-2",placeholder:"Enter custom model name",onValueChange:e=>{C.current&&clearTimeout(C.current),C.current=setTimeout(()=>{f(e),c&&c(e)},500)},disabled:m})]})}])},841947,e=>{"use strict";let t=(0,e.i(475254).default)("x",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);e.s(["default",0,t])},361653,e=>{"use strict";let t=(0,e.i(475254).default)("circle-alert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);e.s(["default",0,t])},409797,e=>{"use strict";var t=e.i(631171);e.s(["ChevronDownIcon",()=>t.default])},246349,e=>{"use strict";let t=(0,e.i(475254).default)("chevron-right",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);e.s(["default",0,t])},531516,696609,e=>{"use strict";var t=e.i(843476),r=e.i(271645),s=e.i(536916),l=e.i(599724),a=e.i(409797),o=e.i(246349),o=o;let i=/\b(delete|remove|destroy|purge|drop|erase|unlink)\b/i,n=/\b(create|add|insert|new|post|submit|register|make|generate|write|upload)\b/i,d=/\b(update|edit|modify|change|patch|put|set|rename|move|transform)\b/i,c=/\b(get|read|list|fetch|search|find|query|retrieve|show|view|check|describe|info)\b/i;function m(e,t=""){let r=e.toLowerCase();if(c.test(r))return"read";if(i.test(r))return"delete";if(d.test(r))return"update";if(n.test(r))return"create";if(t){let e=t.toLowerCase();if(c.test(e))return"read";if(i.test(e))return"delete";if(d.test(e))return"update";if(n.test(e))return"create"}return"unknown"}function u(e){let t={read:[],create:[],update:[],delete:[],unknown:[]};for(let r of e)t[m(r.name,r.description)].push(r);return t}let g={read:{label:"Read",description:"Safe operations — fetch, list, search. No side effects.",risk:"low"},create:{label:"Create",description:"Add new resources — insert, upload, register.",risk:"medium"},update:{label:"Update",description:"Modify existing resources — edit, patch, rename.",risk:"medium"},delete:{label:"Delete",description:"Destructive operations — remove, purge, destroy.",risk:"high"},unknown:{label:"Other",description:"Operations that could not be automatically classified.",risk:"unknown"}};e.s(["CRUD_GROUP_META",0,g,"classifyToolOp",0,m,"groupToolsByCrud",0,u],696609);let p=["read","create","update","delete","unknown"],h={low:"bg-green-100 text-green-800",medium:"bg-yellow-100 text-yellow-800",high:"bg-red-100 text-red-800 font-semibold",unknown:"bg-gray-100 text-gray-700"},x={read:"border-green-200",create:"border-blue-200",update:"border-yellow-200",delete:"border-red-300",unknown:"border-gray-200"},f={read:"bg-green-50",create:"bg-blue-50",update:"bg-yellow-50",delete:"bg-red-50",unknown:"bg-gray-50"};e.s(["default",0,({tools:e,value:i,onChange:n,readOnly:d=!1,searchFilter:c=""})=>{let[m,b]=(0,r.useState)({read:!1,create:!1,update:!1,delete:!1,unknown:!0}),y=(0,r.useMemo)(()=>u(e),[e]),v=(0,r.useMemo)(()=>new Set(void 0===i?e.map(e=>e.name):i),[i,e]),w=e=>{if(d)return;let t=new Set(v);t.has(e)?t.delete(e):t.add(e),n(Array.from(t))};return 0===e.length?null:(0,t.jsx)("div",{className:"space-y-3",children:p.map(e=>{let r,i=y[e];if(0===i.length)return null;if(c){let e=c.toLowerCase();if(!i.some(t=>t.name.toLowerCase().includes(e)||(t.description??"").toLowerCase().includes(e)))return null}let u=g[e],p=(r=y[e]).length>0&&r.every(e=>v.has(e.name)),C=(e=>{let t=y[e];if(0===t.length)return!1;let r=t.filter(e=>v.has(e.name)).length;return r>0&&r{b(t=>({...t,[e]:!t[e]}))},children:[N?(0,t.jsx)(o.default,{className:"w-4 h-4 text-gray-500 flex-shrink-0"}):(0,t.jsx)(a.ChevronDownIcon,{className:"w-4 h-4 text-gray-500 flex-shrink-0"}),(0,t.jsx)("span",{className:"font-semibold text-gray-900 text-sm",children:u.label}),(0,t.jsx)("span",{className:`text-xs px-2 py-0.5 rounded-full ${h[u.risk]}`,children:"high"===u.risk?"High Risk":"medium"===u.risk?"Medium Risk":"low"===u.risk?"Safe":"Unclassified"}),(0,t.jsxs)("span",{className:"text-xs text-gray-500 ml-1",children:[i.filter(e=>v.has(e.name)).length,"/",i.length," allowed"]})]}),!d&&(0,t.jsxs)("div",{className:"flex items-center gap-2 ml-4",children:[(0,t.jsx)(l.Text,{className:"text-xs text-gray-500",children:p?"All on":C?"Partial":"All off"}),(0,t.jsx)(s.Checkbox,{checked:p,indeterminate:C,onChange:t=>((e,t)=>{if(d)return;let r=new Set(v);for(let s of y[e])t?r.add(s.name):r.delete(s.name);n(Array.from(r))})(e,t.target.checked),onClick:e=>e.stopPropagation()})]})]}),!N&&(0,t.jsx)("div",{className:"px-4 pt-2 pb-1 text-xs text-gray-500 bg-white border-b border-gray-100",children:u.description}),!N&&(0,t.jsx)("div",{className:"bg-white divide-y divide-gray-50",children:i.filter(e=>!c||e.name.toLowerCase().includes(c.toLowerCase())||(e.description??"").toLowerCase().includes(c.toLowerCase())).map(e=>{let r,a=(r=e.name,v.has(r));return(0,t.jsxs)("div",{className:`flex items-start gap-3 px-4 py-2.5 transition-colors hover:bg-gray-50 ${!d?"cursor-pointer":""} ${a?"":"opacity-60"}`,onClick:()=>w(e.name),children:[(0,t.jsx)(s.Checkbox,{checked:a,onChange:()=>w(e.name),disabled:d,onClick:e=>e.stopPropagation()}),(0,t.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,t.jsx)(l.Text,{className:"font-medium text-gray-900 text-sm",children:e.name}),e.description&&(0,t.jsx)(l.Text,{className:"text-xs text-gray-500 mt-0.5 leading-snug",children:e.description})]}),(0,t.jsx)("span",{className:`text-xs px-1.5 py-0.5 rounded flex-shrink-0 ${a?"bg-green-100 text-green-700":"bg-gray-100 text-gray-500"}`,children:a?"on":"off"})]},e.name)})})]},e)})})}],531516)},309426,e=>{"use strict";var t=e.i(290571),r=e.i(444755),s=e.i(673706),l=e.i(271645),a=e.i(46757);let o=(0,s.makeClassName)("Col"),i=l.default.forwardRef((e,s)=>{let i,n,d,c,{numColSpan:m=1,numColSpanSm:u,numColSpanMd:g,numColSpanLg:p,children:h,className:x}=e,f=(0,t.__rest)(e,["numColSpan","numColSpanSm","numColSpanMd","numColSpanLg","children","className"]),b=(e,t)=>e&&Object.keys(t).includes(String(e))?t[e]:"";return l.default.createElement("div",Object.assign({ref:s,className:(0,r.tremorTwMerge)(o("root"),(i=b(m,a.colSpan),n=b(u,a.colSpanSm),d=b(g,a.colSpanMd),c=b(p,a.colSpanLg),(0,r.tremorTwMerge)(i,n,d,c)),x)},f),h)});i.displayName="Col",e.s(["Col",0,i],309426)},355619,e=>{"use strict";var t=e.i(602869);let r=async(e,r,s)=>{try{if(null===e||null===r)return;if(null!==s){let l=(await (0,t.modelAvailableCall)(s,e,r,!0,null,!0)).data.map(e=>e.id),a=[],o=[];return l.forEach(e=>{e.endsWith("/*")?a.push(e):o.push(e)}),[...a,...o]}}catch(e){console.error("Error fetching user models:",e)}};e.s(["fetchAvailableModelsForTeamOrKey",0,r,"getModelDisplayName",0,e=>{if("all-proxy-models"===e)return"All Proxy Models";if(e.endsWith("/*")){let t=e.replace("/*","");return`All ${t} models`}return e},"unfurlWildcardModelsInList",0,(e,t)=>{let r=[],s=[];return console.log("teamModels",e),console.log("allModels",t),e.forEach(e=>{if(e.endsWith("/*")){let l=e.replace("/*",""),a=t.filter(e=>e.startsWith(l+"/"));s.push(...a),r.push(e)}else s.push(e)}),[...r,...s].filter((e,t,r)=>r.indexOf(e)===t)}])},213205,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let s={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M678.3 642.4c24.2-13 51.9-20.4 81.4-20.4h.1c3 0 4.4-3.6 2.2-5.6a371.67 371.67 0 00-103.7-65.8c-.4-.2-.8-.3-1.2-.5C719.2 505 759.6 431.7 759.6 349c0-137-110.8-248-247.5-248S264.7 212 264.7 349c0 82.7 40.4 156 102.6 201.1-.4.2-.8.3-1.2.5-44.7 18.9-84.8 46-119.3 80.6a373.42 373.42 0 00-80.4 119.5A373.6 373.6 0 00137 888.8a8 8 0 008 8.2h59.9c4.3 0 7.9-3.5 8-7.8 2-77.2 32.9-149.5 87.6-204.3C357 628.2 432.2 597 512.2 597c56.7 0 111.1 15.7 158 45.1a8.1 8.1 0 008.1.3zM512.2 521c-45.8 0-88.9-17.9-121.4-50.4A171.2 171.2 0 01340.5 349c0-45.9 17.9-89.1 50.3-121.6S466.3 177 512.2 177s88.9 17.9 121.4 50.4A171.2 171.2 0 01683.9 349c0 45.9-17.9 89.1-50.3 121.6C601.1 503.1 558 521 512.2 521zM880 759h-84v-84c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v84h-84c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h84v84c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8v-84h84c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8z"}}]},name:"user-add",theme:"outlined"};var l=e.i(9583),a=r.forwardRef(function(e,a){return r.createElement(l.default,(0,t.default)({},e,{ref:a,icon:s}))});e.s(["UserAddOutlined",0,a],213205)},860585,e=>{"use strict";var t=e.i(843476),r=e.i(199133);let{Option:s}=r.Select;e.s(["default",0,({value:e,onChange:l,className:a="",style:o={}})=>(0,t.jsxs)(r.Select,{style:{width:"100%",...o},value:e||void 0,onChange:l,className:a,placeholder:"n/a",allowClear:!0,children:[(0,t.jsx)(s,{value:"1h",children:"hourly"}),(0,t.jsx)(s,{value:"24h",children:"daily"}),(0,t.jsx)(s,{value:"7d",children:"weekly"}),(0,t.jsx)(s,{value:"30d",children:"monthly"})]}),"getBudgetDurationLabel",0,e=>e?({"1h":"hourly","24h":"daily","7d":"weekly","30d":"monthly"})[e]||e:"Not set"])},350967,46757,e=>{"use strict";var t=e.i(290571),r=e.i(444755),s=e.i(673706),l=e.i(271645);let a={0:"grid-cols-none",1:"grid-cols-1",2:"grid-cols-2",3:"grid-cols-3",4:"grid-cols-4",5:"grid-cols-5",6:"grid-cols-6",7:"grid-cols-7",8:"grid-cols-8",9:"grid-cols-9",10:"grid-cols-10",11:"grid-cols-11",12:"grid-cols-12"},o={0:"sm:grid-cols-none",1:"sm:grid-cols-1",2:"sm:grid-cols-2",3:"sm:grid-cols-3",4:"sm:grid-cols-4",5:"sm:grid-cols-5",6:"sm:grid-cols-6",7:"sm:grid-cols-7",8:"sm:grid-cols-8",9:"sm:grid-cols-9",10:"sm:grid-cols-10",11:"sm:grid-cols-11",12:"sm:grid-cols-12"},i={0:"md:grid-cols-none",1:"md:grid-cols-1",2:"md:grid-cols-2",3:"md:grid-cols-3",4:"md:grid-cols-4",5:"md:grid-cols-5",6:"md:grid-cols-6",7:"md:grid-cols-7",8:"md:grid-cols-8",9:"md:grid-cols-9",10:"md:grid-cols-10",11:"md:grid-cols-11",12:"md:grid-cols-12"},n={0:"lg:grid-cols-none",1:"lg:grid-cols-1",2:"lg:grid-cols-2",3:"lg:grid-cols-3",4:"lg:grid-cols-4",5:"lg:grid-cols-5",6:"lg:grid-cols-6",7:"lg:grid-cols-7",8:"lg:grid-cols-8",9:"lg:grid-cols-9",10:"lg:grid-cols-10",11:"lg:grid-cols-11",12:"lg:grid-cols-12"};e.s(["colSpan",0,{1:"col-span-1",2:"col-span-2",3:"col-span-3",4:"col-span-4",5:"col-span-5",6:"col-span-6",7:"col-span-7",8:"col-span-8",9:"col-span-9",10:"col-span-10",11:"col-span-11",12:"col-span-12",13:"col-span-13"},"colSpanLg",0,{1:"lg:col-span-1",2:"lg:col-span-2",3:"lg:col-span-3",4:"lg:col-span-4",5:"lg:col-span-5",6:"lg:col-span-6",7:"lg:col-span-7",8:"lg:col-span-8",9:"lg:col-span-9",10:"lg:col-span-10",11:"lg:col-span-11",12:"lg:col-span-12",13:"lg:col-span-13"},"colSpanMd",0,{1:"md:col-span-1",2:"md:col-span-2",3:"md:col-span-3",4:"md:col-span-4",5:"md:col-span-5",6:"md:col-span-6",7:"md:col-span-7",8:"md:col-span-8",9:"md:col-span-9",10:"md:col-span-10",11:"md:col-span-11",12:"md:col-span-12",13:"md:col-span-13"},"colSpanSm",0,{1:"sm:col-span-1",2:"sm:col-span-2",3:"sm:col-span-3",4:"sm:col-span-4",5:"sm:col-span-5",6:"sm:col-span-6",7:"sm:col-span-7",8:"sm:col-span-8",9:"sm:col-span-9",10:"sm:col-span-10",11:"sm:col-span-11",12:"sm:col-span-12",13:"sm:col-span-13"},"gridCols",0,a,"gridColsLg",0,n,"gridColsMd",0,i,"gridColsSm",0,o],46757);let d=(0,s.makeClassName)("Grid"),c=(e,t)=>e&&Object.keys(t).includes(String(e))?t[e]:"",m=l.default.forwardRef((e,s)=>{let{numItems:m=1,numItemsSm:u,numItemsMd:g,numItemsLg:p,children:h,className:x}=e,f=(0,t.__rest)(e,["numItems","numItemsSm","numItemsMd","numItemsLg","children","className"]),b=c(m,a),y=c(u,o),v=c(g,i),w=c(p,n),C=(0,r.tremorTwMerge)(b,y,v,w);return l.default.createElement("div",Object.assign({ref:s,className:(0,r.tremorTwMerge)(d("root"),"grid",C,x)},f),h)});m.displayName="Grid",e.s(["Grid",0,m],350967)},981339,e=>{"use strict";var t=e.i(185793);e.s(["Skeleton",()=>t.default])},500727,e=>{"use strict";var t=e.i(266027),r=e.i(243652),s=e.i(602869),l=e.i(135214);let a=(0,r.createQueryKeys)("mcpServers");e.s(["useMCPServers",0,e=>{let{accessToken:r}=(0,l.default)();return(0,t.useQuery)({queryKey:a.list(e?{filters:{teamId:e}}:void 0),queryFn:async()=>await (0,s.fetchMCPServers)(r,e),enabled:!!r})}])},699857,e=>{"use strict";var t=e.i(266027),r=e.i(243652),s=e.i(602869),l=e.i(135214);let a=(0,r.createQueryKeys)("mcpToolsets");e.s(["useMCPToolsets",0,()=>{let{accessToken:e}=(0,l.default)();return(0,t.useQuery)({queryKey:a.list(),queryFn:async()=>await (0,s.fetchMCPToolsets)(e),enabled:!!e})}])},916940,e=>{"use strict";var t=e.i(843476),r=e.i(271645),s=e.i(199133),l=e.i(602869);e.s(["default",0,({onChange:e,value:a,className:o,accessToken:i,placeholder:n="Select vector stores",disabled:d=!1})=>{let[c,m]=(0,r.useState)([]),[u,g]=(0,r.useState)(!1);return(0,r.useEffect)(()=>{(async()=>{if(i){g(!0);try{let e=await (0,l.vectorStoreListCall)(i);e.data&&m(e.data)}catch(e){console.error("Error fetching vector stores:",e)}finally{g(!1)}}})()},[i]),(0,t.jsx)("div",{children:(0,t.jsx)(s.Select,{mode:"multiple",placeholder:n,onChange:e,value:a,loading:u,className:o,allowClear:!0,options:c.map(e=>({label:`${e.vector_store_name||e.vector_store_id} (${e.vector_store_id})`,value:e.vector_store_id,title:e.vector_store_description||e.vector_store_id})),optionFilterProp:"label",showSearch:!0,style:{width:"100%"},disabled:d})})}])},101837,e=>{"use strict";var t=e.i(266027),r=e.i(243652),s=e.i(602869),l=e.i(135214);let a=(0,r.createQueryKeys)("mcpAccessGroups");e.s(["useMCPAccessGroups",0,()=>{let{accessToken:e}=(0,l.default)();return(0,t.useQuery)({queryKey:a.list({}),queryFn:async()=>await (0,s.fetchMCPAccessGroups)(e),enabled:!!e})}])},234713,e=>{"use strict";e.s(["NO_MCP_SERVERS_SENTINEL",0,"no-mcp-servers"])},75921,e=>{"use strict";var t=e.i(843476),r=e.i(101837),s=e.i(500727),l=e.i(699857),a=e.i(199133),o=e.i(234713);let i="toolset:";e.s(["default",0,({onChange:e,value:n,className:d,accessToken:c,placeholder:m="Select MCP servers",disabled:u=!1,teamId:g,allowNoMcpServers:p=!1})=>{let{data:h=[],isLoading:x}=(0,s.useMCPServers)(g),{data:f=[],isLoading:b}=(0,r.useMCPAccessGroups)(),{data:y=[],isLoading:v}=(0,l.useMCPToolsets)(),w=new Set(f),C=[...f.map(e=>({label:e,value:e,type:"accessGroup",searchText:`${e} Access Group`})),...h.map(e=>({label:`${e.server_name||e.server_id} (${e.server_id})`,value:e.server_id,type:"server",searchText:`${e.server_name||e.server_id} ${e.server_id} MCP Server`})),...y.map(e=>({label:e.toolset_name,value:`${i}${e.toolset_id}`,type:"toolset",searchText:`${e.toolset_name} ${e.toolset_id} Toolset`}))],N={accessGroup:"#52c41a",server:"#1890ff",toolset:"#722ed1"},k={accessGroup:"Access Group",server:"MCP Server",toolset:"Toolset"},j=[...n?.servers||[],...n?.accessGroups||[],...(n?.toolsets||[]).map(e=>`${i}${e}`)],S=p&&j.includes(o.NO_MCP_SERVERS_SENTINEL);return(0,t.jsx)("div",{children:(0,t.jsxs)(a.Select,{mode:"multiple",placeholder:m,onChange:t=>{if(p&&t.includes(o.NO_MCP_SERVERS_SENTINEL))return void e({servers:[o.NO_MCP_SERVERS_SENTINEL],accessGroups:[],toolsets:[]});let r=t.filter(e=>e.startsWith(i)).map(e=>e.slice(i.length)),s=t.filter(e=>!e.startsWith(i));e({servers:s.filter(e=>!w.has(e)),accessGroups:s.filter(e=>w.has(e)),toolsets:r})},value:j,loading:x||b||v,className:d,allowClear:!0,showSearch:!0,style:{width:"100%"},disabled:u,filterOption:(e,t)=>t?.value===o.NO_MCP_SERVERS_SENTINEL||(C.find(e=>e.value===t?.value)?.searchText||"").toLowerCase().includes(e.toLowerCase()),children:[p&&(0,t.jsx)(a.Select.Option,{value:o.NO_MCP_SERVERS_SENTINEL,label:"No MCP Servers",children:(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[(0,t.jsx)("span",{style:{flex:1},children:"No MCP Servers"}),(0,t.jsx)("span",{style:{color:"#8c8c8c",fontSize:"12px",fontWeight:500,opacity:.8},children:"Block all"})]})},o.NO_MCP_SERVERS_SENTINEL),C.map(e=>(0,t.jsx)(a.Select.Option,{value:e.value,label:e.label,disabled:S,children:(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[(0,t.jsx)("span",{style:{display:"inline-block",width:8,height:8,borderRadius:"50%",background:N[e.type],flexShrink:0}}),(0,t.jsx)("span",{style:{flex:1},children:e.label}),(0,t.jsx)("span",{style:{color:N[e.type],fontSize:"12px",fontWeight:500,opacity:.8},children:k[e.type]})]})},e.value))]})})}])}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0whkizop7gd0~.js b/litellm/proxy/_experimental/out/_next/static/chunks/0whkizop7gd0~.js new file mode 100644 index 00000000000..b3e15e69622 --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0whkizop7gd0~.js @@ -0,0 +1,41 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,486794,(e,t,n)=>{t.exports=function(){var e=document.getSelection();if(!e.rangeCount)return function(){};for(var t=document.activeElement,n=[],l=0;l{"use strict";var l=e.r(486794),r={"text/plain":"Text","text/html":"Url",default:"Text"};t.exports=function(e,t){var n,o,a,i,c,s,u,d,p=!1;t||(t={}),a=t.debug||!1;try{if(c=l(),s=document.createRange(),u=document.getSelection(),(d=document.createElement("span")).textContent=e,d.ariaHidden="true",d.style.all="unset",d.style.position="fixed",d.style.top=0,d.style.clip="rect(0, 0, 0, 0)",d.style.whiteSpace="pre",d.style.webkitUserSelect="text",d.style.MozUserSelect="text",d.style.msUserSelect="text",d.style.userSelect="text",d.addEventListener("copy",function(n){if(n.stopPropagation(),t.format)if(n.preventDefault(),void 0===n.clipboardData){a&&console.warn("unable to use e.clipboardData"),a&&console.warn("trying IE specific stuff"),window.clipboardData.clearData();var l=r[t.format]||r.default;window.clipboardData.setData(l,e)}else n.clipboardData.clearData(),n.clipboardData.setData(t.format,e);t.onCopy&&(n.preventDefault(),t.onCopy(n.clipboardData))}),document.body.appendChild(d),s.selectNodeContents(d),u.addRange(s),!document.execCommand("copy"))throw Error("copy command was unsuccessful");p=!0}catch(l){a&&console.error("unable to copy using execCommand: ",l),a&&console.warn("trying IE specific stuff");try{window.clipboardData.setData(t.format||"text",e),t.onCopy&&t.onCopy(window.clipboardData),p=!0}catch(l){a&&console.error("unable to copy using clipboardData: ",l),a&&console.error("falling back to prompt"),n="message"in t?t.message:"Copy to clipboard: #{key}, Enter",o=(/mac os x/i.test(navigator.userAgent)?"⌘":"Ctrl")+"+C",i=n.replace(/#{\s*key\s*}/g,o),window.prompt(i,e)}}finally{u&&("function"==typeof u.removeRange?u.removeRange(s):u.removeAllRanges()),d&&document.body.removeChild(d),c()}return p}},898586,401361,335771,e=>{"use strict";e.i(247167);var t=e.i(271645),n=e.i(8211),l=e.i(931067);let r={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M257.7 752c2 0 4-.2 6-.5L431.9 722c2-.4 3.9-1.3 5.3-2.8l423.9-423.9a9.96 9.96 0 000-14.1L694.9 114.9c-1.9-1.9-4.4-2.9-7.1-2.9s-5.2 1-7.1 2.9L256.8 538.8c-1.5 1.5-2.4 3.3-2.8 5.3l-29.5 168.2a33.5 33.5 0 009.4 29.8c6.6 6.4 14.9 9.9 23.8 9.9zm67.4-174.4L687.8 215l73.3 73.3-362.7 362.6-88.9 15.7 15.6-89zM880 836H144c-17.7 0-32 14.3-32 32v36c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-36c0-17.7-14.3-32-32-32z"}}]},name:"edit",theme:"outlined"};var o=e.i(9583),a=t.forwardRef(function(e,n){return t.createElement(o.default,(0,l.default)({},e,{ref:n,icon:r}))});e.s(["default",0,a],401361);var i=e.i(343794),c=e.i(430073),s=e.i(876556),u=e.i(174428),d=e.i(914949),p=e.i(529681),f=e.i(611935),m=e.i(735049),g=e.i(242064),b=e.i(929447),y=e.i(491816);let v={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M864 170h-60c-4.4 0-8 3.6-8 8v518H310v-73c0-6.7-7.8-10.5-13-6.3l-141.9 112a8 8 0 000 12.6l141.9 112c5.3 4.2 13 .4 13-6.3v-75h498c35.3 0 64-28.7 64-64V178c0-4.4-3.6-8-8-8z"}}]},name:"enter",theme:"outlined"};var h=t.forwardRef(function(e,n){return t.createElement(o.default,(0,l.default)({},e,{ref:n,icon:v}))}),x=e.i(404948),O=e.i(763731),E=e.i(635432),S=e.i(183293),w=e.i(246422);e.i(765846);var j=e.i(896091);let C=(0,w.genStyleHooks)("Typography",e=>{let t,{componentCls:n,titleMarginTop:l}=e;return{[n]:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({color:e.colorText,wordBreak:"break-word",lineHeight:e.lineHeight,[`&${n}-secondary`]:{color:e.colorTextDescription},[`&${n}-success`]:{color:e.colorSuccessText},[`&${n}-warning`]:{color:e.colorWarningText},[`&${n}-danger`]:{color:e.colorErrorText,"a&:active, a&:focus":{color:e.colorErrorTextActive},"a&:hover":{color:e.colorErrorTextHover}},[`&${n}-disabled`]:{color:e.colorTextDisabled,cursor:"not-allowed",userSelect:"none"},[` + div&, + p + `]:{marginBottom:"1em"}},(t={},[1,2,3,4,5].forEach(n=>{t[` + h${n}&, + div&-h${n}, + div&-h${n} > textarea, + h${n} + `]=((e,t,n,l)=>{let{titleMarginBottom:r,fontWeightStrong:o}=l;return{marginBottom:r,color:n,fontWeight:o,fontSize:e,lineHeight:t}})(e[`fontSizeHeading${n}`],e[`lineHeightHeading${n}`],e.colorTextHeading,e)}),t)),{[` + & + h1${n}, + & + h2${n}, + & + h3${n}, + & + h4${n}, + & + h5${n} + `]:{marginTop:l},[` + div, + ul, + li, + p, + h1, + h2, + h3, + h4, + h5`]:{[` + + h1, + + h2, + + h3, + + h4, + + h5 + `]:{marginTop:l}}}),{code:{margin:"0 0.2em",paddingInline:"0.4em",paddingBlock:"0.2em 0.1em",fontSize:"85%",fontFamily:e.fontFamilyCode,background:"rgba(150, 150, 150, 0.1)",border:"1px solid rgba(100, 100, 100, 0.2)",borderRadius:3},kbd:{margin:"0 0.2em",paddingInline:"0.4em",paddingBlock:"0.15em 0.1em",fontSize:"90%",fontFamily:e.fontFamilyCode,background:"rgba(150, 150, 150, 0.06)",border:"1px solid rgba(100, 100, 100, 0.2)",borderBottomWidth:2,borderRadius:3},mark:{padding:0,backgroundColor:j.gold[2]},"u, ins":{textDecoration:"underline",textDecorationSkipInk:"auto"},"s, del":{textDecoration:"line-through"},strong:{fontWeight:e.fontWeightStrong},"ul, ol":{marginInline:0,marginBlock:"0 1em",padding:0,li:{marginInline:"20px 0",marginBlock:0,paddingInline:"4px 0",paddingBlock:0}},ul:{listStyleType:"circle",ul:{listStyleType:"disc"}},ol:{listStyleType:"decimal"},"pre, blockquote":{margin:"1em 0"},pre:{padding:"0.4em 0.6em",whiteSpace:"pre-wrap",wordWrap:"break-word",background:"rgba(150, 150, 150, 0.1)",border:"1px solid rgba(100, 100, 100, 0.2)",borderRadius:3,fontFamily:e.fontFamilyCode,code:{display:"inline",margin:0,padding:0,fontSize:"inherit",fontFamily:"inherit",background:"transparent",border:0}},blockquote:{paddingInline:"0.6em 0",paddingBlock:0,borderInlineStart:"4px solid rgba(100, 100, 100, 0.2)",opacity:.85}}),(e=>{let{componentCls:t}=e;return{"a&, a":Object.assign(Object.assign({},(0,S.operationUnit)(e)),{userSelect:"text",[`&[disabled], &${t}-disabled`]:{color:e.colorTextDisabled,cursor:"not-allowed","&:active, &:hover":{color:e.colorTextDisabled},"&:active":{pointerEvents:"none"}}})}})(e)),{[` + ${n}-expand, + ${n}-collapse, + ${n}-edit, + ${n}-copy + `]:Object.assign(Object.assign({},(0,S.operationUnit)(e)),{marginInlineStart:e.marginXXS})}),(e=>{let{componentCls:t,paddingSM:n}=e;return{"&-edit-content":{position:"relative","div&":{insetInlineStart:e.calc(e.paddingSM).mul(-1).equal(),insetBlockStart:e.calc(n).div(-2).add(1).equal(),marginBottom:e.calc(n).div(2).sub(2).equal()},[`${t}-edit-content-confirm`]:{position:"absolute",insetInlineEnd:e.calc(e.marginXS).add(2).equal(),insetBlockEnd:e.marginXS,color:e.colorIcon,fontWeight:"normal",fontSize:e.fontSize,fontStyle:"normal",pointerEvents:"none"},textarea:{margin:"0!important",MozTransition:"none",height:"1em"}}}})(e)),{[`${e.componentCls}-copy-success`]:{[` + &, + &:hover, + &:focus`]:{color:e.colorSuccess}},[`${e.componentCls}-copy-icon-only`]:{marginInlineStart:0}}),{[` + a&-ellipsis, + span&-ellipsis + `]:{display:"inline-block",maxWidth:"100%"},"&-ellipsis-single-line":{whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis","a&, span&":{verticalAlign:"bottom"},"> code":{paddingBlock:0,maxWidth:"calc(100% - 1.2em)",display:"inline-block",overflow:"hidden",textOverflow:"ellipsis",verticalAlign:"bottom",boxSizing:"content-box"}},"&-ellipsis-multiple-line":{display:"-webkit-box",overflow:"hidden",WebkitLineClamp:3,WebkitBoxOrient:"vertical"}}),{"&-rtl":{direction:"rtl"}})}},()=>({titleMarginTop:"1.2em",titleMarginBottom:"0.5em"})),k=e=>{let{prefixCls:n,"aria-label":l,className:r,style:o,direction:a,maxLength:c,autoSize:s=!0,value:u,onSave:d,onCancel:p,onEnd:f,component:m,enterIcon:g=t.createElement(h,null)}=e,b=t.useRef(null),y=t.useRef(!1),v=t.useRef(null),[S,w]=t.useState(u);t.useEffect(()=>{w(u)},[u]),t.useEffect(()=>{var e;if(null==(e=b.current)?void 0:e.resizableTextArea){let{textArea:e}=b.current.resizableTextArea;e.focus();let{length:t}=e.value;e.setSelectionRange(t,t)}},[]);let j=()=>{d(S.trim())},[k,R,$]=C(n),T=(0,i.default)(n,`${n}-edit-content`,{[`${n}-rtl`]:"rtl"===a,[`${n}-${m}`]:!!m},r,R,$);return k(t.createElement("div",{className:T,style:o},t.createElement(E.default,{ref:b,maxLength:c,value:S,onChange:({target:e})=>{w(e.value.replace(/[\n\r]/g,""))},onKeyDown:({keyCode:e})=>{y.current||(v.current=e)},onKeyUp:({keyCode:e,ctrlKey:t,altKey:n,metaKey:l,shiftKey:r})=>{v.current!==e||y.current||t||n||l||r||(e===x.default.ENTER?(j(),null==f||f()):e===x.default.ESC&&p())},onCompositionStart:()=>{y.current=!0},onCompositionEnd:()=>{y.current=!1},onBlur:()=>{j()},"aria-label":l,rows:1,autoSize:s}),null!==g?(0,O.cloneElement)(g,{className:`${n}-edit-content-confirm`}):null))};var R=e.i(844343),$=e.i(175066);function T(e,n){return t.useMemo(()=>{let t=!!e;return[t,Object.assign(Object.assign({},n),t&&"object"==typeof e?e:null)]},[e])}var I=function(e,t){var n={};for(var l in e)Object.prototype.hasOwnProperty.call(e,l)&&0>t.indexOf(l)&&(n[l]=e[l]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var r=0,l=Object.getOwnPropertySymbols(e);rt.indexOf(l[r])&&Object.prototype.propertyIsEnumerable.call(e,l[r])&&(n[l[r]]=e[l[r]]);return n};let D=t.forwardRef((e,n)=>{let{prefixCls:l,component:r="article",className:o,rootClassName:a,setContentRef:c,children:s,direction:u,style:d}=e,p=I(e,["prefixCls","component","className","rootClassName","setContentRef","children","direction","style"]),{getPrefixCls:m,direction:b,className:y,style:v}=(0,g.useComponentConfig)("typography"),h=c?(0,f.composeRef)(n,c):n,x=m("typography",l),[O,E,S]=C(x),w=(0,i.default)(x,y,{[`${x}-rtl`]:"rtl"===(null!=u?u:b)},o,a,E,S),j=Object.assign(Object.assign({},v),d);return O(t.createElement(r,Object.assign({className:w,style:j,ref:h},p),s))});var P=e.i(121229),B=e.i(190144),M=e.i(739295);function H(e){return!1===e?[!1,!1]:Array.isArray(e)?e:[e]}function z(e,t,n){return!0===e||void 0===e?t:e||n&&t}let A=e=>["string","number"].includes(typeof e),W=({prefixCls:e,copied:n,locale:l,iconOnly:r,tooltips:o,icon:a,tabIndex:c,onCopy:s,loading:u})=>{let d=H(o),p=H(a),{copied:f,copy:m}=null!=l?l:{},g=n?f:m,b=z(d[+!!n],g),v="string"==typeof b?b:g;return t.createElement(y.default,{title:b},t.createElement("button",{type:"button",className:(0,i.default)(`${e}-copy`,{[`${e}-copy-success`]:n,[`${e}-copy-icon-only`]:r}),onClick:s,"aria-label":v,tabIndex:c},n?z(p[1],t.createElement(P.default,null),!0):z(p[0],u?t.createElement(M.default,null):t.createElement(B.default,null),!0)))},L=t.forwardRef(({style:e,children:n},l)=>{let r=t.useRef(null);return t.useImperativeHandle(l,()=>({isExceed:()=>{let e=r.current;return e.scrollHeight>e.clientHeight},getHeight:()=>r.current.clientHeight})),t.createElement("span",{"aria-hidden":!0,ref:r,style:Object.assign({position:"fixed",display:"block",left:0,top:0,pointerEvents:"none",backgroundColor:"rgba(255, 0, 0, 0.65)"},e)},n)});function N(e,t){let n=0,l=[];for(let r=0;rt){let e=t-n;return l.push(String(o).slice(0,e)),l}l.push(o),n=a}return e}let U={display:"-webkit-box",overflow:"hidden",WebkitBoxOrient:"vertical"};function F(e){let{enableMeasure:l,width:r,text:o,children:a,rows:i,expanded:c,miscDeps:d,onEllipsis:p}=e,f=t.useMemo(()=>(0,s.default)(o),[o]),m=t.useMemo(()=>f.reduce((e,t)=>e+(A(t)?String(t).length:1),0),[o]),g=t.useMemo(()=>a(f,!1),[o]),[b,y]=t.useState(null),v=t.useRef(null),h=t.useRef(null),x=t.useRef(null),O=t.useRef(null),E=t.useRef(null),[S,w]=t.useState(!1),[j,C]=t.useState(0),[k,R]=t.useState(0),[$,T]=t.useState(null);(0,u.default)(()=>{l&&r&&m?C(1):C(0)},[r,o,i,l,f]),(0,u.default)(()=>{var e,t,n,l;if(1===j)C(2),T(h.current&&getComputedStyle(h.current).whiteSpace);else if(2===j){let r=!!(null==(e=x.current)?void 0:e.isExceed());C(r?3:4),y(r?[0,m]:null),w(r),R(Math.max((null==(t=x.current)?void 0:t.getHeight())||0,(1===i?0:(null==(n=O.current)?void 0:n.getHeight())||0)+((null==(l=E.current)?void 0:l.getHeight())||0))+1),p(r)}},[j]);let I=b?Math.ceil((b[0]+b[1])/2):0;(0,u.default)(()=>{var e;let[t,n]=b||[0,0];if(t!==n){let l=((null==(e=v.current)?void 0:e.getHeight())||0)>k,r=I;n-t==1&&(r=l?t:n),y(l?[t,r]:[r,n])}},[b,I]);let D=t.useMemo(()=>{if(!l)return a(f,!1);if(3!==j||!b||b[0]!==b[1]){let e=a(f,!1);return[4,0].includes(j)?e:t.createElement("span",{style:Object.assign(Object.assign({},U),{WebkitLineClamp:i})},e)}return a(c?f:N(f,b[0]),S)},[c,j,b,f].concat((0,n.default)(d))),P={width:r,margin:0,padding:0,whiteSpace:"nowrap"===$?"normal":"inherit"};return t.createElement(t.Fragment,null,D,2===j&&t.createElement(t.Fragment,null,t.createElement(L,{style:Object.assign(Object.assign(Object.assign({},P),U),{WebkitLineClamp:i}),ref:x},g),t.createElement(L,{style:Object.assign(Object.assign(Object.assign({},P),U),{WebkitLineClamp:i-1}),ref:O},g),t.createElement(L,{style:Object.assign(Object.assign(Object.assign({},P),U),{WebkitLineClamp:1}),ref:E},a([],!0))),3===j&&b&&b[0]!==b[1]&&t.createElement(L,{style:Object.assign(Object.assign({},P),{top:400}),ref:v},a(N(f,I),!0)),1===j&&t.createElement("span",{style:{whiteSpace:"inherit"},ref:h}))}let q=({enableEllipsis:e,isEllipsis:n,children:l,tooltipProps:r})=>(null==r?void 0:r.title)&&e?t.createElement(y.default,Object.assign({open:!!n&&void 0},r),l):l;var X=function(e,t){var n={};for(var l in e)Object.prototype.hasOwnProperty.call(e,l)&&0>t.indexOf(l)&&(n[l]=e[l]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var r=0,l=Object.getOwnPropertySymbols(e);rt.indexOf(l[r])&&Object.prototype.propertyIsEnumerable.call(e,l[r])&&(n[l[r]]=e[l[r]]);return n};let K=["delete","mark","code","underline","strong","keyboard","italic"],V=t.forwardRef((e,l)=>{var r;let o,v,h,{prefixCls:x,className:O,style:E,type:S,disabled:w,children:j,ellipsis:C,editable:I,copyable:P,component:B,title:M}=e,H=X(e,["prefixCls","className","style","type","disabled","children","ellipsis","editable","copyable","component","title"]),{getPrefixCls:z,direction:L}=t.useContext(g.ConfigContext),[N]=(0,b.default)("Text"),U=t.useRef(null),V=t.useRef(null),_=z("typography",x),G=(0,p.default)(H,K),[J,Q]=T(I),[Y,Z]=(0,d.default)(!1,{value:Q.editing}),{triggerType:ee=["icon"]}=Q,et=e=>{var t;e&&(null==(t=Q.onStart)||t.call(Q)),Z(e)},en=(o=(0,t.useRef)(void 0),(0,t.useEffect)(()=>{o.current=Y}),o.current);(0,u.default)(()=>{var e;!Y&&en&&(null==(e=V.current)||e.focus())},[Y]);let el=e=>{null==e||e.preventDefault(),et(!0)},[er,eo]=T(P),{copied:ea,copyLoading:ei,onClick:ec}=(({copyConfig:e,children:n})=>{let[l,r]=t.useState(!1),[o,a]=t.useState(!1),i=t.useRef(null),c=()=>{i.current&&clearTimeout(i.current)},s={};e.format&&(s.format=e.format),t.useEffect(()=>c,[]);let u=(0,$.default)(t=>{var l,o,u,d;return l=void 0,o=void 0,u=void 0,d=function*(){var l;null==t||t.preventDefault(),null==t||t.stopPropagation(),a(!0);try{let o="function"==typeof e.text?yield e.text():e.text;(0,R.default)(o||((e,t=!1)=>t&&null==e?[]:Array.isArray(e)?e:[e])(n,!0).join("")||"",s),a(!1),r(!0),c(),i.current=setTimeout(()=>{r(!1)},3e3),null==(l=e.onCopy)||l.call(e,t)}catch(e){throw a(!1),e}},new(u||(u=Promise))(function(e,t){function n(e){try{a(d.next(e))}catch(e){t(e)}}function r(e){try{a(d.throw(e))}catch(e){t(e)}}function a(t){var l;t.done?e(t.value):((l=t.value)instanceof u?l:new u(function(e){e(l)})).then(n,r)}a((d=d.apply(l,o||[])).next())})});return{copied:l,copyLoading:o,onClick:u}})({copyConfig:eo,children:j}),[es,eu]=t.useState(!1),[ed,ep]=t.useState(!1),[ef,em]=t.useState(!1),[eg,eb]=t.useState(!1),[ey,ev]=t.useState(!0),[eh,ex]=T(C,{expandable:!1,symbol:e=>e?null==N?void 0:N.collapse:null==N?void 0:N.expand}),[eO,eE]=(0,d.default)(ex.defaultExpanded||!1,{value:ex.expanded}),eS=eh&&(!eO||"collapsible"===ex.expandable),{rows:ew=1}=ex,ej=t.useMemo(()=>eS&&(void 0!==ex.suffix||ex.onEllipsis||ex.expandable||J||er),[eS,ex,J,er]);(0,u.default)(()=>{eh&&!ej&&(eu((0,m.isStyleSupport)("webkitLineClamp")),ep((0,m.isStyleSupport)("textOverflow")))},[ej,eh]);let[eC,ek]=t.useState(eS),eR=t.useMemo(()=>!ej&&(1===ew?ed:es),[ej,ed,es]);(0,u.default)(()=>{ek(eR&&eS)},[eR,eS]);let e$=eS&&(eC?eg:ef),eT=eS&&1===ew&&eC,eI=eS&&ew>1&&eC,[eD,eP]=t.useState(0),eB=e=>{var t;em(e),ef!==e&&(null==(t=ex.onEllipsis)||t.call(ex,e))};t.useEffect(()=>{let e=U.current;if(eh&&eC&&e){let t,n,l,r=(t=document.createElement("em"),e.appendChild(t),n=e.getBoundingClientRect(),l=t.getBoundingClientRect(),e.removeChild(t),n.left>l.left||l.right>n.right||n.top>l.top||l.bottom>n.bottom);eg!==r&&eb(r)}},[eh,eC,j,eI,ey,eD]),t.useEffect(()=>{let e=U.current;if("u"{ev(!!e.offsetParent)});return t.observe(e),()=>{t.disconnect()}},[eC,eS]);let eM=(v=ex.tooltip,h=Q.text,(0,t.useMemo)(()=>!0===v?{title:null!=h?h:j}:(0,t.isValidElement)(v)?{title:v}:"object"==typeof v?Object.assign({title:null!=h?h:j},v):{title:v},[v,h,j])),eH=t.useMemo(()=>{if(eh&&!eC)return[Q.text,j,M,eM.title].find(A)},[eh,eC,M,eM.title,e$]);return Y?t.createElement(k,{value:null!=(r=Q.text)?r:"string"==typeof j?j:"",onSave:e=>{var t;null==(t=Q.onChange)||t.call(Q,e),et(!1)},onCancel:()=>{var e;null==(e=Q.onCancel)||e.call(Q),et(!1)},onEnd:Q.onEnd,prefixCls:_,className:O,style:E,direction:L,component:B,maxLength:Q.maxLength,autoSize:Q.autoSize,enterIcon:Q.enterIcon}):t.createElement(c.default,{onResize:({offsetWidth:e})=>{eP(e)},disabled:!eS},r=>t.createElement(q,{tooltipProps:eM,enableEllipsis:eS,isEllipsis:e$},t.createElement(D,Object.assign({className:(0,i.default)({[`${_}-${S}`]:S,[`${_}-disabled`]:w,[`${_}-ellipsis`]:eh,[`${_}-ellipsis-single-line`]:eT,[`${_}-ellipsis-multiple-line`]:eI},O),prefixCls:x,style:Object.assign(Object.assign({},E),{WebkitLineClamp:eI?ew:void 0}),component:B,ref:(0,f.composeRef)(r,U,l),direction:L,onClick:ee.includes("text")?el:void 0,"aria-label":null==eH?void 0:eH.toString(),title:M},G),t.createElement(F,{enableMeasure:eS&&!eC,text:j,rows:ew,width:eD,onEllipsis:eB,expanded:eO,miscDeps:[ea,eO,ei,J,er,N].concat((0,n.default)(K.map(t=>e[t])))},(n,l)=>{let r;return function({mark:e,code:n,underline:l,delete:r,strong:o,keyboard:a,italic:i},c){let s=c;function u(e,n){n&&(s=t.createElement(e,{},s))}return u("strong",o),u("u",l),u("del",r),u("code",n),u("mark",e),u("kbd",a),u("i",i),s}(e,t.createElement(t.Fragment,null,n.length>0&&l&&!eO&&eH?t.createElement("span",{key:"show-content","aria-hidden":!0},n):n,[(r=l)&&!eO&&t.createElement("span",{"aria-hidden":!0,key:"ellipsis"},"..."),ex.suffix,[r&&(()=>{let{expandable:e,symbol:n}=ex;return e?t.createElement("button",{type:"button",key:"expand",className:`${_}-${eO?"collapse":"expand"}`,onClick:e=>{var t,n;eE((t={expanded:!eO}).expanded),null==(n=ex.onExpand)||n.call(ex,e,t)},"aria-label":eO?N.collapse:null==N?void 0:N.expand},"function"==typeof n?n(eO):n):null})(),(()=>{if(!J)return;let{icon:e,tooltip:n,tabIndex:l}=Q,r=(0,s.default)(n)[0]||(null==N?void 0:N.edit),o="string"==typeof r?r:"";return ee.includes("icon")?t.createElement(y.default,{key:"edit",title:!1===n?"":r},t.createElement("button",{type:"button",ref:V,className:`${_}-edit`,onClick:el,"aria-label":o,tabIndex:l},e||t.createElement(a,{role:"button"}))):null})(),er?t.createElement(W,Object.assign({key:"copy"},eo,{prefixCls:_,copied:ea,locale:N,onCopy:ec,loading:ei,iconOnly:null==j})):null]]))}))))});var _=function(e,t){var n={};for(var l in e)Object.prototype.hasOwnProperty.call(e,l)&&0>t.indexOf(l)&&(n[l]=e[l]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var r=0,l=Object.getOwnPropertySymbols(e);rt.indexOf(l[r])&&Object.prototype.propertyIsEnumerable.call(e,l[r])&&(n[l[r]]=e[l[r]]);return n};let G=t.forwardRef((e,n)=>{let{ellipsis:l,rel:r,children:o,navigate:a}=e,i=_(e,["ellipsis","rel","children","navigate"]),c=Object.assign(Object.assign({},i),{rel:void 0===r&&"_blank"===i.target?"noopener noreferrer":r});return t.createElement(V,Object.assign({},c,{ref:n,ellipsis:!!l,component:"a"}),o)});var J=function(e,t){var n={};for(var l in e)Object.prototype.hasOwnProperty.call(e,l)&&0>t.indexOf(l)&&(n[l]=e[l]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var r=0,l=Object.getOwnPropertySymbols(e);rt.indexOf(l[r])&&Object.prototype.propertyIsEnumerable.call(e,l[r])&&(n[l[r]]=e[l[r]]);return n};let Q=t.forwardRef((e,n)=>{let{children:l}=e,r=J(e,["children"]);return t.createElement(V,Object.assign({ref:n},r,{component:"div"}),l)});var Y=function(e,t){var n={};for(var l in e)Object.prototype.hasOwnProperty.call(e,l)&&0>t.indexOf(l)&&(n[l]=e[l]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var r=0,l=Object.getOwnPropertySymbols(e);rt.indexOf(l[r])&&Object.prototype.propertyIsEnumerable.call(e,l[r])&&(n[l[r]]=e[l[r]]);return n};let Z=t.forwardRef((e,n)=>{let{ellipsis:l,children:r}=e,o=Y(e,["ellipsis","children"]),a=t.useMemo(()=>l&&"object"==typeof l?(0,p.default)(l,["expandable","rows"]):l,[l]);return t.createElement(V,Object.assign({ref:n},o,{ellipsis:a,component:"span"}),r)});var ee=function(e,t){var n={};for(var l in e)Object.prototype.hasOwnProperty.call(e,l)&&0>t.indexOf(l)&&(n[l]=e[l]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var r=0,l=Object.getOwnPropertySymbols(e);rt.indexOf(l[r])&&Object.prototype.propertyIsEnumerable.call(e,l[r])&&(n[l[r]]=e[l[r]]);return n};let et=[1,2,3,4,5],en=t.forwardRef((e,n)=>{let{level:l=1,children:r}=e,o=ee(e,["level","children"]),a=et.includes(l)?`h${l}`:"h1";return t.createElement(V,Object.assign({ref:n},o,{component:a}),r)});e.s(["default",0,en],335771),D.Text=Z,D.Link=G,D.Title=en,D.Paragraph=Q,e.s(["Typography",0,D],898586)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0x.73w57rn4ou.js b/litellm/proxy/_experimental/out/_next/static/chunks/0x.73w57rn4ou.js new file mode 100644 index 00000000000..8030b63f005 --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0x.73w57rn4ou.js @@ -0,0 +1 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,233525,(e,r,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"warnOnce",{enumerable:!0,get:function(){return n}});let n=e=>{}},718967,(e,r,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n={DecodeError:function(){return P},MiddlewareNotFoundError:function(){return O},MissingStaticPage:function(){return h},NormalizeError:function(){return E},PageNotFoundError:function(){return b},SP:function(){return m},ST:function(){return y},WEB_VITALS:function(){return i},execOnce:function(){return u},getDisplayName:function(){return l},getLocationOrigin:function(){return c},getURL:function(){return f},isAbsoluteUrl:function(){return a},isResSent:function(){return d},loadGetInitialProps:function(){return g},normalizeRepeatedSlashes:function(){return p},stringifyError:function(){return N}};for(var o in n)Object.defineProperty(t,o,{enumerable:!0,get:n[o]});let i=["CLS","FCP","FID","INP","LCP","TTFB"];function u(e){let r,t=!1;return(...n)=>(t||(t=!0,r=e(...n)),r)}let s=/^[a-zA-Z][a-zA-Z\d+\-.]*?:/,a=e=>s.test(e);function c(){let{protocol:e,hostname:r,port:t}=window.location;return`${e}//${r}${t?":"+t:""}`}function f(){let{href:e}=window.location,r=c();return e.substring(r.length)}function l(e){return"string"==typeof e?e:e.displayName||e.name||"Unknown"}function d(e){return e.finished||e.headersSent}function p(e){let r=e.split("?");return r[0].replace(/\\/g,"/").replace(/\/\/+/g,"/")+(r[1]?`?${r.slice(1).join("?")}`:"")}async function g(e,r){let t=r.res||r.ctx&&r.ctx.res;if(!e.getInitialProps)return r.ctx&&r.Component?{pageProps:await g(r.Component,r.ctx)}:{};let n=await e.getInitialProps(r);if(t&&d(t))return n;if(!n)throw Object.defineProperty(Error(`"${l(e)}.getInitialProps()" should resolve to an object. But found "${n}" instead.`),"__NEXT_ERROR_CODE",{value:"E1025",enumerable:!1,configurable:!0});return n}let m="u">typeof performance,y=m&&["mark","measure","getEntriesByName"].every(e=>"function"==typeof performance[e]);class P extends Error{}class E extends Error{}class b extends Error{constructor(e){super(),this.code="ENOENT",this.name="PageNotFoundError",this.message=`Cannot find module for page: ${e}`}}class h extends Error{constructor(e,r){super(),this.message=`Failed to load static file for page: ${e} ${r}`}}class O extends Error{constructor(){super(),this.code="ENOENT",this.message="Cannot find the middleware module"}}function N(e){return JSON.stringify({message:e.message,stack:e.stack})}},998183,(e,r,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n={assign:function(){return a},searchParamsToUrlQuery:function(){return i},urlQueryToSearchParams:function(){return s}};for(var o in n)Object.defineProperty(t,o,{enumerable:!0,get:n[o]});function i(e){let r={};for(let[t,n]of e.entries()){let e=r[t];void 0===e?r[t]=n:Array.isArray(e)?e.push(n):r[t]=[e,n]}return r}function u(e){return"string"==typeof e?e:("number"!=typeof e||isNaN(e))&&"boolean"!=typeof e?"":String(e)}function s(e){let r=new URLSearchParams;for(let[t,n]of Object.entries(e))if(Array.isArray(n))for(let e of n)r.append(t,u(e));else r.set(t,u(n));return r}function a(e,...r){for(let t of r){for(let r of t.keys())e.delete(r);for(let[r,n]of t.entries())e.append(r,n)}return e}}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0x6hmpiq7.b-x.js b/litellm/proxy/_experimental/out/_next/static/chunks/0x6hmpiq7.b-x.js new file mode 100644 index 00000000000..70ecf51d38b --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0x6hmpiq7.b-x.js @@ -0,0 +1,420 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,695411,e=>{"use strict";var t=e.i(602869);let r=async e=>{try{let r=await (0,t.modelHubCall)(e);if(console.log("model_info:",r),r?.data.length>0){let e=r.data.map(e=>({model_group:e.model_group,mode:e?.mode}));return e.sort((e,t)=>e.model_group.localeCompare(t.model_group)),e}return[]}catch(e){throw console.error("Error fetching model info:",e),e}};e.s(["fetchAvailableModels",0,r])},737434,e=>{"use strict";var t=e.i(184163);e.s(["DownloadOutlined",()=>t.default])},916940,e=>{"use strict";var t=e.i(843476),r=e.i(271645),o=e.i(199133),a=e.i(602869);e.s(["default",0,({onChange:e,value:i,className:n,accessToken:s,placeholder:l="Select vector stores",disabled:c=!1})=>{let[d,u]=(0,r.useState)([]),[p,m]=(0,r.useState)(!1);return(0,r.useEffect)(()=>{(async()=>{if(s){m(!0);try{let e=await (0,a.vectorStoreListCall)(s);e.data&&u(e.data)}catch(e){console.error("Error fetching vector stores:",e)}finally{m(!1)}}})()},[s]),(0,t.jsx)("div",{children:(0,t.jsx)(o.Select,{mode:"multiple",placeholder:l,onChange:e,value:i,loading:p,className:n,allowClear:!0,options:d.map(e=>({label:`${e.vector_store_name||e.vector_store_id} (${e.vector_store_id})`,value:e.vector_store_id,title:e.vector_store_description||e.vector_store_id})),optionFilterProp:"label",showSearch:!0,style:{width:"100%"},disabled:c})})}])},246349,e=>{"use strict";let t=(0,e.i(475254).default)("chevron-right",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);e.s(["default",0,t])},841947,e=>{"use strict";let t=(0,e.i(475254).default)("x",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);e.s(["default",0,t])},603908,e=>{"use strict";let t=(0,e.i(475254).default)("plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);e.s(["default",0,t])},107233,37727,e=>{"use strict";var t=e.i(603908);e.s(["Plus",()=>t.default],107233);var r=e.i(841947);e.s(["X",()=>r.default],37727)},482725,e=>{"use strict";var t=e.i(244451);e.s(["Spin",()=>t.default])},270377,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M464 688a48 48 0 1096 0 48 48 0 10-96 0zm24-112h48c4.4 0 8-3.6 8-8V296c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v272c0 4.4 3.6 8 8 8z"}}]},name:"exclamation-circle",theme:"outlined"};var a=e.i(9583),i=r.forwardRef(function(e,i){return r.createElement(a.default,(0,t.default)({},e,{ref:i,icon:o}))});e.s(["ExclamationCircleOutlined",0,i],270377)},166406,e=>{"use strict";var t=e.i(190144);e.s(["CopyOutlined",()=>t.default])},447566,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M872 474H286.9l350.2-304c5.6-4.9 2.2-14-5.2-14h-88.5c-3.9 0-7.6 1.4-10.5 3.9L155 487.8a31.96 31.96 0 000 48.3L535.1 866c1.5 1.3 3.3 2 5.2 2h91.5c7.4 0 10.8-9.2 5.2-14L286.9 550H872c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8z"}}]},name:"arrow-left",theme:"outlined"};var a=e.i(9583),i=r.forwardRef(function(e,i){return r.createElement(a.default,(0,t.default)({},e,{ref:i,icon:o}))});e.s(["ArrowLeftOutlined",0,i],447566)},637235,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M686.7 638.6L544.1 535.5V288c0-4.4-3.6-8-8-8H488c-4.4 0-8 3.6-8 8v275.4c0 2.6 1.2 5 3.3 6.5l165.4 120.6c3.6 2.6 8.6 1.8 11.2-1.7l28.6-39c2.6-3.7 1.8-8.7-1.8-11.2z"}}]},name:"clock-circle",theme:"outlined"};var a=e.i(9583),i=r.forwardRef(function(e,i){return r.createElement(a.default,(0,t.default)({},e,{ref:i,icon:o}))});e.s(["ClockCircleOutlined",0,i],637235)},597440,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z"}}]},name:"delete",theme:"outlined"};var a=e.i(9583),i=r.forwardRef(function(e,i){return r.createElement(a.default,(0,t.default)({},e,{ref:i,icon:o}))});e.s(["default",0,i],597440)},955135,e=>{"use strict";var t=e.i(597440);e.s(["DeleteOutlined",()=>t.default])},646563,e=>{"use strict";var t=e.i(959013);e.s(["PlusOutlined",()=>t.default])},599724,936325,e=>{"use strict";var t=e.i(95779),r=e.i(444755),o=e.i(673706),a=e.i(271645);let i=a.default.forwardRef((e,i)=>{let{color:n,className:s,children:l}=e;return a.default.createElement("p",{ref:i,className:(0,r.tremorTwMerge)("text-tremor-default",n?(0,o.getColorClassNames)(n,t.colorPalette.text).textColor:(0,r.tremorTwMerge)("text-tremor-content","dark:text-dark-tremor-content"),s)},l)});i.displayName="Text",e.s(["default",0,i],936325),e.s(["Text",0,i],599724)},994388,e=>{"use strict";var t=e.i(290571),r=e.i(829087),o=e.i(271645);let a=["preEnter","entering","entered","preExit","exiting","exited","unmounted"],i=e=>({_s:e,status:a[e],isEnter:e<3,isMounted:6!==e,isResolved:2===e||e>4}),n=e=>e?6:5,s=(e,t,r,o,a)=>{clearTimeout(o.current);let n=i(e);t(n),r.current=n,a&&a({current:n})};var l=e.i(480731),c=e.i(444755),d=e.i(673706);let u=e=>{var r=(0,t.__rest)(e,[]);return o.default.createElement("svg",Object.assign({},r,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"}),o.default.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}),o.default.createElement("path",{d:"M18.364 5.636L16.95 7.05A7 7 0 1 0 19 12h2a9 9 0 1 1-2.636-6.364z"}))};var p=e.i(95779);let m={xs:{height:"h-4",width:"w-4"},sm:{height:"h-5",width:"w-5"},md:{height:"h-5",width:"w-5"},lg:{height:"h-6",width:"w-6"},xl:{height:"h-6",width:"w-6"}},h=(e,t)=>{switch(e){case"primary":return{textColor:t?(0,d.getColorClassNames)("white").textColor:"text-tremor-brand-inverted dark:text-dark-tremor-brand-inverted",hoverTextColor:t?(0,d.getColorClassNames)("white").textColor:"text-tremor-brand-inverted dark:text-dark-tremor-brand-inverted",bgColor:t?(0,d.getColorClassNames)(t,p.colorPalette.background).bgColor:"bg-tremor-brand dark:bg-dark-tremor-brand",hoverBgColor:t?(0,d.getColorClassNames)(t,p.colorPalette.darkBackground).hoverBgColor:"hover:bg-tremor-brand-emphasis dark:hover:bg-dark-tremor-brand-emphasis",borderColor:t?(0,d.getColorClassNames)(t,p.colorPalette.border).borderColor:"border-tremor-brand dark:border-dark-tremor-brand",hoverBorderColor:t?(0,d.getColorClassNames)(t,p.colorPalette.darkBorder).hoverBorderColor:"hover:border-tremor-brand-emphasis dark:hover:border-dark-tremor-brand-emphasis"};case"secondary":return{textColor:t?(0,d.getColorClassNames)(t,p.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",hoverTextColor:t?(0,d.getColorClassNames)(t,p.colorPalette.text).textColor:"hover:text-tremor-brand-emphasis dark:hover:text-dark-tremor-brand-emphasis",bgColor:(0,d.getColorClassNames)("transparent").bgColor,hoverBgColor:t?(0,c.tremorTwMerge)((0,d.getColorClassNames)(t,p.colorPalette.background).hoverBgColor,"hover:bg-opacity-20 dark:hover:bg-opacity-20"):"hover:bg-tremor-brand-faint dark:hover:bg-dark-tremor-brand-faint",borderColor:t?(0,d.getColorClassNames)(t,p.colorPalette.border).borderColor:"border-tremor-brand dark:border-dark-tremor-brand"};case"light":return{textColor:t?(0,d.getColorClassNames)(t,p.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",hoverTextColor:t?(0,d.getColorClassNames)(t,p.colorPalette.darkText).hoverTextColor:"hover:text-tremor-brand-emphasis dark:hover:text-dark-tremor-brand-emphasis",bgColor:(0,d.getColorClassNames)("transparent").bgColor,borderColor:"",hoverBorderColor:""}}},g=(0,d.makeClassName)("Button"),f=({loading:e,iconSize:t,iconPosition:r,Icon:a,needMargin:i,transitionStatus:n})=>{let s=i?r===l.HorizontalPositions.Left?(0,c.tremorTwMerge)("-ml-1","mr-1.5"):(0,c.tremorTwMerge)("-mr-1","ml-1.5"):"",d=(0,c.tremorTwMerge)("w-0 h-0"),p={default:d,entering:d,entered:t,exiting:t,exited:d};return e?o.default.createElement(u,{className:(0,c.tremorTwMerge)(g("icon"),"animate-spin shrink-0",s,p.default,p[n]),style:{transition:"width 150ms"}}):o.default.createElement(a,{className:(0,c.tremorTwMerge)(g("icon"),"shrink-0",t,s)})},b=o.default.forwardRef((e,a)=>{let{icon:u,iconPosition:p=l.HorizontalPositions.Left,size:b=l.Sizes.SM,color:v,variant:x="primary",disabled:_,loading:k=!1,loadingText:y,children:w,tooltip:S,className:C}=e,j=(0,t.__rest)(e,["icon","iconPosition","size","color","variant","disabled","loading","loadingText","children","tooltip","className"]),z=k||_,N=void 0!==u||k,M=k&&y,T=!(!w&&!M),R=(0,c.tremorTwMerge)(m[b].height,m[b].width),E="light"!==x?(0,c.tremorTwMerge)("rounded-tremor-default border","shadow-tremor-input","dark:shadow-dark-tremor-input"):"",O=h(x,v),I=("light"!==x?{xs:{paddingX:"px-2.5",paddingY:"py-1.5",fontSize:"text-xs"},sm:{paddingX:"px-4",paddingY:"py-2",fontSize:"text-sm"},md:{paddingX:"px-4",paddingY:"py-2",fontSize:"text-md"},lg:{paddingX:"px-4",paddingY:"py-2.5",fontSize:"text-lg"},xl:{paddingX:"px-4",paddingY:"py-3",fontSize:"text-xl"}}:{xs:{paddingX:"",paddingY:"",fontSize:"text-xs"},sm:{paddingX:"",paddingY:"",fontSize:"text-sm"},md:{paddingX:"",paddingY:"",fontSize:"text-md"},lg:{paddingX:"",paddingY:"",fontSize:"text-lg"},xl:{paddingX:"",paddingY:"",fontSize:"text-xl"}})[b],{tooltipProps:H,getReferenceProps:A}=(0,r.useTooltip)(300),[P,L]=(({enter:e=!0,exit:t=!0,preEnter:r,preExit:a,timeout:l,initialEntered:c,mountOnEnter:d,unmountOnExit:u,onStateChange:p}={})=>{let[m,h]=(0,o.useState)(()=>i(c?2:n(d))),g=(0,o.useRef)(m),f=(0,o.useRef)(0),[b,v]="object"==typeof l?[l.enter,l.exit]:[l,l],x=(0,o.useCallback)(()=>{let e=((e,t)=>{switch(e){case 1:case 0:return 2;case 4:case 3:return n(t)}})(g.current._s,u);e&&s(e,h,g,f,p)},[p,u]);return[m,(0,o.useCallback)(o=>{let i=e=>{switch(s(e,h,g,f,p),e){case 1:b>=0&&(f.current=((...e)=>setTimeout(...e))(x,b));break;case 4:v>=0&&(f.current=((...e)=>setTimeout(...e))(x,v));break;case 0:case 3:f.current=((...e)=>setTimeout(...e))(()=>{isNaN(document.body.offsetTop)||i(e+1)},0)}},l=g.current.isEnter;"boolean"!=typeof o&&(o=!l),o?l||i(e?+!r:2):l&&i(t?a?3:4:n(u))},[x,p,e,t,r,a,b,v,u]),x]})({timeout:50});return(0,o.useEffect)(()=>{L(k)},[k]),o.default.createElement("button",Object.assign({ref:(0,d.mergeRefs)([a,H.refs.setReference]),className:(0,c.tremorTwMerge)(g("root"),"shrink-0 inline-flex justify-center items-center group font-medium outline-none",E,I.paddingX,I.paddingY,I.fontSize,O.textColor,O.bgColor,O.borderColor,O.hoverBorderColor,z?"opacity-50 cursor-not-allowed":(0,c.tremorTwMerge)(h(x,v).hoverTextColor,h(x,v).hoverBgColor,h(x,v).hoverBorderColor),C),disabled:z},A,j),o.default.createElement(r.default,Object.assign({text:S},H)),N&&p!==l.HorizontalPositions.Right?o.default.createElement(f,{loading:k,iconSize:R,iconPosition:p,Icon:u,transitionStatus:P.status,needMargin:T}):null,M||w?o.default.createElement("span",{className:(0,c.tremorTwMerge)(g("text"),"text-tremor-default whitespace-nowrap")},M?y:w):null,N&&p===l.HorizontalPositions.Right?o.default.createElement(f,{loading:k,iconSize:R,iconPosition:p,Icon:u,transitionStatus:P.status,needMargin:T}):null)});b.displayName="Button",e.s(["Button",0,b],994388)},304967,e=>{"use strict";var t=e.i(290571),r=e.i(271645),o=e.i(480731),a=e.i(95779),i=e.i(444755),n=e.i(673706);let s=(0,n.makeClassName)("Card"),l=r.default.forwardRef((e,l)=>{let{decoration:c="",decorationColor:d,children:u,className:p}=e,m=(0,t.__rest)(e,["decoration","decorationColor","children","className"]);return r.default.createElement("div",Object.assign({ref:l,className:(0,i.tremorTwMerge)(s("root"),"relative w-full text-left ring-1 rounded-tremor-default p-6","bg-tremor-background ring-tremor-ring shadow-tremor-card","dark:bg-dark-tremor-background dark:ring-dark-tremor-ring dark:shadow-dark-tremor-card",d?(0,n.getColorClassNames)(d,a.colorPalette.border).borderColor:"border-tremor-brand dark:border-dark-tremor-brand",(e=>{if(!e)return"";switch(e){case o.HorizontalPositions.Left:return"border-l-4";case o.VerticalPositions.Top:return"border-t-4";case o.HorizontalPositions.Right:return"border-r-4";case o.VerticalPositions.Bottom:return"border-b-4";default:return""}})(c),p)},m),u)});l.displayName="Card",e.s(["Card",0,l],304967)},629569,e=>{"use strict";var t=e.i(290571),r=e.i(95779),o=e.i(444755),a=e.i(673706),i=e.i(271645);let n=i.default.forwardRef((e,n)=>{let{color:s,children:l,className:c}=e,d=(0,t.__rest)(e,["color","children","className"]);return i.default.createElement("p",Object.assign({ref:n,className:(0,o.tremorTwMerge)("font-medium text-tremor-title",s?(0,a.getColorClassNames)(s,r.colorPalette.darkText).textColor:"text-tremor-content-strong dark:text-dark-tremor-content-strong",c)},d),l)});n.displayName="Title",e.s(["Title",0,n],629569)},653496,e=>{"use strict";var t=e.i(721369);e.s(["Tabs",()=>t.default])},536916,e=>{"use strict";var t=e.i(374276);e.s(["Checkbox",()=>t.default])},921511,e=>{"use strict";var t=e.i(843476),r=e.i(271645),o=e.i(199133),a=e.i(602869);function i(e){return e.filter(e=>(e.version_status??"draft")!=="draft").map(e=>{var t;let r=e.version_number??1,o=e.version_status??"draft";return{label:`${e.policy_name} — v${r} (${o})${e.description?` — ${e.description}`:""}`,value:"production"===o?e.policy_name:e.policy_id?(t=e.policy_id,`policy_${t}`):e.policy_name}})}e.s(["default",0,({onChange:e,value:n,className:s,accessToken:l,disabled:c,onPoliciesLoaded:d})=>{let[u,p]=(0,r.useState)([]),[m,h]=(0,r.useState)(!1);return(0,r.useEffect)(()=>{(async()=>{if(l){h(!0);try{let e=await (0,a.getPoliciesList)(l);e.policies&&(p(e.policies),d?.(e.policies))}catch(e){console.error("Error fetching policies:",e)}finally{h(!1)}}})()},[l,d]),(0,t.jsx)("div",{children:(0,t.jsx)(o.Select,{mode:"multiple",disabled:c,placeholder:c?"Setting policies is a premium feature.":"Select policies (production or published versions)",onChange:t=>{e(t)},value:n,loading:m,className:s,allowClear:!0,options:i(u),optionFilterProp:"label",showSearch:!0,style:{width:"100%"}})})},"getPolicyOptionEntries",0,i])},891547,e=>{"use strict";var t=e.i(843476),r=e.i(271645),o=e.i(199133),a=e.i(602869);e.s(["default",0,({onChange:e,value:i,className:n,accessToken:s,disabled:l})=>{let[c,d]=(0,r.useState)([]),[u,p]=(0,r.useState)(!1);return(0,r.useEffect)(()=>{(async()=>{if(s){p(!0);try{let e=await (0,a.getGuardrailsList)(s);console.log("Guardrails response:",e),e.guardrails&&(console.log("Guardrails data:",e.guardrails),d(e.guardrails))}catch(e){console.error("Error fetching guardrails:",e)}finally{p(!1)}}})()},[s]),(0,t.jsx)("div",{children:(0,t.jsx)(o.Select,{mode:"multiple",disabled:l,placeholder:l?"Setting guardrails is a premium feature.":"Select guardrails",onChange:t=>{console.log("Selected guardrails:",t),e(t)},value:i,loading:u,className:n,allowClear:!0,options:c.map(e=>(console.log("Mapping guardrail:",e),{label:`${e.guardrail_name}`,value:e.guardrail_name})),optionFilterProp:"label",showSearch:!0,style:{width:"100%"}})})}])},987432,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M893.3 293.3L730.7 130.7c-7.5-7.5-16.7-13-26.7-16V112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V338.5c0-17-6.7-33.2-18.7-45.2zM384 184h256v104H384V184zm456 656H184V184h136v136c0 17.7 14.3 32 32 32h320c17.7 0 32-14.3 32-32V205.8l136 136V840zM512 442c-79.5 0-144 64.5-144 144s64.5 144 144 144 144-64.5 144-144-64.5-144-144-144zm0 224c-44.2 0-80-35.8-80-80s35.8-80 80-80 80 35.8 80 80-35.8 80-80 80z"}}]},name:"save",theme:"outlined"};var a=e.i(9583),i=r.forwardRef(function(e,i){return r.createElement(a.default,(0,t.default)({},e,{ref:i,icon:o}))});e.s(["SaveOutlined",0,i],987432)},678784,678745,e=>{"use strict";let t=(0,e.i(475254).default)("check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);e.s(["default",0,t],678745),e.s(["CheckIcon",0,t],678784)},54943,e=>{"use strict";let t=(0,e.i(475254).default)("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]);e.s(["default",0,t])},367240,555436,e=>{"use strict";let t=(0,e.i(475254).default)("rotate-ccw",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]]);e.s(["RotateCcw",0,t],367240);var r=e.i(54943);e.s(["Search",()=>r.default],555436)},362024,e=>{"use strict";var t=e.i(988122);e.s(["Collapse",()=>t.default])},245704,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M699 353h-46.9c-10.2 0-19.9 4.9-25.9 13.3L469 584.3l-71.2-98.8c-6-8.3-15.6-13.3-25.9-13.3H325c-6.5 0-10.3 7.4-6.5 12.7l124.6 172.8a31.8 31.8 0 0051.7 0l210.6-292c3.9-5.3.1-12.7-6.4-12.7z"}},{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}}]},name:"check-circle",theme:"outlined"};var a=e.i(9583),i=r.forwardRef(function(e,i){return r.createElement(a.default,(0,t.default)({},e,{ref:i,icon:o}))});e.s(["CheckCircleOutlined",0,i],245704)},149192,e=>{"use strict";var t=e.i(864517);e.s(["CloseOutlined",()=>t.default])},240647,e=>{"use strict";var t=e.i(286612);e.s(["RightOutlined",()=>t.default])},518617,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let o={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64c247.4 0 448 200.6 448 448S759.4 960 512 960 64 759.4 64 512 264.6 64 512 64zm0 76c-205.4 0-372 166.6-372 372s166.6 372 372 372 372-166.6 372-372-166.6-372-372-372zm128.01 198.83c.03 0 .05.01.09.06l45.02 45.01a.2.2 0 01.05.09.12.12 0 010 .07c0 .02-.01.04-.05.08L557.25 512l127.87 127.86a.27.27 0 01.05.06v.02a.12.12 0 010 .07c0 .03-.01.05-.05.09l-45.02 45.02a.2.2 0 01-.09.05.12.12 0 01-.07 0c-.02 0-.04-.01-.08-.05L512 557.25 384.14 685.12c-.04.04-.06.05-.08.05a.12.12 0 01-.07 0c-.03 0-.05-.01-.09-.05l-45.02-45.02a.2.2 0 01-.05-.09.12.12 0 010-.07c0-.02.01-.04.06-.08L466.75 512 338.88 384.14a.27.27 0 01-.05-.06l-.01-.02a.12.12 0 010-.07c0-.03.01-.05.05-.09l45.02-45.02a.2.2 0 01.09-.05.12.12 0 01.07 0c.02 0 .04.01.08.06L512 466.75l127.86-127.86c.04-.05.06-.06.08-.06a.12.12 0 01.07 0z"}}]},name:"close-circle",theme:"outlined"};var a=e.i(9583),i=r.forwardRef(function(e,i){return r.createElement(a.default,(0,t.default)({},e,{ref:i,icon:o}))});e.s(["CloseCircleOutlined",0,i],518617)},657150,e=>{"use strict";let t=(0,e.i(475254).default)("bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]);e.s(["default",0,t])},531245,782273,793916,e=>{"use strict";var t=e.i(657150);e.s(["Bot",()=>t.default],531245),e.i(247167);var r=e.i(931067),o=e.i(271645);let a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M625.9 115c-5.9 0-11.9 1.6-17.4 5.3L254 352H90c-8.8 0-16 7.2-16 16v288c0 8.8 7.2 16 16 16h164l354.5 231.7c5.5 3.6 11.6 5.3 17.4 5.3 16.7 0 32.1-13.3 32.1-32.1V147.1c0-18.8-15.4-32.1-32.1-32.1zM586 803L293.4 611.7l-18-11.7H146V424h129.4l17.9-11.7L586 221v582zm348-327H806c-8.8 0-16 7.2-16 16v40c0 8.8 7.2 16 16 16h128c8.8 0 16-7.2 16-16v-40c0-8.8-7.2-16-16-16zm-41.9 261.8l-110.3-63.7a15.9 15.9 0 00-21.7 5.9l-19.9 34.5c-4.4 7.6-1.8 17.4 5.8 21.8L856.3 800a15.9 15.9 0 0021.7-5.9l19.9-34.5c4.4-7.6 1.7-17.4-5.8-21.8zM760 344a15.9 15.9 0 0021.7 5.9L892 286.2c7.6-4.4 10.2-14.2 5.8-21.8L878 230a15.9 15.9 0 00-21.7-5.9L746 287.8a15.99 15.99 0 00-5.8 21.8L760 344z"}}]},name:"sound",theme:"outlined"};var i=e.i(9583),n=o.forwardRef(function(e,t){return o.createElement(i.default,(0,r.default)({},e,{ref:t,icon:a}))});e.s(["SoundOutlined",0,n],782273);let s={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M842 454c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8 0 140.3-113.7 254-254 254S258 594.3 258 454c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8 0 168.7 126.6 307.9 290 327.6V884H326.7c-13.7 0-24.7 14.3-24.7 32v36c0 4.4 2.8 8 6.2 8h407.6c3.4 0 6.2-3.6 6.2-8v-36c0-17.7-11-32-24.7-32H548V782.1c165.3-18 294-158 294-328.1zM512 624c93.9 0 170-75.2 170-168V232c0-92.8-76.1-168-170-168s-170 75.2-170 168v224c0 92.8 76.1 168 170 168zm-94-392c0-50.6 41.9-92 94-92s94 41.4 94 92v224c0 50.6-41.9 92-94 92s-94-41.4-94-92V232z"}}]},name:"audio",theme:"outlined"};var l=o.forwardRef(function(e,t){return o.createElement(i.default,(0,r.default)({},e,{ref:t,icon:s}))});e.s(["AudioOutlined",0,l],793916)},596239,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M574 665.4a8.03 8.03 0 00-11.3 0L446.5 781.6c-53.8 53.8-144.6 59.5-204 0-59.5-59.5-53.8-150.2 0-204l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3l-39.8-39.8a8.03 8.03 0 00-11.3 0L191.4 526.5c-84.6 84.6-84.6 221.5 0 306s221.5 84.6 306 0l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3L574 665.4zm258.6-474c-84.6-84.6-221.5-84.6-306 0L410.3 307.6a8.03 8.03 0 000 11.3l39.7 39.7c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c53.8-53.8 144.6-59.5 204 0 59.5 59.5 53.8 150.2 0 204L665.3 562.6a8.03 8.03 0 000 11.3l39.8 39.8c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c84.5-84.6 84.5-221.5 0-306.1zM610.1 372.3a8.03 8.03 0 00-11.3 0L372.3 598.7a8.03 8.03 0 000 11.3l39.6 39.6c3.1 3.1 8.2 3.1 11.3 0l226.4-226.4c3.1-3.1 3.1-8.2 0-11.3l-39.5-39.6z"}}]},name:"link",theme:"outlined"};var a=e.i(9583),i=r.forwardRef(function(e,i){return r.createElement(a.default,(0,t.default)({},e,{ref:i,icon:o}))});e.s(["LinkOutlined",0,i],596239)},339019,865361,e=>{"use strict";var t,r,o=((t={}).AUDIO_SPEECH="audio_speech",t.AUDIO_TRANSCRIPTION="audio_transcription",t.IMAGE_GENERATION="image_generation",t.VIDEO_GENERATION="video_generation",t.CHAT="chat",t.RESPONSES="responses",t.IMAGE_EDITS="image_edits",t.ANTHROPIC_MESSAGES="anthropic_messages",t.EMBEDDING="embedding",t),a=((r={}).IMAGE="image",r.VIDEO="video",r.CHAT="chat",r.RESPONSES="responses",r.IMAGE_EDITS="image_edits",r.ANTHROPIC_MESSAGES="anthropic_messages",r.EMBEDDINGS="embeddings",r.SPEECH="speech",r.TRANSCRIPTION="transcription",r.A2A_AGENTS="a2a_agents",r.MCP="mcp",r.REALTIME="realtime",r.INTERACTIONS="interactions",r);let i={image_generation:"image",video_generation:"video",chat:"chat",responses:"responses",image_edits:"image_edits",anthropic_messages:"anthropic_messages",audio_speech:"speech",audio_transcription:"transcription",embedding:"embeddings"};e.s(["EndpointType",()=>a,"getEndpointType",0,e=>{if(console.log("getEndpointType:",e),Object.values(o).includes(e)){let t=i[e];return console.log("endpointType:",t),t}return"chat"}],865361),e.s(["generateCodeSnippet",0,e=>{let t,{apiKeySource:r,accessToken:o,apiKey:i,inputMessage:n,chatHistory:s,selectedTags:l,selectedVectorStores:c,selectedGuardrails:d,selectedPolicies:u,selectedMCPServers:p,mcpServers:m,mcpServerToolRestrictions:h,selectedVoice:g,endpointType:f,selectedModel:b,selectedSdk:v,proxySettings:x}=e,_="session"===r?o:i,k=window.location.origin,y=x?.LITELLM_UI_API_DOC_BASE_URL;y&&y.trim()?k=y:x?.PROXY_BASE_URL&&(k=x.PROXY_BASE_URL);let w=n||"Your prompt here",S=w.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n"),C=s.filter(e=>!e.isImage).map(({role:e,content:t})=>({role:e,content:t})),j={};l.length>0&&(j.tags=l),c.length>0&&(j.vector_stores=c),d.length>0&&(j.guardrails=d),u.length>0&&(j.policies=u);let z=b||"your-model-name",N="azure"===v?`import openai + +client = openai.AzureOpenAI( + api_key="${_||"YOUR_LITELLM_API_KEY"}", + azure_endpoint="${k}", + api_version="2024-02-01" +)`:`import openai + +client = openai.OpenAI( + api_key="${_||"YOUR_LITELLM_API_KEY"}", + base_url="${k}" +)`;switch(f){case a.CHAT:{let e=Object.keys(j).length>0,r="";if(e){let e=JSON.stringify({metadata:j},null,2).split("\n").map(e=>" ".repeat(4)+e).join("\n").trim();r=`, + extra_body=${e}`}let o=C.length>0?C:[{role:"user",content:w}];t=` +import base64 + +# Helper function to encode images to base64 +def encode_image(image_path): + with open(image_path, "rb") as image_file: + return base64.b64encode(image_file.read()).decode('utf-8') + +# Example with text only +response = client.chat.completions.create( + model="${z}", + messages=${JSON.stringify(o,null,4)}${r} +) + +print(response) + +# Example with image or PDF (uncomment and provide file path to use) +# base64_file = encode_image("path/to/your/file.jpg") # or .pdf +# response_with_file = client.chat.completions.create( +# model="${z}", +# messages=[ +# { +# "role": "user", +# "content": [ +# { +# "type": "text", +# "text": "${S}" +# }, +# { +# "type": "image_url", +# "image_url": { +# "url": f"data:image/jpeg;base64,{base64_file}" # or data:application/pdf;base64,{base64_file} +# } +# } +# ] +# } +# ]${r} +# ) +# print(response_with_file) +`;break}case a.RESPONSES:{let e=Object.keys(j).length>0,r="";if(e){let e=JSON.stringify({metadata:j},null,2).split("\n").map(e=>" ".repeat(4)+e).join("\n").trim();r=`, + extra_body=${e}`}let o=C.length>0?C:[{role:"user",content:w}];t=` +import base64 + +# Helper function to encode images to base64 +def encode_image(image_path): + with open(image_path, "rb") as image_file: + return base64.b64encode(image_file.read()).decode('utf-8') + +# Example with text only +response = client.responses.create( + model="${z}", + input=${JSON.stringify(o,null,4)}${r} +) + +print(response.output_text) + +# Example with image or PDF (uncomment and provide file path to use) +# base64_file = encode_image("path/to/your/file.jpg") # or .pdf +# response_with_file = client.responses.create( +# model="${z}", +# input=[ +# { +# "role": "user", +# "content": [ +# {"type": "input_text", "text": "${S}"}, +# { +# "type": "input_image", +# "image_url": f"data:image/jpeg;base64,{base64_file}", # or data:application/pdf;base64,{base64_file} +# }, +# ], +# } +# ]${r} +# ) +# print(response_with_file.output_text) +`;break}case a.IMAGE:t="azure"===v?` +# NOTE: The Azure SDK does not have a direct equivalent to the multi-modal 'responses.create' method shown for OpenAI. +# This snippet uses 'client.images.generate' and will create a new image based on your prompt. +# It does not use the uploaded image, as 'client.images.generate' does not support image inputs in this context. +import os +import requests +import json +import time +from PIL import Image + +result = client.images.generate( + model="${z}", + prompt="${n}", + n=1 +) + +json_response = json.loads(result.model_dump_json()) + +# Set the directory for the stored image +image_dir = os.path.join(os.curdir, 'images') + +# If the directory doesn't exist, create it +if not os.path.isdir(image_dir): + os.mkdir(image_dir) + +# Initialize the image path +image_filename = f"generated_image_{int(time.time())}.png" +image_path = os.path.join(image_dir, image_filename) + +try: + # Retrieve the generated image + if json_response.get("data") && len(json_response["data"]) > 0 && json_response["data"][0].get("url"): + image_url = json_response["data"][0]["url"] + generated_image = requests.get(image_url).content + with open(image_path, "wb") as image_file: + image_file.write(generated_image) + + print(f"Image saved to {image_path}") + # Display the image + image = Image.open(image_path) + image.show() + else: + print("Could not find image URL in response.") + print("Full response:", json_response) +except Exception as e: + print(f"An error occurred: {e}") + print("Full response:", json_response) +`:` +import base64 +import os +import time +import json +from PIL import Image +import requests + +# Helper function to encode images to base64 +def encode_image(image_path): + with open(image_path, "rb") as image_file: + return base64.b64encode(image_file.read()).decode('utf-8') + +# Helper function to create a file (simplified for this example) +def create_file(image_path): + # In a real implementation, this would upload the file to OpenAI + # For this example, we'll just return a placeholder ID + return f"file_{os.path.basename(image_path).replace('.', '_')}" + +# The prompt entered by the user +prompt = "${S}" + +# Encode images to base64 +base64_image1 = encode_image("body-lotion.png") +base64_image2 = encode_image("soap.png") + +# Create file IDs +file_id1 = create_file("body-lotion.png") +file_id2 = create_file("incense-kit.png") + +response = client.responses.create( + model="${z}", + input=[ + { + "role": "user", + "content": [ + {"type": "input_text", "text": prompt}, + { + "type": "input_image", + "image_url": f"data:image/jpeg;base64,{base64_image1}", + }, + { + "type": "input_image", + "image_url": f"data:image/jpeg;base64,{base64_image2}", + }, + { + "type": "input_image", + "file_id": file_id1, + }, + { + "type": "input_image", + "file_id": file_id2, + } + ], + } + ], + tools=[{"type": "image_generation"}], +) + +# Process the response +image_generation_calls = [ + output + for output in response.output + if output.type == "image_generation_call" +] + +image_data = [output.result for output in image_generation_calls] + +if image_data: + image_base64 = image_data[0] + image_filename = f"edited_image_{int(time.time())}.png" + with open(image_filename, "wb") as f: + f.write(base64.b64decode(image_base64)) + print(f"Image saved to {image_filename}") +else: + # If no image is generated, there might be a text response with an explanation + text_response = [output.text for output in response.output if hasattr(output, 'text')] + if text_response: + print("No image generated. Model response:") + print("\\n".join(text_response)) + else: + print("No image data found in response.") + print("Full response for debugging:") + print(response) +`;break;case a.IMAGE_EDITS:t="azure"===v?` +import base64 +import os +import time +import json +from PIL import Image +import requests + +# Helper function to encode images to base64 +def encode_image(image_path): + with open(image_path, "rb") as image_file: + return base64.b64encode(image_file.read()).decode('utf-8') + +# The prompt entered by the user +prompt = "${S}" + +# Encode images to base64 +base64_image1 = encode_image("body-lotion.png") +base64_image2 = encode_image("soap.png") + +# Create file IDs +file_id1 = create_file("body-lotion.png") +file_id2 = create_file("incense-kit.png") + +response = client.responses.create( + model="${z}", + input=[ + { + "role": "user", + "content": [ + {"type": "input_text", "text": prompt}, + { + "type": "input_image", + "image_url": f"data:image/jpeg;base64,{base64_image1}", + }, + { + "type": "input_image", + "image_url": f"data:image/jpeg;base64,{base64_image2}", + }, + { + "type": "input_image", + "file_id": file_id1, + }, + { + "type": "input_image", + "file_id": file_id2, + } + ], + } + ], + tools=[{"type": "image_generation"}], +) + +# Process the response +image_generation_calls = [ + output + for output in response.output + if output.type == "image_generation_call" +] + +image_data = [output.result for output in image_generation_calls] + +if image_data: + image_base64 = image_data[0] + image_filename = f"edited_image_{int(time.time())}.png" + with open(image_filename, "wb") as f: + f.write(base64.b64decode(image_base64)) + print(f"Image saved to {image_filename}") +else: + # If no image is generated, there might be a text response with an explanation + text_response = [output.text for output in response.output if hasattr(output, 'text')] + if text_response: + print("No image generated. Model response:") + print("\\n".join(text_response)) + else: + print("No image data found in response.") + print("Full response for debugging:") + print(response) +`:` +import base64 +import os +import time + +# Helper function to encode images to base64 +def encode_image(image_path): + with open(image_path, "rb") as image_file: + return base64.b64encode(image_file.read()).decode('utf-8') + +# Helper function to create a file (simplified for this example) +def create_file(image_path): + # In a real implementation, this would upload the file to OpenAI + # For this example, we'll just return a placeholder ID + return f"file_{os.path.basename(image_path).replace('.', '_')}" + +# The prompt entered by the user +prompt = "${S}" + +# Encode images to base64 +base64_image1 = encode_image("body-lotion.png") +base64_image2 = encode_image("soap.png") + +# Create file IDs +file_id1 = create_file("body-lotion.png") +file_id2 = create_file("incense-kit.png") + +response = client.responses.create( + model="${z}", + input=[ + { + "role": "user", + "content": [ + {"type": "input_text", "text": prompt}, + { + "type": "input_image", + "image_url": f"data:image/jpeg;base64,{base64_image1}", + }, + { + "type": "input_image", + "image_url": f"data:image/jpeg;base64,{base64_image2}", + }, + { + "type": "input_image", + "file_id": file_id1, + }, + { + "type": "input_image", + "file_id": file_id2, + } + ], + } + ], + tools=[{"type": "image_generation"}], +) + +# Process the response +image_generation_calls = [ + output + for output in response.output + if output.type == "image_generation_call" +] + +image_data = [output.result for output in image_generation_calls] + +if image_data: + image_base64 = image_data[0] + image_filename = f"edited_image_{int(time.time())}.png" + with open(image_filename, "wb") as f: + f.write(base64.b64decode(image_base64)) + print(f"Image saved to {image_filename}") +else: + # If no image is generated, there might be a text response with an explanation + text_response = [output.text for output in response.output if hasattr(output, 'text')] + if text_response: + print("No image generated. Model response:") + print("\\n".join(text_response)) + else: + print("No image data found in response.") + print("Full response for debugging:") + print(response) +`;break;case a.EMBEDDINGS:t=` +response = client.embeddings.create( + input="${n||"Your string here"}", + model="${z}", + encoding_format="base64" # or "float" +) + +print(response.data[0].embedding) +`;break;case a.TRANSCRIPTION:t=` +# Open the audio file +audio_file = open("path/to/your/audio/file.mp3", "rb") + +# Make the transcription request +response = client.audio.transcriptions.create( + model="${z}", + file=audio_file${n?`, + prompt="${n.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`:""} +) + +print(response.text) +`;break;case a.SPEECH:t=` +# Make the text-to-speech request +response = client.audio.speech.create( + model="${z}", + input="${n||"Your text to convert to speech here"}", + voice="${g}" # Options: alloy, ash, ballad, coral, echo, fable, nova, onyx, sage, shimmer +) + +# Save the audio to a file +output_filename = "output_speech.mp3" +response.stream_to_file(output_filename) +print(f"Audio saved to {output_filename}") + +# Optional: Customize response format and speed +# response = client.audio.speech.create( +# model="${z}", +# input="${n||"Your text to convert to speech here"}", +# voice="alloy", +# response_format="mp3", # Options: mp3, opus, aac, flac, wav, pcm +# speed=1.0 # Range: 0.25 to 4.0 +# ) +# response.stream_to_file("output_speech.mp3") +`;break;default:t="\n# Code generation for this endpoint is not implemented yet."}return`${N} +${t}`}],339019)},516015,(e,t,r)=>{},898547,(e,t,r)=>{var o=e.i(247167);e.r(516015);var a=e.r(271645),i=a&&"object"==typeof a&&"default"in a?a:{default:a},n=void 0!==o.default&&o.default.env&&!0,s=function(e){return"[object String]"===Object.prototype.toString.call(e)},l=function(){function e(e){var t=void 0===e?{}:e,r=t.name,o=void 0===r?"stylesheet":r,a=t.optimizeForSpeed,i=void 0===a?n:a;c(s(o),"`name` must be a string"),this._name=o,this._deletedRulePlaceholder="#"+o+"-deleted-rule____{}",c("boolean"==typeof i,"`optimizeForSpeed` must be a boolean"),this._optimizeForSpeed=i,this._serverSheet=void 0,this._tags=[],this._injected=!1,this._rulesCount=0;var l="u">typeof window&&document.querySelector('meta[property="csp-nonce"]');this._nonce=l?l.getAttribute("content"):null}var t,r=e.prototype;return r.setOptimizeForSpeed=function(e){c("boolean"==typeof e,"`setOptimizeForSpeed` accepts a boolean"),c(0===this._rulesCount,"optimizeForSpeed cannot be when rules have already been inserted"),this.flush(),this._optimizeForSpeed=e,this.inject()},r.isOptimizeForSpeed=function(){return this._optimizeForSpeed},r.inject=function(){var e=this;if(c(!this._injected,"sheet already injected"),this._injected=!0,"u">typeof window&&this._optimizeForSpeed){this._tags[0]=this.makeStyleTag(this._name),this._optimizeForSpeed="insertRule"in this.getSheet(),this._optimizeForSpeed||(n||console.warn("StyleSheet: optimizeForSpeed mode not supported falling back to standard mode."),this.flush(),this._injected=!0);return}this._serverSheet={cssRules:[],insertRule:function(t,r){return"number"==typeof r?e._serverSheet.cssRules[r]={cssText:t}:e._serverSheet.cssRules.push({cssText:t}),r},deleteRule:function(t){e._serverSheet.cssRules[t]=null}}},r.getSheetForTag=function(e){if(e.sheet)return e.sheet;for(var t=0;ttypeof window?this.getSheet():this._serverSheet;if(t.trim()||(t=this._deletedRulePlaceholder),!r.cssRules[e])return e;r.deleteRule(e);try{r.insertRule(t,e)}catch(o){n||console.warn("StyleSheet: illegal rule: \n\n"+t+"\n\nSee https://stackoverflow.com/q/20007992 for more info"),r.insertRule(this._deletedRulePlaceholder,e)}}else{var o=this._tags[e];c(o,"old rule at index `"+e+"` not found"),o.textContent=t}return e},r.deleteRule=function(e){if("u"typeof window?(this._tags.forEach(function(e){return e&&e.parentNode.removeChild(e)}),this._tags=[]):this._serverSheet.cssRules=[]},r.cssRules=function(){var e=this;return"u">>0},u={};function p(e,t){if(!t)return"jsx-"+e;var r=String(t),o=e+r;return u[o]||(u[o]="jsx-"+d(e+"-"+r)),u[o]}function m(e,t){"u"typeof window&&!this._fromServer&&(this._fromServer=this.selectFromServer(),this._instancesCounts=Object.keys(this._fromServer).reduce(function(e,t){return e[t]=0,e},{}));var r=this.getIdAndRules(e),o=r.styleId,a=r.rules;if(o in this._instancesCounts){this._instancesCounts[o]+=1;return}var i=a.map(function(e){return t._sheet.insertRule(e)}).filter(function(e){return -1!==e});this._indices[o]=i,this._instancesCounts[o]=1},t.remove=function(e){var t=this,r=this.getIdAndRules(e).styleId;if(function(e,t){if(!e)throw Error("StyleSheetRegistry: "+t+".")}(r in this._instancesCounts,"styleId: `"+r+"` not found"),this._instancesCounts[r]-=1,this._instancesCounts[r]<1){var o=this._fromServer&&this._fromServer[r];o?(o.parentNode.removeChild(o),delete this._fromServer[r]):(this._indices[r].forEach(function(e){return t._sheet.deleteRule(e)}),delete this._indices[r]),delete this._instancesCounts[r]}},t.update=function(e,t){this.add(t),this.remove(e)},t.flush=function(){this._sheet.flush(),this._sheet.inject(),this._fromServer=void 0,this._indices={},this._instancesCounts={}},t.cssRules=function(){var e=this,t=this._fromServer?Object.keys(this._fromServer).map(function(t){return[t,e._fromServer[t]]}):[],r=this._sheet.cssRules();return t.concat(Object.keys(this._indices).map(function(t){return[t,e._indices[t].map(function(e){return r[e].cssText}).join(e._optimizeForSpeed?"":"\n")]}).filter(function(e){return!!e[1]}))},t.styles=function(e){var t,r;return t=this.cssRules(),void 0===(r=e)&&(r={}),t.map(function(e){var t=e[0],o=e[1];return i.default.createElement("style",{id:"__"+t,key:"__"+t,nonce:r.nonce?r.nonce:void 0,dangerouslySetInnerHTML:{__html:o}})})},t.getIdAndRules=function(e){var t=e.children,r=e.dynamic,o=e.id;if(r){var a=p(o,r);return{styleId:a,rules:Array.isArray(t)?t.map(function(e){return m(a,e)}):[m(a,t)]}}return{styleId:p(o),rules:Array.isArray(t)?t:[t]}},t.selectFromServer=function(){return Array.prototype.slice.call(document.querySelectorAll('[id^="__jsx-"]')).reduce(function(e,t){return e[t.id.slice(2)]=t,e},{})},e}(),g=a.createContext(null);function f(){return new h}function b(){return a.useContext(g)}g.displayName="StyleSheetContext";var v=i.default.useInsertionEffect||i.default.useLayoutEffect,x="u">typeof window?f():void 0;function _(e){var t=x||b();return t&&("u"{t.exports=e.r(898547).style},431343,569074,e=>{"use strict";var t=e.i(475254);let r=(0,t.default)("play",[["polygon",{points:"6 3 20 12 6 21 6 3",key:"1oa8hb"}]]);e.s(["Play",0,r],431343);let o=(0,t.default)("upload",[["path",{d:"M12 3v12",key:"1x0j5s"}],["path",{d:"m17 8-5-5-5 5",key:"7q97r8"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}]]);e.s(["Upload",0,o],569074)},727612,e=>{"use strict";let t=(0,e.i(475254).default)("trash-2",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]]);e.s(["Trash2",0,t],727612)},98919,e=>{"use strict";let t=(0,e.i(475254).default)("shield",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]]);e.s(["Shield",0,t],98919)},84899,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645),o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"defs",attrs:{},children:[{tag:"style",attrs:{}}]},{tag:"path",attrs:{d:"M931.4 498.9L94.9 79.5c-3.4-1.7-7.3-2.1-11-1.2a15.99 15.99 0 00-11.7 19.3l86.2 352.2c1.3 5.3 5.2 9.6 10.4 11.3l147.7 50.7-147.6 50.7c-5.2 1.8-9.1 6-10.3 11.3L72.2 926.5c-.9 3.7-.5 7.6 1.2 10.9 3.9 7.9 13.5 11.1 21.5 7.2l836.5-417c3.1-1.5 5.6-4.1 7.2-7.1 3.9-8 .7-17.6-7.2-21.6zM170.8 826.3l50.3-205.6 295.2-101.3c2.3-.8 4.2-2.6 5-5 1.4-4.2-.8-8.7-5-10.2L221.1 403 171 198.2l628 314.9-628.2 313.2z"}}]},name:"send",theme:"outlined"},a=e.i(9583),i=r.forwardRef(function(e,i){return r.createElement(a.default,(0,t.default)({},e,{ref:i,icon:o}))});e.s(["SendOutlined",0,i],84899)},673709,e=>{"use strict";var t=e.i(843476),r=e.i(271645),o=e.i(678784);let a=(0,e.i(475254).default)("clipboard",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}]]);var i=e.i(650056);let n={'code[class*="language-"]':{background:"hsl(230, 1%, 98%)",color:"hsl(230, 8%, 24%)",fontFamily:'"Fira Code", "Fira Mono", Menlo, Consolas, "DejaVu Sans Mono", monospace',direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",lineHeight:"1.5",MozTabSize:"2",OTabSize:"2",tabSize:"2",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none"},'pre[class*="language-"]':{background:"hsl(230, 1%, 98%)",color:"hsl(230, 8%, 24%)",fontFamily:'"Fira Code", "Fira Mono", Menlo, Consolas, "DejaVu Sans Mono", monospace',direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",lineHeight:"1.5",MozTabSize:"2",OTabSize:"2",tabSize:"2",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",padding:"1em",margin:"0.5em 0",overflow:"auto",borderRadius:"0.3em"},'code[class*="language-"]::-moz-selection':{background:"hsl(230, 1%, 90%)",color:"inherit"},'code[class*="language-"] *::-moz-selection':{background:"hsl(230, 1%, 90%)",color:"inherit"},'pre[class*="language-"] *::-moz-selection':{background:"hsl(230, 1%, 90%)",color:"inherit"},'code[class*="language-"]::selection':{background:"hsl(230, 1%, 90%)",color:"inherit"},'code[class*="language-"] *::selection':{background:"hsl(230, 1%, 90%)",color:"inherit"},'pre[class*="language-"] *::selection':{background:"hsl(230, 1%, 90%)",color:"inherit"},':not(pre) > code[class*="language-"]':{padding:"0.2em 0.3em",borderRadius:"0.3em",whiteSpace:"normal"},comment:{color:"hsl(230, 4%, 64%)",fontStyle:"italic"},prolog:{color:"hsl(230, 4%, 64%)"},cdata:{color:"hsl(230, 4%, 64%)"},doctype:{color:"hsl(230, 8%, 24%)"},punctuation:{color:"hsl(230, 8%, 24%)"},entity:{color:"hsl(230, 8%, 24%)",cursor:"help"},"attr-name":{color:"hsl(35, 99%, 36%)"},"class-name":{color:"hsl(35, 99%, 36%)"},boolean:{color:"hsl(35, 99%, 36%)"},constant:{color:"hsl(35, 99%, 36%)"},number:{color:"hsl(35, 99%, 36%)"},atrule:{color:"hsl(35, 99%, 36%)"},keyword:{color:"hsl(301, 63%, 40%)"},property:{color:"hsl(5, 74%, 59%)"},tag:{color:"hsl(5, 74%, 59%)"},symbol:{color:"hsl(5, 74%, 59%)"},deleted:{color:"hsl(5, 74%, 59%)"},important:{color:"hsl(5, 74%, 59%)"},selector:{color:"hsl(119, 34%, 47%)"},string:{color:"hsl(119, 34%, 47%)"},char:{color:"hsl(119, 34%, 47%)"},builtin:{color:"hsl(119, 34%, 47%)"},inserted:{color:"hsl(119, 34%, 47%)"},regex:{color:"hsl(119, 34%, 47%)"},"attr-value":{color:"hsl(119, 34%, 47%)"},"attr-value > .token.punctuation":{color:"hsl(119, 34%, 47%)"},variable:{color:"hsl(221, 87%, 60%)"},operator:{color:"hsl(221, 87%, 60%)"},function:{color:"hsl(221, 87%, 60%)"},url:{color:"hsl(198, 99%, 37%)"},"attr-value > .token.punctuation.attr-equals":{color:"hsl(230, 8%, 24%)"},"special-attr > .token.attr-value > .token.value.css":{color:"hsl(230, 8%, 24%)"},".language-css .token.selector":{color:"hsl(5, 74%, 59%)"},".language-css .token.property":{color:"hsl(230, 8%, 24%)"},".language-css .token.function":{color:"hsl(198, 99%, 37%)"},".language-css .token.url > .token.function":{color:"hsl(198, 99%, 37%)"},".language-css .token.url > .token.string.url":{color:"hsl(119, 34%, 47%)"},".language-css .token.important":{color:"hsl(301, 63%, 40%)"},".language-css .token.atrule .token.rule":{color:"hsl(301, 63%, 40%)"},".language-javascript .token.operator":{color:"hsl(301, 63%, 40%)"},".language-javascript .token.template-string > .token.interpolation > .token.interpolation-punctuation.punctuation":{color:"hsl(344, 84%, 43%)"},".language-json .token.operator":{color:"hsl(230, 8%, 24%)"},".language-json .token.null.keyword":{color:"hsl(35, 99%, 36%)"},".language-markdown .token.url":{color:"hsl(230, 8%, 24%)"},".language-markdown .token.url > .token.operator":{color:"hsl(230, 8%, 24%)"},".language-markdown .token.url-reference.url > .token.string":{color:"hsl(230, 8%, 24%)"},".language-markdown .token.url > .token.content":{color:"hsl(221, 87%, 60%)"},".language-markdown .token.url > .token.url":{color:"hsl(198, 99%, 37%)"},".language-markdown .token.url-reference.url":{color:"hsl(198, 99%, 37%)"},".language-markdown .token.blockquote.punctuation":{color:"hsl(230, 4%, 64%)",fontStyle:"italic"},".language-markdown .token.hr.punctuation":{color:"hsl(230, 4%, 64%)",fontStyle:"italic"},".language-markdown .token.code-snippet":{color:"hsl(119, 34%, 47%)"},".language-markdown .token.bold .token.content":{color:"hsl(35, 99%, 36%)"},".language-markdown .token.italic .token.content":{color:"hsl(301, 63%, 40%)"},".language-markdown .token.strike .token.content":{color:"hsl(5, 74%, 59%)"},".language-markdown .token.strike .token.punctuation":{color:"hsl(5, 74%, 59%)"},".language-markdown .token.list.punctuation":{color:"hsl(5, 74%, 59%)"},".language-markdown .token.title.important > .token.punctuation":{color:"hsl(5, 74%, 59%)"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},namespace:{Opacity:"0.8"},"token.tab:not(:empty):before":{color:"hsla(230, 8%, 24%, 0.2)"},"token.cr:before":{color:"hsla(230, 8%, 24%, 0.2)"},"token.lf:before":{color:"hsla(230, 8%, 24%, 0.2)"},"token.space:before":{color:"hsla(230, 8%, 24%, 0.2)"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item":{marginRight:"0.4em"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item > button":{background:"hsl(230, 1%, 90%)",color:"hsl(230, 6%, 44%)",padding:"0.1em 0.4em",borderRadius:"0.3em"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item > a":{background:"hsl(230, 1%, 90%)",color:"hsl(230, 6%, 44%)",padding:"0.1em 0.4em",borderRadius:"0.3em"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item > span":{background:"hsl(230, 1%, 90%)",color:"hsl(230, 6%, 44%)",padding:"0.1em 0.4em",borderRadius:"0.3em"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:hover":{background:"hsl(230, 1%, 78%)",color:"hsl(230, 8%, 24%)"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:focus":{background:"hsl(230, 1%, 78%)",color:"hsl(230, 8%, 24%)"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:hover":{background:"hsl(230, 1%, 78%)",color:"hsl(230, 8%, 24%)"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:focus":{background:"hsl(230, 1%, 78%)",color:"hsl(230, 8%, 24%)"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:hover":{background:"hsl(230, 1%, 78%)",color:"hsl(230, 8%, 24%)"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:focus":{background:"hsl(230, 1%, 78%)",color:"hsl(230, 8%, 24%)"},".line-highlight.line-highlight":{background:"hsla(230, 8%, 24%, 0.05)"},".line-highlight.line-highlight:before":{background:"hsl(230, 1%, 90%)",color:"hsl(230, 8%, 24%)",padding:"0.1em 0.6em",borderRadius:"0.3em",boxShadow:"0 2px 0 0 rgba(0, 0, 0, 0.2)"},".line-highlight.line-highlight[data-end]:after":{background:"hsl(230, 1%, 90%)",color:"hsl(230, 8%, 24%)",padding:"0.1em 0.6em",borderRadius:"0.3em",boxShadow:"0 2px 0 0 rgba(0, 0, 0, 0.2)"},"pre[id].linkable-line-numbers.linkable-line-numbers span.line-numbers-rows > span:hover:before":{backgroundColor:"hsla(230, 8%, 24%, 0.05)"},".line-numbers.line-numbers .line-numbers-rows":{borderRightColor:"hsla(230, 8%, 24%, 0.2)"},".command-line .command-line-prompt":{borderRightColor:"hsla(230, 8%, 24%, 0.2)"},".line-numbers .line-numbers-rows > span:before":{color:"hsl(230, 1%, 62%)"},".command-line .command-line-prompt > span:before":{color:"hsl(230, 1%, 62%)"},".rainbow-braces .token.token.punctuation.brace-level-1":{color:"hsl(5, 74%, 59%)"},".rainbow-braces .token.token.punctuation.brace-level-5":{color:"hsl(5, 74%, 59%)"},".rainbow-braces .token.token.punctuation.brace-level-9":{color:"hsl(5, 74%, 59%)"},".rainbow-braces .token.token.punctuation.brace-level-2":{color:"hsl(119, 34%, 47%)"},".rainbow-braces .token.token.punctuation.brace-level-6":{color:"hsl(119, 34%, 47%)"},".rainbow-braces .token.token.punctuation.brace-level-10":{color:"hsl(119, 34%, 47%)"},".rainbow-braces .token.token.punctuation.brace-level-3":{color:"hsl(221, 87%, 60%)"},".rainbow-braces .token.token.punctuation.brace-level-7":{color:"hsl(221, 87%, 60%)"},".rainbow-braces .token.token.punctuation.brace-level-11":{color:"hsl(221, 87%, 60%)"},".rainbow-braces .token.token.punctuation.brace-level-4":{color:"hsl(301, 63%, 40%)"},".rainbow-braces .token.token.punctuation.brace-level-8":{color:"hsl(301, 63%, 40%)"},".rainbow-braces .token.token.punctuation.brace-level-12":{color:"hsl(301, 63%, 40%)"},"pre.diff-highlight > code .token.token.deleted:not(.prefix)":{backgroundColor:"hsla(353, 100%, 66%, 0.15)"},"pre > code.diff-highlight .token.token.deleted:not(.prefix)":{backgroundColor:"hsla(353, 100%, 66%, 0.15)"},"pre.diff-highlight > code .token.token.deleted:not(.prefix)::-moz-selection":{backgroundColor:"hsla(353, 95%, 66%, 0.25)"},"pre.diff-highlight > code .token.token.deleted:not(.prefix) *::-moz-selection":{backgroundColor:"hsla(353, 95%, 66%, 0.25)"},"pre > code.diff-highlight .token.token.deleted:not(.prefix)::-moz-selection":{backgroundColor:"hsla(353, 95%, 66%, 0.25)"},"pre > code.diff-highlight .token.token.deleted:not(.prefix) *::-moz-selection":{backgroundColor:"hsla(353, 95%, 66%, 0.25)"},"pre.diff-highlight > code .token.token.deleted:not(.prefix)::selection":{backgroundColor:"hsla(353, 95%, 66%, 0.25)"},"pre.diff-highlight > code .token.token.deleted:not(.prefix) *::selection":{backgroundColor:"hsla(353, 95%, 66%, 0.25)"},"pre > code.diff-highlight .token.token.deleted:not(.prefix)::selection":{backgroundColor:"hsla(353, 95%, 66%, 0.25)"},"pre > code.diff-highlight .token.token.deleted:not(.prefix) *::selection":{backgroundColor:"hsla(353, 95%, 66%, 0.25)"},"pre.diff-highlight > code .token.token.inserted:not(.prefix)":{backgroundColor:"hsla(137, 100%, 55%, 0.15)"},"pre > code.diff-highlight .token.token.inserted:not(.prefix)":{backgroundColor:"hsla(137, 100%, 55%, 0.15)"},"pre.diff-highlight > code .token.token.inserted:not(.prefix)::-moz-selection":{backgroundColor:"hsla(135, 73%, 55%, 0.25)"},"pre.diff-highlight > code .token.token.inserted:not(.prefix) *::-moz-selection":{backgroundColor:"hsla(135, 73%, 55%, 0.25)"},"pre > code.diff-highlight .token.token.inserted:not(.prefix)::-moz-selection":{backgroundColor:"hsla(135, 73%, 55%, 0.25)"},"pre > code.diff-highlight .token.token.inserted:not(.prefix) *::-moz-selection":{backgroundColor:"hsla(135, 73%, 55%, 0.25)"},"pre.diff-highlight > code .token.token.inserted:not(.prefix)::selection":{backgroundColor:"hsla(135, 73%, 55%, 0.25)"},"pre.diff-highlight > code .token.token.inserted:not(.prefix) *::selection":{backgroundColor:"hsla(135, 73%, 55%, 0.25)"},"pre > code.diff-highlight .token.token.inserted:not(.prefix)::selection":{backgroundColor:"hsla(135, 73%, 55%, 0.25)"},"pre > code.diff-highlight .token.token.inserted:not(.prefix) *::selection":{backgroundColor:"hsla(135, 73%, 55%, 0.25)"},".prism-previewer.prism-previewer:before":{borderColor:"hsl(0, 0, 95%)"},".prism-previewer-gradient.prism-previewer-gradient div":{borderColor:"hsl(0, 0, 95%)",borderRadius:"0.3em"},".prism-previewer-color.prism-previewer-color:before":{borderRadius:"0.3em"},".prism-previewer-easing.prism-previewer-easing:before":{borderRadius:"0.3em"},".prism-previewer.prism-previewer:after":{borderTopColor:"hsl(0, 0, 95%)"},".prism-previewer-flipped.prism-previewer-flipped.after":{borderBottomColor:"hsl(0, 0, 95%)"},".prism-previewer-angle.prism-previewer-angle:before":{background:"hsl(0, 0%, 100%)"},".prism-previewer-time.prism-previewer-time:before":{background:"hsl(0, 0%, 100%)"},".prism-previewer-easing.prism-previewer-easing":{background:"hsl(0, 0%, 100%)"},".prism-previewer-angle.prism-previewer-angle circle":{stroke:"hsl(230, 8%, 24%)",strokeOpacity:"1"},".prism-previewer-time.prism-previewer-time circle":{stroke:"hsl(230, 8%, 24%)",strokeOpacity:"1"},".prism-previewer-easing.prism-previewer-easing circle":{stroke:"hsl(230, 8%, 24%)",fill:"transparent"},".prism-previewer-easing.prism-previewer-easing path":{stroke:"hsl(230, 8%, 24%)"},".prism-previewer-easing.prism-previewer-easing line":{stroke:"hsl(230, 8%, 24%)"}};e.s(["default",0,({code:e,language:s})=>{let[l,c]=(0,r.useState)(!1);return(0,t.jsxs)("div",{className:"relative rounded-lg border border-gray-200 overflow-hidden",children:[(0,t.jsx)("button",{onClick:()=>{navigator.clipboard.writeText(e),c(!0),setTimeout(()=>c(!1),2e3)},className:"absolute top-3 right-3 p-2 rounded-md bg-gray-100 hover:bg-gray-200 text-gray-600 z-10","aria-label":"Copy code",children:l?(0,t.jsx)(o.CheckIcon,{size:16}):(0,t.jsx)(a,{size:16})}),(0,t.jsx)(i.Prism,{language:s,style:n,customStyle:{margin:0,padding:"1.5rem",borderRadius:"0.5rem",fontSize:"0.9rem",backgroundColor:"#fafafa"},showLineNumbers:!0,children:e})]})}],673709)},91500,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M531.3 574.4l.3-1.4c5.8-23.9 13.1-53.7 7.4-80.7-3.8-21.3-19.5-29.6-32.9-30.2-15.8-.7-29.9 8.3-33.4 21.4-6.6 24-.7 56.8 10.1 98.6-13.6 32.4-35.3 79.5-51.2 107.5-29.6 15.3-69.3 38.9-75.2 68.7-1.2 5.5.2 12.5 3.5 18.8 3.7 7 9.6 12.4 16.5 15 3 1.1 6.6 2 10.8 2 17.6 0 46.1-14.2 84.1-79.4 5.8-1.9 11.8-3.9 17.6-5.9 27.2-9.2 55.4-18.8 80.9-23.1 28.2 15.1 60.3 24.8 82.1 24.8 21.6 0 30.1-12.8 33.3-20.5 5.6-13.5 2.9-30.5-6.2-39.6-13.2-13-45.3-16.4-95.3-10.2-24.6-15-40.7-35.4-52.4-65.8zM421.6 726.3c-13.9 20.2-24.4 30.3-30.1 34.7 6.7-12.3 19.8-25.3 30.1-34.7zm87.6-235.5c5.2 8.9 4.5 35.8.5 49.4-4.9-19.9-5.6-48.1-2.7-51.4.8.1 1.5.7 2.2 2zm-1.6 120.5c10.7 18.5 24.2 34.4 39.1 46.2-21.6 4.9-41.3 13-58.9 20.2-4.2 1.7-8.3 3.4-12.3 5 13.3-24.1 24.4-51.4 32.1-71.4zm155.6 65.5c.1.2.2.5-.4.9h-.2l-.2.3c-.8.5-9 5.3-44.3-8.6 40.6-1.9 45 7.3 45.1 7.4zm191.4-388.2L639.4 73.4c-6-6-14.1-9.4-22.6-9.4H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V311.3c0-8.5-3.4-16.7-9.4-22.7zM790.2 326H602V137.8L790.2 326zm1.8 562H232V136h302v216a42 42 0 0042 42h216v494z"}}]},name:"file-pdf",theme:"outlined"};var a=e.i(9583),i=r.forwardRef(function(e,i){return r.createElement(a.default,(0,t.default)({},e,{ref:i,icon:o}))});e.s(["FilePdfOutlined",0,i],91500)},132104,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M868 545.5L536.1 163a31.96 31.96 0 00-48.3 0L156 545.5a7.97 7.97 0 006 13.2h81c4.6 0 9-2 12.1-5.5L474 300.9V864c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V300.9l218.9 252.3c3 3.5 7.4 5.5 12.1 5.5h81c6.8 0 10.5-8 6-13.2z"}}]},name:"arrow-up",theme:"outlined"};var a=e.i(9583),i=r.forwardRef(function(e,i){return r.createElement(a.default,(0,t.default)({},e,{ref:i,icon:o}))});e.s(["ArrowUpOutlined",0,i],132104)},447593,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645),o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"defs",attrs:{},children:[{tag:"style",attrs:{}}]},{tag:"path",attrs:{d:"M899.1 869.6l-53-305.6H864c14.4 0 26-11.6 26-26V346c0-14.4-11.6-26-26-26H618V138c0-14.4-11.6-26-26-26H432c-14.4 0-26 11.6-26 26v182H160c-14.4 0-26 11.6-26 26v192c0 14.4 11.6 26 26 26h17.9l-53 305.6a25.95 25.95 0 0025.6 30.4h723c1.5 0 3-.1 4.4-.4a25.88 25.88 0 0021.2-30zM204 390h272V182h72v208h272v104H204V390zm468 440V674c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v156H416V674c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v156H202.8l45.1-260H776l45.1 260H672z"}}]},name:"clear",theme:"outlined"},a=e.i(9583),i=r.forwardRef(function(e,i){return r.createElement(a.default,(0,t.default)({},e,{ref:i,icon:o}))});e.s(["ClearOutlined",0,i],447593)},219470,e=>{"use strict";e.s(["coy",0,{'code[class*="language-"]':{color:"black",background:"none",fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",fontSize:"1em",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",maxHeight:"inherit",height:"inherit",padding:"0 1em",display:"block",overflow:"auto"},'pre[class*="language-"]':{color:"black",background:"none",fontFamily:"Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace",fontSize:"1em",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",wordWrap:"normal",lineHeight:"1.5",MozTabSize:"4",OTabSize:"4",tabSize:"4",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",position:"relative",margin:".5em 0",overflow:"visible",padding:"1px",backgroundColor:"#fdfdfd",WebkitBoxSizing:"border-box",MozBoxSizing:"border-box",boxSizing:"border-box",marginBottom:"1em"},'pre[class*="language-"] > code':{position:"relative",zIndex:"1",borderLeft:"10px solid #358ccb",boxShadow:"-1px 0px 0px 0px #358ccb, 0px 0px 0px 1px #dfdfdf",backgroundColor:"#fdfdfd",backgroundImage:"linear-gradient(transparent 50%, rgba(69, 142, 209, 0.04) 50%)",backgroundSize:"3em 3em",backgroundOrigin:"content-box",backgroundAttachment:"local"},':not(pre) > code[class*="language-"]':{backgroundColor:"#fdfdfd",WebkitBoxSizing:"border-box",MozBoxSizing:"border-box",boxSizing:"border-box",marginBottom:"1em",position:"relative",padding:".2em",borderRadius:"0.3em",color:"#c92c2c",border:"1px solid rgba(0, 0, 0, 0.1)",display:"inline",whiteSpace:"normal"},'pre[class*="language-"]:before':{content:"''",display:"block",position:"absolute",bottom:"0.75em",left:"0.18em",width:"40%",height:"20%",maxHeight:"13em",boxShadow:"0px 13px 8px #979797",WebkitTransform:"rotate(-2deg)",MozTransform:"rotate(-2deg)",msTransform:"rotate(-2deg)",OTransform:"rotate(-2deg)",transform:"rotate(-2deg)"},'pre[class*="language-"]:after':{content:"''",display:"block",position:"absolute",bottom:"0.75em",left:"auto",width:"40%",height:"20%",maxHeight:"13em",boxShadow:"0px 13px 8px #979797",WebkitTransform:"rotate(2deg)",MozTransform:"rotate(2deg)",msTransform:"rotate(2deg)",OTransform:"rotate(2deg)",transform:"rotate(2deg)",right:"0.75em"},comment:{color:"#7D8B99"},"block-comment":{color:"#7D8B99"},prolog:{color:"#7D8B99"},doctype:{color:"#7D8B99"},cdata:{color:"#7D8B99"},punctuation:{color:"#5F6364"},property:{color:"#c92c2c"},tag:{color:"#c92c2c"},boolean:{color:"#c92c2c"},number:{color:"#c92c2c"},"function-name":{color:"#c92c2c"},constant:{color:"#c92c2c"},symbol:{color:"#c92c2c"},deleted:{color:"#c92c2c"},selector:{color:"#2f9c0a"},"attr-name":{color:"#2f9c0a"},string:{color:"#2f9c0a"},char:{color:"#2f9c0a"},function:{color:"#2f9c0a"},builtin:{color:"#2f9c0a"},inserted:{color:"#2f9c0a"},operator:{color:"#a67f59",background:"rgba(255, 255, 255, 0.5)"},entity:{color:"#a67f59",background:"rgba(255, 255, 255, 0.5)",cursor:"help"},url:{color:"#a67f59",background:"rgba(255, 255, 255, 0.5)"},variable:{color:"#a67f59",background:"rgba(255, 255, 255, 0.5)"},atrule:{color:"#1990b8"},"attr-value":{color:"#1990b8"},keyword:{color:"#1990b8"},"class-name":{color:"#1990b8"},regex:{color:"#e90"},important:{color:"#e90",fontWeight:"normal"},".language-css .token.string":{color:"#a67f59",background:"rgba(255, 255, 255, 0.5)"},".style .token.string":{color:"#a67f59",background:"rgba(255, 255, 255, 0.5)"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},namespace:{Opacity:".7"},'pre[class*="language-"].line-numbers.line-numbers':{paddingLeft:"0"},'pre[class*="language-"].line-numbers.line-numbers code':{paddingLeft:"3.8em"},'pre[class*="language-"].line-numbers.line-numbers .line-numbers-rows':{left:"0"},'pre[class*="language-"][data-line]':{paddingTop:"0",paddingBottom:"0",paddingLeft:"0"},"pre[data-line] code":{position:"relative",paddingLeft:"4em"},"pre .line-highlight":{marginTop:"0"}}],219470)},812618,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M632 888H392c-4.4 0-8 3.6-8 8v32c0 17.7 14.3 32 32 32h192c17.7 0 32-14.3 32-32v-32c0-4.4-3.6-8-8-8zM512 64c-181.1 0-328 146.9-328 328 0 121.4 66 227.4 164 284.1V792c0 17.7 14.3 32 32 32h264c17.7 0 32-14.3 32-32V676.1c98-56.7 164-162.7 164-284.1 0-181.1-146.9-328-328-328zm127.9 549.8L604 634.6V752H420V634.6l-35.9-20.8C305.4 568.3 256 484.5 256 392c0-141.4 114.6-256 256-256s256 114.6 256 256c0 92.5-49.4 176.3-128.1 221.8z"}}]},name:"bulb",theme:"outlined"};var a=e.i(9583),i=r.forwardRef(function(e,i){return r.createElement(a.default,(0,t.default)({},e,{ref:i,icon:o}))});e.s(["BulbOutlined",0,i],812618)},589362,464398,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M872 394c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8H708V152c0-4.4-3.6-8-8-8h-64c-4.4 0-8 3.6-8 8v166H400V152c0-4.4-3.6-8-8-8h-64c-4.4 0-8 3.6-8 8v166H152c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h168v236H152c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h168v166c0 4.4 3.6 8 8 8h64c4.4 0 8-3.6 8-8V706h228v166c0 4.4 3.6 8 8 8h64c4.4 0 8-3.6 8-8V706h164c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8H708V394h164zM628 630H400V394h228v236z"}}]},name:"number",theme:"outlined"};var a=e.i(9583),i=r.forwardRef(function(e,i){return r.createElement(a.default,(0,t.default)({},e,{ref:i,icon:o}))});e.s(["NumberOutlined",0,i],589362);let n={icon:{tag:"svg",attrs:{"fill-rule":"evenodd",viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M880 912H144c-17.7 0-32-14.3-32-32V144c0-17.7 14.3-32 32-32h360c4.4 0 8 3.6 8 8v56c0 4.4-3.6 8-8 8H184v656h656V520c0-4.4 3.6-8 8-8h56c4.4 0 8 3.6 8 8v360c0 17.7-14.3 32-32 32zM653.3 424.6l52.2 52.2a8.01 8.01 0 01-4.7 13.6l-179.4 21c-5.1.6-9.5-3.7-8.9-8.9l21-179.4c.8-6.6 8.9-9.4 13.6-4.7l52.4 52.4 256.2-256.2c3.1-3.1 8.2-3.1 11.3 0l42.4 42.4c3.1 3.1 3.1 8.2 0 11.3L653.3 424.6z"}}]},name:"import",theme:"outlined"};var s=r.forwardRef(function(e,o){return r.createElement(a.default,(0,t.default)({},e,{ref:o,icon:n}))});e.s(["ImportOutlined",0,s],464398)},285903,e=>{"use strict";var t=e.i(843476),r=e.i(592968),o=e.i(637235),a=e.i(589362),i=e.i(464398),n=e.i(872934),s=e.i(812618),l=e.i(366308),c=e.i(458505);e.s(["default",0,({timeToFirstToken:e,totalLatency:d,usage:u,toolName:p})=>e||d||u?(0,t.jsxs)("div",{className:"response-metrics mt-2 pt-2 border-t border-gray-100 text-xs text-gray-500 flex flex-wrap gap-3",children:[void 0!==e&&(0,t.jsx)(r.Tooltip,{title:"Time to first token",children:(0,t.jsxs)("div",{className:"flex items-center",children:[(0,t.jsx)(o.ClockCircleOutlined,{className:"mr-1"}),(0,t.jsxs)("span",{children:["TTFT: ",(e/1e3).toFixed(2),"s"]})]})}),void 0!==d&&(0,t.jsx)(r.Tooltip,{title:"Total latency",children:(0,t.jsxs)("div",{className:"flex items-center",children:[(0,t.jsx)(o.ClockCircleOutlined,{className:"mr-1"}),(0,t.jsxs)("span",{children:["Total Latency: ",(d/1e3).toFixed(2),"s"]})]})}),u?.promptTokens!==void 0&&(0,t.jsx)(r.Tooltip,{title:"Prompt tokens",children:(0,t.jsxs)("div",{className:"flex items-center",children:[(0,t.jsx)(i.ImportOutlined,{className:"mr-1"}),(0,t.jsxs)("span",{children:["In: ",u.promptTokens]})]})}),u?.completionTokens!==void 0&&(0,t.jsx)(r.Tooltip,{title:"Completion tokens",children:(0,t.jsxs)("div",{className:"flex items-center",children:[(0,t.jsx)(n.ExportOutlined,{className:"mr-1"}),(0,t.jsxs)("span",{children:["Out: ",u.completionTokens]})]})}),u?.reasoningTokens!==void 0&&(0,t.jsx)(r.Tooltip,{title:"Reasoning tokens",children:(0,t.jsxs)("div",{className:"flex items-center",children:[(0,t.jsx)(s.BulbOutlined,{className:"mr-1"}),(0,t.jsxs)("span",{children:["Reasoning: ",u.reasoningTokens]})]})}),u?.totalTokens!==void 0&&(0,t.jsx)(r.Tooltip,{title:"Total tokens",children:(0,t.jsxs)("div",{className:"flex items-center",children:[(0,t.jsx)(a.NumberOutlined,{className:"mr-1"}),(0,t.jsxs)("span",{children:["Total: ",u.totalTokens]})]})}),u?.cost!==void 0&&(0,t.jsx)(r.Tooltip,{title:"Cost",children:(0,t.jsxs)("div",{className:"flex items-center",children:[(0,t.jsx)(c.DollarOutlined,{className:"mr-1"}),(0,t.jsxs)("span",{children:["$",u.cost.toFixed(6)]})]})}),p&&(0,t.jsx)(r.Tooltip,{title:"Tool used",children:(0,t.jsxs)("div",{className:"flex items-center",children:[(0,t.jsx)(l.ToolOutlined,{className:"mr-1"}),(0,t.jsxs)("span",{children:["Tool: ",p]})]})})]}):null])},245094,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M516 673c0 4.4 3.4 8 7.5 8h185c4.1 0 7.5-3.6 7.5-8v-48c0-4.4-3.4-8-7.5-8h-185c-4.1 0-7.5 3.6-7.5 8v48zm-194.9 6.1l192-161c3.8-3.2 3.8-9.1 0-12.3l-192-160.9A7.95 7.95 0 00308 351v62.7c0 2.4 1 4.6 2.9 6.1L420.7 512l-109.8 92.2a8.1 8.1 0 00-2.9 6.1V673c0 6.8 7.9 10.5 13.1 6.1zM880 112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V144c0-17.7-14.3-32-32-32zm-40 728H184V184h656v656z"}}]},name:"code",theme:"outlined"};var a=e.i(9583),i=r.forwardRef(function(e,i){return r.createElement(a.default,(0,t.default)({},e,{ref:i,icon:o}))});e.s(["CodeOutlined",0,i],245094)},458505,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372zm47.7-395.2l-25.4-5.9V348.6c38 5.2 61.5 29 65.5 58.2.5 4 3.9 6.9 7.9 6.9h44.9c4.7 0 8.4-4.1 8-8.8-6.1-62.3-57.4-102.3-125.9-109.2V263c0-4.4-3.6-8-8-8h-28.1c-4.4 0-8 3.6-8 8v33c-70.8 6.9-126.2 46-126.2 119 0 67.6 49.8 100.2 102.1 112.7l24.7 6.3v142.7c-44.2-5.9-69-29.5-74.1-61.3-.6-3.8-4-6.6-7.9-6.6H363c-4.7 0-8.4 4-8 8.7 4.5 55 46.2 105.6 135.2 112.1V761c0 4.4 3.6 8 8 8h28.4c4.4 0 8-3.6 8-8.1l-.2-31.7c78.3-6.9 134.3-48.8 134.3-124-.1-69.4-44.2-100.4-109-116.4zm-68.6-16.2c-5.6-1.6-10.3-3.1-15-5-33.8-12.2-49.5-31.9-49.5-57.3 0-36.3 27.5-57 64.5-61.7v124zM534.3 677V543.3c3.1.9 5.9 1.6 8.8 2.2 47.3 14.4 63.2 34.4 63.2 65.1 0 39.1-29.4 62.6-72 66.4z"}}]},name:"dollar",theme:"outlined"};var a=e.i(9583),i=r.forwardRef(function(e,i){return r.createElement(a.default,(0,t.default)({},e,{ref:i,icon:o}))});e.s(["DollarOutlined",0,i],458505)},903446,e=>{"use strict";let t=(0,e.i(475254).default)("settings",[["path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z",key:"1qme2f"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);e.s(["default",0,t])},434166,e=>{"use strict";e.s(["getSecureItem",0,function(e){try{let t=window.sessionStorage.getItem(e);if(null===t)return null;return decodeURIComponent(atob(t).split("").map(e=>"%"+e.charCodeAt(0).toString(16).padStart(2,"0")).join(""))}catch{return null}},"setSecureItem",0,function(e,t){window.sessionStorage.setItem(e,btoa(encodeURIComponent(t).replace(/%([0-9A-F]{2})/g,(e,t)=>String.fromCharCode(parseInt(t,16)))))}])},611052,2781,e=>{"use strict";var t=e.i(843476),r=e.i(271645),o=e.i(212931),a=e.i(311451),i=e.i(790848),n=e.i(888259),s=e.i(438957);e.i(247167);var l=e.i(931067);let c={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M832 464h-68V240c0-70.7-57.3-128-128-128H388c-70.7 0-128 57.3-128 128v224h-68c-17.7 0-32 14.3-32 32v384c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V496c0-17.7-14.3-32-32-32zM332 240c0-30.9 25.1-56 56-56h248c30.9 0 56 25.1 56 56v224H332V240zm460 600H232V536h560v304zM484 701v53c0 4.4 3.6 8 8 8h40c4.4 0 8-3.6 8-8v-53a48.01 48.01 0 10-56 0z"}}]},name:"lock",theme:"outlined"};var d=e.i(9583),u=r.forwardRef(function(e,t){return r.createElement(d.default,(0,l.default)({},e,{ref:t,icon:c}))});e.s(["LockOutlined",0,u],2781);var p=e.i(492030),m=e.i(266537),h=e.i(447566),g=e.i(149192),f=e.i(596239);e.s(["ByokCredentialModal",0,({server:e,open:l,onClose:c,onSuccess:d,accessToken:b})=>{let[v,x]=(0,r.useState)(1),[_,k]=(0,r.useState)(""),[y,w]=(0,r.useState)(!0),[S,C]=(0,r.useState)(!1),j=e.alias||e.server_name||"Service",z=j.charAt(0).toUpperCase(),N=()=>{x(1),k(""),w(!0),C(!1),c()},M=async()=>{if(!_.trim())return void n.default.error("Please enter your API key");C(!0);try{let t=await fetch(`/v1/mcp/server/${e.server_id}/user-credential`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${b}`},body:JSON.stringify({credential:_.trim(),save:y})});if(!t.ok){let e=await t.json();throw Error(e?.detail?.error||"Failed to save credential")}n.default.success(`Connected to ${j}`),d(e.server_id),N()}catch(e){n.default.error(e.message||"Failed to connect")}finally{C(!1)}};return(0,t.jsx)(o.Modal,{open:l,onCancel:N,footer:null,width:480,closeIcon:null,className:"byok-modal",children:(0,t.jsxs)("div",{className:"relative p-2",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between mb-6",children:[2===v?(0,t.jsxs)("button",{onClick:()=>x(1),className:"flex items-center gap-1 text-gray-500 hover:text-gray-800 text-sm",children:[(0,t.jsx)(h.ArrowLeftOutlined,{})," Back"]}):(0,t.jsx)("div",{}),(0,t.jsxs)("div",{className:"flex items-center gap-1.5",children:[(0,t.jsx)("div",{className:`w-2 h-2 rounded-full ${1===v?"bg-blue-500":"bg-gray-300"}`}),(0,t.jsx)("div",{className:`w-2 h-2 rounded-full ${2===v?"bg-blue-500":"bg-gray-300"}`})]}),(0,t.jsx)("button",{onClick:N,className:"text-gray-400 hover:text-gray-600",children:(0,t.jsx)(g.CloseOutlined,{})})]}),1===v?(0,t.jsxs)("div",{className:"text-center",children:[(0,t.jsxs)("div",{className:"flex items-center justify-center gap-3 mb-6",children:[(0,t.jsx)("div",{className:"w-14 h-14 rounded-xl bg-gradient-to-br from-teal-400 to-cyan-600 flex items-center justify-center text-white font-bold text-xl shadow",children:"L"}),(0,t.jsx)(m.ArrowRightOutlined,{className:"text-gray-400 text-lg"}),(0,t.jsx)("div",{className:"w-14 h-14 rounded-xl bg-gradient-to-br from-blue-600 to-indigo-800 flex items-center justify-center text-white font-bold text-xl shadow",children:z})]}),(0,t.jsxs)("h2",{className:"text-2xl font-bold text-gray-900 mb-2",children:["Connect ",j]}),(0,t.jsxs)("p",{className:"text-gray-500 mb-6",children:["LiteLLM needs access to ",j," to complete your request."]}),(0,t.jsx)("div",{className:"bg-gray-50 rounded-xl p-4 text-left mb-4",children:(0,t.jsxs)("div",{className:"flex items-start gap-3",children:[(0,t.jsx)("div",{className:"mt-0.5",children:(0,t.jsxs)("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",className:"text-gray-500",children:[(0,t.jsx)("rect",{x:"2",y:"4",width:"20",height:"16",rx:"2",stroke:"currentColor",strokeWidth:"2"}),(0,t.jsx)("path",{d:"M8 4v16M16 4v16",stroke:"currentColor",strokeWidth:"2"})]})}),(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"font-semibold text-gray-800 mb-1",children:"How it works"}),(0,t.jsxs)("p",{className:"text-gray-500 text-sm",children:["LiteLLM acts as a secure bridge. Your requests are routed through our MCP client directly to"," ",j,"'s API."]})]})]})}),e.byok_description&&e.byok_description.length>0&&(0,t.jsxs)("div",{className:"bg-gray-50 rounded-xl p-4 text-left mb-6",children:[(0,t.jsxs)("p",{className:"text-xs font-semibold text-gray-500 uppercase tracking-widest mb-3 flex items-center gap-2",children:[(0,t.jsxs)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",className:"text-green-500",children:[(0,t.jsx)("path",{d:"M12 2L12 22M2 12L22 12",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round"}),(0,t.jsx)("circle",{cx:"12",cy:"12",r:"9",stroke:"currentColor",strokeWidth:"2"})]}),"Requested Access"]}),(0,t.jsx)("ul",{className:"space-y-2",children:e.byok_description.map((e,r)=>(0,t.jsxs)("li",{className:"flex items-center gap-2 text-sm text-gray-700",children:[(0,t.jsx)(p.CheckOutlined,{className:"text-green-500 flex-shrink-0"}),e]},r))})]}),(0,t.jsxs)("button",{onClick:()=>x(2),className:"w-full bg-gray-900 hover:bg-gray-700 text-white font-medium py-3 px-6 rounded-xl flex items-center justify-center gap-2 transition-colors",children:["Continue to Authentication ",(0,t.jsx)(m.ArrowRightOutlined,{})]}),(0,t.jsx)("button",{onClick:N,className:"mt-3 w-full text-gray-400 hover:text-gray-600 text-sm py-2",children:"Cancel"})]}):(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"w-12 h-12 rounded-full bg-blue-50 flex items-center justify-center mb-4",children:(0,t.jsx)(s.KeyOutlined,{className:"text-blue-400 text-xl"})}),(0,t.jsx)("h2",{className:"text-2xl font-bold text-gray-900 mb-2",children:"Provide API Key"}),(0,t.jsxs)("p",{className:"text-gray-500 mb-6",children:["Enter your ",j," API key to authorize this connection."]}),(0,t.jsxs)("div",{className:"mb-4",children:[(0,t.jsxs)("label",{className:"block text-sm font-semibold text-gray-800 mb-2",children:[j," API Key"]}),(0,t.jsx)(a.Input.Password,{placeholder:"Enter your API key",value:_,onChange:e=>k(e.target.value),size:"large",className:"rounded-lg"}),e.byok_api_key_help_url&&(0,t.jsxs)("a",{href:e.byok_api_key_help_url,target:"_blank",rel:"noopener noreferrer",className:"text-blue-500 hover:text-blue-700 text-sm mt-2 flex items-center gap-1",children:["Where do I find my API key? ",(0,t.jsx)(f.LinkOutlined,{})]})]}),(0,t.jsxs)("div",{className:"bg-gray-50 rounded-xl p-4 flex items-center justify-between mb-4",children:[(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsx)("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",className:"text-gray-500",children:(0,t.jsx)("path",{d:"M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z",fill:"currentColor"})}),(0,t.jsx)("span",{className:"text-sm font-medium text-gray-800",children:"Save key for future use"})]}),(0,t.jsx)(i.Switch,{checked:y,onChange:w})]}),(0,t.jsxs)("div",{className:"bg-blue-50 rounded-xl p-4 flex items-start gap-3 mb-6",children:[(0,t.jsx)(u,{className:"text-blue-400 mt-0.5 flex-shrink-0"}),(0,t.jsx)("p",{className:"text-sm text-blue-700",children:"Your key is stored securely and transmitted over HTTPS. It is never shared with third parties."})]}),(0,t.jsxs)("button",{onClick:M,disabled:S,className:"w-full bg-blue-500 hover:bg-blue-600 disabled:opacity-60 text-white font-medium py-3 px-6 rounded-xl flex items-center justify-center gap-2 transition-colors",children:[(0,t.jsx)(u,{}),"Connect & Authorize"]})]})]})})}],611052)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0ydd65iv6ffpl.js b/litellm/proxy/_experimental/out/_next/static/chunks/0ydd65iv6ffpl.js new file mode 100644 index 00000000000..365e60126fa --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0ydd65iv6ffpl.js @@ -0,0 +1,10 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,954616,e=>{"use strict";var t=e.i(271645),r=e.i(114272),o=e.i(540143),a=e.i(915823),n=e.i(619273),i=class extends a.Subscribable{#e;#t=void 0;#r;#o;constructor(e,t){super(),this.#e=e,this.setOptions(t),this.bindMethods(),this.#a()}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(e){let t=this.options;this.options=this.#e.defaultMutationOptions(e),(0,n.shallowEqualObjects)(this.options,t)||this.#e.getMutationCache().notify({type:"observerOptionsUpdated",mutation:this.#r,observer:this}),t?.mutationKey&&this.options.mutationKey&&(0,n.hashKey)(t.mutationKey)!==(0,n.hashKey)(this.options.mutationKey)?this.reset():this.#r?.state.status==="pending"&&this.#r.setOptions(this.options)}onUnsubscribe(){this.hasListeners()||this.#r?.removeObserver(this)}onMutationUpdate(e){this.#a(),this.#n(e)}getCurrentResult(){return this.#t}reset(){this.#r?.removeObserver(this),this.#r=void 0,this.#a(),this.#n()}mutate(e,t){return this.#o=t,this.#r?.removeObserver(this),this.#r=this.#e.getMutationCache().build(this.#e,this.options),this.#r.addObserver(this),this.#r.execute(e)}#a(){let e=this.#r?.state??(0,r.getDefaultState)();this.#t={...e,isPending:"pending"===e.status,isSuccess:"success"===e.status,isError:"error"===e.status,isIdle:"idle"===e.status,mutate:this.mutate,reset:this.reset}}#n(e){o.notifyManager.batch(()=>{if(this.#o&&this.hasListeners()){let t=this.#t.variables,r=this.#t.context,o={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};if(e?.type==="success"){try{this.#o.onSuccess?.(e.data,t,r,o)}catch(e){Promise.reject(e)}try{this.#o.onSettled?.(e.data,null,t,r,o)}catch(e){Promise.reject(e)}}else if(e?.type==="error"){try{this.#o.onError?.(e.error,t,r,o)}catch(e){Promise.reject(e)}try{this.#o.onSettled?.(void 0,e.error,t,r,o)}catch(e){Promise.reject(e)}}}this.listeners.forEach(e=>{e(this.#t)})})}},l=e.i(912598);e.s(["useMutation",0,function(e,r){let a=(0,l.useQueryClient)(r),[s]=t.useState(()=>new i(a,e));t.useEffect(()=>{s.setOptions(e)},[s,e]);let d=t.useSyncExternalStore(t.useCallback(e=>s.subscribe(o.notifyManager.batchCalls(e)),[s]),()=>s.getCurrentResult(),()=>s.getCurrentResult()),c=t.useCallback((e,t)=>{s.mutate(e,t).catch(n.noop)},[s]);if(d.error&&(0,n.shouldThrowError)(s.options.throwOnError,[d.error]))throw d.error;return{...d,mutate:c,mutateAsync:d.mutate}}],954616)},270377,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M464 688a48 48 0 1096 0 48 48 0 10-96 0zm24-112h48c4.4 0 8-3.6 8-8V296c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v272c0 4.4 3.6 8 8 8z"}}]},name:"exclamation-circle",theme:"outlined"};var a=e.i(9583),n=r.forwardRef(function(e,n){return r.createElement(a.default,(0,t.default)({},e,{ref:n,icon:o}))});e.s(["ExclamationCircleOutlined",0,n],270377)},175712,e=>{"use strict";e.i(247167);var t=e.i(271645),r=e.i(343794),o=e.i(529681),a=e.i(242064),n=e.i(517455),i=e.i(185793),l=e.i(721369),s=function(e,t){var r={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&0>t.indexOf(o)&&(r[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var a=0,o=Object.getOwnPropertySymbols(e);at.indexOf(o[a])&&Object.prototype.propertyIsEnumerable.call(e,o[a])&&(r[o[a]]=e[o[a]]);return r};let d=e=>{var{prefixCls:o,className:n,hoverable:i=!0}=e,l=s(e,["prefixCls","className","hoverable"]);let{getPrefixCls:d}=t.useContext(a.ConfigContext),c=d("card",o),u=(0,r.default)(`${c}-grid`,n,{[`${c}-grid-hoverable`]:i});return t.createElement("div",Object.assign({},l,{className:u}))};e.i(296059);var c=e.i(915654),u=e.i(183293),m=e.i(246422),g=e.i(838378);let p=(0,m.genStyleHooks)("Card",e=>{let t=(0,g.mergeToken)(e,{cardShadow:e.boxShadowCard,cardHeadPadding:e.padding,cardPaddingBase:e.paddingLG,cardActionsIconSize:e.fontSize});return[(e=>{let{componentCls:t,cardShadow:r,cardHeadPadding:o,colorBorderSecondary:a,boxShadowTertiary:n,bodyPadding:i,extraColor:l}=e;return{[t]:Object.assign(Object.assign({},(0,u.resetComponent)(e)),{position:"relative",background:e.colorBgContainer,borderRadius:e.borderRadiusLG,[`&:not(${t}-bordered)`]:{boxShadow:n},[`${t}-head`]:(e=>{let{antCls:t,componentCls:r,headerHeight:o,headerPadding:a,tabsMarginBottom:n}=e;return Object.assign(Object.assign({display:"flex",justifyContent:"center",flexDirection:"column",minHeight:o,marginBottom:-1,padding:`0 ${(0,c.unit)(a)}`,color:e.colorTextHeading,fontWeight:e.fontWeightStrong,fontSize:e.headerFontSize,background:e.headerBg,borderBottom:`${(0,c.unit)(e.lineWidth)} ${e.lineType} ${e.colorBorderSecondary}`,borderRadius:`${(0,c.unit)(e.borderRadiusLG)} ${(0,c.unit)(e.borderRadiusLG)} 0 0`},(0,u.clearFix)()),{"&-wrapper":{width:"100%",display:"flex",alignItems:"center"},"&-title":Object.assign(Object.assign({display:"inline-block",flex:1},u.textEllipsis),{[` + > ${r}-typography, + > ${r}-typography-edit-content + `]:{insetInlineStart:0,marginTop:0,marginBottom:0}}),[`${t}-tabs-top`]:{clear:"both",marginBottom:n,color:e.colorText,fontWeight:"normal",fontSize:e.fontSize,"&-bar":{borderBottom:`${(0,c.unit)(e.lineWidth)} ${e.lineType} ${e.colorBorderSecondary}`}}})})(e),[`${t}-extra`]:{marginInlineStart:"auto",color:l,fontWeight:"normal",fontSize:e.fontSize},[`${t}-body`]:{padding:i,borderRadius:`0 0 ${(0,c.unit)(e.borderRadiusLG)} ${(0,c.unit)(e.borderRadiusLG)}`},[`${t}-grid`]:(e=>{let{cardPaddingBase:t,colorBorderSecondary:r,cardShadow:o,lineWidth:a}=e;return{width:"33.33%",padding:t,border:0,borderRadius:0,boxShadow:` + ${(0,c.unit)(a)} 0 0 0 ${r}, + 0 ${(0,c.unit)(a)} 0 0 ${r}, + ${(0,c.unit)(a)} ${(0,c.unit)(a)} 0 0 ${r}, + ${(0,c.unit)(a)} 0 0 0 ${r} inset, + 0 ${(0,c.unit)(a)} 0 0 ${r} inset; + `,transition:`all ${e.motionDurationMid}`,"&-hoverable:hover":{position:"relative",zIndex:1,boxShadow:o}}})(e),[`${t}-cover`]:{"> *":{display:"block",width:"100%",borderRadius:`${(0,c.unit)(e.borderRadiusLG)} ${(0,c.unit)(e.borderRadiusLG)} 0 0`}},[`${t}-actions`]:(e=>{let{componentCls:t,iconCls:r,actionsLiMargin:o,cardActionsIconSize:a,colorBorderSecondary:n,actionsBg:i}=e;return Object.assign(Object.assign({margin:0,padding:0,listStyle:"none",background:i,borderTop:`${(0,c.unit)(e.lineWidth)} ${e.lineType} ${n}`,display:"flex",borderRadius:`0 0 ${(0,c.unit)(e.borderRadiusLG)} ${(0,c.unit)(e.borderRadiusLG)}`},(0,u.clearFix)()),{"& > li":{margin:o,color:e.colorTextDescription,textAlign:"center","> span":{position:"relative",display:"block",minWidth:e.calc(e.cardActionsIconSize).mul(2).equal(),fontSize:e.fontSize,lineHeight:e.lineHeight,cursor:"pointer","&:hover":{color:e.colorPrimary,transition:`color ${e.motionDurationMid}`},[`a:not(${t}-btn), > ${r}`]:{display:"inline-block",width:"100%",color:e.colorIcon,lineHeight:(0,c.unit)(e.fontHeight),transition:`color ${e.motionDurationMid}`,"&:hover":{color:e.colorPrimary}},[`> ${r}`]:{fontSize:a,lineHeight:(0,c.unit)(e.calc(a).mul(e.lineHeight).equal())}},"&:not(:last-child)":{borderInlineEnd:`${(0,c.unit)(e.lineWidth)} ${e.lineType} ${n}`}}})})(e),[`${t}-meta`]:Object.assign(Object.assign({margin:`${(0,c.unit)(e.calc(e.marginXXS).mul(-1).equal())} 0`,display:"flex"},(0,u.clearFix)()),{"&-avatar":{paddingInlineEnd:e.padding},"&-detail":{overflow:"hidden",flex:1,"> div:not(:last-child)":{marginBottom:e.marginXS}},"&-title":Object.assign({color:e.colorTextHeading,fontWeight:e.fontWeightStrong,fontSize:e.fontSizeLG},u.textEllipsis),"&-description":{color:e.colorTextDescription}})}),[`${t}-bordered`]:{border:`${(0,c.unit)(e.lineWidth)} ${e.lineType} ${a}`,[`${t}-cover`]:{marginTop:-1,marginInlineStart:-1,marginInlineEnd:-1}},[`${t}-hoverable`]:{cursor:"pointer",transition:`box-shadow ${e.motionDurationMid}, border-color ${e.motionDurationMid}`,"&:hover":{borderColor:"transparent",boxShadow:r}},[`${t}-contain-grid`]:{borderRadius:`${(0,c.unit)(e.borderRadiusLG)} ${(0,c.unit)(e.borderRadiusLG)} 0 0 `,[`${t}-body`]:{display:"flex",flexWrap:"wrap"},[`&:not(${t}-loading) ${t}-body`]:{marginBlockStart:e.calc(e.lineWidth).mul(-1).equal(),marginInlineStart:e.calc(e.lineWidth).mul(-1).equal(),padding:0}},[`${t}-contain-tabs`]:{[`> div${t}-head`]:{minHeight:0,[`${t}-head-title, ${t}-extra`]:{paddingTop:o}}},[`${t}-type-inner`]:(e=>{let{componentCls:t,colorFillAlter:r,headerPadding:o,bodyPadding:a}=e;return{[`${t}-head`]:{padding:`0 ${(0,c.unit)(o)}`,background:r,"&-title":{fontSize:e.fontSize}},[`${t}-body`]:{padding:`${(0,c.unit)(e.padding)} ${(0,c.unit)(a)}`}}})(e),[`${t}-loading`]:(e=>{let{componentCls:t}=e;return{overflow:"hidden",[`${t}-body`]:{userSelect:"none"}}})(e),[`${t}-rtl`]:{direction:"rtl"}}})(t),(e=>{let{componentCls:t,bodyPaddingSM:r,headerPaddingSM:o,headerHeightSM:a,headerFontSizeSM:n}=e;return{[`${t}-small`]:{[`> ${t}-head`]:{minHeight:a,padding:`0 ${(0,c.unit)(o)}`,fontSize:n,[`> ${t}-head-wrapper`]:{[`> ${t}-extra`]:{fontSize:e.fontSize}}},[`> ${t}-body`]:{padding:r}},[`${t}-small${t}-contain-tabs`]:{[`> ${t}-head`]:{[`${t}-head-title, ${t}-extra`]:{paddingTop:0,display:"flex",alignItems:"center"}}}}})(t)]},e=>{var t,r;return{headerBg:"transparent",headerFontSize:e.fontSizeLG,headerFontSizeSM:e.fontSize,headerHeight:e.fontSizeLG*e.lineHeightLG+2*e.padding,headerHeightSM:e.fontSize*e.lineHeight+2*e.paddingXS,actionsBg:e.colorBgContainer,actionsLiMargin:`${e.paddingSM}px 0`,tabsMarginBottom:-e.padding-e.lineWidth,extraColor:e.colorText,bodyPaddingSM:12,headerPaddingSM:12,bodyPadding:null!=(t=e.bodyPadding)?t:e.paddingLG,headerPadding:null!=(r=e.headerPadding)?r:e.paddingLG}});var b=e.i(792812),h=function(e,t){var r={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&0>t.indexOf(o)&&(r[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var a=0,o=Object.getOwnPropertySymbols(e);at.indexOf(o[a])&&Object.prototype.propertyIsEnumerable.call(e,o[a])&&(r[o[a]]=e[o[a]]);return r};let f=e=>{let{actionClasses:r,actions:o=[],actionStyle:a}=e;return t.createElement("ul",{className:r,style:a},o.map((e,r)=>{let a=`action-${r}`;return t.createElement("li",{style:{width:`${100/o.length}%`},key:a},t.createElement("span",null,e))}))},v=t.forwardRef((e,s)=>{let c,{prefixCls:u,className:m,rootClassName:g,style:v,extra:y,headStyle:x={},bodyStyle:$={},title:C,loading:O,bordered:S,variant:j,size:w,type:k,cover:E,actions:N,tabList:T,children:M,activeTabKey:z,defaultActiveTabKey:P,tabBarExtraContent:B,hoverable:R,tabProps:L={},classNames:I,styles:H}=e,G=h(e,["prefixCls","className","rootClassName","style","extra","headStyle","bodyStyle","title","loading","bordered","variant","size","type","cover","actions","tabList","children","activeTabKey","defaultActiveTabKey","tabBarExtraContent","hoverable","tabProps","classNames","styles"]),{getPrefixCls:W,direction:X,card:A}=t.useContext(a.ConfigContext),[F]=(0,b.default)("card",j,S),D=e=>{var t;return(0,r.default)(null==(t=null==A?void 0:A.classNames)?void 0:t[e],null==I?void 0:I[e])},K=e=>{var t;return Object.assign(Object.assign({},null==(t=null==A?void 0:A.styles)?void 0:t[e]),null==H?void 0:H[e])},_=t.useMemo(()=>{let e=!1;return t.Children.forEach(M,t=>{(null==t?void 0:t.type)===d&&(e=!0)}),e},[M]),Y=W("card",u),[U,q,V]=p(Y),Q=t.createElement(i.default,{loading:!0,active:!0,paragraph:{rows:4},title:!1},M),J=void 0!==z,Z=Object.assign(Object.assign({},L),{[J?"activeKey":"defaultActiveKey"]:J?z:P,tabBarExtraContent:B}),ee=(0,n.default)(w),et=ee&&"default"!==ee?ee:"large",er=T?t.createElement(l.default,Object.assign({size:et},Z,{className:`${Y}-head-tabs`,onChange:t=>{var r;null==(r=e.onTabChange)||r.call(e,t)},items:T.map(e=>{var{tab:t}=e;return Object.assign({label:t},h(e,["tab"]))})})):null;if(C||y||er){let e=(0,r.default)(`${Y}-head`,D("header")),o=(0,r.default)(`${Y}-head-title`,D("title")),a=(0,r.default)(`${Y}-extra`,D("extra")),n=Object.assign(Object.assign({},x),K("header"));c=t.createElement("div",{className:e,style:n},t.createElement("div",{className:`${Y}-head-wrapper`},C&&t.createElement("div",{className:o,style:K("title")},C),y&&t.createElement("div",{className:a,style:K("extra")},y)),er)}let eo=(0,r.default)(`${Y}-cover`,D("cover")),ea=E?t.createElement("div",{className:eo,style:K("cover")},E):null,en=(0,r.default)(`${Y}-body`,D("body")),ei=Object.assign(Object.assign({},$),K("body")),el=t.createElement("div",{className:en,style:ei},O?Q:M),es=(0,r.default)(`${Y}-actions`,D("actions")),ed=(null==N?void 0:N.length)?t.createElement(f,{actionClasses:es,actionStyle:K("actions"),actions:N}):null,ec=(0,o.default)(G,["onTabChange"]),eu=(0,r.default)(Y,null==A?void 0:A.className,{[`${Y}-loading`]:O,[`${Y}-bordered`]:"borderless"!==F,[`${Y}-hoverable`]:R,[`${Y}-contain-grid`]:_,[`${Y}-contain-tabs`]:null==T?void 0:T.length,[`${Y}-${ee}`]:ee,[`${Y}-type-${k}`]:!!k,[`${Y}-rtl`]:"rtl"===X},m,g,q,V),em=Object.assign(Object.assign({},null==A?void 0:A.style),v);return U(t.createElement("div",Object.assign({ref:s},ec,{className:eu,style:em}),c,ea,el,ed))});var y=function(e,t){var r={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&0>t.indexOf(o)&&(r[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var a=0,o=Object.getOwnPropertySymbols(e);at.indexOf(o[a])&&Object.prototype.propertyIsEnumerable.call(e,o[a])&&(r[o[a]]=e[o[a]]);return r};v.Grid=d,v.Meta=e=>{let{prefixCls:o,className:n,avatar:i,title:l,description:s}=e,d=y(e,["prefixCls","className","avatar","title","description"]),{getPrefixCls:c}=t.useContext(a.ConfigContext),u=c("card",o),m=(0,r.default)(`${u}-meta`,n),g=i?t.createElement("div",{className:`${u}-meta-avatar`},i):null,p=l?t.createElement("div",{className:`${u}-meta-title`},l):null,b=s?t.createElement("div",{className:`${u}-meta-description`},s):null,h=p||b?t.createElement("div",{className:`${u}-meta-detail`},p,b):null;return t.createElement("div",Object.assign({},d,{className:m}),g,h)},e.s(["Card",0,v],175712)},869216,e=>{"use strict";e.i(247167);var t=e.i(271645),r=e.i(343794),o=e.i(908206),a=e.i(242064),n=e.i(517455),i=e.i(150073);let l={xxl:3,xl:3,lg:3,md:3,sm:2,xs:1},s=t.default.createContext({});var d=e.i(876556),c=function(e,t){var r={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&0>t.indexOf(o)&&(r[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var a=0,o=Object.getOwnPropertySymbols(e);at.indexOf(o[a])&&Object.prototype.propertyIsEnumerable.call(e,o[a])&&(r[o[a]]=e[o[a]]);return r},u=function(e,t){var r={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&0>t.indexOf(o)&&(r[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var a=0,o=Object.getOwnPropertySymbols(e);at.indexOf(o[a])&&Object.prototype.propertyIsEnumerable.call(e,o[a])&&(r[o[a]]=e[o[a]]);return r};let m=e=>{let{itemPrefixCls:o,component:a,span:n,className:i,style:l,labelStyle:d,contentStyle:c,bordered:u,label:m,content:g,colon:p,type:b,styles:h}=e,{classNames:f}=t.useContext(s),v=Object.assign(Object.assign({},d),null==h?void 0:h.label),y=Object.assign(Object.assign({},c),null==h?void 0:h.content);if(u)return t.createElement(a,{colSpan:n,style:l,className:(0,r.default)(i,{[`${o}-item-${b}`]:"label"===b||"content"===b,[null==f?void 0:f.label]:(null==f?void 0:f.label)&&"label"===b,[null==f?void 0:f.content]:(null==f?void 0:f.content)&&"content"===b})},null!=m&&t.createElement("span",{style:v},m),null!=g&&t.createElement("span",{style:y},g));return t.createElement(a,{colSpan:n,style:l,className:(0,r.default)(`${o}-item`,i)},t.createElement("div",{className:`${o}-item-container`},null!=m&&t.createElement("span",{style:v,className:(0,r.default)(`${o}-item-label`,null==f?void 0:f.label,{[`${o}-item-no-colon`]:!p})},m),null!=g&&t.createElement("span",{style:y,className:(0,r.default)(`${o}-item-content`,null==f?void 0:f.content)},g)))};function g(e,{colon:r,prefixCls:o,bordered:a},{component:n,type:i,showLabel:l,showContent:s,labelStyle:d,contentStyle:c,styles:u}){return e.map(({label:e,children:g,prefixCls:p=o,className:b,style:h,labelStyle:f,contentStyle:v,span:y=1,key:x,styles:$},C)=>"string"==typeof n?t.createElement(m,{key:`${i}-${x||C}`,className:b,style:h,styles:{label:Object.assign(Object.assign(Object.assign(Object.assign({},d),null==u?void 0:u.label),f),null==$?void 0:$.label),content:Object.assign(Object.assign(Object.assign(Object.assign({},c),null==u?void 0:u.content),v),null==$?void 0:$.content)},span:y,colon:r,component:n,itemPrefixCls:p,bordered:a,label:l?e:null,content:s?g:null,type:i}):[t.createElement(m,{key:`label-${x||C}`,className:b,style:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},d),null==u?void 0:u.label),h),f),null==$?void 0:$.label),span:1,colon:r,component:n[0],itemPrefixCls:p,bordered:a,label:e,type:"label"}),t.createElement(m,{key:`content-${x||C}`,className:b,style:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},c),null==u?void 0:u.content),h),v),null==$?void 0:$.content),span:2*y-1,component:n[1],itemPrefixCls:p,bordered:a,content:g,type:"content"})])}let p=e=>{let r=t.useContext(s),{prefixCls:o,vertical:a,row:n,index:i,bordered:l}=e;return a?t.createElement(t.Fragment,null,t.createElement("tr",{key:`label-${i}`,className:`${o}-row`},g(n,e,Object.assign({component:"th",type:"label",showLabel:!0},r))),t.createElement("tr",{key:`content-${i}`,className:`${o}-row`},g(n,e,Object.assign({component:"td",type:"content",showContent:!0},r)))):t.createElement("tr",{key:i,className:`${o}-row`},g(n,e,Object.assign({component:l?["th","td"]:"td",type:"item",showLabel:!0,showContent:!0},r)))};e.i(296059);var b=e.i(915654),h=e.i(183293),f=e.i(246422),v=e.i(838378);let y=(0,f.genStyleHooks)("Descriptions",e=>(e=>{let{componentCls:t,extraColor:r,itemPaddingBottom:o,itemPaddingEnd:a,colonMarginRight:n,colonMarginLeft:i,titleMarginBottom:l}=e;return{[t]:Object.assign(Object.assign(Object.assign({},(0,h.resetComponent)(e)),(e=>{let{componentCls:t,labelBg:r}=e;return{[`&${t}-bordered`]:{[`> ${t}-view`]:{border:`${(0,b.unit)(e.lineWidth)} ${e.lineType} ${e.colorSplit}`,"> table":{tableLayout:"auto"},[`${t}-row`]:{borderBottom:`${(0,b.unit)(e.lineWidth)} ${e.lineType} ${e.colorSplit}`,"&:first-child":{"> th:first-child, > td:first-child":{borderStartStartRadius:e.borderRadiusLG}},"&:last-child":{borderBottom:"none","> th:first-child, > td:first-child":{borderEndStartRadius:e.borderRadiusLG}},[`> ${t}-item-label, > ${t}-item-content`]:{padding:`${(0,b.unit)(e.padding)} ${(0,b.unit)(e.paddingLG)}`,borderInlineEnd:`${(0,b.unit)(e.lineWidth)} ${e.lineType} ${e.colorSplit}`,"&:last-child":{borderInlineEnd:"none"}},[`> ${t}-item-label`]:{color:e.colorTextSecondary,backgroundColor:r,"&::after":{display:"none"}}}},[`&${t}-middle`]:{[`${t}-row`]:{[`> ${t}-item-label, > ${t}-item-content`]:{padding:`${(0,b.unit)(e.paddingSM)} ${(0,b.unit)(e.paddingLG)}`}}},[`&${t}-small`]:{[`${t}-row`]:{[`> ${t}-item-label, > ${t}-item-content`]:{padding:`${(0,b.unit)(e.paddingXS)} ${(0,b.unit)(e.padding)}`}}}}}})(e)),{"&-rtl":{direction:"rtl"},[`${t}-header`]:{display:"flex",alignItems:"center",marginBottom:l},[`${t}-title`]:Object.assign(Object.assign({},h.textEllipsis),{flex:"auto",color:e.titleColor,fontWeight:e.fontWeightStrong,fontSize:e.fontSizeLG,lineHeight:e.lineHeightLG}),[`${t}-extra`]:{marginInlineStart:"auto",color:r,fontSize:e.fontSize},[`${t}-view`]:{width:"100%",borderRadius:e.borderRadiusLG,table:{width:"100%",tableLayout:"fixed",borderCollapse:"collapse"}},[`${t}-row`]:{"> th, > td":{paddingBottom:o,paddingInlineEnd:a},"> th:last-child, > td:last-child":{paddingInlineEnd:0},"&:last-child":{borderBottom:"none","> th, > td":{paddingBottom:0}}},[`${t}-item-label`]:{color:e.labelColor,fontWeight:"normal",fontSize:e.fontSize,lineHeight:e.lineHeight,textAlign:"start","&::after":{content:'":"',position:"relative",top:-.5,marginInline:`${(0,b.unit)(i)} ${(0,b.unit)(n)}`},[`&${t}-item-no-colon::after`]:{content:'""'}},[`${t}-item-no-label`]:{"&::after":{margin:0,content:'""'}},[`${t}-item-content`]:{display:"table-cell",flex:1,color:e.contentColor,fontSize:e.fontSize,lineHeight:e.lineHeight,wordBreak:"break-word",overflowWrap:"break-word"},[`${t}-item`]:{paddingBottom:0,verticalAlign:"top","&-container":{display:"flex",[`${t}-item-label`]:{display:"inline-flex",alignItems:"baseline"},[`${t}-item-content`]:{display:"inline-flex",alignItems:"baseline",minWidth:"1em"}}},"&-middle":{[`${t}-row`]:{"> th, > td":{paddingBottom:e.paddingSM}}},"&-small":{[`${t}-row`]:{"> th, > td":{paddingBottom:e.paddingXS}}}})}})((0,v.mergeToken)(e,{})),e=>({labelBg:e.colorFillAlter,labelColor:e.colorTextTertiary,titleColor:e.colorText,titleMarginBottom:e.fontSizeSM*e.lineHeightSM,itemPaddingBottom:e.padding,itemPaddingEnd:e.padding,colonMarginRight:e.marginXS,colonMarginLeft:e.marginXXS/2,contentColor:e.colorText,extraColor:e.colorText}));var x=function(e,t){var r={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&0>t.indexOf(o)&&(r[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var a=0,o=Object.getOwnPropertySymbols(e);at.indexOf(o[a])&&Object.prototype.propertyIsEnumerable.call(e,o[a])&&(r[o[a]]=e[o[a]]);return r};let $=e=>{let m,{prefixCls:g,title:b,extra:h,column:f,colon:v=!0,bordered:$,layout:C,children:O,className:S,rootClassName:j,style:w,size:k,labelStyle:E,contentStyle:N,styles:T,items:M,classNames:z}=e,P=x(e,["prefixCls","title","extra","column","colon","bordered","layout","children","className","rootClassName","style","size","labelStyle","contentStyle","styles","items","classNames"]),{getPrefixCls:B,direction:R,className:L,style:I,classNames:H,styles:G}=(0,a.useComponentConfig)("descriptions"),W=B("descriptions",g),X=(0,i.default)(),A=t.useMemo(()=>{var e;return"number"==typeof f?f:null!=(e=(0,o.matchScreen)(X,Object.assign(Object.assign({},l),f)))?e:3},[X,f]),F=(m=t.useMemo(()=>M||(0,d.default)(O).map(e=>Object.assign(Object.assign({},null==e?void 0:e.props),{key:e.key})),[M,O]),t.useMemo(()=>m.map(e=>{var{span:t}=e,r=c(e,["span"]);return"filled"===t?Object.assign(Object.assign({},r),{filled:!0}):Object.assign(Object.assign({},r),{span:"number"==typeof t?t:(0,o.matchScreen)(X,t)})}),[m,X])),D=(0,n.default)(k),K=((e,r)=>{let[o,a]=(0,t.useMemo)(()=>{let t,o,a,n;return t=[],o=[],a=!1,n=0,r.filter(e=>e).forEach(r=>{let{filled:i}=r,l=u(r,["filled"]);if(i){o.push(l),t.push(o),o=[],n=0;return}let s=e-n;(n+=r.span||1)>=e?(n>e?(a=!0,o.push(Object.assign(Object.assign({},l),{span:s}))):o.push(l),t.push(o),o=[],n=0):o.push(l)}),o.length>0&&t.push(o),[t=t.map(t=>{let r=t.reduce((e,t)=>e+(t.span||1),0);if(r({labelStyle:E,contentStyle:N,styles:{content:Object.assign(Object.assign({},G.content),null==T?void 0:T.content),label:Object.assign(Object.assign({},G.label),null==T?void 0:T.label)},classNames:{label:(0,r.default)(H.label,null==z?void 0:z.label),content:(0,r.default)(H.content,null==z?void 0:z.content)}}),[E,N,T,z,H,G]);return _(t.createElement(s.Provider,{value:q},t.createElement("div",Object.assign({className:(0,r.default)(W,L,H.root,null==z?void 0:z.root,{[`${W}-${D}`]:D&&"default"!==D,[`${W}-bordered`]:!!$,[`${W}-rtl`]:"rtl"===R},S,j,Y,U),style:Object.assign(Object.assign(Object.assign(Object.assign({},I),G.root),null==T?void 0:T.root),w)},P),(b||h)&&t.createElement("div",{className:(0,r.default)(`${W}-header`,H.header,null==z?void 0:z.header),style:Object.assign(Object.assign({},G.header),null==T?void 0:T.header)},b&&t.createElement("div",{className:(0,r.default)(`${W}-title`,H.title,null==z?void 0:z.title),style:Object.assign(Object.assign({},G.title),null==T?void 0:T.title)},b),h&&t.createElement("div",{className:(0,r.default)(`${W}-extra`,H.extra,null==z?void 0:z.extra),style:Object.assign(Object.assign({},G.extra),null==T?void 0:T.extra)},h)),t.createElement("div",{className:`${W}-view`},t.createElement("table",null,t.createElement("tbody",null,K.map((e,r)=>t.createElement(p,{key:r,index:r,colon:v,prefixCls:W,vertical:"vertical"===C,bordered:$,row:e}))))))))};$.Item=({children:e})=>e,e.s(["Descriptions",0,$],869216)},368869,e=>{"use strict";e.i(296059);var t=e.i(868297),r=e.i(732961),o=e.i(289882),a=e.i(170517),n=e.i(628882),i=e.i(320890),l=e.i(104458),s=e.i(722319),d=e.i(8398),c=e.i(279728);e.i(765846);var u=e.i(602716),m=e.i(328052),g=e.i(135551);let p=(e,t)=>new g.FastColor(e).setA(t).toRgbString(),b=(e,t)=>new g.FastColor(e).lighten(t).toHexString(),h=e=>{let t=(0,u.generate)(e,{theme:"dark"});return{1:t[0],2:t[1],3:t[2],4:t[3],5:t[6],6:t[5],7:t[4],8:t[6],9:t[5],10:t[4]}},f=(e,t)=>{let r=e||"#000",o=t||"#fff";return{colorBgBase:r,colorTextBase:o,colorText:p(o,.85),colorTextSecondary:p(o,.65),colorTextTertiary:p(o,.45),colorTextQuaternary:p(o,.25),colorFill:p(o,.18),colorFillSecondary:p(o,.12),colorFillTertiary:p(o,.08),colorFillQuaternary:p(o,.04),colorBgSolid:p(o,.95),colorBgSolidHover:p(o,1),colorBgSolidActive:p(o,.9),colorBgElevated:b(r,12),colorBgContainer:b(r,8),colorBgLayout:b(r,0),colorBgSpotlight:b(r,26),colorBgBlur:p(o,.04),colorBorder:b(r,26),colorBorderSecondary:b(r,19)}},v={defaultSeed:i.defaultConfig.token,useToken:function(){let[e,t,r]=(0,l.useToken)();return{theme:e,token:t,hashId:r}},defaultAlgorithm:s.default,darkAlgorithm:(e,t)=>{let r=Object.keys(a.defaultPresetColors).map(t=>{let r=(0,u.generate)(e[t],{theme:"dark"});return Array.from({length:10},()=>1).reduce((e,o,a)=>(e[`${t}-${a+1}`]=r[a],e[`${t}${a+1}`]=r[a],e),{})}).reduce((e,t)=>e=Object.assign(Object.assign({},e),t),{}),o=null!=t?t:(0,s.default)(e),n=(0,m.default)(e,{generateColorPalettes:h,generateNeutralColorPalettes:f});return Object.assign(Object.assign(Object.assign(Object.assign({},o),r),n),{colorPrimaryBg:n.colorPrimaryBorder,colorPrimaryBgHover:n.colorPrimaryBorderHover})},compactAlgorithm:(e,t)=>{let r=null!=t?t:(0,s.default)(e),o=r.fontSizeSM,a=r.controlHeight-4;return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},r),function(e){let{sizeUnit:t,sizeStep:r}=e,o=r-2;return{sizeXXL:t*(o+10),sizeXL:t*(o+6),sizeLG:t*(o+2),sizeMD:t*(o+2),sizeMS:t*(o+1),size:t*o,sizeSM:t*o,sizeXS:t*(o-1),sizeXXS:t*(o-1)}}(null!=t?t:e)),(0,c.default)(o)),{controlHeight:a}),(0,d.default)(Object.assign(Object.assign({},r),{controlHeight:a})))},getDesignToken:e=>{let i=(null==e?void 0:e.algorithm)?(0,t.createTheme)(e.algorithm):o.default,l=Object.assign(Object.assign({},a.default),null==e?void 0:e.token);return(0,r.getComputedToken)(l,{override:null==e?void 0:e.token},i,n.default)},defaultConfig:i.defaultConfig,_internalContext:i.DesignTokenContext};e.s(["theme",0,v],368869)},127952,e=>{"use strict";var t=e.i(843476),r=e.i(560445),o=e.i(175712),a=e.i(869216),n=e.i(311451),i=e.i(212931),l=e.i(898586),s=e.i(368869),d=e.i(270377),c=e.i(271645);e.s(["default",0,function({isOpen:e,title:u,alertMessage:m,message:g,resourceInformationTitle:p,resourceInformation:b,onCancel:h,onOk:f,confirmLoading:v,requiredConfirmation:y}){let{Title:x,Text:$}=l.Typography,{token:C}=s.theme.useToken(),[O,S]=(0,c.useState)("");return(0,c.useEffect)(()=>{e&&S("")},[e]),(0,t.jsx)(i.Modal,{title:u,open:e,onOk:f,onCancel:h,confirmLoading:v,okText:v?"Deleting...":"Delete",cancelText:"Cancel",okButtonProps:{danger:!0,disabled:!!y&&O!==y||v},cancelButtonProps:{disabled:v},children:(0,t.jsxs)("div",{className:"space-y-4",children:[m&&(0,t.jsx)(r.Alert,{message:m,type:"warning"}),(0,t.jsx)(o.Card,{title:p,className:"mt-4",styles:{body:{padding:"16px"},header:{backgroundColor:C.colorErrorBg,borderColor:C.colorErrorBorder}},style:{backgroundColor:C.colorErrorBg,borderColor:C.colorErrorBorder},children:(0,t.jsx)(a.Descriptions,{column:1,size:"small",children:b&&b.map(({label:e,value:r,...o})=>(0,t.jsx)(a.Descriptions.Item,{label:(0,t.jsx)("span",{className:"font-semibold",children:e}),children:(0,t.jsx)($,{...o,children:r??"-"})},e))})}),(0,t.jsx)("div",{children:(0,t.jsx)($,{children:g})}),y&&(0,t.jsxs)("div",{className:"mb-6 mt-4 pt-4 border-t border-gray-200 dark:border-gray-700",children:[(0,t.jsxs)($,{className:"block text-base font-medium text-gray-700 dark:text-gray-300 mb-2",children:[(0,t.jsx)($,{children:"Type "}),(0,t.jsx)($,{strong:!0,type:"danger",children:y}),(0,t.jsx)($,{children:" to confirm deletion:"})]}),(0,t.jsx)(n.Input,{value:O,onChange:e=>S(e.target.value),placeholder:y,className:"rounded-md",prefix:(0,t.jsx)(d.ExclamationCircleOutlined,{style:{color:C.colorError}}),autoFocus:!0})]})]})})}])},350967,46757,e=>{"use strict";var t=e.i(290571),r=e.i(444755),o=e.i(673706),a=e.i(271645);let n={0:"grid-cols-none",1:"grid-cols-1",2:"grid-cols-2",3:"grid-cols-3",4:"grid-cols-4",5:"grid-cols-5",6:"grid-cols-6",7:"grid-cols-7",8:"grid-cols-8",9:"grid-cols-9",10:"grid-cols-10",11:"grid-cols-11",12:"grid-cols-12"},i={0:"sm:grid-cols-none",1:"sm:grid-cols-1",2:"sm:grid-cols-2",3:"sm:grid-cols-3",4:"sm:grid-cols-4",5:"sm:grid-cols-5",6:"sm:grid-cols-6",7:"sm:grid-cols-7",8:"sm:grid-cols-8",9:"sm:grid-cols-9",10:"sm:grid-cols-10",11:"sm:grid-cols-11",12:"sm:grid-cols-12"},l={0:"md:grid-cols-none",1:"md:grid-cols-1",2:"md:grid-cols-2",3:"md:grid-cols-3",4:"md:grid-cols-4",5:"md:grid-cols-5",6:"md:grid-cols-6",7:"md:grid-cols-7",8:"md:grid-cols-8",9:"md:grid-cols-9",10:"md:grid-cols-10",11:"md:grid-cols-11",12:"md:grid-cols-12"},s={0:"lg:grid-cols-none",1:"lg:grid-cols-1",2:"lg:grid-cols-2",3:"lg:grid-cols-3",4:"lg:grid-cols-4",5:"lg:grid-cols-5",6:"lg:grid-cols-6",7:"lg:grid-cols-7",8:"lg:grid-cols-8",9:"lg:grid-cols-9",10:"lg:grid-cols-10",11:"lg:grid-cols-11",12:"lg:grid-cols-12"};e.s(["colSpan",0,{1:"col-span-1",2:"col-span-2",3:"col-span-3",4:"col-span-4",5:"col-span-5",6:"col-span-6",7:"col-span-7",8:"col-span-8",9:"col-span-9",10:"col-span-10",11:"col-span-11",12:"col-span-12",13:"col-span-13"},"colSpanLg",0,{1:"lg:col-span-1",2:"lg:col-span-2",3:"lg:col-span-3",4:"lg:col-span-4",5:"lg:col-span-5",6:"lg:col-span-6",7:"lg:col-span-7",8:"lg:col-span-8",9:"lg:col-span-9",10:"lg:col-span-10",11:"lg:col-span-11",12:"lg:col-span-12",13:"lg:col-span-13"},"colSpanMd",0,{1:"md:col-span-1",2:"md:col-span-2",3:"md:col-span-3",4:"md:col-span-4",5:"md:col-span-5",6:"md:col-span-6",7:"md:col-span-7",8:"md:col-span-8",9:"md:col-span-9",10:"md:col-span-10",11:"md:col-span-11",12:"md:col-span-12",13:"md:col-span-13"},"colSpanSm",0,{1:"sm:col-span-1",2:"sm:col-span-2",3:"sm:col-span-3",4:"sm:col-span-4",5:"sm:col-span-5",6:"sm:col-span-6",7:"sm:col-span-7",8:"sm:col-span-8",9:"sm:col-span-9",10:"sm:col-span-10",11:"sm:col-span-11",12:"sm:col-span-12",13:"sm:col-span-13"},"gridCols",0,n,"gridColsLg",0,s,"gridColsMd",0,l,"gridColsSm",0,i],46757);let d=(0,o.makeClassName)("Grid"),c=(e,t)=>e&&Object.keys(t).includes(String(e))?t[e]:"",u=a.default.forwardRef((e,o)=>{let{numItems:u=1,numItemsSm:m,numItemsMd:g,numItemsLg:p,children:b,className:h}=e,f=(0,t.__rest)(e,["numItems","numItemsSm","numItemsMd","numItemsLg","children","className"]),v=c(u,n),y=c(m,i),x=c(g,l),$=c(p,s),C=(0,r.tremorTwMerge)(v,y,x,$);return a.default.createElement("div",Object.assign({ref:o,className:(0,r.tremorTwMerge)(d("root"),"grid",C,h)},f),b)});u.displayName="Grid",e.s(["Grid",0,u],350967)},530212,e=>{"use strict";var t=e.i(271645);let r=t.forwardRef(function(e,r){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:r},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M10 19l-7-7m0 0l7-7m-7 7h18"}))});e.s(["ArrowLeftIcon",0,r],530212)},482725,e=>{"use strict";var t=e.i(244451);e.s(["Spin",()=>t.default])},555987,e=>{"use strict";var t=e.i(221688),r=e.i(950643);let o=/^(https?:|data:|blob:|\/\/)/i;e.s(["resolveLogoSrc",0,(e,a=t.serverRootPath)=>{if(e){let t;return o.test(e)?e:(t=(0,r.normalizeRootPath)(a),`${t}${e.startsWith("/")?e:`/${e}`}`)}}])},500330,e=>{"use strict";var t=e.i(727749);let r=(e,t=0,r=!1,o=!0)=>{if(null==e||!Number.isFinite(e)||0===e&&!o)return"-";let a={minimumFractionDigits:t,maximumFractionDigits:t};if(!r)return e.toLocaleString("en-US",a);let n=e<0?"-":"",i=Math.abs(e),l=i,s="";return i>=1e6?(l=i/1e6,s="M"):i>=1e3&&(l=i/1e3,s="K"),`${n}${l.toLocaleString("en-US",a)}${s}`},o=async(e,r="Copied to clipboard")=>{if(!e)return!1;if(!navigator||!navigator.clipboard||!navigator.clipboard.writeText)return a(e,r);try{return await navigator.clipboard.writeText(e),t.default.success(r),!0}catch(t){return console.error("Clipboard API failed: ",t),a(e,r)}},a=(e,r)=>{try{let o=document.createElement("textarea");o.value=e,o.style.position="fixed",o.style.left="-999999px",o.style.top="-999999px",o.setAttribute("readonly",""),document.body.appendChild(o),o.focus(),o.select();let a=document.execCommand("copy");if(document.body.removeChild(o),a)return t.default.success(r),!0;throw Error("execCommand failed")}catch(e){return t.default.fromBackend("Failed to copy to clipboard"),console.error("Failed to copy: ",e),!1}};e.s(["copyToClipboard",0,o,"formatNumberWithCommas",0,r,"getSpendString",0,(e,t=6)=>{if(null==e||!Number.isFinite(e)||0===e)return"-";let o=r(e,t,!1,!1);if(0===Number(o.replace(/,/g,""))){let e=(1/10**t).toFixed(t);return`< $${e}`}return`$${o}`},"updateExistingKeys",0,function(e,t){let r=structuredClone(e);for(let[e,o]of Object.entries(t))e in r&&(r[e]=o);return r}])},211576,e=>{"use strict";var t=e.i(131757);e.s(["Col",()=>t.default])},166406,e=>{"use strict";var t=e.i(190144);e.s(["CopyOutlined",()=>t.default])},447566,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M872 474H286.9l350.2-304c5.6-4.9 2.2-14-5.2-14h-88.5c-3.9 0-7.6 1.4-10.5 3.9L155 487.8a31.96 31.96 0 000 48.3L535.1 866c1.5 1.3 3.3 2 5.2 2h91.5c7.4 0 10.8-9.2 5.2-14L286.9 550H872c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8z"}}]},name:"arrow-left",theme:"outlined"};var a=e.i(9583),n=r.forwardRef(function(e,n){return r.createElement(a.default,(0,t.default)({},e,{ref:n,icon:o}))});e.s(["ArrowLeftOutlined",0,n],447566)},637235,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M686.7 638.6L544.1 535.5V288c0-4.4-3.6-8-8-8H488c-4.4 0-8 3.6-8 8v275.4c0 2.6 1.2 5 3.3 6.5l165.4 120.6c3.6 2.6 8.6 1.8 11.2-1.7l28.6-39c2.6-3.7 1.8-8.7-1.8-11.2z"}}]},name:"clock-circle",theme:"outlined"};var a=e.i(9583),n=r.forwardRef(function(e,n){return r.createElement(a.default,(0,t.default)({},e,{ref:n,icon:o}))});e.s(["ClockCircleOutlined",0,n],637235)},597440,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z"}}]},name:"delete",theme:"outlined"};var a=e.i(9583),n=r.forwardRef(function(e,n){return r.createElement(a.default,(0,t.default)({},e,{ref:n,icon:o}))});e.s(["default",0,n],597440)},955135,e=>{"use strict";var t=e.i(597440);e.s(["DeleteOutlined",()=>t.default])},646563,e=>{"use strict";var t=e.i(959013);e.s(["PlusOutlined",()=>t.default])},599724,936325,e=>{"use strict";var t=e.i(95779),r=e.i(444755),o=e.i(673706),a=e.i(271645);let n=a.default.forwardRef((e,n)=>{let{color:i,className:l,children:s}=e;return a.default.createElement("p",{ref:n,className:(0,r.tremorTwMerge)("text-tremor-default",i?(0,o.getColorClassNames)(i,t.colorPalette.text).textColor:(0,r.tremorTwMerge)("text-tremor-content","dark:text-dark-tremor-content"),l)},s)});n.displayName="Text",e.s(["default",0,n],936325),e.s(["Text",0,n],599724)},994388,e=>{"use strict";var t=e.i(290571),r=e.i(829087),o=e.i(271645);let a=["preEnter","entering","entered","preExit","exiting","exited","unmounted"],n=e=>({_s:e,status:a[e],isEnter:e<3,isMounted:6!==e,isResolved:2===e||e>4}),i=e=>e?6:5,l=(e,t,r,o,a)=>{clearTimeout(o.current);let i=n(e);t(i),r.current=i,a&&a({current:i})};var s=e.i(480731),d=e.i(444755),c=e.i(673706);let u=e=>{var r=(0,t.__rest)(e,[]);return o.default.createElement("svg",Object.assign({},r,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"}),o.default.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}),o.default.createElement("path",{d:"M18.364 5.636L16.95 7.05A7 7 0 1 0 19 12h2a9 9 0 1 1-2.636-6.364z"}))};var m=e.i(95779);let g={xs:{height:"h-4",width:"w-4"},sm:{height:"h-5",width:"w-5"},md:{height:"h-5",width:"w-5"},lg:{height:"h-6",width:"w-6"},xl:{height:"h-6",width:"w-6"}},p=(e,t)=>{switch(e){case"primary":return{textColor:t?(0,c.getColorClassNames)("white").textColor:"text-tremor-brand-inverted dark:text-dark-tremor-brand-inverted",hoverTextColor:t?(0,c.getColorClassNames)("white").textColor:"text-tremor-brand-inverted dark:text-dark-tremor-brand-inverted",bgColor:t?(0,c.getColorClassNames)(t,m.colorPalette.background).bgColor:"bg-tremor-brand dark:bg-dark-tremor-brand",hoverBgColor:t?(0,c.getColorClassNames)(t,m.colorPalette.darkBackground).hoverBgColor:"hover:bg-tremor-brand-emphasis dark:hover:bg-dark-tremor-brand-emphasis",borderColor:t?(0,c.getColorClassNames)(t,m.colorPalette.border).borderColor:"border-tremor-brand dark:border-dark-tremor-brand",hoverBorderColor:t?(0,c.getColorClassNames)(t,m.colorPalette.darkBorder).hoverBorderColor:"hover:border-tremor-brand-emphasis dark:hover:border-dark-tremor-brand-emphasis"};case"secondary":return{textColor:t?(0,c.getColorClassNames)(t,m.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",hoverTextColor:t?(0,c.getColorClassNames)(t,m.colorPalette.text).textColor:"hover:text-tremor-brand-emphasis dark:hover:text-dark-tremor-brand-emphasis",bgColor:(0,c.getColorClassNames)("transparent").bgColor,hoverBgColor:t?(0,d.tremorTwMerge)((0,c.getColorClassNames)(t,m.colorPalette.background).hoverBgColor,"hover:bg-opacity-20 dark:hover:bg-opacity-20"):"hover:bg-tremor-brand-faint dark:hover:bg-dark-tremor-brand-faint",borderColor:t?(0,c.getColorClassNames)(t,m.colorPalette.border).borderColor:"border-tremor-brand dark:border-dark-tremor-brand"};case"light":return{textColor:t?(0,c.getColorClassNames)(t,m.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",hoverTextColor:t?(0,c.getColorClassNames)(t,m.colorPalette.darkText).hoverTextColor:"hover:text-tremor-brand-emphasis dark:hover:text-dark-tremor-brand-emphasis",bgColor:(0,c.getColorClassNames)("transparent").bgColor,borderColor:"",hoverBorderColor:""}}},b=(0,c.makeClassName)("Button"),h=({loading:e,iconSize:t,iconPosition:r,Icon:a,needMargin:n,transitionStatus:i})=>{let l=n?r===s.HorizontalPositions.Left?(0,d.tremorTwMerge)("-ml-1","mr-1.5"):(0,d.tremorTwMerge)("-mr-1","ml-1.5"):"",c=(0,d.tremorTwMerge)("w-0 h-0"),m={default:c,entering:c,entered:t,exiting:t,exited:c};return e?o.default.createElement(u,{className:(0,d.tremorTwMerge)(b("icon"),"animate-spin shrink-0",l,m.default,m[i]),style:{transition:"width 150ms"}}):o.default.createElement(a,{className:(0,d.tremorTwMerge)(b("icon"),"shrink-0",t,l)})},f=o.default.forwardRef((e,a)=>{let{icon:u,iconPosition:m=s.HorizontalPositions.Left,size:f=s.Sizes.SM,color:v,variant:y="primary",disabled:x,loading:$=!1,loadingText:C,children:O,tooltip:S,className:j}=e,w=(0,t.__rest)(e,["icon","iconPosition","size","color","variant","disabled","loading","loadingText","children","tooltip","className"]),k=$||x,E=void 0!==u||$,N=$&&C,T=!(!O&&!N),M=(0,d.tremorTwMerge)(g[f].height,g[f].width),z="light"!==y?(0,d.tremorTwMerge)("rounded-tremor-default border","shadow-tremor-input","dark:shadow-dark-tremor-input"):"",P=p(y,v),B=("light"!==y?{xs:{paddingX:"px-2.5",paddingY:"py-1.5",fontSize:"text-xs"},sm:{paddingX:"px-4",paddingY:"py-2",fontSize:"text-sm"},md:{paddingX:"px-4",paddingY:"py-2",fontSize:"text-md"},lg:{paddingX:"px-4",paddingY:"py-2.5",fontSize:"text-lg"},xl:{paddingX:"px-4",paddingY:"py-3",fontSize:"text-xl"}}:{xs:{paddingX:"",paddingY:"",fontSize:"text-xs"},sm:{paddingX:"",paddingY:"",fontSize:"text-sm"},md:{paddingX:"",paddingY:"",fontSize:"text-md"},lg:{paddingX:"",paddingY:"",fontSize:"text-lg"},xl:{paddingX:"",paddingY:"",fontSize:"text-xl"}})[f],{tooltipProps:R,getReferenceProps:L}=(0,r.useTooltip)(300),[I,H]=(({enter:e=!0,exit:t=!0,preEnter:r,preExit:a,timeout:s,initialEntered:d,mountOnEnter:c,unmountOnExit:u,onStateChange:m}={})=>{let[g,p]=(0,o.useState)(()=>n(d?2:i(c))),b=(0,o.useRef)(g),h=(0,o.useRef)(0),[f,v]="object"==typeof s?[s.enter,s.exit]:[s,s],y=(0,o.useCallback)(()=>{let e=((e,t)=>{switch(e){case 1:case 0:return 2;case 4:case 3:return i(t)}})(b.current._s,u);e&&l(e,p,b,h,m)},[m,u]);return[g,(0,o.useCallback)(o=>{let n=e=>{switch(l(e,p,b,h,m),e){case 1:f>=0&&(h.current=((...e)=>setTimeout(...e))(y,f));break;case 4:v>=0&&(h.current=((...e)=>setTimeout(...e))(y,v));break;case 0:case 3:h.current=((...e)=>setTimeout(...e))(()=>{isNaN(document.body.offsetTop)||n(e+1)},0)}},s=b.current.isEnter;"boolean"!=typeof o&&(o=!s),o?s||n(e?+!r:2):s&&n(t?a?3:4:i(u))},[y,m,e,t,r,a,f,v,u]),y]})({timeout:50});return(0,o.useEffect)(()=>{H($)},[$]),o.default.createElement("button",Object.assign({ref:(0,c.mergeRefs)([a,R.refs.setReference]),className:(0,d.tremorTwMerge)(b("root"),"shrink-0 inline-flex justify-center items-center group font-medium outline-none",z,B.paddingX,B.paddingY,B.fontSize,P.textColor,P.bgColor,P.borderColor,P.hoverBorderColor,k?"opacity-50 cursor-not-allowed":(0,d.tremorTwMerge)(p(y,v).hoverTextColor,p(y,v).hoverBgColor,p(y,v).hoverBorderColor),j),disabled:k},L,w),o.default.createElement(r.default,Object.assign({text:S},R)),E&&m!==s.HorizontalPositions.Right?o.default.createElement(h,{loading:$,iconSize:M,iconPosition:m,Icon:u,transitionStatus:I.status,needMargin:T}):null,N||O?o.default.createElement("span",{className:(0,d.tremorTwMerge)(b("text"),"text-tremor-default whitespace-nowrap")},N?C:O):null,E&&m===s.HorizontalPositions.Right?o.default.createElement(h,{loading:$,iconSize:M,iconPosition:m,Icon:u,transitionStatus:I.status,needMargin:T}):null)});f.displayName="Button",e.s(["Button",0,f],994388)},304967,e=>{"use strict";var t=e.i(290571),r=e.i(271645),o=e.i(480731),a=e.i(95779),n=e.i(444755),i=e.i(673706);let l=(0,i.makeClassName)("Card"),s=r.default.forwardRef((e,s)=>{let{decoration:d="",decorationColor:c,children:u,className:m}=e,g=(0,t.__rest)(e,["decoration","decorationColor","children","className"]);return r.default.createElement("div",Object.assign({ref:s,className:(0,n.tremorTwMerge)(l("root"),"relative w-full text-left ring-1 rounded-tremor-default p-6","bg-tremor-background ring-tremor-ring shadow-tremor-card","dark:bg-dark-tremor-background dark:ring-dark-tremor-ring dark:shadow-dark-tremor-card",c?(0,i.getColorClassNames)(c,a.colorPalette.border).borderColor:"border-tremor-brand dark:border-dark-tremor-brand",(e=>{if(!e)return"";switch(e){case o.HorizontalPositions.Left:return"border-l-4";case o.VerticalPositions.Top:return"border-t-4";case o.HorizontalPositions.Right:return"border-r-4";case o.VerticalPositions.Bottom:return"border-b-4";default:return""}})(d),m)},g),u)});s.displayName="Card",e.s(["Card",0,s],304967)},629569,e=>{"use strict";var t=e.i(290571),r=e.i(95779),o=e.i(444755),a=e.i(673706),n=e.i(271645);let i=n.default.forwardRef((e,i)=>{let{color:l,children:s,className:d}=e,c=(0,t.__rest)(e,["color","children","className"]);return n.default.createElement("p",Object.assign({ref:i,className:(0,o.tremorTwMerge)("font-medium text-tremor-title",l?(0,a.getColorClassNames)(l,r.colorPalette.darkText).textColor:"text-tremor-content-strong dark:text-dark-tremor-content-strong",d)},c),s)});i.displayName="Title",e.s(["Title",0,i],629569)},653496,e=>{"use strict";var t=e.i(721369);e.s(["Tabs",()=>t.default])},536916,e=>{"use strict";var t=e.i(374276);e.s(["Checkbox",()=>t.default])}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0ys10755n8os_.js b/litellm/proxy/_experimental/out/_next/static/chunks/0ys10755n8os_.js new file mode 100644 index 00000000000..b118ebcce8f --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0ys10755n8os_.js @@ -0,0 +1 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,224283,(t,e,r)=>{var n=t.r(374009),o=t.r(950724);e.exports=function(t,e,r){var i=!0,a=!0;if("function"!=typeof t)throw TypeError("Expected a function");return o(r)&&(i="leading"in r?!!r.leading:i,a="trailing"in r?!!r.trailing:a),n(t,e,{leading:i,maxWait:e,trailing:a})}},45350,(t,e,r)=>{e.exports=Array.isArray},385845,(t,e,r)=>{var n=t.r(377684),o=t.r(45350),i=t.r(877289);e.exports=function(t){return"string"==typeof t||!o(t)&&i(t)&&"[object String]"==n(t)}},94241,(t,e,r)=>{var n=t.r(377684),o=t.r(877289);e.exports=function(t){return"number"==typeof t||o(t)&&"[object Number]"==n(t)}},878948,(t,e,r)=>{var n=t.r(94241);e.exports=function(t){return n(t)&&t!=+t}},9903,(t,e,r)=>{var n=t.r(45350),o=t.r(361884),i=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,a=/^\w*$/;e.exports=function(t,e){if(n(t))return!1;var r=typeof t;return!!("number"==r||"symbol"==r||"boolean"==r||null==t||o(t))||a.test(t)||!i.test(t)||null!=e&&t in Object(e)}},771223,(t,e,r)=>{var n=t.r(377684),o=t.r(950724);e.exports=function(t){if(!o(t))return!1;var e=n(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},853789,(t,e,r)=>{e.exports=t.r(139088)["__core-js_shared__"]},269553,(t,e,r)=>{var n,o=t.r(853789),i=(n=/[^.]+$/.exec(o&&o.keys&&o.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"";e.exports=function(t){return!!i&&i in t}},776366,(t,e,r)=>{var n=Function.prototype.toString;e.exports=function(t){if(null!=t){try{return n.call(t)}catch(t){}try{return t+""}catch(t){}}return""}},54368,(t,e,r)=>{var n=t.r(771223),o=t.r(269553),i=t.r(950724),a=t.r(776366),u=/^\[object .+?Constructor\]$/,l=Object.prototype,c=Function.prototype.toString,s=l.hasOwnProperty,f=RegExp("^"+c.call(s).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=function(t){return!(!i(t)||o(t))&&(n(t)?f:u).test(a(t))}},263958,(t,e,r)=>{e.exports=function(t,e){return null==t?void 0:t[e]}},841920,(t,e,r)=>{var n=t.r(54368),o=t.r(263958);e.exports=function(t,e){var r=o(t,e);return n(r)?r:void 0}},932760,(t,e,r)=>{e.exports=t.r(841920)(Object,"create")},150514,(t,e,r)=>{var n=t.r(932760);e.exports=function(){this.__data__=n?n(null):{},this.size=0}},197617,(t,e,r)=>{e.exports=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=!!e,e}},757412,(t,e,r)=>{var n=t.r(932760),o=Object.prototype.hasOwnProperty;e.exports=function(t){var e=this.__data__;if(n){var r=e[t];return"__lodash_hash_undefined__"===r?void 0:r}return o.call(e,t)?e[t]:void 0}},623592,(t,e,r)=>{var n=t.r(932760),o=Object.prototype.hasOwnProperty;e.exports=function(t){var e=this.__data__;return n?void 0!==e[t]:o.call(e,t)}},239004,(t,e,r)=>{var n=t.r(932760);e.exports=function(t,e){var r=this.__data__;return this.size+=+!this.has(t),r[t]=n&&void 0===e?"__lodash_hash_undefined__":e,this}},734421,(t,e,r)=>{var n=t.r(150514),o=t.r(197617),i=t.r(757412),a=t.r(623592),u=t.r(239004);function l(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e{e.exports=function(){this.__data__=[],this.size=0}},25172,(t,e,r)=>{e.exports=function(t,e){return t===e||t!=t&&e!=e}},134314,(t,e,r)=>{var n=t.r(25172);e.exports=function(t,e){for(var r=t.length;r--;)if(n(t[r][0],e))return r;return -1}},419206,(t,e,r)=>{var n=t.r(134314),o=Array.prototype.splice;e.exports=function(t){var e=this.__data__,r=n(e,t);return!(r<0)&&(r==e.length-1?e.pop():o.call(e,r,1),--this.size,!0)}},467763,(t,e,r)=>{var n=t.r(134314);e.exports=function(t){var e=this.__data__,r=n(e,t);return r<0?void 0:e[r][1]}},523407,(t,e,r)=>{var n=t.r(134314);e.exports=function(t){return n(this.__data__,t)>-1}},553833,(t,e,r)=>{var n=t.r(134314);e.exports=function(t,e){var r=this.__data__,o=n(r,t);return o<0?(++this.size,r.push([t,e])):r[o][1]=e,this}},729039,(t,e,r)=>{var n=t.r(665742),o=t.r(419206),i=t.r(467763),a=t.r(523407),u=t.r(553833);function l(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e{e.exports=t.r(841920)(t.r(139088),"Map")},848994,(t,e,r)=>{var n=t.r(734421),o=t.r(729039),i=t.r(687362);e.exports=function(){this.size=0,this.__data__={hash:new n,map:new(i||o),string:new n}}},224053,(t,e,r)=>{e.exports=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t}},487994,(t,e,r)=>{var n=t.r(224053);e.exports=function(t,e){var r=t.__data__;return n(e)?r["string"==typeof e?"string":"hash"]:r.map}},996768,(t,e,r)=>{var n=t.r(487994);e.exports=function(t){var e=n(this,t).delete(t);return this.size-=!!e,e}},929932,(t,e,r)=>{var n=t.r(487994);e.exports=function(t){return n(this,t).get(t)}},892647,(t,e,r)=>{var n=t.r(487994);e.exports=function(t){return n(this,t).has(t)}},446644,(t,e,r)=>{var n=t.r(487994);e.exports=function(t,e){var r=n(this,t),o=r.size;return r.set(t,e),this.size+=+(r.size!=o),this}},587547,(t,e,r)=>{var n=t.r(848994),o=t.r(996768),i=t.r(929932),a=t.r(892647),u=t.r(446644);function l(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e{var n=t.r(587547);function o(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw TypeError("Expected a function");var r=function(){var n=arguments,o=e?e.apply(this,n):n[0],i=r.cache;if(i.has(o))return i.get(o);var a=t.apply(this,n);return r.cache=i.set(o,a)||i,a};return r.cache=new(o.Cache||n),r}o.Cache=n,e.exports=o},688832,(t,e,r)=>{var n=t.r(657588);e.exports=function(t){var e=n(t,function(t){return 500===r.size&&r.clear(),t}),r=e.cache;return e}},902677,(t,e,r)=>{var n=t.r(688832),o=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,i=/\\(\\)?/g;e.exports=n(function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(o,function(t,r,n,o){e.push(n?o.replace(i,"$1"):r||t)}),e})},892708,(t,e,r)=>{e.exports=function(t,e){for(var r=-1,n=null==t?0:t.length,o=Array(n);++r{var n=t.r(630353),o=t.r(892708),i=t.r(45350),a=t.r(361884),u=1/0,l=n?n.prototype:void 0,c=l?l.toString:void 0;e.exports=function t(e){if("string"==typeof e)return e;if(i(e))return o(e,t)+"";if(a(e))return c?c.call(e):"";var r=e+"";return"0"==r&&1/e==-u?"-0":r}},702922,(t,e,r)=>{var n=t.r(372537);e.exports=function(t){return null==t?"":n(t)}},186287,(t,e,r)=>{var n=t.r(45350),o=t.r(9903),i=t.r(902677),a=t.r(702922);e.exports=function(t,e){return n(t)?t:o(t,e)?[t]:i(a(t))}},2054,(t,e,r)=>{var n=t.r(361884),o=1/0;e.exports=function(t){if("string"==typeof t||n(t))return t;var e=t+"";return"0"==e&&1/t==-o?"-0":e}},333141,(t,e,r)=>{var n=t.r(186287),o=t.r(2054);e.exports=function(t,e){e=n(e,t);for(var r=0,i=e.length;null!=t&&r{var n=t.r(333141);e.exports=function(t,e,r){var o=null==t?void 0:n(t,e);return void 0===o?r:o}},629873,(t,e,r)=>{e.exports=function(t){return null==t}},615888,(t,e,r)=>{"use strict";var n,o=Symbol.for("react.element"),i=Symbol.for("react.portal"),a=Symbol.for("react.fragment"),u=Symbol.for("react.strict_mode"),l=Symbol.for("react.profiler"),c=Symbol.for("react.provider"),s=Symbol.for("react.context"),f=Symbol.for("react.server_context"),p=Symbol.for("react.forward_ref"),d=Symbol.for("react.suspense"),h=Symbol.for("react.suspense_list"),y=Symbol.for("react.memo"),v=Symbol.for("react.lazy"),m=Symbol.for("react.offscreen");function b(t){if("object"==typeof t&&null!==t){var e=t.$$typeof;switch(e){case o:switch(t=t.type){case a:case l:case u:case d:case h:return t;default:switch(t=t&&t.$$typeof){case f:case s:case p:case v:case y:case c:return t;default:return e}}case i:return e}}}n=Symbol.for("react.module.reference"),r.ContextConsumer=s,r.ContextProvider=c,r.Element=o,r.ForwardRef=p,r.Fragment=a,r.Lazy=v,r.Memo=y,r.Portal=i,r.Profiler=l,r.StrictMode=u,r.Suspense=d,r.SuspenseList=h,r.isAsyncMode=function(){return!1},r.isConcurrentMode=function(){return!1},r.isContextConsumer=function(t){return b(t)===s},r.isContextProvider=function(t){return b(t)===c},r.isElement=function(t){return"object"==typeof t&&null!==t&&t.$$typeof===o},r.isForwardRef=function(t){return b(t)===p},r.isFragment=function(t){return b(t)===a},r.isLazy=function(t){return b(t)===v},r.isMemo=function(t){return b(t)===y},r.isPortal=function(t){return b(t)===i},r.isProfiler=function(t){return b(t)===l},r.isStrictMode=function(t){return b(t)===u},r.isSuspense=function(t){return b(t)===d},r.isSuspenseList=function(t){return b(t)===h},r.isValidElementType=function(t){return"string"==typeof t||"function"==typeof t||t===a||t===l||t===u||t===d||t===h||t===m||"object"==typeof t&&null!==t&&(t.$$typeof===v||t.$$typeof===y||t.$$typeof===c||t.$$typeof===s||t.$$typeof===p||t.$$typeof===n||void 0!==t.getModuleId)||!1},r.typeOf=b},279367,(t,e,r)=>{"use strict";e.exports=t.r(615888)},193440,(t,e,r)=>{var n=Math.ceil,o=Math.max;e.exports=function(t,e,r,i){for(var a=-1,u=o(n((e-t)/(r||1)),0),l=Array(u);u--;)l[i?u:++a]=t,t+=r;return l}},98376,(t,e,r)=>{e.exports=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=0x1fffffffffffff}},351095,(t,e,r)=>{var n=t.r(771223),o=t.r(98376);e.exports=function(t){return null!=t&&o(t.length)&&!n(t)}},66397,(t,e,r)=>{var n=/^(?:0|[1-9]\d*)$/;e.exports=function(t,e){var r=typeof t;return!!(e=null==e?0x1fffffffffffff:e)&&("number"==r||"symbol"!=r&&n.test(t))&&t>-1&&t%1==0&&t{var n=t.r(25172),o=t.r(351095),i=t.r(66397),a=t.r(950724);e.exports=function(t,e,r){if(!a(r))return!1;var u=typeof e;return("number"==u?!!(o(r)&&i(e,r.length)):"string"==u&&e in r)&&n(r[e],t)}},382560,(t,e,r)=>{var n=t.r(773759),o=1/0;e.exports=function(t){return t?(t=n(t))===o||t===-o?(t<0?-1:1)*17976931348623157e292:t==t?t:0:0===t?t:0}},369523,(t,e,r)=>{var n=t.r(193440),o=t.r(170237),i=t.r(382560);e.exports=function(t){return function(e,r,a){return a&&"number"!=typeof a&&o(e,r,a)&&(r=a=void 0),e=i(e),void 0===r?(r=e,e=0):r=i(r),a=void 0===a?e{e.exports=t.r(369523)()},169102,(t,e,r)=>{e.exports=function(t,e){for(var r=-1,n=e.length,o=t.length;++r{var n=t.r(377684),o=t.r(877289);e.exports=function(t){return o(t)&&"[object Arguments]"==n(t)}},473250,(t,e,r)=>{var n=t.r(566645),o=t.r(877289),i=Object.prototype,a=i.hasOwnProperty,u=i.propertyIsEnumerable;e.exports=n(function(){return arguments}())?n:function(t){return o(t)&&a.call(t,"callee")&&!u.call(t,"callee")}},733803,(t,e,r)=>{var n=t.r(630353),o=t.r(473250),i=t.r(45350),a=n?n.isConcatSpreadable:void 0;e.exports=function(t){return i(t)||o(t)||!!(a&&t&&t[a])}},541891,(t,e,r)=>{var n=t.r(169102),o=t.r(733803);e.exports=function t(e,r,i,a,u){var l=-1,c=e.length;for(i||(i=o),u||(u=[]);++l0&&i(s)?r>1?t(s,r-1,i,a,u):n(u,s):a||(u[u.length]=s)}return u}},405400,(t,e,r)=>{var n=t.r(729039);e.exports=function(){this.__data__=new n,this.size=0}},986238,(t,e,r)=>{e.exports=function(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}},957831,(t,e,r)=>{e.exports=function(t){return this.__data__.get(t)}},977802,(t,e,r)=>{e.exports=function(t){return this.__data__.has(t)}},320517,(t,e,r)=>{var n=t.r(729039),o=t.r(687362),i=t.r(587547);e.exports=function(t,e){var r=this.__data__;if(r instanceof n){var a=r.__data__;if(!o||a.length<199)return a.push([t,e]),this.size=++r.size,this;r=this.__data__=new i(a)}return r.set(t,e),this.size=r.size,this}},901551,(t,e,r)=>{var n=t.r(729039),o=t.r(405400),i=t.r(986238),a=t.r(957831),u=t.r(977802),l=t.r(320517);function c(t){var e=this.__data__=new n(t);this.size=e.size}c.prototype.clear=o,c.prototype.delete=i,c.prototype.get=a,c.prototype.has=u,c.prototype.set=l,e.exports=c},221274,(t,e,r)=>{e.exports=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this}},439805,(t,e,r)=>{e.exports=function(t){return this.__data__.has(t)}},27493,(t,e,r)=>{var n=t.r(587547),o=t.r(221274),i=t.r(439805);function a(t){var e=-1,r=null==t?0:t.length;for(this.__data__=new n;++e{e.exports=function(t,e){for(var r=-1,n=null==t?0:t.length;++r{e.exports=function(t,e){return t.has(e)}},206856,(t,e,r)=>{var n=t.r(27493),o=t.r(851477),i=t.r(315262);e.exports=function(t,e,r,a,u,l){var c=1&r,s=t.length,f=e.length;if(s!=f&&!(c&&f>s))return!1;var p=l.get(t),d=l.get(e);if(p&&d)return p==e&&d==t;var h=-1,y=!0,v=2&r?new n:void 0;for(l.set(t,e),l.set(e,t);++h{e.exports=t.r(139088).Uint8Array},75331,(t,e,r)=>{e.exports=function(t){var e=-1,r=Array(t.size);return t.forEach(function(t,n){r[++e]=[n,t]}),r}},899850,(t,e,r)=>{e.exports=function(t){var e=-1,r=Array(t.size);return t.forEach(function(t){r[++e]=t}),r}},678012,(t,e,r)=>{var n=t.r(630353),o=t.r(263750),i=t.r(25172),a=t.r(206856),u=t.r(75331),l=t.r(899850),c=n?n.prototype:void 0,s=c?c.valueOf:void 0;e.exports=function(t,e,r,n,c,f,p){switch(r){case"[object DataView]":if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)break;t=t.buffer,e=e.buffer;case"[object ArrayBuffer]":if(t.byteLength!=e.byteLength||!f(new o(t),new o(e)))break;return!0;case"[object Boolean]":case"[object Date]":case"[object Number]":return i(+t,+e);case"[object Error]":return t.name==e.name&&t.message==e.message;case"[object RegExp]":case"[object String]":return t==e+"";case"[object Map]":var d=u;case"[object Set]":var h=1&n;if(d||(d=l),t.size!=e.size&&!h)break;var y=p.get(t);if(y)return y==e;n|=2,p.set(t,e);var v=a(d(t),d(e),n,c,f,p);return p.delete(t),v;case"[object Symbol]":if(s)return s.call(t)==s.call(e)}return!1}},823403,(t,e,r)=>{var n=t.r(169102),o=t.r(45350);e.exports=function(t,e,r){var i=e(t);return o(t)?i:n(i,r(t))}},536100,(t,e,r)=>{e.exports=function(t,e){for(var r=-1,n=null==t?0:t.length,o=0,i=[];++r{e.exports=function(){return[]}},717332,(t,e,r)=>{var n=t.r(536100),o=t.r(45159),i=Object.prototype.propertyIsEnumerable,a=Object.getOwnPropertySymbols;e.exports=a?function(t){return null==t?[]:n(a(t=Object(t)),function(e){return i.call(t,e)})}:o},855803,(t,e,r)=>{e.exports=function(t,e){for(var r=-1,n=Array(t);++r{e.exports=function(){return!1}},356956,(t,e,r)=>{var n=t.r(139088),o=t.r(24013),i=r&&!r.nodeType&&r,a=i&&e&&!e.nodeType&&e,u=a&&a.exports===i?n.Buffer:void 0;e.exports=(u?u.isBuffer:void 0)||o},476602,(t,e,r)=>{var n=t.r(377684),o=t.r(98376),i=t.r(877289),a={};a["[object Float32Array]"]=a["[object Float64Array]"]=a["[object Int8Array]"]=a["[object Int16Array]"]=a["[object Int32Array]"]=a["[object Uint8Array]"]=a["[object Uint8ClampedArray]"]=a["[object Uint16Array]"]=a["[object Uint32Array]"]=!0,a["[object Arguments]"]=a["[object Array]"]=a["[object ArrayBuffer]"]=a["[object Boolean]"]=a["[object DataView]"]=a["[object Date]"]=a["[object Error]"]=a["[object Function]"]=a["[object Map]"]=a["[object Number]"]=a["[object Object]"]=a["[object RegExp]"]=a["[object Set]"]=a["[object String]"]=a["[object WeakMap]"]=!1,e.exports=function(t){return i(t)&&o(t.length)&&!!a[n(t)]}},233999,(t,e,r)=>{e.exports=function(t){return function(e){return t(e)}}},180156,(t,e,r)=>{var n=t.r(100236),o=r&&!r.nodeType&&r,i=o&&e&&!e.nodeType&&e,a=i&&i.exports===o&&n.process;e.exports=function(){try{var t=i&&i.require&&i.require("util").types;if(t)return t;return a&&a.binding&&a.binding("util")}catch(t){}}()},3023,(t,e,r)=>{var n=t.r(476602),o=t.r(233999),i=t.r(180156),a=i&&i.isTypedArray;e.exports=a?o(a):n},458877,(t,e,r)=>{var n=t.r(855803),o=t.r(473250),i=t.r(45350),a=t.r(356956),u=t.r(66397),l=t.r(3023),c=Object.prototype.hasOwnProperty;e.exports=function(t,e){var r=i(t),s=!r&&o(t),f=!r&&!s&&a(t),p=!r&&!s&&!f&&l(t),d=r||s||f||p,h=d?n(t.length,String):[],y=h.length;for(var v in t)(e||c.call(t,v))&&!(d&&("length"==v||f&&("offset"==v||"parent"==v)||p&&("buffer"==v||"byteLength"==v||"byteOffset"==v)||u(v,y)))&&h.push(v);return h}},763996,(t,e,r)=>{var n=Object.prototype;e.exports=function(t){var e=t&&t.constructor;return t===("function"==typeof e&&e.prototype||n)}},825717,(t,e,r)=>{e.exports=function(t,e){return function(r){return t(e(r))}}},942369,(t,e,r)=>{e.exports=t.r(825717)(Object.keys,Object)},848477,(t,e,r)=>{var n=t.r(763996),o=t.r(942369),i=Object.prototype.hasOwnProperty;e.exports=function(t){if(!n(t))return o(t);var e=[];for(var r in Object(t))i.call(t,r)&&"constructor"!=r&&e.push(r);return e}},33679,(t,e,r)=>{var n=t.r(458877),o=t.r(848477),i=t.r(351095);e.exports=function(t){return i(t)?n(t):o(t)}},413370,(t,e,r)=>{var n=t.r(823403),o=t.r(717332),i=t.r(33679);e.exports=function(t){return n(t,i,o)}},330698,(t,e,r)=>{var n=t.r(413370),o=Object.prototype.hasOwnProperty;e.exports=function(t,e,r,i,a,u){var l=1&r,c=n(t),s=c.length;if(s!=n(e).length&&!l)return!1;for(var f=s;f--;){var p=c[f];if(!(l?p in e:o.call(e,p)))return!1}var d=u.get(t),h=u.get(e);if(d&&h)return d==e&&h==t;var y=!0;u.set(t,e),u.set(e,t);for(var v=l;++f{e.exports=t.r(841920)(t.r(139088),"DataView")},717074,(t,e,r)=>{e.exports=t.r(841920)(t.r(139088),"Promise")},106966,(t,e,r)=>{e.exports=t.r(841920)(t.r(139088),"Set")},573895,(t,e,r)=>{e.exports=t.r(841920)(t.r(139088),"WeakMap")},367426,(t,e,r)=>{var n=t.r(801419),o=t.r(687362),i=t.r(717074),a=t.r(106966),u=t.r(573895),l=t.r(377684),c=t.r(776366),s="[object Map]",f="[object Promise]",p="[object Set]",d="[object WeakMap]",h="[object DataView]",y=c(n),v=c(o),m=c(i),b=c(a),g=c(u),x=l;(n&&x(new n(new ArrayBuffer(1)))!=h||o&&x(new o)!=s||i&&x(i.resolve())!=f||a&&x(new a)!=p||u&&x(new u)!=d)&&(x=function(t){var e=l(t),r="[object Object]"==e?t.constructor:void 0,n=r?c(r):"";if(n)switch(n){case y:return h;case v:return s;case m:return f;case b:return p;case g:return d}return e}),e.exports=x},178353,(t,e,r)=>{var n=t.r(901551),o=t.r(206856),i=t.r(678012),a=t.r(330698),u=t.r(367426),l=t.r(45350),c=t.r(356956),s=t.r(3023),f="[object Arguments]",p="[object Array]",d="[object Object]",h=Object.prototype.hasOwnProperty;e.exports=function(t,e,r,y,v,m){var b=l(t),g=l(e),x=b?p:u(t),w=g?p:u(e);x=x==f?d:x,w=w==f?d:w;var O=x==d,S=w==d,j=x==w;if(j&&c(t)){if(!c(e))return!1;b=!0,O=!1}if(j&&!O)return m||(m=new n),b||s(t)?o(t,e,r,y,v,m):i(t,e,x,r,y,v,m);if(!(1&r)){var E=O&&h.call(t,"__wrapped__"),P=S&&h.call(e,"__wrapped__");if(E||P){var A=E?t.value():t,k=P?e.value():e;return m||(m=new n),v(A,k,r,y,m)}}return!!j&&(m||(m=new n),a(t,e,r,y,v,m))}},421885,(t,e,r)=>{var n=t.r(178353),o=t.r(877289);e.exports=function t(e,r,i,a,u){return e===r||(null!=e&&null!=r&&(o(e)||o(r))?n(e,r,i,a,t,u):e!=e&&r!=r)}},748299,(t,e,r)=>{var n=t.r(901551),o=t.r(421885);e.exports=function(t,e,r,i){var a=r.length,u=a,l=!i;if(null==t)return!u;for(t=Object(t);a--;){var c=r[a];if(l&&c[2]?c[1]!==t[c[0]]:!(c[0]in t))return!1}for(;++a{var n=t.r(950724);e.exports=function(t){return t==t&&!n(t)}},741903,(t,e,r)=>{var n=t.r(715782),o=t.r(33679);e.exports=function(t){for(var e=o(t),r=e.length;r--;){var i=e[r],a=t[i];e[r]=[i,a,n(a)]}return e}},165570,(t,e,r)=>{e.exports=function(t,e){return function(r){return null!=r&&r[t]===e&&(void 0!==e||t in Object(r))}}},623426,(t,e,r)=>{var n=t.r(748299),o=t.r(741903),i=t.r(165570);e.exports=function(t){var e=o(t);return 1==e.length&&e[0][2]?i(e[0][0],e[0][1]):function(r){return r===t||n(r,t,e)}}},240688,(t,e,r)=>{e.exports=function(t,e){return null!=t&&e in Object(t)}},215359,(t,e,r)=>{var n=t.r(186287),o=t.r(473250),i=t.r(45350),a=t.r(66397),u=t.r(98376),l=t.r(2054);e.exports=function(t,e,r){e=n(e,t);for(var c=-1,s=e.length,f=!1;++c{var n=t.r(240688),o=t.r(215359);e.exports=function(t,e){return null!=t&&o(t,e,n)}},772298,(t,e,r)=>{var n=t.r(421885),o=t.r(482820),i=t.r(76590),a=t.r(9903),u=t.r(715782),l=t.r(165570),c=t.r(2054);e.exports=function(t,e){return a(t)&&u(e)?l(c(t),e):function(r){var a=o(r,t);return void 0===a&&a===e?i(r,t):n(e,a,3)}}},653336,(t,e,r)=>{e.exports=function(t){return t}},601079,(t,e,r)=>{e.exports=function(t){return function(e){return null==e?void 0:e[t]}}},430970,(t,e,r)=>{var n=t.r(333141);e.exports=function(t){return function(e){return n(e,t)}}},433906,(t,e,r)=>{var n=t.r(601079),o=t.r(430970),i=t.r(9903),a=t.r(2054);e.exports=function(t){return i(t)?n(a(t)):o(t)}},666305,(t,e,r)=>{var n=t.r(623426),o=t.r(772298),i=t.r(653336),a=t.r(45350),u=t.r(433906);e.exports=function(t){return"function"==typeof t?t:null==t?i:"object"==typeof t?a(t)?o(t[0],t[1]):n(t):u(t)}},536755,(t,e,r)=>{e.exports=function(t){return function(e,r,n){for(var o=-1,i=Object(e),a=n(e),u=a.length;u--;){var l=a[t?u:++o];if(!1===r(i[l],l,i))break}return e}}},98728,(t,e,r)=>{e.exports=t.r(536755)()},163799,(t,e,r)=>{var n=t.r(98728),o=t.r(33679);e.exports=function(t,e){return t&&n(t,e,o)}},873554,(t,e,r)=>{var n=t.r(351095);e.exports=function(t,e){return function(r,o){if(null==r)return r;if(!n(r))return t(r,o);for(var i=r.length,a=e?i:-1,u=Object(r);(e?a--:++a{var n=t.r(163799);e.exports=t.r(873554)(n)},907073,(t,e,r)=>{var n=t.r(453587),o=t.r(351095);e.exports=function(t,e){var r=-1,i=o(t)?Array(t.length):[];return n(t,function(t,n,o){i[++r]=e(t,n,o)}),i}},783629,(t,e,r)=>{e.exports=function(t,e){var r=t.length;for(t.sort(e);r--;)t[r]=t[r].value;return t}},104886,(t,e,r)=>{var n=t.r(361884);e.exports=function(t,e){if(t!==e){var r=void 0!==t,o=null===t,i=t==t,a=n(t),u=void 0!==e,l=null===e,c=e==e,s=n(e);if(!l&&!s&&!a&&t>e||a&&u&&c&&!l&&!s||o&&u&&c||!r&&c||!i)return 1;if(!o&&!a&&!s&&t{var n=t.r(104886);e.exports=function(t,e,r){for(var o=-1,i=t.criteria,a=e.criteria,u=i.length,l=r.length;++o=l)return c;return c*("desc"==r[o]?-1:1)}}return t.index-e.index}},428138,(t,e,r)=>{var n=t.r(892708),o=t.r(333141),i=t.r(666305),a=t.r(907073),u=t.r(783629),l=t.r(233999),c=t.r(758322),s=t.r(653336),f=t.r(45350);e.exports=function(t,e,r){e=e.length?n(e,function(t){return f(t)?function(e){return o(e,1===t.length?t[0]:t)}:t}):[s];var p=-1;return e=n(e,l(i)),u(a(t,function(t,r,o){return{criteria:n(e,function(e){return e(t)}),index:++p,value:t}}),function(t,e){return c(t,e,r)})}},987160,(t,e,r)=>{e.exports=function(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}},172953,(t,e,r)=>{var n=t.r(987160),o=Math.max;e.exports=function(t,e,r){return e=o(void 0===e?t.length-1:e,0),function(){for(var i=arguments,a=-1,u=o(i.length-e,0),l=Array(u);++a{e.exports=function(t){return function(){return t}}},524251,(t,e,r)=>{var n=t.r(841920);e.exports=function(){try{var t=n(Object,"defineProperty");return t({},"",{}),t}catch(t){}}()},801647,(t,e,r)=>{var n=t.r(556751),o=t.r(524251),i=t.r(653336);e.exports=o?function(t,e){return o(t,"toString",{configurable:!0,enumerable:!1,value:n(e),writable:!0})}:i},851994,(t,e,r)=>{var n=Date.now;e.exports=function(t){var e=0,r=0;return function(){var o=n(),i=16-(o-r);if(r=o,i>0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}},184665,(t,e,r)=>{var n=t.r(801647);e.exports=t.r(851994)(n)},395059,(t,e,r)=>{var n=t.r(653336),o=t.r(172953),i=t.r(184665);e.exports=function(t,e){return i(o(t,e,n),t+"")}},831195,(t,e,r)=>{var n=t.r(541891),o=t.r(428138),i=t.r(395059),a=t.r(170237);e.exports=i(function(t,e){if(null==t)return[];var r=e.length;return r>1&&a(t,e[0],e[1])?e=[]:r>2&&a(e[0],e[1],e[2])&&(e=[e[0]]),o(t,n(e,1),[])})},356445,(t,e,r)=>{e.exports=function(t,e,r,n){for(var o=t.length,i=r+(n?1:-1);n?i--:++i{e.exports=function(t){return t!=t}},201987,(t,e,r)=>{e.exports=function(t,e,r){for(var n=r-1,o=t.length;++n{var n=t.r(356445),o=t.r(104078),i=t.r(201987);e.exports=function(t,e,r){return e==e?i(t,e,r):n(t,o,r)}},146515,(t,e,r)=>{var n=t.r(649719);e.exports=function(t,e){return!!(null==t?0:t.length)&&n(t,e,0)>-1}},829584,(t,e,r)=>{e.exports=function(t,e,r){for(var n=-1,o=null==t?0:t.length;++n{e.exports=function(){}},208484,(t,e,r)=>{var n=t.r(106966),o=t.r(591692),i=t.r(899850);e.exports=n&&1/i(new n([,-0]))[1]==1/0?function(t){return new n(t)}:o},910339,(t,e,r)=>{var n=t.r(27493),o=t.r(146515),i=t.r(829584),a=t.r(315262),u=t.r(208484),l=t.r(899850);e.exports=function(t,e,r){var c=-1,s=o,f=t.length,p=!0,d=[],h=d;if(r)p=!1,s=i;else if(f>=200){var y=e?null:u(t);if(y)return l(y);p=!1,s=a,h=new n}else h=e?[]:d;t:for(;++c{var n=t.r(666305),o=t.r(910339);e.exports=function(t,e){return t&&t.length?o(t,n(e,2)):[]}},795014,(t,e,r)=>{e.exports=function(t,e,r){var n=-1,o=t.length;e<0&&(e=-e>o?0:o+e),(r=r>o?o:r)<0&&(r+=o),o=e>r?0:r-e>>>0,e>>>=0;for(var i=Array(o);++n{var n=t.r(795014);e.exports=function(t,e,r){var o=t.length;return r=void 0===r?o:r,!e&&r>=o?t:n(t,e,r)}},979589,(t,e,r)=>{var n=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");e.exports=function(t){return n.test(t)}},758672,(t,e,r)=>{e.exports=function(t){return t.split("")}},695365,(t,e,r)=>{var n="\\ud800-\\udfff",o="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",i="\\ud83c[\\udffb-\\udfff]",a="[^"+n+"]",u="(?:\\ud83c[\\udde6-\\uddff]){2}",l="[\\ud800-\\udbff][\\udc00-\\udfff]",c="(?:"+o+"|"+i+")?",s="[\\ufe0e\\ufe0f]?",f="(?:\\u200d(?:"+[a,u,l].join("|")+")"+s+c+")*",p=RegExp(i+"(?="+i+")|"+("(?:"+[a+o+"?",o,u,l,"["+n+"]"].join("|"))+")"+(s+c+f),"g");e.exports=function(t){return t.match(p)||[]}},34170,(t,e,r)=>{var n=t.r(758672),o=t.r(979589),i=t.r(695365);e.exports=function(t){return o(t)?i(t):n(t)}},229821,(t,e,r)=>{var n=t.r(284357),o=t.r(979589),i=t.r(34170),a=t.r(702922);e.exports=function(t){return function(e){var r=o(e=a(e))?i(e):void 0,u=r?r[0]:e.charAt(0),l=r?n(r,1).join(""):e.slice(1);return u[t]()+l}}},232241,(t,e,r)=>{e.exports=t.r(229821)("toUpperCase")},232189,(t,e,r)=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},865156,(t,e,r)=>{"use strict";var n=t.r(232189);function o(){}function i(){}i.resetWarningCache=o,e.exports=function(){function t(t,e,r,o,i,a){if(a!==n){var u=Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw u.name="Invariant Violation",u}}function e(){return t}t.isRequired=t;var r={array:t,bigint:t,bool:t,func:t,number:t,object:t,string:t,symbol:t,any:t,arrayOf:e,element:t,elementType:t,instanceOf:e,node:t,objectOf:e,oneOf:e,oneOfType:e,shape:e,exact:e,checkPropTypes:i,resetWarningCache:o};return r.PropTypes=r,r}},745009,(t,e,r)=>{e.exports=t.r(865156)()},641015,(t,e,r)=>{var n=t.r(361884);e.exports=function(t,e,r){for(var o=-1,i=t.length;++o{e.exports=function(t,e){return t>e}},86966,(t,e,r)=>{var n=t.r(641015),o=t.r(580957),i=t.r(653336);e.exports=function(t){return t&&t.length?n(t,i,o):void 0}},298128,(t,e,r)=>{e.exports=function(t,e){return t{var n=t.r(641015),o=t.r(298128),i=t.r(653336);e.exports=function(t){return t&&t.length?n(t,i,o):void 0}},710632,(t,e,r)=>{var n=t.r(892708),o=t.r(666305),i=t.r(907073),a=t.r(45350);e.exports=function(t,e){return(a(t)?n:i)(t,o(e,3))}},633303,(t,e,r)=>{var n=t.r(541891),o=t.r(710632);e.exports=function(t,e){return n(o(t,e),1)}},898892,(t,e,r)=>{var n=t.r(421885);e.exports=function(t,e){return n(t,e)}},651655,(t,e,r)=>{!function(r){"use strict";var n,o={precision:20,rounding:4,toExpNeg:-7,toExpPos:21,LN10:"2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286"},i=!0,a="[DecimalError] ",u=a+"Invalid argument: ",l=a+"Exponent out of range: ",c=Math.floor,s=Math.pow,f=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,p=c(1286742750677284.5),d={};function h(t,e){var r,n,o,a,u,l,c,s,f=t.constructor,p=f.precision;if(!t.s||!e.s)return e.s||(e=new f(t)),i?j(e,p):e;if(c=t.d,s=e.d,u=t.e,o=e.e,c=c.slice(),a=u-o){for(a<0?(n=c,a=-a,l=s.length):(n=s,o=u,l=c.length),a>(l=(u=Math.ceil(p/7))>l?u+1:l+1)&&(a=l,n.length=1),n.reverse();a--;)n.push(0);n.reverse()}for((l=c.length)-(a=s.length)<0&&(a=l,n=s,s=c,c=n),r=0;a;)r=(c[--a]=c[a]+s[a]+r)/1e7|0,c[a]%=1e7;for(r&&(c.unshift(r),++o),l=c.length;0==c[--l];)c.pop();return e.d=c,e.e=o,i?j(e,p):e}function y(t,e,r){if(t!==~~t||tr)throw Error(u+t)}function v(t){var e,r,n,o=t.length-1,i="",a=t[0];if(o>0){for(i+=a,e=1;et.e^this.s<0?1:-1;for(e=0,r=(n=this.d.length)<(o=t.d.length)?n:o;et.d[e]^this.s<0?1:-1;return n===o?0:n>o^this.s<0?1:-1},d.decimalPlaces=d.dp=function(){var t=this.d.length-1,e=(t-this.e)*7;if(t=this.d[t])for(;t%10==0;t/=10)e--;return e<0?0:e},d.dividedBy=d.div=function(t){return m(this,new this.constructor(t))},d.dividedToIntegerBy=d.idiv=function(t){var e=this.constructor;return j(m(this,new e(t),0,1),e.precision)},d.equals=d.eq=function(t){return!this.cmp(t)},d.exponent=function(){return g(this)},d.greaterThan=d.gt=function(t){return this.cmp(t)>0},d.greaterThanOrEqualTo=d.gte=function(t){return this.cmp(t)>=0},d.isInteger=d.isint=function(){return this.e>this.d.length-2},d.isNegative=d.isneg=function(){return this.s<0},d.isPositive=d.ispos=function(){return this.s>0},d.isZero=function(){return 0===this.s},d.lessThan=d.lt=function(t){return 0>this.cmp(t)},d.lessThanOrEqualTo=d.lte=function(t){return 1>this.cmp(t)},d.logarithm=d.log=function(t){var e,r=this.constructor,o=r.precision,u=o+5;if(void 0===t)t=new r(10);else if((t=new r(t)).s<1||t.eq(n))throw Error(a+"NaN");if(this.s<1)throw Error(a+(this.s?"NaN":"-Infinity"));return this.eq(n)?new r(0):(i=!1,e=m(O(this,u),O(t,u),u),i=!0,j(e,o))},d.minus=d.sub=function(t){return t=new this.constructor(t),this.s==t.s?E(this,t):h(this,(t.s=-t.s,t))},d.modulo=d.mod=function(t){var e,r=this.constructor,n=r.precision;if(!(t=new r(t)).s)throw Error(a+"NaN");return this.s?(i=!1,e=m(this,t,0,1).times(t),i=!0,this.minus(e)):j(new r(this),n)},d.naturalExponential=d.exp=function(){return b(this)},d.naturalLogarithm=d.ln=function(){return O(this)},d.negated=d.neg=function(){var t=new this.constructor(this);return t.s=-t.s||0,t},d.plus=d.add=function(t){return t=new this.constructor(t),this.s==t.s?h(this,t):E(this,(t.s=-t.s,t))},d.precision=d.sd=function(t){var e,r,n;if(void 0!==t&&!!t!==t&&1!==t&&0!==t)throw Error(u+t);if(e=g(this)+1,r=7*(n=this.d.length-1)+1,n=this.d[n]){for(;n%10==0;n/=10)r--;for(n=this.d[0];n>=10;n/=10)r++}return t&&e>r?e:r},d.squareRoot=d.sqrt=function(){var t,e,r,n,o,u,l,s=this.constructor;if(this.s<1){if(!this.s)return new s(0);throw Error(a+"NaN")}for(t=g(this),i=!1,0==(o=Math.sqrt(+this))||o==1/0?(((e=v(this.d)).length+t)%2==0&&(e+="0"),o=Math.sqrt(e),t=c((t+1)/2)-(t<0||t%2),n=new s(e=o==1/0?"5e"+t:(e=o.toExponential()).slice(0,e.indexOf("e")+1)+t)):n=new s(o.toString()),o=l=(r=s.precision)+3;;)if(n=(u=n).plus(m(this,u,l+2)).times(.5),v(u.d).slice(0,l)===(e=v(n.d)).slice(0,l)){if(e=e.slice(l-3,l+1),o==l&&"4999"==e){if(j(u,r+1,0),u.times(u).eq(this)){n=u;break}}else if("9999"!=e)break;l+=4}return i=!0,j(n,r)},d.times=d.mul=function(t){var e,r,n,o,a,u,l,c,s,f=this.constructor,p=this.d,d=(t=new f(t)).d;if(!this.s||!t.s)return new f(0);for(t.s*=this.s,r=this.e+t.e,(c=p.length)<(s=d.length)&&(a=p,p=d,d=a,u=c,c=s,s=u),a=[],n=u=c+s;n--;)a.push(0);for(n=s;--n>=0;){for(e=0,o=c+n;o>n;)l=a[o]+d[n]*p[o-n-1]+e,a[o--]=l%1e7|0,e=l/1e7|0;a[o]=(a[o]+e)%1e7|0}for(;!a[--u];)a.pop();return e?++r:a.shift(),t.d=a,t.e=r,i?j(t,f.precision):t},d.toDecimalPlaces=d.todp=function(t,e){var r=this,n=r.constructor;return(r=new n(r),void 0===t)?r:(y(t,0,1e9),void 0===e?e=n.rounding:y(e,0,8),j(r,t+g(r)+1,e))},d.toExponential=function(t,e){var r,n=this,o=n.constructor;return void 0===t?r=P(n,!0):(y(t,0,1e9),void 0===e?e=o.rounding:y(e,0,8),r=P(n=j(new o(n),t+1,e),!0,t+1)),r},d.toFixed=function(t,e){var r,n,o=this.constructor;return void 0===t?P(this):(y(t,0,1e9),void 0===e?e=o.rounding:y(e,0,8),r=P((n=j(new o(this),t+g(this)+1,e)).abs(),!1,t+g(n)+1),this.isneg()&&!this.isZero()?"-"+r:r)},d.toInteger=d.toint=function(){var t=this.constructor;return j(new t(this),g(this)+1,t.rounding)},d.toNumber=function(){return+this},d.toPower=d.pow=function(t){var e,r,o,u,l,s,f=this,p=f.constructor,d=+(t=new p(t));if(!t.s)return new p(n);if(!(f=new p(f)).s){if(t.s<1)throw Error(a+"Infinity");return f}if(f.eq(n))return f;if(o=p.precision,t.eq(n))return j(f,o);if(s=(e=t.e)>=(r=t.d.length-1),l=f.s,s){if((r=d<0?-d:d)<=0x1fffffffffffff){for(u=new p(n),e=Math.ceil(o/7+4),i=!1;r%2&&A((u=u.times(f)).d,e),0!==(r=c(r/2));)A((f=f.times(f)).d,e);return i=!0,t.s<0?new p(n).div(u):j(u,o)}}else if(l<0)throw Error(a+"NaN");return l=l<0&&1&t.d[Math.max(e,r)]?-1:1,f.s=1,i=!1,u=t.times(O(f,o+12)),i=!0,(u=b(u)).s=l,u},d.toPrecision=function(t,e){var r,n,o=this,i=o.constructor;return void 0===t?(r=g(o),n=P(o,r<=i.toExpNeg||r>=i.toExpPos)):(y(t,1,1e9),void 0===e?e=i.rounding:y(e,0,8),r=g(o=j(new i(o),t,e)),n=P(o,t<=r||r<=i.toExpNeg,t)),n},d.toSignificantDigits=d.tosd=function(t,e){var r=this.constructor;return void 0===t?(t=r.precision,e=r.rounding):(y(t,1,1e9),void 0===e?e=r.rounding:y(e,0,8)),j(new r(this),t,e)},d.toString=d.valueOf=d.val=d.toJSON=function(){var t=g(this),e=this.constructor;return P(this,t<=e.toExpNeg||t>=e.toExpPos)};var m=function(){function t(t,e){var r,n=0,o=t.length;for(t=t.slice();o--;)r=t[o]*e+n,t[o]=r%1e7|0,n=r/1e7|0;return n&&t.unshift(n),t}function e(t,e,r,n){var o,i;if(r!=n)i=r>n?1:-1;else for(o=i=0;oe[o]?1:-1;break}return i}function r(t,e,r){for(var n=0;r--;)t[r]-=n,n=+(t[r]1;)t.shift()}return function(n,o,i,u){var l,c,s,f,p,d,h,y,v,m,b,x,w,O,S,E,P,A,k=n.constructor,M=n.s==o.s?1:-1,T=n.d,_=o.d;if(!n.s)return new k(n);if(!o.s)throw Error(a+"Division by zero");for(s=0,c=n.e-o.e,P=_.length,S=T.length,y=(h=new k(M)).d=[];_[s]==(T[s]||0);)++s;if(_[s]>(T[s]||0)&&--c,(x=null==i?i=k.precision:u?i+(g(n)-g(o))+1:i)<0)return new k(0);if(x=x/7+2|0,s=0,1==P)for(f=0,_=_[0],x++;(s1&&(_=t(_,f),T=t(T,f),P=_.length,S=T.length),O=P,m=(v=T.slice(0,P)).length;m=1e7/2&&++E;do f=0,(l=e(_,v,P,m))<0?(b=v[0],P!=m&&(b=1e7*b+(v[1]||0)),(f=b/E|0)>1?(f>=1e7&&(f=1e7-1),d=(p=t(_,f)).length,m=v.length,1==(l=e(p,v,d,m))&&(f--,r(p,P16)throw Error(l+g(t));if(!t.s)return new d(n);for(null==e?(i=!1,c=h):c=e,u=new d(.03125);t.abs().gte(.1);)t=t.times(u),p+=5;for(c+=Math.log(s(2,p))/Math.LN10*2+5|0,r=o=a=new d(n),d.precision=c;;){if(o=j(o.times(t),c),r=r.times(++f),v((u=a.plus(m(o,r,c))).d).slice(0,c)===v(a.d).slice(0,c)){for(;p--;)a=j(a.times(a),c);return d.precision=h,null==e?(i=!0,j(a,h)):a}a=u}}function g(t){for(var e=7*t.e,r=t.d[0];r>=10;r/=10)e++;return e}function x(t,e,r){if(e>t.LN10.sd())throw i=!0,r&&(t.precision=r),Error(a+"LN10 precision limit exceeded");return j(new t(t.LN10),e)}function w(t){for(var e="";t--;)e+="0";return e}function O(t,e){var r,o,u,l,c,s,f,p,d,h=1,y=t,b=y.d,w=y.constructor,S=w.precision;if(y.s<1)throw Error(a+(y.s?"NaN":"-Infinity"));if(y.eq(n))return new w(0);if(null==e?(i=!1,p=S):p=e,y.eq(10))return null==e&&(i=!0),x(w,p);if(w.precision=p+=10,o=(r=v(b)).charAt(0),!(15e14>Math.abs(l=g(y))))return f=x(w,p+2,S).times(l+""),y=O(new w(o+"."+r.slice(1)),p-10).plus(f),w.precision=S,null==e?(i=!0,j(y,S)):y;for(;o<7&&1!=o||1==o&&r.charAt(1)>3;)o=(r=v((y=y.times(t)).d)).charAt(0),h++;for(l=g(y),o>1?(y=new w("0."+r),l++):y=new w(o+"."+r.slice(1)),s=c=y=m(y.minus(n),y.plus(n),p),d=j(y.times(y),p),u=3;;){if(c=j(c.times(d),p),v((f=s.plus(m(c,new w(u),p))).d).slice(0,p)===v(s.d).slice(0,p))return s=s.times(2),0!==l&&(s=s.plus(x(w,p+2,S).times(l+""))),s=m(s,new w(h),p),w.precision=S,null==e?(i=!0,j(s,S)):s;s=f,u+=2}}function S(t,e){var r,n,o;for((r=e.indexOf("."))>-1&&(e=e.replace(".","")),(n=e.search(/e/i))>0?(r<0&&(r=n),r+=+e.slice(n+1),e=e.substring(0,n)):r<0&&(r=e.length),n=0;48===e.charCodeAt(n);)++n;for(o=e.length;48===e.charCodeAt(o-1);)--o;if(e=e.slice(n,o)){if(o-=n,t.e=c((r=r-n-1)/7),t.d=[],n=(r+1)%7,r<0&&(n+=7),np||t.e<-p))throw Error(l+r)}else t.s=0,t.e=0,t.d=[0];return t}function j(t,e,r){var n,o,a,u,f,d,h,y,v=t.d;for(u=1,a=v[0];a>=10;a/=10)u++;if((n=e-u)<0)n+=7,o=e,h=v[y=0];else{if((y=Math.ceil((n+1)/7))>=(a=v.length))return t;for(u=1,h=a=v[y];a>=10;a/=10)u++;n%=7,o=n-7+u}if(void 0!==r&&(f=h/(a=s(10,u-o-1))%10|0,d=e<0||void 0!==v[y+1]||h%a,d=r<4?(f||d)&&(0==r||r==(t.s<0?3:2)):f>5||5==f&&(4==r||d||6==r&&(n>0?o>0?h/s(10,u-o):0:v[y-1])%10&1||r==(t.s<0?8:7))),e<1||!v[0])return d?(a=g(t),v.length=1,e=e-a-1,v[0]=s(10,(7-e%7)%7),t.e=c(-e/7)||0):(v.length=1,v[0]=t.e=t.s=0),t;if(0==n?(v.length=y,a=1,y--):(v.length=y+1,a=s(10,7-n),v[y]=o>0?(h/s(10,u-o)%s(10,o)|0)*a:0),d)for(;;)if(0==y){1e7==(v[0]+=a)&&(v[0]=1,++t.e);break}else{if(v[y]+=a,1e7!=v[y])break;v[y--]=0,a=1}for(n=v.length;0===v[--n];)v.pop();if(i&&(t.e>p||t.e<-p))throw Error(l+g(t));return t}function E(t,e){var r,n,o,a,u,l,c,s,f,p,d=t.constructor,h=d.precision;if(!t.s||!e.s)return e.s?e.s=-e.s:e=new d(t),i?j(e,h):e;if(c=t.d,p=e.d,n=e.e,s=t.e,c=c.slice(),u=s-n){for((f=u<0)?(r=c,u=-u,l=p.length):(r=p,n=s,l=c.length),u>(o=Math.max(Math.ceil(h/7),l)+2)&&(u=o,r.length=1),r.reverse(),o=u;o--;)r.push(0);r.reverse()}else{for((f=(o=c.length)<(l=p.length))&&(l=o),o=0;o0;--o)c[l++]=0;for(o=p.length;o>u;){if(c[--o]0?i=i.charAt(0)+"."+i.slice(1)+w(n):a>1&&(i=i.charAt(0)+"."+i.slice(1)),i=i+(o<0?"e":"e+")+o):o<0?(i="0."+w(-o-1)+i,r&&(n=r-a)>0&&(i+=w(n))):o>=a?(i+=w(o+1-a),r&&(n=r-o-1)>0&&(i=i+"."+w(n))):((n=o+1)0&&(o+1===a&&(i+="."),i+=w(n))),t.s<0?"-"+i:i}function A(t,e){if(t.length>e)return t.length=e,!0}function k(t){if(!t||"object"!=typeof t)throw Error(a+"Object expected");var e,r,n,o=["precision",1,1e9,"rounding",0,8,"toExpNeg",-1/0,0,"toExpPos",0,1/0];for(e=0;e=o[e+1]&&n<=o[e+2])this[r]=n;else throw Error(u+r+": "+n);if(void 0!==(n=t[r="LN10"]))if(n==Math.LN10)this[r]=new this(n);else throw Error(u+r+": "+n);return this}if((o=function t(e){var r,n,o;function i(t){if(!(this instanceof i))return new i(t);if(this.constructor=i,t instanceof i){this.s=t.s,this.e=t.e,this.d=(t=t.d)?t.slice():t;return}if("number"==typeof t){if(0*t!=0)throw Error(u+t);if(t>0)this.s=1;else if(t<0)t=-t,this.s=-1;else{this.s=0,this.e=0,this.d=[0];return}if(t===~~t&&t<1e7){this.e=0,this.d=[t];return}return S(this,t.toString())}if("string"!=typeof t)throw Error(u+t);if(45===t.charCodeAt(0)?(t=t.slice(1),this.s=-1):this.s=1,f.test(t))S(this,t);else throw Error(u+t)}if(i.prototype=d,i.ROUND_UP=0,i.ROUND_DOWN=1,i.ROUND_CEIL=2,i.ROUND_FLOOR=3,i.ROUND_HALF_UP=4,i.ROUND_HALF_DOWN=5,i.ROUND_HALF_EVEN=6,i.ROUND_HALF_CEIL=7,i.ROUND_HALF_FLOOR=8,i.clone=t,i.config=i.set=k,void 0===e&&(e={}),e)for(r=0,o=["precision","rounding","toExpNeg","toExpPos","LN10"];rtypeof self&&self&&self.self==self?self:Function("return this")()),r.Decimal=o)}(t.e)},674548,(t,e,r)=>{var n=t.r(524251);e.exports=function(t,e,r){"__proto__"==e&&n?n(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}},460793,(t,e,r)=>{var n=t.r(674548),o=t.r(163799),i=t.r(666305);e.exports=function(t,e){var r={};return e=i(e,3),o(t,function(t,o,i){n(r,o,e(t,o,i))}),r}},838199,(t,e,r)=>{e.exports=function(t,e){for(var r=-1,n=null==t?0:t.length;++r{var n=t.r(453587);e.exports=function(t,e){var r=!0;return n(t,function(t,n,o){return r=!!e(t,n,o)}),r}},126063,(t,e,r)=>{var n=t.r(838199),o=t.r(708088),i=t.r(666305),a=t.r(45350),u=t.r(170237);e.exports=function(t,e,r){var l=a(t)?n:o;return r&&u(t,e,r)&&(e=void 0),l(t,i(e,3))}},4879,(t,e,r)=>{e.exports=function(t){var e=null==t?0:t.length;return e?t[e-1]:void 0}},962413,(t,e,r)=>{e.exports=t.r(825717)(Object.getPrototypeOf,Object)},101320,(t,e,r)=>{var n=t.r(377684),o=t.r(962413),i=t.r(877289),a=Object.prototype,u=Function.prototype.toString,l=a.hasOwnProperty,c=u.call(Object);e.exports=function(t){if(!i(t)||"[object Object]"!=n(t))return!1;var e=o(t);if(null===e)return!0;var r=l.call(e,"constructor")&&e.constructor;return"function"==typeof r&&r instanceof r&&u.call(r)==c}},20164,(t,e,r)=>{var n=t.r(377684),o=t.r(877289);e.exports=function(t){return!0===t||!1===t||o(t)&&"[object Boolean]"==n(t)}},649379,(t,e,r)=>{var n=t.r(453587);e.exports=function(t,e){var r;return n(t,function(t,n,o){return!(r=e(t,n,o))}),!!r}},788099,(t,e,r)=>{var n=t.r(851477),o=t.r(666305),i=t.r(649379),a=t.r(45350),u=t.r(170237);e.exports=function(t,e,r){var l=a(t)?n:i;return r&&u(t,e,r)&&(e=void 0),l(t,o(e,3))}},195200,(t,e,r)=>{var n=t.r(666305),o=t.r(351095),i=t.r(33679);e.exports=function(t){return function(e,r,a){var u=Object(e);if(!o(e)){var l=n(r,3);e=i(e),r=function(t){return l(u[t],t,u)}}var c=t(e,r,a);return c>-1?u[l?e[c]:c]:void 0}}},304653,(t,e,r)=>{var n=t.r(382560);e.exports=function(t){var e=n(t),r=e%1;return e==e?r?e-r:e:0}},426965,(t,e,r)=>{var n=t.r(356445),o=t.r(666305),i=t.r(304653),a=Math.max;e.exports=function(t,e,r){var u=null==t?0:t.length;if(!u)return -1;var l=null==r?0:i(r);return l<0&&(l=a(u+l,0)),n(t,o(e,3),l)}},160191,(t,e,r)=>{e.exports=t.r(195200)(t.r(426965))},478492,(t,e,r)=>{"use strict";var n=Object.prototype.hasOwnProperty,o="~";function i(){}function a(t,e,r){this.fn=t,this.context=e,this.once=r||!1}function u(t,e,r,n,i){if("function"!=typeof r)throw TypeError("The listener must be a function");var u=new a(r,n||t,i),l=o?o+e:e;return t._events[l]?t._events[l].fn?t._events[l]=[t._events[l],u]:t._events[l].push(u):(t._events[l]=u,t._eventsCount++),t}function l(t,e){0==--t._eventsCount?t._events=new i:delete t._events[e]}function c(){this._events=new i,this._eventsCount=0}Object.create&&(i.prototype=Object.create(null),new i().__proto__||(o=!1)),c.prototype.eventNames=function(){var t,e,r=[];if(0===this._eventsCount)return r;for(e in t=this._events)n.call(t,e)&&r.push(o?e.slice(1):e);return Object.getOwnPropertySymbols?r.concat(Object.getOwnPropertySymbols(t)):r},c.prototype.listeners=function(t){var e=o?o+t:t,r=this._events[e];if(!r)return[];if(r.fn)return[r.fn];for(var n=0,i=r.length,a=Array(i);n{"use strict";var e,r,n,o,i,a,u,l,c,s=t.i(290571),f=t.i(480731),p=t.i(95779),d=t.i(444755),h=t.i(673706),y=t.i(271645),v=t.i(207670),m=t.i(224283),b=t.i(385845),g=t.i(878948),x=t.i(482820),w=t.i(94241),O=t.i(629873),S=function(t){return 0===t?0:t>0?1:-1},j=function(t){return(0,b.default)(t)&&t.indexOf("%")===t.length-1},E=function(t){return(0,w.default)(t)&&!(0,g.default)(t)},P=function(t){return(0,O.default)(t)},A=function(t){return E(t)||(0,b.default)(t)},k=0,M=function(t){var e=++k;return"".concat(t||"").concat(e)},T=function(t,e){var r,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(!E(t)&&!(0,b.default)(t))return n;if(j(t)){var i=t.indexOf("%");r=e*parseFloat(t.slice(0,i))/100}else r=+t;return(0,g.default)(r)&&(r=n),o&&r>e&&(r=e),r},_=function(t){if(!t)return null;var e=Object.keys(t);return e&&e.length?t[e[0]]:null},C=function(t){if(!Array.isArray(t))return!1;for(var e=t.length,r={},n=0;n2?r-2:0),o=2;o=0)continue;r[n]=t[n]}return r}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(n=0;n=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}function Z(t){return(Z="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var J={click:"onClick",mousedown:"onMouseDown",mouseup:"onMouseUp",mouseover:"onMouseOver",mousemove:"onMouseMove",mouseout:"onMouseOut",mouseenter:"onMouseEnter",mouseleave:"onMouseLeave",touchcancel:"onTouchCancel",touchend:"onTouchEnd",touchmove:"onTouchMove",touchstart:"onTouchStart",contextmenu:"onContextMenu",dblclick:"onDoubleClick"},Q=function(t){return"string"==typeof t?t:t?t.displayName||t.name||"Component":""},tt=null,te=null,tr=function t(e){if(e===tt&&Array.isArray(te))return te;var r=[];return y.Children.forEach(e,function(e){(0,O.default)(e)||((0,z.isFragment)(e)?r=r.concat(t(e.props.children)):r.push(e))}),te=r,tt=e,r};function tn(t,e){var r=[],n=[];return n=Array.isArray(e)?e.map(function(t){return Q(t)}):[Q(e)],tr(t).forEach(function(t){var e=(0,x.default)(t,"type.displayName")||(0,x.default)(t,"type.name");-1!==n.indexOf(e)&&r.push(t)}),r}function to(t,e){var r=tn(t,e);return r&&r[0]}var ti=function(t){if(!t||!t.props)return!1;var e=t.props,r=e.width,n=e.height;return!!E(r)&&!(r<=0)&&!!E(n)&&!(n<=0)},ta=["a","altGlyph","altGlyphDef","altGlyphItem","animate","animateColor","animateMotion","animateTransform","circle","clipPath","color-profile","cursor","defs","desc","ellipse","feBlend","feColormatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","filter","font","font-face","font-face-format","font-face-name","font-face-url","foreignObject","g","glyph","glyphRef","hkern","image","line","lineGradient","marker","mask","metadata","missing-glyph","mpath","path","pattern","polygon","polyline","radialGradient","rect","script","set","stop","style","svg","switch","symbol","text","textPath","title","tref","tspan","use","view","vkern"],tu=function(t,e,r,n){var o,i=null!=(o=null==q?void 0:q[n])?o:[];return e.startsWith("data-")||!(0,L.default)(t)&&(n&&i.includes(e)||$.includes(e))||r&&V.includes(e)},tl=function(t,e,r){if(!t||"function"==typeof t||"boolean"==typeof t)return null;var n=t;if((0,y.isValidElement)(t)&&(n=t.props),!(0,R.default)(n))return null;var o={};return Object.keys(n).forEach(function(t){var i;tu(null==(i=n)?void 0:i[t],t,e,r)&&(o[t]=n[t])}),o},tc=function t(e,r){if(e===r)return!0;var n=y.Children.count(e);if(n!==y.Children.count(r))return!1;if(0===n)return!0;if(1===n)return ts(Array.isArray(e)?e[0]:e,Array.isArray(r)?r[0]:r);for(var o=0;o=0)r.push(t);else if(t){var i=Q(t.type),a=e[i]||{},u=a.handler,l=a.once;if(u&&(!l||!n[i])){var c=u(t,i,o);r.push(c),n[i]=!0}}}),r},tp=function(t){var e=t&&t.type;return e&&J[e]?J[e]:null},td=function(t,e){return tr(e).indexOf(t)};function th(t){return(th="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function ty(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function tv(t){for(var e=1;et.length)&&(e=t.length);for(var r=0,n=Array(e);rtypeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=e){var r,n,o,i,a=[],u=!0,l=!1;try{o=(e=e.call(t)).next,!1;for(;!(u=(r=o.call(e)).done)&&(a.push(r.value),2!==a.length);u=!0);}catch(t){l=!0,n=t}finally{try{if(!u&&null!=e.return&&(i=e.return(),Object(i)!==i))return}finally{if(l)throw n}}return a}}(r)||function(t){if(t){if("string"==typeof t)return tm(t,2);var e=Object.prototype.toString.call(t).slice(8,-1);if("Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e)return Array.from(t);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return tm(t,2)}}(r)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),k=A[0],M=A[1],T=(0,y.useCallback)(function(t,e){M(function(r){var n=Math.round(t),o=Math.round(e);return r.containerWidth===n&&r.containerHeight===o?r:{containerWidth:n,containerHeight:o}})},[]);(0,y.useEffect)(function(){var t=function(t){var e,r=t[0].contentRect,n=r.width,o=r.height;T(n,o),null==(e=P.current)||e.call(P,n,o)};g>0&&(t=(0,m.default)(t,g,{trailing:!0,leading:!1}));var e=new ResizeObserver(t),r=E.current.getBoundingClientRect();return T(r.width,r.height),e.observe(E.current),function(){e.disconnect()}},[T,g]);var _=(0,y.useMemo)(function(){var t=k.containerWidth,e=k.containerHeight;if(t<0||e<0)return null;B(j(u)||j(c),"The width(%s) and height(%s) are both fixed numbers,\n maybe you don't need to use a ResponsiveContainer.",u,c),B(!n||n>0,"The aspect(%s) must be greater than zero.",n);var r=j(u)?t:u,o=j(c)?e:c;n&&n>0&&(r?o=r/n:o&&(r=o*n),d&&o>d&&(o=d)),B(r>0||o>0,"The width(%s) and height(%s) of chart should be greater than 0,\n please check the style of container, or the props width(%s) and height(%s),\n or add a minWidth(%s) or minHeight(%s) or use aspect(%s) to control the\n height and width.",r,o,u,c,f,p,n);var i=!Array.isArray(h)&&Q(h.type).endsWith("Chart");return y.default.Children.map(h,function(t){return y.default.isValidElement(t)?(0,y.cloneElement)(t,tv({width:r,height:o},i?{style:tv({height:"100%",width:"100%",maxHeight:o,maxWidth:r},t.props.style)}:{})):t})},[n,h,c,d,p,f,k,u]);return y.default.createElement("div",{id:x?"".concat(x):void 0,className:(0,v.default)("recharts-responsive-container",w),style:tv(tv({},void 0===S?{}:S),{},{width:u,height:c,minWidth:f,minHeight:p,maxHeight:d}),ref:E},_)});t.s(["ResponsiveContainer",0,tb],731195);var tg=t.i(144950),tx=t.i(831195);function tw(t,e){if(!t)throw Error("Invariant failed")}var tO=["children","width","height","viewBox","className","style","title","desc"];function tS(){return(tS=Object.assign.bind()).apply(this,arguments)}function tj(t){var e=t.children,r=t.width,n=t.height,o=t.viewBox,i=t.className,a=t.style,u=t.title,l=t.desc,c=function(t,e){if(null==t)return{};var r,n,o=function(t,e){if(null==t)return{};var r={};for(var n in t)if(Object.prototype.hasOwnProperty.call(t,n)){if(e.indexOf(n)>=0)continue;r[n]=t[n]}return r}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(n=0;n=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}(t,tO),s=o||{width:r,height:n,x:0,y:0},f=(0,v.default)("recharts-surface",i);return y.default.createElement("svg",tS({},tl(c,!0,"svg"),{className:f,width:r,height:n,style:a,viewBox:"".concat(s.x," ").concat(s.y," ").concat(s.width," ").concat(s.height)}),y.default.createElement("title",null,u),y.default.createElement("desc",null,l),e)}var tE=["children","className"];function tP(){return(tP=Object.assign.bind()).apply(this,arguments)}var tA=y.default.forwardRef(function(t,e){var r=t.children,n=t.className,o=function(t,e){if(null==t)return{};var r,n,o=function(t,e){if(null==t)return{};var r={};for(var n in t)if(Object.prototype.hasOwnProperty.call(t,n)){if(e.indexOf(n)>=0)continue;r[n]=t[n]}return r}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(n=0;n=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}(t,tE),i=(0,v.default)("recharts-layer",n);return y.default.createElement("g",tP({className:i},tl(o,!0),{ref:e}),r)});function tk(t){return(tk="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function tM(){return(tM=Object.assign.bind()).apply(this,arguments)}function tT(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);rtypeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=e){var r,n,o,i,a=[],u=!0,l=!1;try{o=(e=e.call(t)).next,!1;for(;!(u=(r=o.call(e)).done)&&(a.push(r.value),2!==a.length);u=!0);}catch(t){l=!0,n=t}finally{try{if(!u&&null!=e.return&&(i=e.return(),Object(i)!==i))return}finally{if(l)throw n}}return a}}(p)||function(t){if(t){if("string"==typeof t)return tT(t,2);var e=Object.prototype.toString.call(t).slice(8,-1);if("Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e)return Array.from(t);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return tT(t,2)}}(p)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}();s=d[0],f=d[1]}else s=p}return y.default.createElement("li",{className:"recharts-tooltip-item",key:"tooltip-item-".concat(e),style:n},A(f)?y.default.createElement("span",{className:"recharts-tooltip-item-name"},f):null,A(f)?y.default.createElement("span",{className:"recharts-tooltip-item-separator"},r):null,y.default.createElement("span",{className:"recharts-tooltip-item-value"},s),y.default.createElement("span",{className:"recharts-tooltip-item-unit"},t.unit||""))});return y.default.createElement("ul",{className:"recharts-tooltip-item-list",style:{padding:0,margin:0}},t)}return null}())};function tN(t){return(tN="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function tB(t,e,r){var n;return(n=function(t,e){if("object"!=tN(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=tN(n))return n;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(e,"string"),(e="symbol"==tN(n)?n:n+"")in t)?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var tL="recharts-tooltip-wrapper",tR={visibility:"hidden"};function tz(t){var e=t.allowEscapeViewBox,r=t.coordinate,n=t.key,o=t.offsetTopLeft,i=t.position,a=t.reverseDirection,u=t.tooltipDimension,l=t.viewBox,c=t.viewBoxDimension;if(i&&E(i[n]))return i[n];var s=r[n]-u-o,f=r[n]+o;return e[n]?a[n]?s:f:a[n]?sl[n]+c?Math.max(s,l[n]):Math.max(f,l[n])}function tU(t){return(tU="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function tF(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function t$(t){for(var e=1;e1||Math.abs(t.height-this.state.lastBoundingBox.height)>1)&&this.setState({lastBoundingBox:{width:t.width,height:t.height}})}else(-1!==this.state.lastBoundingBox.width||-1!==this.state.lastBoundingBox.height)&&this.setState({lastBoundingBox:{width:-1,height:-1}})}},{key:"componentDidMount",value:function(){document.addEventListener("keydown",this.handleKeyDown),this.updateBBox()}},{key:"componentWillUnmount",value:function(){document.removeEventListener("keydown",this.handleKeyDown)}},{key:"componentDidUpdate",value:function(){var t,e;this.props.active&&this.updateBBox(),this.state.dismissed&&((null==(t=this.props.coordinate)?void 0:t.x)!==this.state.dismissedAtCoordinate.x||(null==(e=this.props.coordinate)?void 0:e.y)!==this.state.dismissedAtCoordinate.y)&&(this.state.dismissed=!1)}},{key:"render",value:function(){var t,e,r,n,o,i,a,u,l,c,s,f,p,d,h,m,b,g,x,w=this,O=this.props,S=O.active,j=O.allowEscapeViewBox,P=O.animationDuration,A=O.animationEasing,k=O.children,M=O.coordinate,T=O.hasPayload,_=O.isAnimationActive,C=O.offset,D=O.position,I=O.reverseDirection,N=O.useTranslate3d,B=O.viewBox,L=O.wrapperStyle,R=(f=(t={allowEscapeViewBox:j,coordinate:M,offsetTopLeft:C,position:D,reverseDirection:I,tooltipBox:this.state.lastBoundingBox,useTranslate3d:N,viewBox:B}).allowEscapeViewBox,p=t.coordinate,d=t.offsetTopLeft,h=t.position,m=t.reverseDirection,b=t.tooltipBox,g=t.useTranslate3d,x=t.viewBox,b.height>0&&b.width>0&&p?(r=(e={translateX:c=tz({allowEscapeViewBox:f,coordinate:p,key:"x",offsetTopLeft:d,position:h,reverseDirection:m,tooltipDimension:b.width,viewBox:x,viewBoxDimension:x.width}),translateY:s=tz({allowEscapeViewBox:f,coordinate:p,key:"y",offsetTopLeft:d,position:h,reverseDirection:m,tooltipDimension:b.height,viewBox:x,viewBoxDimension:x.height}),useTranslate3d:g}).translateX,n=e.translateY,l={transform:e.useTranslate3d?"translate3d(".concat(r,"px, ").concat(n,"px, 0)"):"translate(".concat(r,"px, ").concat(n,"px)")}):l=tR,{cssProperties:l,cssClasses:(i=(o={translateX:c,translateY:s,coordinate:p}).coordinate,a=o.translateX,u=o.translateY,(0,v.default)(tL,tB(tB(tB(tB({},"".concat(tL,"-right"),E(a)&&i&&E(i.x)&&a>=i.x),"".concat(tL,"-left"),E(a)&&i&&E(i.x)&&a=i.y),"".concat(tL,"-top"),E(u)&&i&&E(i.y)&&utypeof window&&window.document&&window.document.createElement&&window.setTimeout),get:function(t){return tY[t]},set:function(t,e){if("string"==typeof t)tY[t]=e;else{var r=Object.keys(t);r&&r.length&&r.forEach(function(e){tY[e]=t[e]})}}};t.s(["Global",0,tY],562728);var tK=t.i(774010);function tZ(t,e,r){return!0===e?(0,tK.default)(t,r):(0,L.default)(e)?(0,tK.default)(t,e):t}function tJ(t){return(tJ="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function tQ(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function t0(t){for(var e=1;e0;return y.default.createElement(tH,{allowEscapeViewBox:o,animationDuration:i,animationEasing:a,isAnimationActive:s,active:n,coordinate:l,hasPayload:w,offset:f,position:h,reverseDirection:v,useTranslate3d:m,viewBox:b,wrapperStyle:g},(t=t0(t0({},this.props),{},{payload:x}),y.default.isValidElement(u)?y.default.cloneElement(u,t):"function"==typeof u?y.default.createElement(u,t):y.default.createElement(tI,t)))}}],function(t,e){for(var r=0;r=0))throw Error(`invalid digits: ${t}`);if(e>15)return en;let r=10**e;return function(t){this._+=t[0];for(let e=1,n=t.length;e1e-6)if(Math.abs(s*u-l*c)>1e-6&&o){let p=r-i,d=n-a,h=u*u+l*l,y=Math.sqrt(h),v=Math.sqrt(f),m=o*Math.tan((et-Math.acos((h+f-(p*p+d*d))/(2*y*v)))/2),b=m/v,g=m/y;Math.abs(b-1)>1e-6&&this._append`L${t+b*c},${e+b*s}`,this._append`A${o},${o},0,0,${+(s*p>c*d)},${this._x1=t+g*u},${this._y1=e+g*l}`}else this._append`L${this._x1=t},${this._y1=e}`}arc(t,e,r,n,o,i){if(t*=1,e*=1,r*=1,i=!!i,r<0)throw Error(`negative radius: ${r}`);let a=r*Math.cos(n),u=r*Math.sin(n),l=t+a,c=e+u,s=1^i,f=i?n-o:o-n;null===this._x1?this._append`M${l},${c}`:(Math.abs(this._x1-l)>1e-6||Math.abs(this._y1-c)>1e-6)&&this._append`L${l},${c}`,r&&(f<0&&(f=f%ee+ee),f>er?this._append`A${r},${r},0,1,${s},${t-a},${e-u}A${r},${r},0,1,${s},${this._x1=l},${this._y1=c}`:f>1e-6&&this._append`A${r},${r},0,${+(f>=et)},${s},${this._x1=t+r*Math.cos(o)},${this._y1=e+r*Math.sin(o)}`)}rect(t,e,r,n){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}h${r*=1}v${+n}h${-r}Z`}toString(){return this._}}function ei(t){let e=3;return t.digits=function(r){if(!arguments.length)return e;if(null==r)e=null;else{let t=Math.floor(r);if(!(t>=0))throw RangeError(`invalid digits: ${r}`);e=t}return t},()=>new eo(e)}eo.prototype;let ea=Math.cos,eu=Math.sin,el=Math.sqrt,ec=Math.PI,es=2*ec;el(3);let ef={draw(t,e){let r=el(e/ec);t.moveTo(r,0),t.arc(0,0,r,0,es)}},ep=el(1/3),ed=2*ep,eh=eu(ec/10)/eu(7*ec/10),ey=eu(es/10)*eh,ev=-ea(es/10)*eh,em=el(3);el(3);let eb=el(3)/2,eg=1/el(12),ex=(eg/2+1)*3;function ew(t){return(ew="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var eO=["type","size","sizeType"];function eS(){return(eS=Object.assign.bind()).apply(this,arguments)}function ej(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function eE(t){for(var e=1;e=0)continue;r[n]=t[n]}return r}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(n=0;n=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}(t,eO)),{},{type:n,size:i,sizeType:u}),c=l.className,s=l.cx,f=l.cy,p=tl(l,!0);return s===+s&&f===+f&&i===+i?y.default.createElement("path",eS({},p,{className:(0,v.default)("recharts-symbols",c),transform:"translate(".concat(s,", ").concat(f,")"),d:(e=eP["symbol".concat((0,t4.default)(n))]||ef,(function(t,e){let r=null,n=ei(o);function o(){let o;if(r||(r=o=n()),t.apply(this,arguments).draw(r,+e.apply(this,arguments)),o)return r=null,o+""||null}return t="function"==typeof t?t:t9(t||ef),e="function"==typeof e?e:t9(void 0===e?64:+e),o.type=function(e){return arguments.length?(t="function"==typeof e?e:t9(e),o):t},o.size=function(t){return arguments.length?(e="function"==typeof t?t:t9(+t),o):e},o.context=function(t){return arguments.length?(r=null==t?null:t,o):r},o})().type(e).size(ek(i,u,n))())})):null};function eT(t){return(eT="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function e_(){return(e_=Object.assign.bind()).apply(this,arguments)}function eC(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}eM.registerSymbol=function(t,e){eP["symbol".concat((0,t4.default)(t))]=e};function eD(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(eD=function(){return!!t})()}function eI(t){return(eI=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}function eN(t,e){return(eN=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t})(t,e)}function eB(t,e,r){return(e=eL(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function eL(t){var e=function(t,e){if("object"!=eT(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=eT(n))return n;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==eT(e)?e:e+""}var eR=function(t){var e;function r(){var t,e;if(!(this instanceof r))throw TypeError("Cannot call a class as a function");return t=r,e=arguments,t=eI(t),function(t,e){if(e&&("object"===eT(e)||"function"==typeof e))return e;if(void 0!==e)throw TypeError("Derived constructors may only return object or undefined");var r=t;if(void 0===r)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return r}(this,eD()?Reflect.construct(t,e||[],eI(this).constructor):t.apply(this,e))}if("function"!=typeof t&&null!==t)throw TypeError("Super expression must either be null or a function");return r.prototype=Object.create(t&&t.prototype,{constructor:{value:r,writable:!0,configurable:!0}}),Object.defineProperty(r,"prototype",{writable:!1}),t&&eN(r,t),e=[{key:"renderIcon",value:function(t){var e=this.props.inactiveColor,r=32/6,n=32/3,o=t.inactive?e:t.color;if("plainline"===t.type)return y.default.createElement("line",{strokeWidth:4,fill:"none",stroke:o,strokeDasharray:t.payload.strokeDasharray,x1:0,y1:16,x2:32,y2:16,className:"recharts-legend-icon"});if("line"===t.type)return y.default.createElement("path",{strokeWidth:4,fill:"none",stroke:o,d:"M0,".concat(16,"h").concat(n,"\n A").concat(r,",").concat(r,",0,1,1,").concat(2*n,",").concat(16,"\n H").concat(32,"M").concat(2*n,",").concat(16,"\n A").concat(r,",").concat(r,",0,1,1,").concat(n,",").concat(16),className:"recharts-legend-icon"});if("rect"===t.type)return y.default.createElement("path",{stroke:"none",fill:o,d:"M0,".concat(4,"h").concat(32,"v").concat(24,"h").concat(-32,"z"),className:"recharts-legend-icon"});if(y.default.isValidElement(t.legendIcon)){var i=function(t){for(var e=1;e');var p=e.inactive?a:e.color;return y.default.createElement("li",e_({className:s,style:l,key:"legend-item-".concat(r)},G(t.props,e,r)),y.default.createElement(tj,{width:n,height:n,viewBox:u,style:c},t.renderIcon(e)),y.default.createElement("span",{className:"recharts-legend-item-text",style:{color:p}},o?o(f,e,r):f))})}},{key:"render",value:function(){var t=this.props,e=t.payload,r=t.layout,n=t.align;return e&&e.length?y.default.createElement("ul",{className:"recharts-default-legend",style:{padding:0,margin:0,textAlign:"horizontal"===r?n:"left"}},this.renderItems()):null}}],function(t,e){for(var r=0;r1||Math.abs(e.height-this.lastBoundingBox.height)>1)&&(this.lastBoundingBox.width=e.width,this.lastBoundingBox.height=e.height,t&&t(e)):(-1!==this.lastBoundingBox.width||-1!==this.lastBoundingBox.height)&&(this.lastBoundingBox.width=-1,this.lastBoundingBox.height=-1,t&&t(null))}},{key:"getBBoxSnapshot",value:function(){return this.lastBoundingBox.width>=0&&this.lastBoundingBox.height>=0?e$({},this.lastBoundingBox):{width:0,height:0}}},{key:"getDefaultPosition",value:function(t){var e,r,n=this.props,o=n.layout,i=n.align,a=n.verticalAlign,u=n.margin,l=n.chartWidth,c=n.chartHeight;return t&&(void 0!==t.left&&null!==t.left||void 0!==t.right&&null!==t.right)||(e="center"===i&&"vertical"===o?{left:((l||0)-this.getBBoxSnapshot().width)/2}:"right"===i?{right:u&&u.right||0}:{left:u&&u.left||0}),t&&(void 0!==t.top&&null!==t.top||void 0!==t.bottom&&null!==t.bottom)||(r="middle"===a?{top:((c||0)-this.getBBoxSnapshot().height)/2}:"bottom"===a?{bottom:u&&u.bottom||0}:{top:u&&u.top||0}),e$(e$({},e),r)}},{key:"render",value:function(){var t=this,e=this.props,r=e.content,n=e.width,o=e.height,i=e.wrapperStyle,a=e.payloadUniqBy,u=e.payload,l=e$(e$({position:"absolute",width:n||"auto",height:o||"auto"},this.getDefaultPosition(i)),i);return y.default.createElement("div",{className:"recharts-legend-wrapper",style:l,ref:function(e){t.wrapperNode=e}},function(t,e){if(y.default.isValidElement(t))return y.default.cloneElement(t,e);if("function"==typeof t)return y.default.createElement(t,e);e.ref;var r=function(t,e){if(null==t)return{};var r,n,o=function(t,e){if(null==t)return{};var r={};for(var n in t)if(Object.prototype.hasOwnProperty.call(t,n)){if(e.indexOf(n)>=0)continue;r[n]=t[n]}return r}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(n=0;n=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}(e,eU);return y.default.createElement(eR,r)}(r,e$(e$({},this.props),{},{payload:tZ(u,a,eY)})))}}],r=[{key:"getWithHeight",value:function(t,e){var r=e$(e$({},this.defaultProps),t.props).layout;return"vertical"===r&&E(t.props.height)?{height:t.props.height}:"horizontal"===r?{width:t.props.width||e}:null}}],e&&eW(n.prototype,e),r&&eW(n,r),Object.defineProperty(n,"prototype",{writable:!1}),n}(y.PureComponent);function eZ(){return(eZ=Object.assign.bind()).apply(this,arguments)}eG(eK,"displayName","Legend"),eG(eK,"defaultProps",{iconSize:14,layout:"horizontal",align:"center",verticalAlign:"bottom"}),t.s(["Legend",0,eK],559559);var eJ=function(t){var e=t.cx,r=t.cy,n=t.r,o=t.className,i=(0,v.default)("recharts-dot",o);return e===+e&&r===+r&&n===+n?y.createElement("circle",eZ({},tl(t,!1),X(t),{className:i,cx:e,cy:r,r:n})):null};t.s(["Dot",0,eJ],238279);var eQ=t.i(745009);let{getOwnPropertyNames:e0,getOwnPropertySymbols:e1}=Object,{hasOwnProperty:e2}=Object.prototype;function e3(t,e){return function(r,n,o){return t(r,n,o)&&e(r,n,o)}}function e5(t){return function(e,r,n){if(!e||!r||"object"!=typeof e||"object"!=typeof r)return t(e,r,n);let{cache:o}=n,i=o.get(e),a=o.get(r);if(i&&a)return i===r&&a===e;o.set(e,r),o.set(r,e);let u=t(e,r,n);return o.delete(e),o.delete(r),u}}function e8(t){return e0(t).concat(e1(t))}let e6=Object.hasOwn||((t,e)=>e2.call(t,e));function e7(t,e){return t===e||!t&&!e&&t!=t&&e!=e}let{getOwnPropertyDescriptor:e4,keys:e9}=Object;function rt(t,e){return t.byteLength===e.byteLength&&rp(new Uint8Array(t),new Uint8Array(e))}function re(t,e,r){let n=t.length;if(e.length!==n)return!1;for(;n-- >0;)if(!r.equals(t[n],e[n],n,n,t,e,r))return!1;return!0}function rr(t,e){return t.byteLength===e.byteLength&&rp(new Uint8Array(t.buffer,t.byteOffset,t.byteLength),new Uint8Array(e.buffer,e.byteOffset,e.byteLength))}function rn(t,e){return e7(t.getTime(),e.getTime())}function ro(t,e){return t.name===e.name&&t.message===e.message&&t.cause===e.cause&&t.stack===e.stack}function ri(t,e){return t===e}function ra(t,e,r){let n,o,i=t.size;if(i!==e.size)return!1;if(!i)return!0;let a=Array(i),u=t.entries(),l=0;for(;(n=u.next())&&!n.done;){let i=e.entries(),u=!1,c=0;for(;(o=i.next())&&!o.done;){if(a[c]){c++;continue}let i=n.value,s=o.value;if(r.equals(i[0],s[0],l,c,t,e,r)&&r.equals(i[1],s[1],i[0],s[0],t,e,r)){u=a[c]=!0;break}c++}if(!u)return!1;l++}return!0}function ru(t,e,r){let n=e9(t),o=n.length;if(e9(e).length!==o)return!1;for(;o-- >0;)if(!rh(t,e,r,n[o]))return!1;return!0}function rl(t,e,r){let n,o,i,a=e8(t),u=a.length;if(e8(e).length!==u)return!1;for(;u-- >0;)if(!rh(t,e,r,n=a[u])||(o=e4(t,n),i=e4(e,n),(o||i)&&(!o||!i||o.configurable!==i.configurable||o.enumerable!==i.enumerable||o.writable!==i.writable)))return!1;return!0}function rc(t,e){return e7(t.valueOf(),e.valueOf())}function rs(t,e){return t.source===e.source&&t.flags===e.flags}function rf(t,e,r){let n,o,i=t.size;if(i!==e.size)return!1;if(!i)return!0;let a=Array(i),u=t.values();for(;(n=u.next())&&!n.done;){let i=e.values(),u=!1,l=0;for(;(o=i.next())&&!o.done;){if(!a[l]&&r.equals(n.value,o.value,n.value,o.value,t,e,r)){u=a[l]=!0;break}l++}if(!u)return!1}return!0}function rp(t,e){let r=t.byteLength;if(e.byteLength!==r||t.byteOffset!==e.byteOffset)return!1;for(;r-- >0;)if(t[r]!==e[r])return!1;return!0}function rd(t,e){return t.hostname===e.hostname&&t.pathname===e.pathname&&t.protocol===e.protocol&&t.port===e.port&&t.hash===e.hash&&t.username===e.username&&t.password===e.password}function rh(t,e,r,n){return("_owner"===n||"__o"===n||"__v"===n)&&(!!t.$$typeof||!!e.$$typeof)||e6(e,n)&&r.equals(t[n],e[n],n,n,t,e,r)}let ry={"[object Int8Array]":!0,"[object Uint8Array]":!0,"[object Uint8ClampedArray]":!0,"[object Int16Array]":!0,"[object Uint16Array]":!0,"[object Int32Array]":!0,"[object Uint32Array]":!0,"[object Float16Array]":!0,"[object Float32Array]":!0,"[object Float64Array]":!0,"[object BigInt64Array]":!0,"[object BigUint64Array]":!0},rv=Object.prototype.toString,rm=rb();function rb(t={}){let{circular:e=!1,createInternalComparator:r,createState:n,strict:o=!1}=t,i=function({areArrayBuffersEqual:t,areArraysEqual:e,areDataViewsEqual:r,areDatesEqual:n,areErrorsEqual:o,areFunctionsEqual:i,areMapsEqual:a,areNumbersEqual:u,areObjectsEqual:l,arePrimitiveWrappersEqual:c,areRegExpsEqual:s,areSetsEqual:f,areTypedArraysEqual:p,areUrlsEqual:d,unknownTagComparators:h}){return function(y,v,m){if(y===v)return!0;if(null==y||null==v)return!1;let b=typeof y;if(b!==typeof v)return!1;if("object"!==b)return"number"===b?u(y,v,m):"function"===b&&i(y,v,m);let g=y.constructor;if(g!==v.constructor)return!1;if(g===Object)return l(y,v,m);if(Array.isArray(y))return e(y,v,m);if(g===Date)return n(y,v,m);if(g===RegExp)return s(y,v,m);if(g===Map)return a(y,v,m);if(g===Set)return f(y,v,m);let x=rv.call(y);if("[object Date]"===x)return n(y,v,m);if("[object RegExp]"===x)return s(y,v,m);if("[object Map]"===x)return a(y,v,m);if("[object Set]"===x)return f(y,v,m);if("[object Object]"===x)return"function"!=typeof y.then&&"function"!=typeof v.then&&l(y,v,m);if("[object URL]"===x)return d(y,v,m);if("[object Error]"===x)return o(y,v,m);if("[object Arguments]"===x)return l(y,v,m);if(ry[x])return p(y,v,m);if("[object ArrayBuffer]"===x)return t(y,v,m);if("[object DataView]"===x)return r(y,v,m);if("[object Boolean]"===x||"[object Number]"===x||"[object String]"===x)return c(y,v,m);if(h){let t=h[x];if(!t){let e=null!=y?y[Symbol.toStringTag]:void 0;e&&(t=h[e])}if(t)return t(y,v,m)}return!1}}(function({circular:t,createCustomConfig:e,strict:r}){let n={areArrayBuffersEqual:rt,areArraysEqual:r?rl:re,areDataViewsEqual:rr,areDatesEqual:rn,areErrorsEqual:ro,areFunctionsEqual:ri,areMapsEqual:r?e3(ra,rl):ra,areNumbersEqual:e7,areObjectsEqual:r?rl:ru,arePrimitiveWrappersEqual:rc,areRegExpsEqual:rs,areSetsEqual:r?e3(rf,rl):rf,areTypedArraysEqual:r?e3(rp,rl):rp,areUrlsEqual:rd,unknownTagComparators:void 0};if(e&&(n=Object.assign({},n,e(n))),t){let t=e5(n.areArraysEqual),e=e5(n.areMapsEqual),r=e5(n.areObjectsEqual),o=e5(n.areSetsEqual);n=Object.assign({},n,{areArraysEqual:t,areMapsEqual:e,areObjectsEqual:r,areSetsEqual:o})}return n}(t)),a=r?r(i):function(t,e,r,n,o,a,u){return i(t,e,u)};return function({circular:t,comparator:e,createState:r,equals:n,strict:o}){if(r)return function(i,a){let{cache:u=t?new WeakMap:void 0,meta:l}=r();return e(i,a,{cache:u,equals:n,meta:l,strict:o})};if(t)return function(t,r){return e(t,r,{cache:new WeakMap,equals:n,meta:void 0,strict:o})};let i={cache:void 0,equals:n,meta:void 0,strict:o};return function(t,r){return e(t,r,i)}}({circular:e,comparator:i,createState:n,equals:a,strict:o})}function rg(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=-1;requestAnimationFrame(function n(o){if(r<0&&(r=o),o-r>e)t(o),r=-1;else{var i;i=n,"u">typeof requestAnimationFrame&&requestAnimationFrame(i)}})}function rx(t){return(rx="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function rw(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);re7}),rb({strict:!0,createInternalComparator:()=>e7}),rb({circular:!0,createInternalComparator:()=>e7}),rb({circular:!0,createInternalComparator:()=>e7,strict:!0});var rP=function(t){return t},rA=function(t,e){return Object.keys(e).reduce(function(r,n){return rj(rj({},r),{},rE({},n,t(n,e[n])))},{})},rk=function(t,e,r){return t.map(function(t){return"".concat(t.replace(/([A-Z])/g,function(t){return"-".concat(t.toLowerCase())})," ").concat(e,"ms ").concat(r)}).join(",")},rM=function(t,e,r,n,o,i,a,u){};function rT(t,e){if(t){if("string"==typeof t)return r_(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);if("Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r)return Array.from(t);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return r_(t,e)}}function r_(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);rtypeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=e){var r,n,o,i,a=[],u=!0,l=!1;try{o=(e=e.call(t)).next,!1;for(;!(u=(r=o.call(e)).done)&&(a.push(r.value),4!==a.length);u=!0);}catch(t){l=!0,n=t}finally{try{if(!u&&null!=e.return&&(i=e.return(),Object(i)!==i))return}finally{if(l)throw n}}return a}}(s)||rT(s,4)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}();i=f[0],a=f[1],u=f[2],l=f[3]}else rM(!1,"[configBezier]: arguments should be one of oneOf 'linear', 'ease', 'ease-in', 'ease-out', 'ease-in-out','cubic-bezier(x1,y1,x2,y2)', instead received %s",n)}rM([i,u,a,l].every(function(t){return"number"==typeof t&&t>=0&&t<=1}),"[configBezier]: arguments should be x1, y1, x2, y2 of [0, 1] instead received %s",n);var p=rI(i,u),d=rI(a,l),h=(t=i,e=u,function(r){var n;return rD([].concat(function(t){if(Array.isArray(t))return r_(t)}(n=rC(t,e).map(function(t,e){return t*e}).slice(1))||function(t){if("u">typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(n)||rT(n)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),[0]),r)}),y=function(t){for(var e=t>1?1:t,r=e,n=0;n<8;++n){var o,i=p(r)-e,a=h(r);if(1e-4>Math.abs(i-e)||a<1e-4)break;r=(o=r-i/a)>1?1:o<0?0:o}return d(r)};return y.isStepper=!1,y},rB=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.stiff,r=void 0===e?100:e,n=t.damping,o=void 0===n?8:n,i=t.dt,a=void 0===i?17:i,u=function(t,e,n){var i=n+(-(t-e)*r-n*o)*a/1e3,u=n*a/1e3+t;return 1e-4>Math.abs(u-e)&&1e-4>Math.abs(i)?[e,0]:[u,i]};return u.isStepper=!0,u.dt=a,u},rL=function(){for(var t=arguments.length,e=Array(t),r=0;rtypeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||rW(t)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function rU(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function rF(t){for(var e=1;et.length)&&(e=t.length);for(var r=0,n=Array(e);rtypeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=e){var r,n,o,i,a=[],u=!0,l=!1;try{o=(e=e.call(t)).next,!1;for(;!(u=(r=o.call(e)).done)&&(a.push(r.value),2!==a.length);u=!0);}catch(t){l=!0,n=t}finally{try{if(!u&&null!=e.return&&(i=e.return(),Object(i)!==i))return}finally{if(l)throw n}}return a}}(n)||rW(n,2)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),i=o[0],a=o[1];return rF(rF({},r),{},{from:i,velocity:a})}return r},r);return n<1?rA(function(t,e){return rX(e)?rF(rF({},e),{},{velocity:rV(e.velocity,o[t].velocity,n),from:rV(e.from,o[t].from,n)}):e},r):t(e,o,n-1)};let rH=function(t,e,r,n,o){var i,a,u=[Object.keys(t),Object.keys(e)].reduce(function(t,e){return t.filter(function(t){return e.includes(t)})}),l=u.reduce(function(r,n){return rF(rF({},r),{},r$({},n,[t[n],e[n]]))},{}),c=u.reduce(function(r,n){return rF(rF({},r),{},r$({},n,{from:t[n],velocity:0,to:e[n]}))},{}),s=-1,f=function(){return null};return f=r.isStepper?function(n){i||(i=n);var a=(n-i)/r.dt;c=rG(r,c,a),o(rF(rF(rF({},t),e),rA(function(t,e){return e.from},c))),i=n,Object.values(c).filter(rX).length&&(s=requestAnimationFrame(f))}:function(i){a||(a=i);var u=(i-a)/n,c=rA(function(t,e){return rV.apply(void 0,rz(e).concat([r(u)]))},l);if(o(rF(rF(rF({},t),e),c)),u<1)s=requestAnimationFrame(f);else{var p=rA(function(t,e){return rV.apply(void 0,rz(e).concat([r(1)]))},l);o(rF(rF(rF({},t),e),p))}},function(){return requestAnimationFrame(f),function(){cancelAnimationFrame(s)}}};function rY(t){return(rY="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var rK=["children","begin","duration","attributeName","easing","isActive","steps","from","to","canBegin","onAnimationEnd","shouldReAnimate","onAnimationReStart"];function rZ(t){return function(t){if(Array.isArray(t))return rJ(t)}(t)||function(t){if("u">typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t){if(t){if("string"==typeof t)return rJ(t,void 0);var e=Object.prototype.toString.call(t).slice(8,-1);if("Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e)return Array.from(t);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return rJ(t,void 0)}}(t)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function rJ(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r0?r[o-1]:n,p=c||Object.keys(l);if("function"==typeof u||"spring"===u)return[].concat(rZ(t),[e.runJSAnimation.bind(e,{from:f.style,to:l,duration:i,easing:u}),i]);var d=rk(p,i,u),h=r0(r0(r0({},f.style),l),{},{transition:d});return[].concat(rZ(t),[h,i,s]).filter(rP)},[a,Math.max(void 0===u?0:u,n)])),[t.onAnimationEnd]))}},{key:"runAnimation",value:function(t){this.manager||(this.manager=(e=function(){return null},r=!1,n=function t(n){if(!r){if(Array.isArray(n)){if(!n.length)return;var o=function(t){if(Array.isArray(t))return t}(n)||function(t){if("u">typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(n)||function(t){if(t){if("string"==typeof t)return rw(t,void 0);var e=Object.prototype.toString.call(t).slice(8,-1);if("Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e)return Array.from(t);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return rw(t,void 0)}}(n)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),i=o[0],a=o.slice(1);return"number"==typeof i?void rg(t.bind(null,a),i):(t(i),void rg(t.bind(null,a)))}"object"===rx(n)&&e(n),"function"==typeof n&&n()}},{stop:function(){r=!0},start:function(t){r=!1,n(t)},subscribe:function(t){return e=t,function(){e=function(){return null}}}}));var e,r,n,o=t.begin,i=t.duration,a=t.attributeName,u=t.to,l=t.easing,c=t.onAnimationStart,s=t.onAnimationEnd,f=t.steps,p=t.children,d=this.manager;if(this.unSubscribe=d.subscribe(this.handleStyleChange),"function"==typeof l||"function"==typeof p||"spring"===l)return void this.runJSAnimation(t);if(f.length>1)return void this.runStepAnimation(t);var h=a?r1({},a,u):u,y=rk(Object.keys(h),i,l);d.start([c,o,r0(r0({},h),{},{transition:y}),i,s])}},{key:"render",value:function(){var t=this.props,e=t.children,r=(t.begin,t.duration),n=(t.attributeName,t.easing,t.isActive),o=(t.steps,t.from,t.to,t.canBegin,t.onAnimationEnd,t.shouldReAnimate,t.onAnimationReStart,function(t,e){if(null==t)return{};var r,n,o=function(t,e){if(null==t)return{};var r,n,o={},i=Object.keys(t);for(n=0;n=0||(o[r]=t[r]);return o}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(n=0;n=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}(t,rK)),i=y.Children.count(e),a=this.state.style;if("function"==typeof e)return e(a);if(!n||0===i||r<=0)return e;var u=function(t){var e=t.props,r=e.style,n=e.className;return(0,y.cloneElement)(t,r0(r0({},o),{},{style:r0(r0({},void 0===r?{}:r),a),className:n}))};return 1===i?u(y.Children.only(e)):y.default.createElement("div",null,y.Children.map(e,function(t){return u(t)}))}}],function(t,e){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{},e=t.steps,r=t.duration;return e&&e.length?e.reduce(function(t,e){return t+(Number.isFinite(e.duration)&&e.duration>0?e.duration:0)},0):Number.isFinite(r)?r:0},nA=function(t){if("function"!=typeof t&&null!==t)throw TypeError("Super expression must either be null or a function");o.prototype=Object.create(t&&t.prototype,{constructor:{value:o,writable:!0,configurable:!0}}),Object.defineProperty(o,"prototype",{writable:!1}),t&&nw(o,t);var e,r,n=(e=function(){if("u"=0||(o[r]=t[r]);return o}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(n=0;n=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}(e,nv));return y.default.createElement(nh,nb({},n,{onEnter:this.handleEnter,onExit:this.handleExit,timeout:this.parseTimeout()}),function(){return y.default.createElement(r7,t.state,y.Children.only(r))})}}],function(t,e){for(var r=0;rt.length)&&(e=t.length);for(var r=0,n=Array(e);r=0?1:-1,l=r>=0?1:-1,c=+(n>=0&&r>=0||n<0&&r<0);if(a>0&&o instanceof Array){for(var s=[0,0,0,0],f=0;f<4;f++)s[f]=o[f]>a?a:o[f];i="M".concat(t,",").concat(e+u*s[0]),s[0]>0&&(i+="A ".concat(s[0],",").concat(s[0],",0,0,").concat(c,",").concat(t+l*s[0],",").concat(e)),i+="L ".concat(t+r-l*s[1],",").concat(e),s[1]>0&&(i+="A ".concat(s[1],",").concat(s[1],",0,0,").concat(c,",\n ").concat(t+r,",").concat(e+u*s[1])),i+="L ".concat(t+r,",").concat(e+n-u*s[2]),s[2]>0&&(i+="A ".concat(s[2],",").concat(s[2],",0,0,").concat(c,",\n ").concat(t+r-l*s[2],",").concat(e+n)),i+="L ".concat(t+l*s[3],",").concat(e+n),s[3]>0&&(i+="A ".concat(s[3],",").concat(s[3],",0,0,").concat(c,",\n ").concat(t,",").concat(e+n-u*s[3])),i+="Z"}else if(a>0&&o===+o&&o>0){var p=Math.min(a,o);i="M ".concat(t,",").concat(e+u*p,"\n A ").concat(p,",").concat(p,",0,0,").concat(c,",").concat(t+l*p,",").concat(e,"\n L ").concat(t+r-l*p,",").concat(e,"\n A ").concat(p,",").concat(p,",0,0,").concat(c,",").concat(t+r,",").concat(e+u*p,"\n L ").concat(t+r,",").concat(e+n-u*p,"\n A ").concat(p,",").concat(p,",0,0,").concat(c,",").concat(t+r-l*p,",").concat(e+n,"\n L ").concat(t+l*p,",").concat(e+n,"\n A ").concat(p,",").concat(p,",0,0,").concat(c,",").concat(t,",").concat(e+n-u*p," Z")}else i="M ".concat(t,",").concat(e," h ").concat(r," v ").concat(n," h ").concat(-r," Z");return i},nN=function(t,e){if(!t||!e)return!1;var r=t.x,n=t.y,o=e.x,i=e.y,a=e.width,u=e.height;if(Math.abs(a)>0&&Math.abs(u)>0){var l=Math.min(o,o+a),c=Math.max(o,o+a),s=Math.min(i,i+u),f=Math.max(i,i+u);return r>=l&&r<=c&&n>=s&&n<=f}return!1},nB={x:0,y:0,width:0,height:0,radius:0,isAnimationActive:!1,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},nL=function(t){var e,r=nD(nD({},nB),t),n=(0,y.useRef)(),o=function(t){if(Array.isArray(t))return t}(e=(0,y.useState)(-1))||function(t){var e=null==t?null:"u">typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=e){var r,n,o,i,a=[],u=!0,l=!1;try{o=(e=e.call(t)).next,!1;for(;!(u=(r=o.call(e)).done)&&(a.push(r.value),2!==a.length);u=!0);}catch(t){l=!0,n=t}finally{try{if(!u&&null!=e.return&&(i=e.return(),Object(i)!==i))return}finally{if(l)throw n}}return a}}(e)||function(t){if(t){if("string"==typeof t)return n_(t,2);var e=Object.prototype.toString.call(t).slice(8,-1);if("Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e)return Array.from(t);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return n_(t,2)}}(e)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),i=o[0],a=o[1];(0,y.useEffect)(function(){if(n.current&&n.current.getTotalLength)try{var t=n.current.getTotalLength();t&&a(t)}catch(t){}},[]);var u=r.x,l=r.y,c=r.width,s=r.height,f=r.radius,p=r.className,d=r.animationEasing,h=r.animationDuration,m=r.animationBegin,b=r.isAnimationActive,g=r.isUpdateAnimationActive;if(u!==+u||l!==+l||c!==+c||s!==+s||0===c||0===s)return null;var x=(0,v.default)("recharts-rectangle",p);return g?y.default.createElement(r7,{canBegin:i>0,from:{width:c,height:s,x:u,y:l},to:{width:c,height:s,x:u,y:l},duration:h,animationEasing:d,isActive:g},function(t){var e=t.width,o=t.height,a=t.x,u=t.y;return y.default.createElement(r7,{canBegin:i>0,from:"0px ".concat(-1===i?1:i,"px"),to:"".concat(i,"px 0px"),attributeName:"strokeDasharray",begin:m,duration:h,isActive:b,easing:d},y.default.createElement("path",nT({},tl(r,!0),{className:x,d:nI(a,u,e,o,f),ref:n})))}):y.default.createElement("path",nT({},tl(r,!0),{className:x,d:nI(u,l,c,s,f)}))};function nR(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t)}return this}function nz(t,e){switch(arguments.length){case 0:break;case 1:"function"==typeof t?this.interpolator(t):this.range(t);break;default:this.domain(t),"function"==typeof e?this.interpolator(e):this.range(e)}return this}class nU extends Map{constructor(t,e=n$){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:e}}),null!=t)for(const[e,r]of t)this.set(e,r)}get(t){return super.get(nF(this,t))}has(t){return super.has(nF(this,t))}set(t,e){return super.set(function({_intern:t,_key:e},r){let n=e(r);return t.has(n)?t.get(n):(t.set(n,r),r)}(this,t),e)}delete(t){return super.delete(function({_intern:t,_key:e},r){let n=e(r);return t.has(n)&&(r=t.get(n),t.delete(n)),r}(this,t))}}function nF({_intern:t,_key:e},r){let n=e(r);return t.has(n)?t.get(n):r}function n$(t){return null!==t&&"object"==typeof t?t.valueOf():t}let nW=Symbol("implicit");function nq(){var t=new nU,e=[],r=[],n=nW;function o(o){let i=t.get(o);if(void 0===i){if(n!==nW)return n;t.set(o,i=e.push(o)-1)}return r[i%r.length]}return o.domain=function(r){if(!arguments.length)return e.slice();for(let n of(e=[],t=new nU,r))t.has(n)||t.set(n,e.push(n)-1);return o},o.range=function(t){return arguments.length?(r=Array.from(t),o):r.slice()},o.unknown=function(t){return arguments.length?(n=t,o):n},o.copy=function(){return nq(e,r).unknown(n)},nR.apply(o,arguments),o}function nV(){var t,e,r=nq().unknown(void 0),n=r.domain,o=r.range,i=0,a=1,u=!1,l=0,c=0,s=.5;function f(){var r=n().length,f=a1&&void 0!==arguments[1]?arguments[1]:{};if(null==t||tY.isSsr)return{width:0,height:0};var n=(Object.keys(e=nY({},r)).forEach(function(t){e[t]||delete e[t]}),e),o=JSON.stringify({text:t,copyStyle:n});if(nK.widthCache[o])return nK.widthCache[o];try{var i=document.getElementById(nJ);i||((i=document.createElement("span")).setAttribute("id",nJ),i.setAttribute("aria-hidden","true"),document.body.appendChild(i));var a=nY(nY({},nZ),n);Object.assign(i.style,a),i.textContent="".concat(t);var u=i.getBoundingClientRect(),l={width:u.width,height:u.height};return nK.widthCache[o]=l,++nK.cacheCount>2e3&&(nK.cacheCount=0,nK.widthCache={}),l}catch(t){return{width:0,height:0}}};function n0(t){return(n0="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function n1(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"u">typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,o,i,a,u=[],l=!0,c=!1;try{if(i=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=i.call(r)).done)&&(u.push(n.value),u.length!==e);l=!0);}catch(t){c=!0,o=t}finally{try{if(!l&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(c)throw o}}return u}}(t,e)||function(t,e){if(t){if("string"==typeof t)return n2(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);if("Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r)return Array.from(t);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return n2(t,e)}}(t,e)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function n2(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r=0)continue;r[n]=t[n]}return r}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(n=0;n=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}function ol(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"u">typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,o,i,a,u=[],l=!0,c=!1;try{if(i=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=i.call(r)).done)&&(u.push(n.value),u.length!==e);l=!0);}catch(t){c=!0,o=t}finally{try{if(!l&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(c)throw o}}return u}}(t,e)||function(t,e){if(t){if("string"==typeof t)return oc(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);if("Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r)return Array.from(t);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return oc(t,e)}}(t,e)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function oc(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r0&&void 0!==arguments[0]?arguments[0]:[];return t.reduce(function(t,e){var i=e.word,a=e.width,u=t[t.length-1];return u&&(null==n||o||u.width+a+ra||e.reduce(function(t,e){return t.width>e.width?t:e}).width>Number(n),e]},h=0,y=u.length-1,v=0;h<=y&&v<=u.length-1;){var m=Math.floor((h+y)/2),b=ol(d(m-1),2),g=b[0],x=b[1],w=ol(d(m),1)[0];if(g||w||(h=m+1),g&&w&&(y=m-1),!g&&w){i=x;break}v++}return i||p},od=function(t){return[{words:(0,O.default)(t)?[]:t.toString().split(os)}]},oh=function(t){var e=t.width,r=t.scaleToFit,n=t.children,o=t.style,i=t.breakAll,a=t.maxLines;if((e||r)&&!tY.isSsr){var u=of({breakAll:i,children:n,style:o});if(!u)return od(n);var l=u.wordsWithComputedWidth,c=u.spaceWidth;return op({breakAll:i,children:n,maxLines:a,style:o},l,c,e,r)}return od(n)},oy="#808080",ov=function(t){var e,r=t.x,n=void 0===r?0:r,o=t.y,i=void 0===o?0:o,a=t.lineHeight,u=void 0===a?"1em":a,l=t.capHeight,c=void 0===l?"0.71em":l,s=t.scaleToFit,f=void 0!==s&&s,p=t.textAnchor,d=t.verticalAnchor,h=t.fill,m=void 0===h?oy:h,b=ou(t,oo),g=(0,y.useMemo)(function(){return oh({breakAll:b.breakAll,children:b.children,maxLines:b.maxLines,scaleToFit:f,style:b.style,width:b.width})},[b.breakAll,b.children,b.maxLines,f,b.style,b.width]),x=b.dx,w=b.dy,O=b.angle,S=b.className,j=b.breakAll,P=ou(b,oi);if(!A(n)||!A(i))return null;var k=n+(E(x)?x:0),M=i+(E(w)?w:0);switch(void 0===d?"end":d){case"start":e=on("calc(".concat(c,")"));break;case"middle":e=on("calc(".concat((g.length-1)/2," * -").concat(u," + (").concat(c," / 2))"));break;default:e=on("calc(".concat(g.length-1," * -").concat(u,")"))}var T=[];if(f){var _=g[0].width,C=b.width;T.push("scale(".concat((E(C)?C/_:1)/_,")"))}return O&&T.push("rotate(".concat(O,", ").concat(k,", ").concat(M,")")),T.length&&(P.transform=T.join(" ")),y.default.createElement("text",oa({},tl(P,!0),{x:k,y:M,className:(0,v.default)("recharts-text",S),textAnchor:void 0===p?"start":p,fill:m.includes("url")?oy:m}),g.map(function(t,r){var n=t.words.join(j?"":" ");return y.default.createElement("tspan",{x:k,dy:0===r?e:u,key:"".concat(n,"-").concat(r)},n)}))};t.s(["Text",0,ov],209516),t.s(["appendOffsetOfLegend",()=>l8,"calculateActiveTickIndex",()=>l1,"checkDomainOfScale",()=>ci,"combineEventHandlers",()=>cn,"findPositionOfBar",()=>ca,"getBandSizeOfAxis",()=>cx,"getBarPosition",()=>l5,"getBarSizeList",()=>l3,"getBaseValueOfBar",()=>ch,"getCateCoordinateOfBar",()=>cd,"getCateCoordinateOfLine",()=>cp,"getCoordinatesOfGrid",()=>ct,"getDomainOfDataByKey",()=>l0,"getDomainOfItemsWithSameAxis",()=>l4,"getDomainOfStackGroups",()=>cv,"getMainColorOfGraphicItem",()=>l2,"getStackGroupsByAxisId",()=>cs,"getStackedDataOfItem",()=>cy,"getTicksOfAxis",()=>ce,"getTicksOfScale",()=>cf,"getTooltipItem",()=>cO,"getValueByDataKey",()=>lQ,"isCategoricalAxis",()=>l9,"parseDomainOfCategoryAxis",()=>cw,"parseErrorBarsOfAxis",()=>l7,"parseScale",()=>co,"parseSpecifiedDomain",()=>cg,"truncateByDomain",()=>cu],198770),t.s([],925212),t.i(925212),t.s([],267155),t.i(267155);let om=Math.sqrt(50),ob=Math.sqrt(10),og=Math.sqrt(2);function ox(t,e,r){let n,o,i,a=(e-t)/Math.max(0,r),u=Math.floor(Math.log10(a)),l=a/Math.pow(10,u),c=l>=om?10:l>=ob?5:l>=og?2:1;return(u<0?(n=Math.round(t*(i=Math.pow(10,-u)/c)),o=Math.round(e*i),n/ie&&--o,i=-i):(n=Math.round(t/(i=Math.pow(10,u)*c)),o=Math.round(e/i),n*ie&&--o),o0))return[];if(t===e)return[t];let n=e=o))return[];let u=i-o+1,l=Array(u);if(n)if(a<0)for(let t=0;te?1:t>=e?0:NaN}function oE(t,e){return null==t||null==e?NaN:et?1:e>=t?0:NaN}function oP(t){let e,r,n;function o(t,n,i=0,a=t.length){if(i>>1;0>r(t[e],n)?i=e+1:a=e}while(ioj(t(e),r),n=(e,r)=>t(e)-r):(e=t===oj||t===oE?t:oA,r=t,n=t),{left:o,center:function(t,e,r=0,i=t.length){let a=o(t,e,r,i-1);return a>r&&n(t[a-1],e)>-n(t[a],e)?a-1:a},right:function(t,n,o=0,i=t.length){if(o>>1;0>=r(t[e],n)?o=e+1:i=e}while(o>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===r?oY(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===r?oY(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=oR.exec(t))?new oZ(e[1],e[2],e[3],1):(e=oz.exec(t))?new oZ(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=oU.exec(t))?oY(e[1],e[2],e[3],e[4]):(e=oF.exec(t))?oY(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=o$.exec(t))?o3(e[1],e[2]/100,e[3]/100,1):(e=oW.exec(t))?o3(e[1],e[2]/100,e[3]/100,e[4]):oq.hasOwnProperty(t)?oH(oq[t]):"transparent"===t?new oZ(NaN,NaN,NaN,0):null}function oH(t){return new oZ(t>>16&255,t>>8&255,255&t,1)}function oY(t,e,r,n){return n<=0&&(t=e=r=NaN),new oZ(t,e,r,n)}function oK(t,e,r,n){var o;return 1==arguments.length?((o=t)instanceof oD||(o=oG(o)),o)?new oZ((o=o.rgb()).r,o.g,o.b,o.opacity):new oZ:new oZ(t,e,r,null==n?1:n)}function oZ(t,e,r,n){this.r=+t,this.g=+e,this.b=+r,this.opacity=+n}function oJ(){return`#${o2(this.r)}${o2(this.g)}${o2(this.b)}`}function oQ(){let t=o0(this.opacity);return`${1===t?"rgb(":"rgba("}${o1(this.r)}, ${o1(this.g)}, ${o1(this.b)}${1===t?")":`, ${t})`}`}function o0(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function o1(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function o2(t){return((t=o1(t))<16?"0":"")+t.toString(16)}function o3(t,e,r,n){return n<=0?t=e=r=NaN:r<=0||r>=1?t=e=NaN:e<=0&&(t=NaN),new o8(t,e,r,n)}function o5(t){if(t instanceof o8)return new o8(t.h,t.s,t.l,t.opacity);if(t instanceof oD||(t=oG(t)),!t)return new o8;if(t instanceof o8)return t;var e=(t=t.rgb()).r/255,r=t.g/255,n=t.b/255,o=Math.min(e,r,n),i=Math.max(e,r,n),a=NaN,u=i-o,l=(i+o)/2;return u?(a=e===i?(r-n)/u+(r0&&l<1?0:a,new o8(a,u,l,t.opacity)}function o8(t,e,r,n){this.h=+t,this.s=+e,this.l=+r,this.opacity=+n}function o6(t){return(t=(t||0)%360)<0?t+360:t}function o7(t){return Math.max(0,Math.min(1,t||0))}function o4(t,e,r){return(t<60?e+(r-e)*t/60:t<180?r:t<240?e+(r-e)*(240-t)/60:e)*255}function o9(t,e,r,n,o){var i=t*t,a=i*t;return((1-3*t+3*i-a)*e+(4-6*i+3*a)*r+(1+3*t+3*i-3*a)*n+a*o)/6}o_(oD,oG,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:oV,formatHex:oV,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return o5(this).formatHsl()},formatRgb:oX,toString:oX}),o_(oZ,oK,oC(oD,{brighter(t){return t=null==t?1.4285714285714286:Math.pow(1.4285714285714286,t),new oZ(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=null==t?.7:Math.pow(.7,t),new oZ(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new oZ(o1(this.r),o1(this.g),o1(this.b),o0(this.opacity))},displayable(){return -.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:oJ,formatHex:oJ,formatHex8:function(){return`#${o2(this.r)}${o2(this.g)}${o2(this.b)}${o2((isNaN(this.opacity)?1:this.opacity)*255)}`},formatRgb:oQ,toString:oQ})),o_(o8,function(t,e,r,n){return 1==arguments.length?o5(t):new o8(t,e,r,null==n?1:n)},oC(oD,{brighter(t){return t=null==t?1.4285714285714286:Math.pow(1.4285714285714286,t),new o8(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=null==t?.7:Math.pow(.7,t),new o8(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+(this.h<0)*360,e=isNaN(t)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*e,o=2*r-n;return new oZ(o4(t>=240?t-240:t+120,o,n),o4(t,o,n),o4(t<120?t+240:t-120,o,n),this.opacity)},clamp(){return new o8(o6(this.h),o7(this.s),o7(this.l),o0(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let t=o0(this.opacity);return`${1===t?"hsl(":"hsla("}${o6(this.h)}, ${100*o7(this.s)}%, ${100*o7(this.l)}%${1===t?")":`, ${t})`}`}}));let it=t=>()=>t;function ie(t,e){var r=e-t;return r?function(e){return t+e*r}:it(isNaN(t)?e:t)}let ir=function t(e){var r,n=1==(r=+e)?ie:function(t,e){var n,o,i;return e-t?(n=t,o=e,n=Math.pow(n,i=r),o=Math.pow(o,i)-n,i=1/i,function(t){return Math.pow(n+t*o,i)}):it(isNaN(t)?e:t)};function o(t,e){var r=n((t=oK(t)).r,(e=oK(e)).r),o=n(t.g,e.g),i=n(t.b,e.b),a=ie(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=o(e),t.b=i(e),t.opacity=a(e),t+""}}return o.gamma=t,o}(1);function io(t){return function(e){var r,n,o=e.length,i=Array(o),a=Array(o),u=Array(o);for(r=0;r=1?(r=1,e-1):Math.floor(r*e),o=t[n],i=t[n+1],a=n>0?t[n-1]:2*o-i,u=nu&&(a=e.slice(u,a),c[l]?c[l]+=a:c[++l]=a),(o=o[0])===(i=i[0])?c[l]?c[l]+=i:c[++l]=i:(c[++l]=null,s.push({i:l,x:ii(o,i)})),u=iu.lastIndex;return ue&&(r=t,t=e,e=r),c=function(r){return Math.max(t,Math.min(e,r))}),n=l>2?iv:iy,o=i=null,f}function f(e){return null==e||isNaN(e*=1)?r:(o||(o=n(a.map(t),u,l)))(t(c(e)))}return f.invert=function(r){return c(e((i||(i=n(u,a.map(t),ii)))(r)))},f.domain=function(t){return arguments.length?(a=Array.from(t,is),s()):a.slice()},f.range=function(t){return arguments.length?(u=Array.from(t),s()):u.slice()},f.rangeRound=function(t){return u=Array.from(t),l=ic,s()},f.clamp=function(t){return arguments.length?(c=!!t||id,s()):c!==id},f.interpolate=function(t){return arguments.length?(l=t,s()):l},f.unknown=function(t){return arguments.length?(r=t,f):r},function(r,n){return t=r,e=n,s()}}function ig(){return ib()(id,id)}function ix(t,e){if(!isFinite(t)||0===t)return null;var r=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"),n=t.slice(0,r);return[n.length>1?n[0]+n.slice(2):n,+t.slice(r+1)]}function iw(t){return(t=ix(Math.abs(t)))?t[1]:NaN}var iO=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function iS(t){var e;if(!(e=iO.exec(t)))throw Error("invalid format: "+t);return new ij({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function ij(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}function iE(t,e){var r=ix(t,e);if(!r)return t+"";var n=r[0],o=r[1];return o<0?"0."+Array(-o).join("0")+n:n.length>o+1?n.slice(0,o+1)+"."+n.slice(o+1):n+Array(o-n.length+2).join("0")}iS.prototype=ij.prototype,ij.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};let iP={"%":(t,e)=>(100*t).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>iE(100*t,e),r:iE,s:function(t,e){var r=ix(t,e);if(!r)return n=void 0,t.toPrecision(e);var o=r[0],i=r[1],a=i-(n=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,u=o.length;return a===u?o:a>u?o+Array(a-u+1).join("0"):a>0?o.slice(0,a)+"."+o.slice(a):"0."+Array(1-a).join("0")+ix(t,Math.max(0,e+a-1))[0]},X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function iA(t){return t}var ik=Array.prototype.map,iM=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function iT(t,e,r,n){var o,u,l=oS(t,e,r);switch((n=iS(null==n?",f":n)).type){case"s":var c=Math.max(Math.abs(t),Math.abs(e));return null!=n.precision||isNaN(u=Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(iw(c)/3)))-iw(Math.abs(l))))||(n.precision=u),a(n,c);case"":case"e":case"g":case"p":case"r":null!=n.precision||isNaN(u=Math.max(0,iw(Math.abs(Math.max(Math.abs(t),Math.abs(e)))-(o=Math.abs(o=l)))-iw(o))+1)||(n.precision=u-("e"===n.type));break;case"f":case"%":null!=n.precision||isNaN(u=Math.max(0,-iw(Math.abs(l))))||(n.precision=u-("%"===n.type)*2)}return i(n)}function i_(t){var e=t.domain;return t.ticks=function(t){var r=e();return ow(r[0],r[r.length-1],null==t?10:t)},t.tickFormat=function(t,r){var n=e();return iT(n[0],n[n.length-1],null==t?10:t,r)},t.nice=function(r){null==r&&(r=10);var n,o,i=e(),a=0,u=i.length-1,l=i[a],c=i[u],s=10;for(c0;){if((o=oO(l,c,r))===n)return i[a]=l,i[u]=c,e(i);if(o>0)l=Math.floor(l/o)*o,c=Math.ceil(c/o)*o;else if(o<0)l=Math.ceil(l*o)/o,c=Math.floor(c*o)/o;else break;n=o}return t},t}function iC(){var t=ig();return t.copy=function(){return im(t,iC())},nR.apply(t,arguments),i_(t)}function iD(t){var e;function r(t){return null==t||isNaN(t*=1)?e:t}return r.invert=r,r.domain=r.range=function(e){return arguments.length?(t=Array.from(e,is),r):t.slice()},r.unknown=function(t){return arguments.length?(e=t,r):e},r.copy=function(){return iD(t).unknown(e)},t=arguments.length?Array.from(t,is):[0,1],i_(r)}function iI(t,e){t=t.slice();var r,n=0,o=t.length-1,i=t[n],a=t[o];return a-t(-e,r)}function iF(t){let e,r,n=t(iN,iB),o=n.domain,a=10;function u(){var i,u;return e=(i=a)===Math.E?Math.log:10===i&&Math.log10||2===i&&Math.log2||(i=Math.log(i),t=>Math.log(t)/i),r=10===(u=a)?iz:u===Math.E?Math.exp:t=>Math.pow(u,t),o()[0]<0?(e=iU(e),r=iU(r),t(iL,iR)):t(iN,iB),n}return n.base=function(t){return arguments.length?(a=+t,u()):a},n.domain=function(t){return arguments.length?(o(t),u()):o()},n.ticks=t=>{let n,i,u=o(),l=u[0],c=u[u.length-1],s=c0){for(;f<=p;++f)for(n=1;nc)break;h.push(i)}}else for(;f<=p;++f)for(n=a-1;n>=1;--n)if(!((i=f>0?n/r(-f):n*r(f))c)break;h.push(i)}2*h.length{if(null==t&&(t=10),null==o&&(o=10===a?"s":","),"function"!=typeof o&&(a%1||null!=(o=iS(o)).precision||(o.trim=!0),o=i(o)),t===1/0)return o;let u=Math.max(1,a*t/n.ticks().length);return t=>{let n=t/r(Math.round(e(t)));return n*ao(iI(o(),{floor:t=>r(Math.floor(e(t))),ceil:t=>r(Math.ceil(e(t)))})),n}function i$(){let t=iF(ib()).domain([1,10]);return t.copy=()=>im(t,i$()).base(t.base()),nR.apply(t,arguments),t}function iW(t){return function(e){return Math.sign(e)*Math.log1p(Math.abs(e/t))}}function iq(t){return function(e){return Math.sign(e)*Math.expm1(Math.abs(e))*t}}function iV(t){var e=1,r=t(iW(1),iq(e));return r.constant=function(r){return arguments.length?t(iW(e=+r),iq(e)):e},i_(r)}function iX(){var t=iV(ib());return t.copy=function(){return im(t,iX()).constant(t.constant())},nR.apply(t,arguments)}function iG(t){return function(e){return e<0?-Math.pow(-e,t):Math.pow(e,t)}}function iH(t){return t<0?-Math.sqrt(-t):Math.sqrt(t)}function iY(t){return t<0?-t*t:t*t}function iK(t){var e=t(id,id),r=1;return e.exponent=function(e){return arguments.length?1==(r=+e)?t(id,id):.5===r?t(iH,iY):t(iG(r),iG(1/r)):r},i_(e)}function iZ(){var t=iK(ib());return t.copy=function(){return im(t,iZ()).exponent(t.exponent())},nR.apply(t,arguments),t}function iJ(){return iZ.apply(null,arguments).exponent(.5)}function iQ(t){return Math.sign(t)*t*t}function i0(){var t,e=ig(),r=[0,1],n=!1;function o(r){var o,i=Math.sign(o=e(r))*Math.sqrt(Math.abs(o));return isNaN(i)?t:n?Math.round(i):i}return o.invert=function(t){return e.invert(iQ(t))},o.domain=function(t){return arguments.length?(e.domain(t),o):e.domain()},o.range=function(t){return arguments.length?(e.range((r=Array.from(t,is)).map(iQ)),o):r.slice()},o.rangeRound=function(t){return o.range(t).round(!0)},o.round=function(t){return arguments.length?(n=!!t,o):n},o.clamp=function(t){return arguments.length?(e.clamp(t),o):e.clamp()},o.unknown=function(e){return arguments.length?(t=e,o):t},o.copy=function(){return i0(e.domain(),r).round(n).clamp(e.clamp()).unknown(t)},nR.apply(o,arguments),i_(o)}function i1(t,e){let r;if(void 0===e)for(let e of t)null!=e&&(r=e)&&(r=e);else{let n=-1;for(let o of t)null!=(o=e(o,++n,t))&&(r=o)&&(r=o)}return r}function i2(t,e){let r;if(void 0===e)for(let e of t)null!=e&&(r>e||void 0===r&&e>=e)&&(r=e);else{let n=-1;for(let o of t)null!=(o=e(o,++n,t))&&(r>o||void 0===r&&o>=o)&&(r=o)}return r}function i3(t,e){return(null==t||!(t>=t))-(null==e||!(e>=e))||(te))}function i5(t,e,r){let n=t[e];t[e]=t[r],t[r]=n}function i8(){var t,e=[],r=[],n=[];function o(){var t=0,o=Math.max(1,r.length);for(n=Array(o-1);++t=1)return+r(t[n-1],n-1,t);var n,o=(n-1)*e,i=Math.floor(o),a=+r(t[i],i,t);return a+(r(t[i+1],i+1,t)-a)*(o-i)}}(e,t/o);return i}function i(e){return null==e||isNaN(e*=1)?t:r[oT(n,e)]}return i.invertExtent=function(t){var o=r.indexOf(t);return o<0?[NaN,NaN]:[o>0?n[o-1]:e[0],o=n?[o[n-1],r]:[o[a-1],o[a]]},a.unknown=function(e){return arguments.length&&(t=e),a},a.thresholds=function(){return o.slice()},a.copy=function(){return i6().domain([e,r]).range(i).unknown(t)},nR.apply(i_(a),arguments)}function i7(){var t,e=[.5],r=[0,1],n=1;function o(o){return null!=o&&o<=o?r[oT(e,o,0,n)]:t}return o.domain=function(t){return arguments.length?(n=Math.min((e=Array.from(t)).length,r.length-1),o):e.slice()},o.range=function(t){return arguments.length?(r=Array.from(t),n=Math.min(e.length,r.length-1),o):r.slice()},o.invertExtent=function(t){var n=r.indexOf(t);return[e[n-1],e[n]]},o.unknown=function(e){return arguments.length?(t=e,o):t},o.copy=function(){return i7().domain(e).range(r).unknown(t)},nR.apply(o,arguments)}i=(o=function(t){var e,r,o,i=void 0===t.grouping||void 0===t.thousands?iA:(e=ik.call(t.grouping,Number),r=t.thousands+"",function(t,n){for(var o=t.length,i=[],a=0,u=e[0],l=0;o>0&&u>0&&(l+u+1>n&&(u=Math.max(1,n-l)),i.push(t.substring(o-=u,o+u)),!((l+=u+1)>n));)u=e[a=(a+1)%e.length];return i.reverse().join(r)}),a=void 0===t.currency?"":t.currency[0]+"",u=void 0===t.currency?"":t.currency[1]+"",l=void 0===t.decimal?".":t.decimal+"",c=void 0===t.numerals?iA:(o=ik.call(t.numerals,String),function(t){return t.replace(/[0-9]/g,function(t){return o[+t]})}),s=void 0===t.percent?"%":t.percent+"",f=void 0===t.minus?"−":t.minus+"",p=void 0===t.nan?"NaN":t.nan+"";function d(t,e){var r=(t=iS(t)).fill,o=t.align,d=t.sign,h=t.symbol,y=t.zero,v=t.width,m=t.comma,b=t.precision,g=t.trim,x=t.type;"n"===x?(m=!0,x="g"):iP[x]||(void 0===b&&(b=12),g=!0,x="g"),(y||"0"===r&&"="===o)&&(y=!0,r="0",o="=");var w=(e&&void 0!==e.prefix?e.prefix:"")+("$"===h?a:"#"===h&&/[boxX]/.test(x)?"0"+x.toLowerCase():""),O=("$"===h?u:/[%p]/.test(x)?s:"")+(e&&void 0!==e.suffix?e.suffix:""),S=iP[x],j=/[defgprs%]/.test(x);function E(t){var e,a,u,s=w,h=O;if("c"===x)h=S(t)+h,t="";else{var E=(t*=1)<0||1/t<0;if(t=isNaN(t)?p:S(Math.abs(t),b),g&&(t=function(t){e:for(var e,r=t.length,n=1,o=-1;n0&&(o=0)}return o>0?t.slice(0,o)+t.slice(e+1):t}(t)),E&&0==+t&&"+"!==d&&(E=!1),s=(E?"("===d?d:f:"-"===d||"("===d?"":d)+s,h=("s"!==x||isNaN(t)||void 0===n?"":iM[8+n/3])+h+(E&&"("===d?")":""),j){for(e=-1,a=t.length;++e(u=t.charCodeAt(e))||u>57){h=(46===u?l+t.slice(e+1):t.slice(e))+h,t=t.slice(0,e);break}}}m&&!y&&(t=i(t,1/0));var P=s.length+t.length+h.length,A=P>1)+s+t+h+A.slice(P);break;default:t=A+s+t+h}return c(t)}return b=void 0===b?6:/[gprs]/.test(x)?Math.max(1,Math.min(21,b)):Math.max(0,Math.min(20,b)),E.toString=function(){return t+""},E}return{format:d,formatPrefix:function(t,e){var r=3*Math.max(-8,Math.min(8,Math.floor(iw(e)/3))),n=Math.pow(10,-r),o=d(((t=iS(t)).type="f",t),{suffix:iM[8+r/3]});return function(t){return o(n*t)}}}}({thousands:",",grouping:[3],currency:["$",""]})).format,a=o.formatPrefix;let i4=new Date,i9=new Date;function at(t,e,r,n){function o(e){return t(e=0==arguments.length?new Date:new Date(+e)),e}return o.floor=e=>(t(e=new Date(+e)),e),o.ceil=r=>(t(r=new Date(r-1)),e(r,1),t(r),r),o.round=t=>{let e=o(t),r=o.ceil(t);return t-e(e(t=new Date(+t),null==r?1:Math.floor(r)),t),o.range=(r,n,i)=>{let a,u=[];if(r=o.ceil(r),i=null==i?1:Math.floor(i),!(r0))return u;do u.push(a=new Date(+r)),e(r,i),t(r);while(aat(e=>{if(e>=e)for(;t(e),!r(e);)e.setTime(e-1)},(t,n)=>{if(t>=t)if(n<0)for(;++n<=0;)for(;e(t,-1),!r(t););else for(;--n>=0;)for(;e(t,1),!r(t););}),r&&(o.count=(e,n)=>(i4.setTime(+e),i9.setTime(+n),t(i4),t(i9),Math.floor(r(i4,i9))),o.every=t=>isFinite(t=Math.floor(t))&&t>0?t>1?o.filter(n?e=>n(e)%t==0:e=>o.count(0,e)%t==0):o:null),o}let ae=at(t=>{t.setMonth(0,1),t.setHours(0,0,0,0)},(t,e)=>{t.setFullYear(t.getFullYear()+e)},(t,e)=>e.getFullYear()-t.getFullYear(),t=>t.getFullYear());ae.every=t=>isFinite(t=Math.floor(t))&&t>0?at(e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)},(e,r)=>{e.setFullYear(e.getFullYear()+r*t)}):null,ae.range;let ar=at(t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)},(t,e)=>e.getUTCFullYear()-t.getUTCFullYear(),t=>t.getUTCFullYear());ar.every=t=>isFinite(t=Math.floor(t))&&t>0?at(e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,r)=>{e.setUTCFullYear(e.getUTCFullYear()+r*t)}):null,ar.range;let an=at(t=>{t.setDate(1),t.setHours(0,0,0,0)},(t,e)=>{t.setMonth(t.getMonth()+e)},(t,e)=>e.getMonth()-t.getMonth()+(e.getFullYear()-t.getFullYear())*12,t=>t.getMonth());an.range;let ao=at(t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)},(t,e)=>e.getUTCMonth()-t.getUTCMonth()+(e.getUTCFullYear()-t.getUTCFullYear())*12,t=>t.getUTCMonth());ao.range;function ai(t){return at(e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)},(t,e)=>{t.setDate(t.getDate()+7*e)},(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*6e4)/6048e5)}let aa=ai(0),au=ai(1),al=ai(2),ac=ai(3),as=ai(4),af=ai(5),ap=ai(6);function ad(t){return at(e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+7*e)},(t,e)=>(e-t)/6048e5)}aa.range,au.range,al.range,ac.range,as.range,af.range,ap.range;let ah=ad(0),ay=ad(1),av=ad(2),am=ad(3),ab=ad(4),ag=ad(5),ax=ad(6);ah.range,ay.range,av.range,am.range,ab.range,ag.range,ax.range;let aw=at(t=>t.setHours(0,0,0,0),(t,e)=>t.setDate(t.getDate()+e),(t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*6e4)/864e5,t=>t.getDate()-1);aw.range;let aO=at(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/864e5,t=>t.getUTCDate()-1);aO.range;let aS=at(t=>{t.setUTCHours(0,0,0,0)},(t,e)=>{t.setUTCDate(t.getUTCDate()+e)},(t,e)=>(e-t)/864e5,t=>Math.floor(t/864e5));aS.range;let aj=at(t=>{t.setTime(t-t.getMilliseconds()-1e3*t.getSeconds()-6e4*t.getMinutes())},(t,e)=>{t.setTime(+t+36e5*e)},(t,e)=>(e-t)/36e5,t=>t.getHours());aj.range;let aE=at(t=>{t.setUTCMinutes(0,0,0)},(t,e)=>{t.setTime(+t+36e5*e)},(t,e)=>(e-t)/36e5,t=>t.getUTCHours());aE.range;let aP=at(t=>{t.setTime(t-t.getMilliseconds()-1e3*t.getSeconds())},(t,e)=>{t.setTime(+t+6e4*e)},(t,e)=>(e-t)/6e4,t=>t.getMinutes());aP.range;let aA=at(t=>{t.setUTCSeconds(0,0)},(t,e)=>{t.setTime(+t+6e4*e)},(t,e)=>(e-t)/6e4,t=>t.getUTCMinutes());aA.range;let ak=at(t=>{t.setTime(t-t.getMilliseconds())},(t,e)=>{t.setTime(+t+1e3*e)},(t,e)=>(e-t)/1e3,t=>t.getUTCSeconds());ak.range;let aM=at(()=>{},(t,e)=>{t.setTime(+t+e)},(t,e)=>e-t);function aT(t,e,r,n,o,i){let a=[[ak,1,1e3],[ak,5,5e3],[ak,15,15e3],[ak,30,3e4],[i,1,6e4],[i,5,3e5],[i,15,9e5],[i,30,18e5],[o,1,36e5],[o,3,108e5],[o,6,216e5],[o,12,432e5],[n,1,864e5],[n,2,1728e5],[r,1,6048e5],[e,1,2592e6],[e,3,7776e6],[t,1,31536e6]];function u(e,r,n){let o=Math.abs(r-e)/n,i=oP(([,,t])=>t).right(a,o);if(i===a.length)return t.every(oS(e/31536e6,r/31536e6,n));if(0===i)return aM.every(Math.max(oS(e,r,n),1));let[u,l]=a[o/a[i-1][2]isFinite(t=Math.floor(t))&&t>0?t>1?at(e=>{e.setTime(Math.floor(e/t)*t)},(e,r)=>{e.setTime(+e+r*t)},(e,r)=>(r-e)/t):aM:null,aM.range;let[a_,aC]=aT(ar,ao,ah,aS,aE,aA),[aD,aI]=aT(ae,an,aa,aw,aj,aP);function aN(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function aB(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function aL(t,e,r){return{y:t,m:e,d:r,H:0,M:0,S:0,L:0}}var aR={"-":"",_:" ",0:"0"},az=/^\s*\d+/,aU=/^%/,aF=/[\\^$*+?|[\]().{}]/g;function a$(t,e,r){var n=t<0?"-":"",o=(n?-t:t)+"",i=o.length;return n+(i[t.toLowerCase(),e]))}function aX(t,e,r){var n=az.exec(e.slice(r,r+1));return n?(t.w=+n[0],r+n[0].length):-1}function aG(t,e,r){var n=az.exec(e.slice(r,r+1));return n?(t.u=+n[0],r+n[0].length):-1}function aH(t,e,r){var n=az.exec(e.slice(r,r+2));return n?(t.U=+n[0],r+n[0].length):-1}function aY(t,e,r){var n=az.exec(e.slice(r,r+2));return n?(t.V=+n[0],r+n[0].length):-1}function aK(t,e,r){var n=az.exec(e.slice(r,r+2));return n?(t.W=+n[0],r+n[0].length):-1}function aZ(t,e,r){var n=az.exec(e.slice(r,r+4));return n?(t.y=+n[0],r+n[0].length):-1}function aJ(t,e,r){var n=az.exec(e.slice(r,r+2));return n?(t.y=+n[0]+(+n[0]>68?1900:2e3),r+n[0].length):-1}function aQ(t,e,r){var n=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(r,r+6));return n?(t.Z=n[1]?0:-(n[2]+(n[3]||"00")),r+n[0].length):-1}function a0(t,e,r){var n=az.exec(e.slice(r,r+1));return n?(t.q=3*n[0]-3,r+n[0].length):-1}function a1(t,e,r){var n=az.exec(e.slice(r,r+2));return n?(t.m=n[0]-1,r+n[0].length):-1}function a2(t,e,r){var n=az.exec(e.slice(r,r+2));return n?(t.d=+n[0],r+n[0].length):-1}function a3(t,e,r){var n=az.exec(e.slice(r,r+3));return n?(t.m=0,t.d=+n[0],r+n[0].length):-1}function a5(t,e,r){var n=az.exec(e.slice(r,r+2));return n?(t.H=+n[0],r+n[0].length):-1}function a8(t,e,r){var n=az.exec(e.slice(r,r+2));return n?(t.M=+n[0],r+n[0].length):-1}function a6(t,e,r){var n=az.exec(e.slice(r,r+2));return n?(t.S=+n[0],r+n[0].length):-1}function a7(t,e,r){var n=az.exec(e.slice(r,r+3));return n?(t.L=+n[0],r+n[0].length):-1}function a4(t,e,r){var n=az.exec(e.slice(r,r+6));return n?(t.L=Math.floor(n[0]/1e3),r+n[0].length):-1}function a9(t,e,r){var n=aU.exec(e.slice(r,r+1));return n?r+n[0].length:-1}function ut(t,e,r){var n=az.exec(e.slice(r));return n?(t.Q=+n[0],r+n[0].length):-1}function ue(t,e,r){var n=az.exec(e.slice(r));return n?(t.s=+n[0],r+n[0].length):-1}function ur(t,e){return a$(t.getDate(),e,2)}function un(t,e){return a$(t.getHours(),e,2)}function uo(t,e){return a$(t.getHours()%12||12,e,2)}function ui(t,e){return a$(1+aw.count(ae(t),t),e,3)}function ua(t,e){return a$(t.getMilliseconds(),e,3)}function uu(t,e){return ua(t,e)+"000"}function ul(t,e){return a$(t.getMonth()+1,e,2)}function uc(t,e){return a$(t.getMinutes(),e,2)}function us(t,e){return a$(t.getSeconds(),e,2)}function uf(t){var e=t.getDay();return 0===e?7:e}function up(t,e){return a$(aa.count(ae(t)-1,t),e,2)}function ud(t){var e=t.getDay();return e>=4||0===e?as(t):as.ceil(t)}function uh(t,e){return t=ud(t),a$(as.count(ae(t),t)+(4===ae(t).getDay()),e,2)}function uy(t){return t.getDay()}function uv(t,e){return a$(au.count(ae(t)-1,t),e,2)}function um(t,e){return a$(t.getFullYear()%100,e,2)}function ub(t,e){return a$((t=ud(t)).getFullYear()%100,e,2)}function ug(t,e){return a$(t.getFullYear()%1e4,e,4)}function ux(t,e){var r=t.getDay();return a$((t=r>=4||0===r?as(t):as.ceil(t)).getFullYear()%1e4,e,4)}function uw(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+a$(e/60|0,"0",2)+a$(e%60,"0",2)}function uO(t,e){return a$(t.getUTCDate(),e,2)}function uS(t,e){return a$(t.getUTCHours(),e,2)}function uj(t,e){return a$(t.getUTCHours()%12||12,e,2)}function uE(t,e){return a$(1+aO.count(ar(t),t),e,3)}function uP(t,e){return a$(t.getUTCMilliseconds(),e,3)}function uA(t,e){return uP(t,e)+"000"}function uk(t,e){return a$(t.getUTCMonth()+1,e,2)}function uM(t,e){return a$(t.getUTCMinutes(),e,2)}function uT(t,e){return a$(t.getUTCSeconds(),e,2)}function u_(t){var e=t.getUTCDay();return 0===e?7:e}function uC(t,e){return a$(ah.count(ar(t)-1,t),e,2)}function uD(t){var e=t.getUTCDay();return e>=4||0===e?ab(t):ab.ceil(t)}function uI(t,e){return t=uD(t),a$(ab.count(ar(t),t)+(4===ar(t).getUTCDay()),e,2)}function uN(t){return t.getUTCDay()}function uB(t,e){return a$(ay.count(ar(t)-1,t),e,2)}function uL(t,e){return a$(t.getUTCFullYear()%100,e,2)}function uR(t,e){return a$((t=uD(t)).getUTCFullYear()%100,e,2)}function uz(t,e){return a$(t.getUTCFullYear()%1e4,e,4)}function uU(t,e){var r=t.getUTCDay();return a$((t=r>=4||0===r?ab(t):ab.ceil(t)).getUTCFullYear()%1e4,e,4)}function uF(){return"+0000"}function u$(){return"%"}function uW(t){return+t}function uq(t){return Math.floor(t/1e3)}function uV(t){return new Date(t)}function uX(t){return t instanceof Date?+t:+new Date(+t)}function uG(t,e,r,n,o,i,a,u,l,c){var s=ig(),f=s.invert,p=s.domain,d=c(".%L"),h=c(":%S"),y=c("%I:%M"),v=c("%I %p"),m=c("%a %d"),b=c("%b %d"),g=c("%B"),x=c("%Y");function w(t){return(l(t)e(n/(t.length-1)))},r.quantiles=function(e){return Array.from({length:e+1},(r,n)=>(function(t,e){if(!(!(r=(t=Float64Array.from(function*(t,e){if(void 0===e)for(let e of t)null!=e&&(e*=1)>=e&&(yield e);else{let r=-1;for(let n of t)null!=(n=e(n,++r,t))&&(n*=1)>=n&&(yield n)}}(t,void 0))).length)||isNaN(e*=1))){if(e<=0||r<2)return i2(t);if(e>=1)return i1(t);var r,n=(r-1)*e,o=Math.floor(n),i=i1((function t(e,r,n=0,o=1/0,i){if(r=Math.floor(r),n=Math.floor(Math.max(0,n)),o=Math.floor(Math.min(e.length-1,o)),!(n<=r&&r<=o))return e;for(i=void 0===i?i3:function(t=oj){if(t===oj)return i3;if("function"!=typeof t)throw TypeError("compare is not a function");return(e,r)=>{let n=t(e,r);return n||0===n?n:(0===t(r,r))-(0===t(e,e))}}(i);o>n;){if(o-n>600){let a=o-n+1,u=r-n+1,l=Math.log(a),c=.5*Math.exp(2*l/3),s=.5*Math.sqrt(l*c*(a-c)/a)*(u-a/2<0?-1:1),f=Math.max(n,Math.floor(r-u*c/a+s)),p=Math.min(o,Math.floor(r+(a-u)*c/a+s));t(e,r,f,p,i)}let a=e[r],u=n,l=o;for(i5(e,n,r),i(e[o],a)>0&&i5(e,n,o);ui(e[u],a);)++u;for(;i(e[l],a)>0;)--l}0===i(e[n],a)?i5(e,n,l):i5(e,++l,o),l<=r&&(n=l+1),r<=l&&(o=l-1)}return e})(t,o).subarray(0,o+1));return i+(i2(t.subarray(o+1))-i)*(n-o)}})(t,n/e))},r.copy=function(){return u3(e).domain(t)},nz.apply(r,arguments)}function u5(){var t,e,r,n,o,i,a,u=0,l=.5,c=1,s=1,f=id,p=!1;function d(t){return isNaN(t*=1)?a:(t=.5+((t=+i(t))-e)*(s*t=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:uW,s:uq,S:us,u:uf,U:up,V:uh,w:uy,W:uv,x:null,X:null,y:um,Y:ug,Z:uw,"%":u$},x={a:function(t){return a[t.getUTCDay()]},A:function(t){return i[t.getUTCDay()]},b:function(t){return l[t.getUTCMonth()]},B:function(t){return u[t.getUTCMonth()]},c:null,d:uO,e:uO,f:uA,g:uR,G:uU,H:uS,I:uj,j:uE,L:uP,m:uk,M:uM,p:function(t){return o[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:uW,s:uq,S:uT,u:u_,U:uC,V:uI,w:uN,W:uB,x:null,X:null,y:uL,Y:uz,Z:uF,"%":u$},w={a:function(t,e,r){var n=d.exec(e.slice(r));return n?(t.w=h.get(n[0].toLowerCase()),r+n[0].length):-1},A:function(t,e,r){var n=f.exec(e.slice(r));return n?(t.w=p.get(n[0].toLowerCase()),r+n[0].length):-1},b:function(t,e,r){var n=m.exec(e.slice(r));return n?(t.m=b.get(n[0].toLowerCase()),r+n[0].length):-1},B:function(t,e,r){var n=y.exec(e.slice(r));return n?(t.m=v.get(n[0].toLowerCase()),r+n[0].length):-1},c:function(t,r,n){return j(t,e,r,n)},d:a2,e:a2,f:a4,g:aJ,G:aZ,H:a5,I:a5,j:a3,L:a7,m:a1,M:a8,p:function(t,e,r){var n=c.exec(e.slice(r));return n?(t.p=s.get(n[0].toLowerCase()),r+n[0].length):-1},q:a0,Q:ut,s:ue,S:a6,u:aG,U:aH,V:aY,w:aX,W:aK,x:function(t,e,n){return j(t,r,e,n)},X:function(t,e,r){return j(t,n,e,r)},y:aJ,Y:aZ,Z:aQ,"%":a9};function O(t,e){return function(r){var n,o,i,a=[],u=-1,l=0,c=t.length;for(r instanceof Date||(r=new Date(+r));++u53)return null;"w"in i||(i.w=1),"Z"in i?(n=(o=(n=aB(aL(i.y,0,1))).getUTCDay())>4||0===o?ay.ceil(n):ay(n),n=aO.offset(n,(i.V-1)*7),i.y=n.getUTCFullYear(),i.m=n.getUTCMonth(),i.d=n.getUTCDate()+(i.w+6)%7):(n=(o=(n=aN(aL(i.y,0,1))).getDay())>4||0===o?au.ceil(n):au(n),n=aw.offset(n,(i.V-1)*7),i.y=n.getFullYear(),i.m=n.getMonth(),i.d=n.getDate()+(i.w+6)%7)}else("W"in i||"U"in i)&&("w"in i||(i.w="u"in i?i.u%7:+("W"in i)),o="Z"in i?aB(aL(i.y,0,1)).getUTCDay():aN(aL(i.y,0,1)).getDay(),i.m=0,i.d="W"in i?(i.w+6)%7+7*i.W-(o+5)%7:i.w+7*i.U-(o+6)%7);return"Z"in i?(i.H+=i.Z/100|0,i.M+=i.Z%100,aB(i)):aN(i)}}function j(t,e,r,n){for(var o,i,a=0,u=e.length,l=r.length;a=l)return -1;if(37===(o=e.charCodeAt(a++))){if(!(i=w[(o=e.charAt(a++))in aR?e.charAt(a++):o])||(n=i(t,r,n))<0)return -1}else if(o!=r.charCodeAt(n++))return -1}return n}return g.x=O(r,g),g.X=O(n,g),g.c=O(e,g),x.x=O(r,x),x.X=O(n,x),x.c=O(e,x),{format:function(t){var e=O(t+="",g);return e.toString=function(){return t},e},parse:function(t){var e=S(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=O(t+="",x);return e.toString=function(){return t},e},utcParse:function(t){var e=S(t+="",!0);return e.toString=function(){return t},e}}}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]})).format,u.parse,c=u.utcFormat,u.utcParse,t.s(["scaleBand",0,nV,"scaleDiverging",0,u8,"scaleDivergingLog",0,u6,"scaleDivergingPow",0,u4,"scaleDivergingSqrt",0,u9,"scaleDivergingSymlog",0,u7,"scaleIdentity",0,iD,"scaleImplicit",0,nW,"scaleLinear",0,iC,"scaleLog",0,i$,"scaleOrdinal",0,nq,"scalePoint",0,nX,"scalePow",0,iZ,"scaleQuantile",0,i8,"scaleQuantize",0,i6,"scaleRadial",0,i0,"scaleSequential",0,uJ,"scaleSequentialLog",0,uQ,"scaleSequentialPow",0,u1,"scaleSequentialQuantile",0,u3,"scaleSequentialSqrt",0,u2,"scaleSequentialSymlog",0,u0,"scaleSqrt",0,iJ,"scaleSymlog",0,iX,"scaleThreshold",0,i7,"scaleTime",0,uH,"scaleUtc",0,uY,"tickFormat",0,iT],429061),t.i(429061),t.s(["scaleBand",0,nV,"scaleDiverging",0,u8,"scaleDivergingLog",0,u6,"scaleDivergingPow",0,u4,"scaleDivergingSqrt",0,u9,"scaleDivergingSymlog",0,u7,"scaleIdentity",0,iD,"scaleImplicit",0,nW,"scaleLinear",0,iC,"scaleLog",0,i$,"scaleOrdinal",0,nq,"scalePoint",0,nX,"scalePow",0,iZ,"scaleQuantile",0,i8,"scaleQuantize",0,i6,"scaleRadial",0,i0,"scaleSequential",0,uJ,"scaleSequentialLog",0,uQ,"scaleSequentialPow",0,u1,"scaleSequentialQuantile",0,u3,"scaleSequentialSqrt",0,u2,"scaleSequentialSymlog",0,u0,"scaleSqrt",0,iJ,"scaleSymlog",0,iX,"scaleThreshold",0,i7,"scaleTime",0,uH,"scaleUtc",0,uY,"tickFormat",0,iT],979357);var lt=t.i(979357);function le(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function lr(t,e){if((o=t.length)>1)for(var r,n,o,i=1,a=t[e[0]],u=a.length;i=0;)r[e]=e;return r}function lo(t,e){return t[e]}function li(t){let e=[];return e.key=t,e}Array.prototype.slice;var la=t.i(86966),lu=t.i(37544),ll=t.i(633303),lc=t.i(898892),ls=t.i(651655);function lf(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r=e?r.apply(void 0,o):t(e-a,ly(function(){for(var t=arguments.length,e=Array(t),n=0;ntypeof Symbol&&Symbol.iterator in Object(t))return Array.from(t)}(i)||function(t){if(t){if("string"==typeof t)return lf(t,void 0);var e=Object.prototype.toString.call(t).slice(8,-1);if("Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e)return Array.from(t);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return lf(t,void 0)}}(i)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).concat(e))}))})}(t.length,t)},lm=function(t,e){for(var r=[],n=t;ntypeof Symbol&&Symbol.iterator in Object(t))return Array.from(t)}(t)||lP(t)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function lE(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){if("u">typeof Symbol&&Symbol.iterator in Object(t)){var r=[],n=!0,o=!1,i=void 0;try{for(var a,u=t[Symbol.iterator]();!(n=(a=u.next()).done)&&(r.push(a.value),!e||r.length!==e);n=!0);}catch(t){o=!0,i=t}finally{try{n||null==u.return||u.return()}finally{if(o)throw i}}return r}}(t,e)||lP(t,e)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function lP(t,e){if(t){if("string"==typeof t)return lA(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);if("Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r)return Array.from(t);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return lA(t,e)}}function lA(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);rn&&(o=n,i=r),[o,i]}function lM(t,e,r){if(t.lte(0))return new ls.default(0);var n=lS(t.toNumber()),o=new ls.default(10).pow(n),i=t.div(o),a=1!==n?.05:.1,u=new ls.default(Math.ceil(i.div(a).toNumber())).add(r).mul(a).mul(o);return e?u:new ls.default(Math.ceil(u))}function lT(t,e,r){var n=1,o=new ls.default(t);if(!o.isint()&&r){var i=Math.abs(t);i<1?(n=new ls.default(10).pow(lS(t)-1),o=new ls.default(Math.floor(o.div(n).toNumber())).mul(n)):i>1&&(o=new ls.default(Math.floor(t)))}else 0===t?o=new ls.default(Math.floor((e-1)/2)):r||(o=new ls.default(Math.floor(t)));var a=Math.floor((e-1)/2);return lg(lb(function(t){return o.add(new ls.default(t-a).mul(n)).toNumber()}),lm)(0,e)}var l_=lw(function(t){var e=lE(t,2),r=e[0],n=e[1],o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:6,i=!(arguments.length>2)||void 0===arguments[2]||arguments[2],a=Math.max(o,2),u=lE(lk([r,n]),2),l=u[0],c=u[1];if(l===-1/0||c===1/0){var s=c===1/0?[l].concat(lj(lm(0,o-1).map(function(){return 1/0}))):[].concat(lj(lm(0,o-1).map(function(){return-1/0})),[c]);return r>n?lx(s):s}if(l===c)return lT(l,o,i);var f=function t(e,r,n,o){var i,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0;if(!Number.isFinite((r-e)/(n-1)))return{step:new ls.default(0),tickMin:new ls.default(0),tickMax:new ls.default(0)};var u=lM(new ls.default(r).sub(e).div(n-1),o,a),l=Math.ceil((i=e<=0&&r>=0?new ls.default(0):(i=new ls.default(e).add(r).div(2)).sub(new ls.default(i).mod(u))).sub(e).div(u).toNumber()),c=Math.ceil(new ls.default(r).sub(i).div(u).toNumber()),s=l+c+1;return s>n?t(e,r,n,o,a+1):(s0?c+(n-s):c,l=r>0?l:l+(n-s)),{step:u,tickMin:i.sub(new ls.default(l).mul(u)),tickMax:i.add(new ls.default(c).mul(u))})}(l,c,a,i),p=f.step,d=lO(f.tickMin,f.tickMax.add(new ls.default(.1).mul(p)),p);return r>n?lx(d):d});lw(function(t){var e=lE(t,2),r=e[0],n=e[1],o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:6,i=!(arguments.length>2)||void 0===arguments[2]||arguments[2],a=Math.max(o,2),u=lE(lk([r,n]),2),l=u[0],c=u[1];if(l===-1/0||c===1/0)return[r,n];if(l===c)return lT(l,o,i);var s=lM(new ls.default(c).sub(l).div(a-1),i,0),f=lg(lb(function(t){return new ls.default(l).add(new ls.default(t).mul(s)).toNumber()}),lm)(0,a).filter(function(t){return t>=l&&t<=c});return r>n?lx(f):f});var lC=lw(function(t,e){var r=lE(t,2),n=r[0],o=r[1],i=!(arguments.length>2)||void 0===arguments[2]||arguments[2],a=lE(lk([n,o]),2),u=a[0],l=a[1];if(u===-1/0||l===1/0)return[n,o];if(u===l)return[u];var c=Math.max(e,2),s=lM(new ls.default(l).sub(u).div(c-1),i,0),f=[].concat(lj(lO(new ls.default(u),new ls.default(l).sub(new ls.default(.99).mul(s)),s)),[l]);return n>o?lx(f):f}),lD=["offset","layout","width","dataKey","data","dataPointFormatter","xAxis","yAxis"];function lI(t){return(lI="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function lN(){return(lN=Object.assign.bind()).apply(this,arguments)}function lB(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r=0)continue;r[n]=t[n]}return r}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(n=0;n=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}(t,lD),!1);"x"===this.props.direction&&"number"!==u.type&&tw(!1);var s=i.map(function(t){var i,s,f=a(t,o),p=f.x,d=f.y,h=f.value,v=f.errorVal;if(!v)return null;var m=[];if(Array.isArray(v)){var b=function(t){if(Array.isArray(t))return t}(v)||function(t){var e=null==t?null:"u">typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=e){var r,n,o,i,a=[],u=!0,l=!1;try{o=(e=e.call(t)).next,!1;for(;!(u=(r=o.call(e)).done)&&(a.push(r.value),2!==a.length);u=!0);}catch(t){l=!0,n=t}finally{try{if(!u&&null!=e.return&&(i=e.return(),Object(i)!==i))return}finally{if(l)throw n}}return a}}(v)||function(t){if(t){if("string"==typeof t)return lB(t,2);var e=Object.prototype.toString.call(t).slice(8,-1);if("Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e)return Array.from(t);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return lB(t,2)}}(v)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}();i=b[0],s=b[1]}else i=s=v;if("vertical"===r){var g=u.scale,x=d+e,w=x+n,O=x-n,S=g(h-i),j=g(h+s);m.push({x1:j,y1:w,x2:j,y2:O}),m.push({x1:S,y1:x,x2:j,y2:x}),m.push({x1:S,y1:w,x2:S,y2:O})}else if("horizontal"===r){var E=l.scale,P=p+e,A=P-n,k=P+n,M=E(h-i),T=E(h+s);m.push({x1:A,y1:T,x2:k,y2:T}),m.push({x1:P,y1:M,x2:P,y2:T}),m.push({x1:A,y1:M,x2:k,y2:M})}return y.default.createElement(tA,lN({className:"recharts-errorBar",key:"bar-".concat(m.map(function(t){return"".concat(t.x1,"-").concat(t.x2,"-").concat(t.y1,"-").concat(t.y2)}))},c),m.map(function(t){return y.default.createElement("line",lN({},t,{key:"line-".concat(t.x1,"-").concat(t.x2,"-").concat(t.y1,"-").concat(t.y2)}))}))});return y.default.createElement(tA,{className:"recharts-errorBars"},s)}}],function(t,e){for(var r=0;rtypeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t){if(t){if("string"==typeof t)return lY(t,void 0);var e=Object.prototype.toString.call(t).slice(8,-1);if("Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e)return Array.from(t);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return lY(t,void 0)}}(t)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function lY(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2?arguments[2]:void 0,o=arguments.length>3?arguments[3]:void 0,i=-1,a=null!=(e=null==r?void 0:r.length)?e:0;if(a<=1)return 0;if(o&&"angleAxis"===o.axisType&&1e-6>=Math.abs(Math.abs(o.range[1]-o.range[0])-360))for(var u=o.range,l=0;l0?n[l-1].coordinate:n[a-1].coordinate,s=n[l].coordinate,f=l>=a-1?n[0].coordinate:n[l+1].coordinate,p=void 0;if(S(s-c)!==S(f-s)){var d=[];if(S(f-s)===S(u[1]-u[0])){p=f;var h=s+u[1]-u[0];d[0]=Math.min(h,(h+c)/2),d[1]=Math.max(h,(h+c)/2)}else{p=c;var y=f+u[1]-u[0];d[0]=Math.min(s,(y+s)/2),d[1]=Math.max(s,(y+s)/2)}var v=[Math.min(s,(p+s)/2),Math.max(s,(p+s)/2)];if(t>v[0]&&t<=v[1]||t>=d[0]&&t<=d[1]){i=n[l].index;break}}else{var m=Math.min(c,f),b=Math.max(c,f);if(t>(m+s)/2&&t<=(b+s)/2){i=n[l].index;break}}}else for(var g=0;g0&&g(r[g].coordinate+r[g-1].coordinate)/2&&t<=(r[g].coordinate+r[g+1].coordinate)/2||g===a-1&&t>(r[g].coordinate+r[g-1].coordinate)/2){i=r[g].index;break}return i},l2=function(t){var e,r,n=t.type.displayName,o=null!=(e=t.type)&&e.defaultProps?lZ(lZ({},t.type.defaultProps),t.props):t.props,i=o.stroke,a=o.fill;switch(n){case"Line":r=i;break;case"Area":case"Radar":r=i&&"none"!==i?i:a;break;default:r=a}return r},l3=function(t){var e=t.barSize,r=t.totalSize,n=t.stackGroups,o=void 0===n?{}:n;if(!o)return{};for(var i={},a=Object.keys(o),u=0,l=a.length;u=0});if(v&&v.length){var m=v[0].type.defaultProps,b=void 0!==m?lZ(lZ({},m),v[0].props):v[0].props,g=b.barSize,x=b[y];i[x]||(i[x]=[]);var w=(0,O.default)(g)?e:g;i[x].push({item:v[0],stackList:v.slice(1),barSize:(0,O.default)(w)?void 0:T(w,r,0)})}}return i},l5=function(t){var e,r=t.barGap,n=t.barCategoryGap,o=t.bandSize,i=t.sizeList,a=void 0===i?[]:i,u=t.maxBarSize,l=a.length;if(l<1)return null;var c=T(r,o,0,!0),s=[];if(a[0].barSize===+a[0].barSize){var f=!1,p=o/l,d=a.reduce(function(t,e){return t+e.barSize||0},0);(d+=(l-1)*c)>=o&&(d-=(l-1)*c,c=0),d>=o&&p>0&&(f=!0,p*=.9,d=l*p);var h={offset:((o-d)/2|0)-c,size:0};e=a.reduce(function(t,e){var r={item:e.item,position:{offset:h.offset+h.size+c,size:f?p:e.barSize}},n=[].concat(lH(t),[r]);return h=n[n.length-1].position,e.stackList&&e.stackList.length&&e.stackList.forEach(function(t){n.push({item:t,position:h})}),n},s)}else{var y=T(n,o,0,!0);o-2*y-(l-1)*c<=0&&(c=0);var v=(o-2*y-(l-1)*c)/l;v>1&&(v>>=0);var m=u===+u?Math.min(v,u):v;e=a.reduce(function(t,e,r){var n=[].concat(lH(t),[{item:e.item,position:{offset:y+(v+c)*r+(v-m)/2,size:m}}]);return e.stackList&&e.stackList.length&&e.stackList.forEach(function(t){n.push({item:t,position:n[n.length-1].position})}),n},s)}return e},l8=function(t,e,r,n){var o=r.children,i=r.width,a=r.margin,u=lX({children:o,legendWidth:i-(a.left||0)-(a.right||0)});if(u){var l=n||{},c=l.width,s=l.height,f=u.align,p=u.verticalAlign,d=u.layout;if(("vertical"===d||"horizontal"===d&&"middle"===p)&&"center"!==f&&E(t[f]))return lZ(lZ({},t),{},lJ({},f,t[f]+(c||0)));if(("horizontal"===d||"vertical"===d&&"center"===f)&&"middle"!==p&&E(t[p]))return lZ(lZ({},t),{},lJ({},p,t[p]+(s||0)))}return t},l6=function(t,e,r,n,o){var i=tn(e.props.children,l$).filter(function(t){var e;return e=t.props.direction,!!(0,O.default)(o)||("horizontal"===n?"yAxis"===o:"vertical"===n||"x"===e?"xAxis"===o:"y"!==e||"yAxis"===o)});if(i&&i.length){var a=i.map(function(t){return t.props.dataKey});return t.reduce(function(t,e){var n=lQ(e,r);if((0,O.default)(n))return t;var o=Array.isArray(n)?[(0,lu.default)(n),(0,la.default)(n)]:[n,n],i=a.reduce(function(t,r){var n=lQ(e,r,0),i=o[0]-Math.abs(Array.isArray(n)?n[0]:n),a=o[1]+Math.abs(Array.isArray(n)?n[1]:n);return[Math.min(i,t[0]),Math.max(a,t[1])]},[1/0,-1/0]);return[Math.min(i[0],t[0]),Math.max(i[1],t[1])]},[1/0,-1/0])}return null},l7=function(t,e,r,n,o){var i=e.map(function(e){return l6(t,e,r,o,n)}).filter(function(t){return!(0,O.default)(t)});return i&&i.length?i.reduce(function(t,e){return[Math.min(t[0],e[0]),Math.max(t[1],e[1])]},[1/0,-1/0]):null},l4=function(t,e,r,n,o){var i=e.map(function(e){var i=e.props.dataKey;return"number"===r&&i&&l6(t,e,i,n)||l0(t,i,r,o)});if("number"===r)return i.reduce(function(t,e){return[Math.min(t[0],e[0]),Math.max(t[1],e[1])]},[1/0,-1/0]);var a={};return i.reduce(function(t,e){for(var r=0,n=e.length;r=2?2*S(a[0]-a[1])*l:l,e&&(t.ticks||t.niceTicks))?(t.ticks||t.niceTicks).map(function(t){return{coordinate:n(o?o.indexOf(t):t)+l,value:t,offset:l}}).filter(function(t){return!(0,g.default)(t.coordinate)}):t.isCategorical&&t.categoricalDomain?t.categoricalDomain.map(function(t,e){return{coordinate:n(t)+l,value:t,index:e,offset:l}}):n.ticks&&!r?n.ticks(t.tickCount).map(function(t){return{coordinate:n(t)+l,value:t,offset:l}}):n.domain().map(function(t,e){return{coordinate:n(t)+l,value:o?o[t]:t,index:e,offset:l}})},cr=new WeakMap,cn=function(t,e){if("function"!=typeof e)return t;cr.has(t)||cr.set(t,new WeakMap);var r=cr.get(t);if(r.has(e))return r.get(e);var n=function(){t.apply(void 0,arguments),e.apply(void 0,arguments)};return r.set(e,n),n},co=function(t,e,r){var n=t.scale,o=t.type,i=t.layout,a=t.axisType;if("auto"===n)return"radial"===i&&"radiusAxis"===a?{scale:lt.scaleBand(),realScaleType:"band"}:"radial"===i&&"angleAxis"===a?{scale:lt.scaleLinear(),realScaleType:"linear"}:"category"===o&&e&&(e.indexOf("LineChart")>=0||e.indexOf("AreaChart")>=0||e.indexOf("ComposedChart")>=0&&!r)?{scale:lt.scalePoint(),realScaleType:"point"}:"category"===o?{scale:lt.scaleBand(),realScaleType:"band"}:{scale:lt.scaleLinear(),realScaleType:"linear"};if((0,b.default)(n)){var u="scale".concat((0,t4.default)(n));return{scale:(lt[u]||lt.scalePoint)(),realScaleType:lt[u]?u:"point"}}return(0,L.default)(n)?{scale:n}:{scale:lt.scalePoint(),realScaleType:"point"}},ci=function(t){var e=t.domain();if(e&&!(e.length<=2)){var r=e.length,n=t.range(),o=Math.min(n[0],n[1])-1e-4,i=Math.max(n[0],n[1])+1e-4,a=t(e[0]),u=t(e[r-1]);(ai||ui)&&t.domain([e[0],e[r-1]])}},ca=function(t,e){if(!t)return null;for(var r=0,n=t.length;rn)&&(o[1]=n),o[0]>n&&(o[0]=n),o[1]=0?(t[a][r][0]=o,t[a][r][1]=o+u,o=t[a][r][1]):(t[a][r][0]=i,t[a][r][1]=i+u,i=t[a][r][1])}},expand:function(t,e){if((n=t.length)>0){for(var r,n,o,i=0,a=t[0].length;i0){for(var r,n=0,o=t[e[0]],i=o.length;n0&&(n=(r=t[e[0]]).length)>0){for(var r,n,o,i=0,a=1;a=0?(t[i][r][0]=o,t[i][r][1]=o+a,o=t[i][r][1]):(t[i][r][0]=0,t[i][r][1]=0)}}},cc=function(t,e,r){var n=e.map(function(t){return t.props.dataKey}),o=cl[r];return(function(){var t=t9([]),e=ln,r=lr,n=lo;function o(o){var i,a,u=Array.from(t.apply(this,arguments),li),l=u.length,c=-1;for(let t of o)for(i=0,++c;i=0?0:o<0?o:n}return r[0]},cy=function(t,e){var r,n=(null!=(r=t.type)&&r.defaultProps?lZ(lZ({},t.type.defaultProps),t.props):t.props).stackId;if(A(n)){var o=e[n];if(o){var i=o.items.indexOf(t);return i>=0?o.stackedData[i]:null}}return null},cv=function(t,e,r){return Object.keys(t).reduce(function(n,o){var i=t[o].stackedData.reduce(function(t,n){var o=n.slice(e,r+1).reduce(function(t,e){return[(0,lu.default)(e.concat([t[0]]).filter(E)),(0,la.default)(e.concat([t[1]]).filter(E))]},[1/0,-1/0]);return[Math.min(t[0],o[0]),Math.max(t[1],o[1])]},[1/0,-1/0]);return[Math.min(i[0],n[0]),Math.max(i[1],n[1])]},[1/0,-1/0]).map(function(t){return t===1/0||t===-1/0?0:t})},cm=/^dataMin[\s]*-[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,cb=/^dataMax[\s]*\+[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,cg=function(t,e,r){if((0,L.default)(t))return t(e,r);if(!Array.isArray(t))return e;var n=[];if(E(t[0]))n[0]=r?t[0]:Math.min(t[0],e[0]);else if(cm.test(t[0])){var o=+cm.exec(t[0])[1];n[0]=e[0]-o}else(0,L.default)(t[0])?n[0]=t[0](e[0]):n[0]=e[0];if(E(t[1]))n[1]=r?t[1]:Math.max(t[1],e[1]);else if(cb.test(t[1])){var i=+cb.exec(t[1])[1];n[1]=e[1]+i}else(0,L.default)(t[1])?n[1]=t[1](e[1]):n[1]=e[1];return n},cx=function(t,e,r){if(t&&t.scale&&t.scale.bandwidth){var n=t.scale.bandwidth();if(!r||n>0)return n}if(t&&e&&e.length>=2){for(var o=(0,tx.default)(e,function(t){return t.coordinate}),i=1/0,a=1,u=o.length;a0&&e.handleDrag(t.changedTouches[0])}),cL(e,"handleDragEnd",function(){e.setState({isTravellerMoving:!1,isSlideMoving:!1},function(){var t=e.props,r=t.endIndex,n=t.onDragEnd,o=t.startIndex;null==n||n({endIndex:r,startIndex:o})}),e.detachDragEndListener()}),cL(e,"handleLeaveWrapper",function(){(e.state.isTravellerMoving||e.state.isSlideMoving)&&(e.leaveTimer=window.setTimeout(e.handleDragEnd,e.props.leaveTimeOut))}),cL(e,"handleEnterSlideOrTraveller",function(){e.setState({isTextActive:!0})}),cL(e,"handleLeaveSlideOrTraveller",function(){e.setState({isTextActive:!1})}),cL(e,"handleSlideDragStart",function(t){var r=cU(t)?t.changedTouches[0]:t;e.setState({isTravellerMoving:!1,isSlideMoving:!0,slideMoveStartX:r.pageX}),e.attachDragEndListener()}),e.travellerDragStartHandlers={startX:e.handleTravellerDragStart.bind(e,"startX"),endX:e.handleTravellerDragStart.bind(e,"endX")},e.state={},e}if("function"!=typeof t&&null!==t)throw TypeError("Super expression must either be null or a function");return n.prototype=Object.create(t&&t.prototype,{constructor:{value:n,writable:!0,configurable:!0}}),Object.defineProperty(n,"prototype",{writable:!1}),t&&cB(n,t),e=[{key:"componentWillUnmount",value:function(){this.leaveTimer&&(clearTimeout(this.leaveTimer),this.leaveTimer=null),this.detachDragEndListener()}},{key:"getIndex",value:function(t){var e=t.startX,r=t.endX,o=this.state.scaleValues,i=this.props,a=i.gap,u=i.data.length-1,l=Math.min(e,r),c=Math.max(e,r),s=n.getIndexInRange(o,l),f=n.getIndexInRange(o,c);return{startIndex:s-s%a,endIndex:f===u?u:f-f%a}}},{key:"getTextOfTick",value:function(t){var e=this.props,r=e.data,n=e.tickFormatter,o=e.dataKey,i=lQ(r[t],o,t);return(0,L.default)(n)?n(i,t):i}},{key:"attachDragEndListener",value:function(){window.addEventListener("mouseup",this.handleDragEnd,!0),window.addEventListener("touchend",this.handleDragEnd,!0),window.addEventListener("mousemove",this.handleDrag,!0)}},{key:"detachDragEndListener",value:function(){window.removeEventListener("mouseup",this.handleDragEnd,!0),window.removeEventListener("touchend",this.handleDragEnd,!0),window.removeEventListener("mousemove",this.handleDrag,!0)}},{key:"handleSlideDrag",value:function(t){var e=this.state,r=e.slideMoveStartX,n=e.startX,o=e.endX,i=this.props,a=i.x,u=i.width,l=i.travellerWidth,c=i.startIndex,s=i.endIndex,f=i.onChange,p=t.pageX-r;p>0?p=Math.min(p,a+u-l-o,a+u-l-n):p<0&&(p=Math.max(p,a-n,a-o));var d=this.getIndex({startX:n+p,endX:o+p});(d.startIndex!==c||d.endIndex!==s)&&f&&f(d),this.setState({startX:n+p,endX:o+p,slideMoveStartX:t.pageX})}},{key:"handleTravellerDragStart",value:function(t,e){var r=cU(e)?e.changedTouches[0]:e;this.setState({isSlideMoving:!1,isTravellerMoving:!0,movingTravellerId:t,brushMoveStartX:r.pageX}),this.attachDragEndListener()}},{key:"handleTravellerMove",value:function(t){var e=this.state,r=e.brushMoveStartX,n=e.movingTravellerId,o=e.endX,i=e.startX,a=this.state[n],u=this.props,l=u.x,c=u.width,s=u.travellerWidth,f=u.onChange,p=u.gap,d=u.data,h={startX:this.state.startX,endX:this.state.endX},y=t.pageX-r;y>0?y=Math.min(y,l+c-s-a):y<0&&(y=Math.max(y,l-a)),h[n]=a+y;var v=this.getIndex(h),m=v.startIndex,b=v.endIndex,g=function(){var t=d.length-1;return"startX"===n&&(o>i?m%p==0:b%p==0)||!!(oi?b%p==0:m%p==0)||!!(o>i)&&b===t};this.setState(cL(cL({},n,a+y),"brushMoveStartX",t.pageX),function(){f&&g()&&f(v)})}},{key:"handleTravellerMoveKeyboard",value:function(t,e){var r=this,n=this.state,o=n.scaleValues,i=n.startX,a=n.endX,u=this.state[e],l=o.indexOf(u);if(-1!==l){var c=l+t;if(-1!==c&&!(c>=o.length)){var s=o[c];"startX"===e&&s>=a||"endX"===e&&s<=i||this.setState(cL({},e,s),function(){r.props.onChange(r.getIndex({startX:r.state.startX,endX:r.state.endX}))})}}}},{key:"renderBackground",value:function(){var t=this.props,e=t.x,r=t.y,n=t.width,o=t.height,i=t.fill,a=t.stroke;return y.default.createElement("rect",{stroke:a,fill:i,x:e,y:r,width:n,height:o})}},{key:"renderPanorama",value:function(){var t=this.props,e=t.x,r=t.y,n=t.width,o=t.height,i=t.data,a=t.children,u=t.padding,l=y.Children.only(a);return l?y.default.cloneElement(l,{x:e,y:r,width:n,height:o,margin:u,compact:!0,data:i}):null}},{key:"renderTravellerLayer",value:function(t,e){var r,o,i=this,a=this.props,u=a.y,l=a.travellerWidth,c=a.height,s=a.traveller,f=a.ariaLabel,p=a.data,d=a.startIndex,h=a.endIndex,v=Math.max(t,this.props.x),m=cC(cC({},tl(this.props,!1)),{},{x:v,y:u,width:l,height:c}),b=f||"Min value: ".concat(null==(r=p[d])?void 0:r.name,", Max value: ").concat(null==(o=p[h])?void 0:o.name);return y.default.createElement(tA,{tabIndex:0,role:"slider","aria-label":b,"aria-valuenow":t,className:"recharts-brush-traveller",onMouseEnter:this.handleEnterSlideOrTraveller,onMouseLeave:this.handleLeaveSlideOrTraveller,onMouseDown:this.travellerDragStartHandlers[e],onTouchStart:this.travellerDragStartHandlers[e],onKeyDown:function(t){["ArrowLeft","ArrowRight"].includes(t.key)&&(t.preventDefault(),t.stopPropagation(),i.handleTravellerMoveKeyboard("ArrowRight"===t.key?1:-1,e))},onFocus:function(){i.setState({isTravellerFocused:!0})},onBlur:function(){i.setState({isTravellerFocused:!1})},style:{cursor:"col-resize"}},n.renderTraveller(s,m))}},{key:"renderSlide",value:function(t,e){var r=this.props,n=r.y,o=r.height,i=r.stroke,a=r.travellerWidth,u=Math.min(t,e)+a,l=Math.max(Math.abs(e-t)-a,0);return y.default.createElement("rect",{className:"recharts-brush-slide",onMouseEnter:this.handleEnterSlideOrTraveller,onMouseLeave:this.handleLeaveSlideOrTraveller,onMouseDown:this.handleSlideDragStart,onTouchStart:this.handleSlideDragStart,style:{cursor:"move"},stroke:"none",fill:i,fillOpacity:.2,x:u,y:n,width:l,height:o})}},{key:"renderText",value:function(){var t=this.props,e=t.startIndex,r=t.endIndex,n=t.y,o=t.height,i=t.travellerWidth,a=t.stroke,u=this.state,l=u.startX,c=u.endX,s={pointerEvents:"none",fill:a};return y.default.createElement(tA,{className:"recharts-brush-texts"},y.default.createElement(ov,cT({textAnchor:"end",verticalAnchor:"middle",x:Math.min(l,c)-5,y:n+o/2},s),this.getTextOfTick(e)),y.default.createElement(ov,cT({textAnchor:"start",verticalAnchor:"middle",x:Math.max(l,c)+i+5,y:n+o/2},s),this.getTextOfTick(r)))}},{key:"render",value:function(){var t=this.props,e=t.data,r=t.className,n=t.children,o=t.x,i=t.y,a=t.width,u=t.height,l=t.alwaysShowText,c=this.state,s=c.startX,f=c.endX,p=c.isTextActive,d=c.isSlideMoving,h=c.isTravellerMoving,m=c.isTravellerFocused;if(!e||!e.length||!E(o)||!E(i)||!E(a)||!E(u)||a<=0||u<=0)return null;var b=(0,v.default)("recharts-brush",r),g=1===y.default.Children.count(n),x=ck("userSelect","none");return y.default.createElement(tA,{className:b,onMouseLeave:this.handleLeaveWrapper,onTouchMove:this.handleTouchMove,style:x},this.renderBackground(),g&&this.renderPanorama(),this.renderSlide(s,f),this.renderTravellerLayer(s,"startX"),this.renderTravellerLayer(f,"endX"),(p||d||h||m||l)&&this.renderText())}}],r=[{key:"renderDefaultTraveller",value:function(t){var e=t.x,r=t.y,n=t.width,o=t.height,i=t.stroke,a=Math.floor(r+o/2)-1;return y.default.createElement(y.default.Fragment,null,y.default.createElement("rect",{x:e,y:r,width:n,height:o,fill:i,stroke:"none"}),y.default.createElement("line",{x1:e+1,y1:a,x2:e+n-1,y2:a,fill:"none",stroke:"#fff"}),y.default.createElement("line",{x1:e+1,y1:a+2,x2:e+n-1,y2:a+2,fill:"none",stroke:"#fff"}))}},{key:"renderTraveller",value:function(t,e){return y.default.isValidElement(t)?y.default.cloneElement(t,e):(0,L.default)(t)?t(e):n.renderDefaultTraveller(e)}},{key:"getDerivedStateFromProps",value:function(t,e){var r=t.data,n=t.width,o=t.x,i=t.travellerWidth,a=t.updateId,u=t.startIndex,l=t.endIndex;if(r!==e.prevData||a!==e.prevUpdateId)return cC({prevData:r,prevTravellerWidth:i,prevUpdateId:a,prevX:o,prevWidth:n},r&&r.length?cz({data:r,width:n,x:o,travellerWidth:i,startIndex:u,endIndex:l}):{scale:null,scaleValues:null});if(e.scale&&(n!==e.prevWidth||o!==e.prevX||i!==e.prevTravellerWidth)){e.scale.range([o,o+n-i]);var c=e.scale.domain().map(function(t){return e.scale(t)});return{prevData:r,prevTravellerWidth:i,prevUpdateId:a,prevX:o,prevWidth:n,startX:e.scale(t.startIndex),endX:e.scale(t.endIndex),scaleValues:c}}return null}},{key:"getIndexInRange",value:function(t,e){for(var r=t.length,n=0,o=r-1;o-n>1;){var i=Math.floor((n+o)/2);t[i]>e?o=i:n=i}return e>=t[o]?o:n}}],e&&cD(n.prototype,e),r&&cD(n,r),Object.defineProperty(n,"prototype",{writable:!1}),n}(y.PureComponent);function c$(t){return(c$="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function cW(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function cq(t){for(var e=1;et.length)&&(e=t.length);for(var r=0,n=Array(e);r2&&void 0!==arguments[2]?arguments[2]:{top:0,right:0,bottom:0,left:0};return Math.min(Math.abs(t-(r.left||0)-(r.right||0)),Math.abs(e-(r.top||0)-(r.bottom||0)))/2},cK=function(t,e){var r=t.x,n=t.y;return Math.sqrt(Math.pow(r-e.x,2)+Math.pow(n-e.y,2))},cZ=function(t,e){var r=t.x,n=t.y,o=e.cx,i=e.cy,a=cK({x:r,y:n},{x:o,y:i});if(a<=0)return{radius:a};var u=Math.acos((r-o)/a);return n>i&&(u=2*Math.PI-u),{radius:a,angle:180*u/Math.PI,angleInRadian:u}},cJ=function(t){var e=t.startAngle,r=t.endAngle,n=Math.min(Math.floor(e/360),Math.floor(r/360));return{startAngle:e-360*n,endAngle:r-360*n}},cQ=function(t,e){var r,n=cZ({x:t.x,y:t.y},e),o=n.radius,i=n.angle,a=e.innerRadius,u=e.outerRadius;if(ou)return!1;if(0===o)return!0;var l=cJ(e),c=l.startAngle,s=l.endAngle,f=i;if(c<=s){for(;f>s;)f-=360;for(;f=c&&f<=s}else{for(;f>c;)f-=360;for(;f=s&&f<=c}return r?cq(cq({},e),{},{radius:o,angle:f+360*Math.min(Math.floor(e.startAngle/360),Math.floor(e.endAngle/360))}):null};function c0(t){return(c0="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}t.s(["RADIAN",0,cG,"formatAxisMap",0,function(t,e,r,n,o){var i=t.width,a=t.height,u=t.startAngle,l=t.endAngle,c=T(t.cx,i,i/2),s=T(t.cy,a,a/2),f=cY(i,a,r),p=T(t.innerRadius,f,0),d=T(t.outerRadius,f,.8*f);return Object.keys(e).reduce(function(t,r){var i,a=e[r],f=a.domain,h=a.reversed;if((0,O.default)(a.range))"angleAxis"===n?i=[u,l]:"radiusAxis"===n&&(i=[p,d]),h&&(i=[i[1],i[0]]);else{var y,v=function(t){if(Array.isArray(t))return t}(y=i=a.range)||function(t){var e=null==t?null:"u">typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=e){var r,n,o,i,a=[],u=!0,l=!1;try{o=(e=e.call(t)).next,!1;for(;!(u=(r=o.call(e)).done)&&(a.push(r.value),2!==a.length);u=!0);}catch(t){l=!0,n=t}finally{try{if(!u&&null!=e.return&&(i=e.return(),Object(i)!==i))return}finally{if(l)throw n}}return a}}(y)||function(t){if(t){if("string"==typeof t)return cX(t,2);var e=Object.prototype.toString.call(t).slice(8,-1);if("Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e)return Array.from(t);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return cX(t,2)}}(y)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}();u=v[0],l=v[1]}var m=co(a,o),b=m.realScaleType,g=m.scale;g.domain(f).range(i),ci(g);var x=cf(g,cq(cq({},a),{},{realScaleType:b})),w=cq(cq(cq({},a),x),{},{range:i,radius:d,realScaleType:b,scale:g,cx:c,cy:s,innerRadius:p,outerRadius:d,startAngle:u,endAngle:l});return cq(cq({},t),{},cV({},r,w))},{})},"getMaxRadius",0,cY,"getTickClassName",0,function(t){return(0,y.isValidElement)(t)||(0,L.default)(t)||"boolean"==typeof t?"":t.className},"inRangeOfSector",0,cQ,"polarToCartesian",0,cH],768970);var c1=["offset"];function c2(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r=0?1:-1;"insideStart"===i?(n=d+x*u,o=m):"insideEnd"===i?(n=h-x*u,o=!m):"end"===i&&(n=h+x*u,o=m),o=g<=0?o:!o;var w=cH(c,s,b,n),j=cH(c,s,b,n+(o?1:-1)*359),E="M".concat(w.x,",").concat(w.y,"\n A").concat(b,",").concat(b,",0,1,").concat(+!o,",\n ").concat(j.x,",").concat(j.y),P=(0,O.default)(t.id)?M("recharts-radial-line-"):t.id;return y.default.createElement("text",c8({},r,{dominantBaseline:"central",className:(0,v.default)("recharts-radial-bar-label",l)}),y.default.createElement("defs",null,y.default.createElement("path",{id:P,d:E})),y.default.createElement("textPath",{xlinkHref:"#".concat(P)},e))},c4=function(t){var e=t.viewBox,r=t.offset,n=t.position,o=e.cx,i=e.cy,a=e.innerRadius,u=e.outerRadius,l=(e.startAngle+e.endAngle)/2;if("outside"===n){var c=cH(o,i,u+r,l),s=c.x;return{x:s,y:c.y,textAnchor:s>=o?"start":"end",verticalAnchor:"middle"}}if("center"===n)return{x:o,y:i,textAnchor:"middle",verticalAnchor:"middle"};if("centerTop"===n)return{x:o,y:i,textAnchor:"middle",verticalAnchor:"start"};if("centerBottom"===n)return{x:o,y:i,textAnchor:"middle",verticalAnchor:"end"};var f=cH(o,i,(a+u)/2,l);return{x:f.x,y:f.y,textAnchor:"middle",verticalAnchor:"middle"}},c9=function(t){var e=t.viewBox,r=t.parentViewBox,n=t.offset,o=t.position,i=e.x,a=e.y,u=e.width,l=e.height,c=l>=0?1:-1,s=c*n,f=c>0?"end":"start",p=c>0?"start":"end",d=u>=0?1:-1,h=d*n,y=d>0?"end":"start",v=d>0?"start":"end";if("top"===o)return c5(c5({},{x:i+u/2,y:a-c*n,textAnchor:"middle",verticalAnchor:f}),r?{height:Math.max(a-r.y,0),width:u}:{});if("bottom"===o)return c5(c5({},{x:i+u/2,y:a+l+s,textAnchor:"middle",verticalAnchor:p}),r?{height:Math.max(r.y+r.height-(a+l),0),width:u}:{});if("left"===o){var m={x:i-h,y:a+l/2,textAnchor:y,verticalAnchor:"middle"};return c5(c5({},m),r?{width:Math.max(m.x-r.x,0),height:l}:{})}if("right"===o){var b={x:i+u+h,y:a+l/2,textAnchor:v,verticalAnchor:"middle"};return c5(c5({},b),r?{width:Math.max(r.x+r.width-b.x,0),height:l}:{})}var g=r?{width:u,height:l}:{};return"insideLeft"===o?c5({x:i+h,y:a+l/2,textAnchor:v,verticalAnchor:"middle"},g):"insideRight"===o?c5({x:i+u-h,y:a+l/2,textAnchor:y,verticalAnchor:"middle"},g):"insideTop"===o?c5({x:i+u/2,y:a+s,textAnchor:"middle",verticalAnchor:p},g):"insideBottom"===o?c5({x:i+u/2,y:a+l-s,textAnchor:"middle",verticalAnchor:f},g):"insideTopLeft"===o?c5({x:i+h,y:a+s,textAnchor:v,verticalAnchor:p},g):"insideTopRight"===o?c5({x:i+u-h,y:a+s,textAnchor:y,verticalAnchor:p},g):"insideBottomLeft"===o?c5({x:i+h,y:a+l-s,textAnchor:v,verticalAnchor:f},g):"insideBottomRight"===o?c5({x:i+u-h,y:a+l-s,textAnchor:y,verticalAnchor:f},g):(0,R.default)(o)&&(E(o.x)||j(o.x))&&(E(o.y)||j(o.y))?c5({x:i+T(o.x,u),y:a+T(o.y,l),textAnchor:"end",verticalAnchor:"end"},g):c5({x:i+u/2,y:a+l/2,textAnchor:"middle",verticalAnchor:"middle"},g)};function st(t){var e,r=t.offset,n=c5({offset:void 0===r?5:r},function(t,e){if(null==t)return{};var r,n,o=function(t,e){if(null==t)return{};var r={};for(var n in t)if(Object.prototype.hasOwnProperty.call(t,n)){if(e.indexOf(n)>=0)continue;r[n]=t[n]}return r}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(n=0;n=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}(t,c1)),o=n.viewBox,i=n.position,a=n.value,u=n.children,l=n.content,c=n.className,s=n.textBreakAll;if(!o||(0,O.default)(a)&&(0,O.default)(u)&&!(0,y.isValidElement)(l)&&!(0,L.default)(l))return null;if((0,y.isValidElement)(l))return(0,y.cloneElement)(l,n);if((0,L.default)(l)){if(e=(0,y.createElement)(l,n),(0,y.isValidElement)(e))return e}else e=c6(n);var f="cx"in o&&E(o.cx),p=tl(n,!0);if(f&&("insideStart"===i||"insideEnd"===i||"end"===i))return c7(n,e,p);var d=f?c4(n):c9(n);return y.default.createElement(ov,c8({className:(0,v.default)("recharts-label",void 0===c?"":c)},p,d,{breakAll:s}),e)}st.displayName="Label";var se=function(t){var e=t.cx,r=t.cy,n=t.angle,o=t.startAngle,i=t.endAngle,a=t.r,u=t.radius,l=t.innerRadius,c=t.outerRadius,s=t.x,f=t.y,p=t.top,d=t.left,h=t.width,y=t.height,v=t.clockWise,m=t.labelViewBox;if(m)return m;if(E(h)&&E(y)){if(E(s)&&E(f))return{x:s,y:f,width:h,height:y};if(E(p)&&E(d))return{x:p,y:d,width:h,height:y}}return E(s)&&E(f)?{x:s,y:f,width:0,height:0}:E(e)&&E(r)?{cx:e,cy:r,startAngle:o||n||0,endAngle:i||n||0,innerRadius:l||0,outerRadius:c||u||a||0,clockWise:v}:t.viewBox?t.viewBox:{}};st.parseViewBox=se,st.renderCallByParent=function(t,e){var r,n,o=!(arguments.length>2)||void 0===arguments[2]||arguments[2];if(!t||!t.children&&o&&!t.label)return null;var i=t.children,a=se(t),u=tn(i,st).map(function(t,r){return(0,y.cloneElement)(t,{viewBox:e||a,key:"label-".concat(r)})});if(!o)return u;return[(r=t.label,n=e||a,!r?null:!0===r?y.default.createElement(st,{key:"label-implicit",viewBox:n}):A(r)?y.default.createElement(st,{key:"label-implicit",viewBox:n,value:r}):(0,y.isValidElement)(r)?r.type===st?(0,y.cloneElement)(r,{key:"label-implicit",viewBox:n}):y.default.createElement(st,{key:"label-implicit",content:r,viewBox:n}):(0,L.default)(r)?y.default.createElement(st,{key:"label-implicit",content:r,viewBox:n}):(0,R.default)(r)?y.default.createElement(st,c8({viewBox:n},r,{key:"label-implicit"})):null)].concat(function(t){if(Array.isArray(t))return c2(t)}(u)||function(t){if("u">typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(u)||function(t){if(t){if("string"==typeof t)return c2(t,void 0);var e=Object.prototype.toString.call(t).slice(8,-1);if("Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e)return Array.from(t);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return c2(t,void 0)}}(u)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())},t.s(["Label",0,st],800494);var sr=function(t,e){var r=t.alwaysShow,n=t.ifOverflow;return r&&(n="extendDomain"),n===e},sn=t.i(460793),so=t.i(126063),si=function(t){return null};si.displayName="Cell",t.s(["Cell",0,si],322787);var sa=t.i(4879);function su(t){return(su="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var sl=["valueAccessor"],sc=["data","dataKey","clockWise","id","textBreakAll"];function ss(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r=0)continue;r[n]=t[n]}return r}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(n=0;n=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}var sy=function(t){return Array.isArray(t.value)?(0,sa.default)(t.value):t.value};function sv(t){var e=t.valueAccessor,r=void 0===e?sy:e,n=sh(t,sl),o=n.data,i=n.dataKey,a=n.clockWise,u=n.id,l=n.textBreakAll,c=sh(n,sc);return o&&o.length?y.default.createElement(tA,{className:"recharts-label-list"},o.map(function(t,e){var n=(0,O.default)(i)?r(t,e):lQ(t&&t.payload,i),o=(0,O.default)(u)?{}:{id:"".concat(u,"-").concat(e)};return y.default.createElement(st,sf({},tl(t,!0),c,o,{parentViewBox:t.parentViewBox,value:n,textBreakAll:l,viewBox:st.parseViewBox((0,O.default)(a)?t:sd(sd({},t),{},{clockWise:a})),key:"label-".concat(e),index:e}))})):null}sv.displayName="LabelList",sv.renderCallByParent=function(t,e){var r,n=!(arguments.length>2)||void 0===arguments[2]||arguments[2];if(!t||!t.children&&n&&!t.label)return null;var o=tn(t.children,sv).map(function(t,r){return(0,y.cloneElement)(t,{data:e,key:"labelList-".concat(r)})});return n?[(r=t.label,!r?null:!0===r?y.default.createElement(sv,{key:"labelList-implicit",data:e}):y.default.isValidElement(r)||(0,L.default)(r)?y.default.createElement(sv,{key:"labelList-implicit",data:e,content:r}):(0,R.default)(r)?y.default.createElement(sv,sf({data:e},r,{key:"labelList-implicit"})):null)].concat(function(t){if(Array.isArray(t))return ss(t)}(o)||function(t){if("u">typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(o)||function(t){if(t){if("string"==typeof t)return ss(t,void 0);var e=Object.prototype.toString.call(t).slice(8,-1);if("Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e)return Array.from(t);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return ss(t,void 0)}}(o)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()):o},t.s(["LabelList",0,sv],969212);var sm=t.i(101320),sb=t.i(20164);function sg(t){return(sg="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function sx(){return(sx=Object.assign.bind()).apply(this,arguments)}function sw(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);rtypeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=e){var r,n,o,i,a=[],u=!0,l=!1;try{o=(e=e.call(t)).next,!1;for(;!(u=(r=o.call(e)).done)&&(a.push(r.value),2!==a.length);u=!0);}catch(t){l=!0,n=t}finally{try{if(!u&&null!=e.return&&(i=e.return(),Object(i)!==i))return}finally{if(l)throw n}}return a}}(e)||function(t){if(t){if("string"==typeof t)return sw(t,2);var e=Object.prototype.toString.call(t).slice(8,-1);if("Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e)return Array.from(t);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return sw(t,2)}}(e)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),i=o[0],a=o[1];(0,y.useEffect)(function(){if(n.current&&n.current.getTotalLength)try{var t=n.current.getTotalLength();t&&a(t)}catch(t){}},[]);var u=r.x,l=r.y,c=r.upperWidth,s=r.lowerWidth,f=r.height,p=r.className,d=r.animationEasing,h=r.animationDuration,m=r.animationBegin,b=r.isUpdateAnimationActive;if(u!==+u||l!==+l||c!==+c||s!==+s||f!==+f||0===c&&0===s||0===f)return null;var g=(0,v.default)("recharts-trapezoid",p);return b?y.default.createElement(r7,{canBegin:i>0,from:{upperWidth:0,lowerWidth:0,height:f,x:u,y:l},to:{upperWidth:c,lowerWidth:s,height:f,x:u,y:l},duration:h,animationEasing:d,isActive:b},function(t){var e=t.upperWidth,o=t.lowerWidth,a=t.height,u=t.x,l=t.y;return y.default.createElement(r7,{canBegin:i>0,from:"0px ".concat(-1===i?1:i,"px"),to:"".concat(i,"px 0px"),attributeName:"strokeDasharray",begin:m,duration:h,easing:d},y.default.createElement("path",sx({},tl(r,!0),{className:g,d:sj(u,l,e,o,a),ref:n})))}):y.default.createElement("g",null,y.default.createElement("path",sx({},tl(r,!0),{className:g,d:sj(u,l,c,s,f)})))};function sA(t){return(sA="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function sk(){return(sk=Object.assign.bind()).apply(this,arguments)}function sM(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function sT(t){for(var e=1;e180),",").concat(+(i>l),",\n ").concat(s.x,",").concat(s.y,"\n ");if(n>0){var p=cH(e,r,n,i),d=cH(e,r,n,l);f+="L ".concat(d.x,",").concat(d.y,"\n A ").concat(n,",").concat(n,",0,\n ").concat(+(Math.abs(u)>180),",").concat(+(i<=l),",\n ").concat(p.x,",").concat(p.y," Z")}else f+="L ".concat(e,",").concat(r," Z");return f},sD=function(t){var e=t.cx,r=t.cy,n=t.innerRadius,o=t.outerRadius,i=t.cornerRadius,a=t.forceCornerRadius,u=t.cornerIsExternal,l=t.startAngle,c=t.endAngle,s=S(c-l),f=s_({cx:e,cy:r,radius:o,angle:l,sign:s,cornerRadius:i,cornerIsExternal:u}),p=f.circleTangency,d=f.lineTangency,h=f.theta,y=s_({cx:e,cy:r,radius:o,angle:c,sign:-s,cornerRadius:i,cornerIsExternal:u}),v=y.circleTangency,m=y.lineTangency,b=y.theta,g=u?Math.abs(l-c):Math.abs(l-c)-h-b;if(g<0)return a?"M ".concat(d.x,",").concat(d.y,"\n a").concat(i,",").concat(i,",0,0,1,").concat(2*i,",0\n a").concat(i,",").concat(i,",0,0,1,").concat(-(2*i),",0\n "):sC({cx:e,cy:r,innerRadius:n,outerRadius:o,startAngle:l,endAngle:c});var x="M ".concat(d.x,",").concat(d.y,"\n A").concat(i,",").concat(i,",0,0,").concat(+(s<0),",").concat(p.x,",").concat(p.y,"\n A").concat(o,",").concat(o,",0,").concat(+(g>180),",").concat(+(s<0),",").concat(v.x,",").concat(v.y,"\n A").concat(i,",").concat(i,",0,0,").concat(+(s<0),",").concat(m.x,",").concat(m.y,"\n ");if(n>0){var w=s_({cx:e,cy:r,radius:n,angle:l,sign:s,isExternal:!0,cornerRadius:i,cornerIsExternal:u}),O=w.circleTangency,j=w.lineTangency,E=w.theta,P=s_({cx:e,cy:r,radius:n,angle:c,sign:-s,isExternal:!0,cornerRadius:i,cornerIsExternal:u}),A=P.circleTangency,k=P.lineTangency,M=P.theta,T=u?Math.abs(l-c):Math.abs(l-c)-E-M;if(T<0&&0===i)return"".concat(x,"L").concat(e,",").concat(r,"Z");x+="L".concat(k.x,",").concat(k.y,"\n A").concat(i,",").concat(i,",0,0,").concat(+(s<0),",").concat(A.x,",").concat(A.y,"\n A").concat(n,",").concat(n,",0,").concat(+(T>180),",").concat(+(s>0),",").concat(O.x,",").concat(O.y,"\n A").concat(i,",").concat(i,",0,0,").concat(+(s<0),",").concat(j.x,",").concat(j.y,"Z")}else x+="L".concat(e,",").concat(r,"Z");return x},sI={cx:0,cy:0,innerRadius:0,outerRadius:0,startAngle:0,endAngle:0,cornerRadius:0,forceCornerRadius:!1,cornerIsExternal:!1},sN=function(t){var e,r=sT(sT({},sI),t),n=r.cx,o=r.cy,i=r.innerRadius,a=r.outerRadius,u=r.cornerRadius,l=r.forceCornerRadius,c=r.cornerIsExternal,s=r.startAngle,f=r.endAngle,p=r.className;if(a0&&360>Math.abs(s-f)?sD({cx:n,cy:o,innerRadius:i,outerRadius:a,cornerRadius:Math.min(m,h/2),forceCornerRadius:l,cornerIsExternal:c,startAngle:s,endAngle:f}):sC({cx:n,cy:o,innerRadius:i,outerRadius:a,startAngle:s,endAngle:f}),y.default.createElement("path",sk({},tl(r,!0),{className:d,d:e,role:"img"}))};t.s(["Sector",0,sN],239425);var sB=["option","shapeType","propTransformer","activeClassName","isActive"];function sL(t){return(sL="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function sR(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function sz(t){for(var e=1;e=0)continue;r[n]=t[n]}return r}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(n=0;n=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}(t,sB);if((0,y.isValidElement)(r))e=(0,y.cloneElement)(r,sz(sz({},u),(0,y.isValidElement)(r)?r.props:r));else if((0,L.default)(r))e=r(u);else if((0,sm.default)(r)&&!(0,sb.default)(r)){var l=(void 0===o?function(t,e){return sz(sz({},e),t)}:o)(r,u);e=y.default.createElement(sU,{shapeType:n,elementProps:l})}else e=y.default.createElement(sU,{shapeType:n,elementProps:u});return a?y.default.createElement(tA,{className:void 0===i?"recharts-active-shape":i},e):e}function s$(t,e){return null!=e&&"trapezoids"in t.props}function sW(t,e){return null!=e&&"sectors"in t.props}function sq(t,e){return null!=e&&"points"in t.props}function sV(t,e){var r,n,o=t.x===(null==e||null==(r=e.labelViewBox)?void 0:r.x)||t.x===e.x,i=t.y===(null==e||null==(n=e.labelViewBox)?void 0:n.y)||t.y===e.y;return o&&i}function sX(t,e){var r=t.endAngle===e.endAngle,n=t.startAngle===e.startAngle;return r&&n}function sG(t,e){var r=t.x===e.x,n=t.y===e.y,o=t.z===e.z;return r&&n&&o}function sH(t){var e,r,n,o=t.activeTooltipItem,i=t.graphicalItem,a=t.itemData,u=(s$(i,o)?e="trapezoids":sW(i,o)?e="sectors":sq(i,o)&&(e="points"),e),l=s$(i,o)?null==(r=o.tooltipPayload)||null==(r=r[0])||null==(r=r.payload)?void 0:r.payload:sW(i,o)?null==(n=o.tooltipPayload)||null==(n=n[0])||null==(n=n.payload)?void 0:n.payload:sq(i,o)?o.payload:{},c=a.filter(function(t,e){var r=(0,lc.default)(l,t),n=i.props[u].filter(function(t){var e;return(s$(i,o)?e=sV:sW(i,o)?e=sX:sq(i,o)&&(e=sG),e)(t,o)}),a=i.props[u].indexOf(n[n.length-1]);return r&&e===a});return a.indexOf(c[c.length-1])}t.s(["Shape",0,sF,"getActiveShapeIndexForTooltip",0,sH,"isFunnel",0,s$,"isPie",0,sW,"isScatter",0,sq],318519);var sY=["x","y"];function sK(t){return(sK="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function sZ(){return(sZ=Object.assign.bind()).apply(this,arguments)}function sJ(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function sQ(t){for(var e=1;e=0)continue;r[n]=t[n]}return r}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(n=0;n=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}(t,sY),i=parseInt("".concat(r),10),a=parseInt("".concat(n),10),u=parseInt("".concat(e.height||o.height),10),l=parseInt("".concat(e.width||o.width),10);return sQ(sQ(sQ(sQ(sQ({},e),o),i?{x:i}:{}),a?{y:a}:{}),{},{height:u,width:l,name:e.name,radius:e.radius})}function s1(t){return y.default.createElement(sF,sZ({shapeType:"rectangle",propTransformer:s0,activeClassName:"recharts-active-bar"},t))}var s2=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return function(r,n){if("number"==typeof t)return t;var o=E(r)||P(r);return o?t(r,n):(o||tw(!1),e)}},s3=["value","background"];function s5(t){return(s5="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function s8(){return(s8=Object.assign.bind()).apply(this,arguments)}function s6(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function s7(t){for(var e=1;e=0)continue;r[n]=t[n]}return r}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(n=0;n=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}(e,s3);if(!a)return null;var l=s7(s7(s7(s7(s7({},u),{},{fill:"#eee"},a),i),G(t.props,e,r)),{},{onAnimationStart:t.handleAnimationStart,onAnimationEnd:t.handleAnimationEnd,dataKey:n,index:r,className:"recharts-bar-background-rectangle"});return y.default.createElement(s1,s8({key:"background-bar-".concat(r),option:t.props.background,isActive:r===o},l))})}},{key:"renderErrorBar",value:function(t,e){if(this.props.isAnimationActive&&!this.state.isAnimationFinished)return null;var r=this.props,n=r.data,o=r.xAxis,i=r.yAxis,a=r.layout,u=tn(r.children,l$);if(!u)return null;var l="vertical"===a?n[0].height/2:n[0].width/2,c=function(t,e){var r=Array.isArray(t.value)?t.value[1]:t.value;return{x:t.x,y:t.y,value:r,errorVal:lQ(t,e)}};return y.default.createElement(tA,{clipPath:t?"url(#clipPath-".concat(e,")"):null},u.map(function(t){return y.default.cloneElement(t,{key:"error-bar-".concat(e,"-").concat(t.props.dataKey),data:n,xAxis:o,yAxis:i,layout:a,offset:l,dataPointFormatter:c})}))}},{key:"render",value:function(){var t=this.props,e=t.hide,r=t.data,n=t.className,o=t.xAxis,i=t.yAxis,a=t.left,u=t.top,l=t.width,c=t.height,s=t.isAnimationActive,f=t.background,p=t.id;if(e||!r||!r.length)return null;var d=this.state.isAnimationFinished,h=(0,v.default)("recharts-bar",n),m=o&&o.allowDataOverflow,b=i&&i.allowDataOverflow,g=m||b,x=(0,O.default)(p)?this.id:p;return y.default.createElement(tA,{className:h},m||b?y.default.createElement("defs",null,y.default.createElement("clipPath",{id:"clipPath-".concat(x)},y.default.createElement("rect",{x:m?a:a-l/2,y:b?u:u-c/2,width:m?l:2*l,height:b?c:2*c}))):null,y.default.createElement(tA,{className:"recharts-bar-rectangles",clipPath:g?"url(#clipPath-".concat(x,")"):null},f?this.renderBackground():null,this.renderRectangles()),this.renderErrorBar(g,x),(!s||d)&&sv.renderCallByParent(this.props,r))}}],r=[{key:"getDerivedStateFromProps",value:function(t,e){return t.animationId!==e.prevAnimationId?{prevAnimationId:t.animationId,curData:t.data,prevData:e.curData}:t.data!==e.curData?{curData:t.data}:null}}],e&&s4(n.prototype,e),r&&s4(n,r),Object.defineProperty(n,"prototype",{writable:!1}),n}(y.PureComponent);function fi(t){return(fi="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function fa(t,e){for(var r=0;r0&&Math.abs(b)0&&Math.abs(v)0&&(j=Math.min((t||0)-(E[e-1]||0),j))}),Number.isFinite(j)){var P=j/S,A="vertical"===y.layout?r.height:r.width;if("gap"===y.padding&&(l=P*A/2),"no-gap"===y.padding){var k=T(t.barCategoryGap,P*A),M=P*A/2;l=M-k-(M-k)/A*k}}}c="xAxis"===n?[r.left+(g.left||0)+(l||0),r.left+r.width-(g.right||0)-(l||0)]:"yAxis"===n?"horizontal"===u?[r.top+r.height-(g.bottom||0),r.top+(g.top||0)]:[r.top+(g.top||0)+(l||0),r.top+r.height-(g.bottom||0)-(l||0)]:y.range,w&&(c=[c[1],c[0]]);var _=co(y,o,f),C=_.scale,D=_.realScaleType;C.domain(m).range(c),ci(C);var I=cf(C,fl(fl({},y),{},{realScaleType:D}));"xAxis"===n?(h="top"===v&&!x||"bottom"===v&&x,p=r.left,d=s[O]-h*y.height):"yAxis"===n&&(h="left"===v&&!x||"right"===v&&x,p=s[O]-h*y.width,d=r.top);var B=fl(fl(fl({},y),I),{},{realScaleType:D,x:p,y:d,scale:C,width:"xAxis"===n?r.width:y.width,height:"yAxis"===n?r.height:y.height});return B.bandSize=cx(B,I),y.hide||"xAxis"!==n?y.hide||(s[O]+=(h?-1:1)*B.width):s[O]+=(h?-1:1)*B.height,fl(fl({},i),{},fc({},a,B))},{})},fp=function(t,e){var r=t.x,n=t.y,o=e.x,i=e.y;return{x:Math.min(r,o),y:Math.min(n,i),width:Math.abs(o-r),height:Math.abs(i-n)}},fd=function(t){return fp({x:t.x1,y:t.y1},{x:t.x2,y:t.y2})},fh=function(){var t,e;function r(t){if(!(this instanceof r))throw TypeError("Cannot call a class as a function");this.scale=t}return t=[{key:"domain",get:function(){return this.scale.domain}},{key:"range",get:function(){return this.scale.range}},{key:"rangeMin",get:function(){return this.range()[0]}},{key:"rangeMax",get:function(){return this.range()[1]}},{key:"bandwidth",get:function(){return this.scale.bandwidth}},{key:"apply",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=e.bandAware,n=e.position;if(void 0!==t){if(n)switch(n){case"start":default:return this.scale(t);case"middle":var o=this.bandwidth?this.bandwidth()/2:0;return this.scale(t)+o;case"end":var i=this.bandwidth?this.bandwidth():0;return this.scale(t)+i}if(r){var a=this.bandwidth?this.bandwidth()/2:0;return this.scale(t)+a}return this.scale(t)}}},{key:"isInRange",value:function(t){var e=this.range(),r=e[0],n=e[e.length-1];return r<=n?t>=r&&t<=n:t>=n&&t<=r}}],e=[{key:"create",value:function(t){return new r(t)}}],t&&fa(r.prototype,t),e&&fa(r,e),Object.defineProperty(r,"prototype",{writable:!1}),r}();fc(fh,"EPS",1e-4);var fy=function(t){var e=Object.keys(t).reduce(function(e,r){return fl(fl({},e),{},fc({},r,fh.create(t[r])))},{});return fl(fl({},e),{},{apply:function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=r.bandAware,o=r.position;return(0,sn.default)(t,function(t,r){return e[r].apply(t,{bandAware:n,position:o})})},isInRange:function(t){return(0,so.default)(t,function(t,r){return e[r].isInRange(t)})}})},fv=function(t){var e=t.width,r=t.height,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,o=(n%180+180)%180*Math.PI/180,i=Math.atan(r/e);return Math.abs(o>i&&ot.length)&&(e=t.length);for(var r=0,n=Array(e);rtypeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=e){var r,n,o,i,a=[],u=!0,l=!1;try{o=(e=e.call(t)).next,!1;for(;!(u=(r=o.call(e)).done)&&(a.push(r.value),2!==a.length);u=!0);}catch(t){l=!0,n=t}finally{try{if(!u&&null!=e.return&&(i=e.return(),Object(i)!==i))return}finally{if(l)throw n}}return a}}(d)||function(t){if(t){if("string"==typeof t)return fJ(t,2);var e=Object.prototype.toString.call(t).slice(8,-1);if("Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e)return Array.from(t);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return fJ(t,2)}}(d)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),m=h[0],b=m.x,g=m.y,x=h[1],w=x.x,O=x.y,S=fY(fY({clipPath:sr(t,"hidden")?"url(#".concat(c,")"):void 0},tl(t,!0)),{},{x1:b,y1:g,x2:w,y2:O});return y.default.createElement(tA,{className:(0,v.default)("recharts-reference-line",u)},f0(a,S),st.renderCallByParent(t,fd({x1:b,y1:g,x2:w,y2:O})))}var f3=function(t){var e;function r(){var t,e;if(!(this instanceof r))throw TypeError("Cannot call a class as a function");return t=r,e=arguments,t=fX(t),function(t,e){if(e&&("object"===fq(e)||"function"==typeof e))return e;if(void 0!==e)throw TypeError("Derived constructors may only return object or undefined");var r=t;if(void 0===r)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return r}(this,fV()?Reflect.construct(t,e||[],fX(this).constructor):t.apply(this,e))}if("function"!=typeof t&&null!==t)throw TypeError("Super expression must either be null or a function");return r.prototype=Object.create(t&&t.prototype,{constructor:{value:r,writable:!0,configurable:!0}}),Object.defineProperty(r,"prototype",{writable:!1}),t&&fG(r,t),e=[{key:"render",value:function(){return y.default.createElement(f2,this.props)}}],function(t,e){for(var r=0;rtypeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||function(t){if(t){if("string"==typeof t)return pa(t,void 0);var e=Object.prototype.toString.call(t).slice(8,-1);if("Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e)return Array.from(t);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return pa(t,void 0)}}(t)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function pa(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r=f;--p)u.point(m[p],b[p]);u.lineEnd(),u.areaEnd()}v&&(m[s]=+t(d,s,c),b[s]=+e(d,s,c),u.point(n?+n(d,s,c):m[s],r?+r(d,s,c):b[s]))}if(h)return u=null,h+""||null}function s(){return pb().defined(o).curve(a).context(i)}return t="function"==typeof t?t:void 0===t?pv:t9(+t),e="function"==typeof e?e:void 0===e?t9(0):t9(+e),r="function"==typeof r?r:void 0===r?pm:t9(+r),c.x=function(e){return arguments.length?(t="function"==typeof e?e:t9(+e),n=null,c):t},c.x0=function(e){return arguments.length?(t="function"==typeof e?e:t9(+e),c):t},c.x1=function(t){return arguments.length?(n=null==t?null:"function"==typeof t?t:t9(+t),c):n},c.y=function(t){return arguments.length?(e="function"==typeof t?t:t9(+t),r=null,c):e},c.y0=function(t){return arguments.length?(e="function"==typeof t?t:t9(+t),c):e},c.y1=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:t9(+t),c):r},c.lineX0=c.lineY0=function(){return s().x(t).y(e)},c.lineY1=function(){return s().x(t).y(r)},c.lineX1=function(){return s().x(n).y(e)},c.defined=function(t){return arguments.length?(o="function"==typeof t?t:t9(!!t),c):o},c.curve=function(t){return arguments.length?(a=t,null!=i&&(u=a(i)),c):a},c.context=function(t){return arguments.length?(null==t?i=u=null:u=a(i=t),c):i},c}function px(){}function pw(t,e,r){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+r)/6)}function pO(t){this._context=t}function pS(t){this._context=t}function pj(t){this._context=t}ph.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t*=1,e*=1,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e)}}},pO.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:pw(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t*=1,e*=1,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:pw(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},pS.prototype={areaStart:px,areaEnd:px,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,e){switch(t*=1,e*=1,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:pw(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},pj.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t*=1,e*=1,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+t)/6,n=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(r,n):this._context.moveTo(r,n);break;case 3:this._point=4;default:pw(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};class pE{constructor(t,e){this._context=t,this._x=e}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line}point(t,e){switch(t*=1,e*=1,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,e,t,e):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+e)/2,t,this._y0,t,e)}this._x0=t,this._y0=e}}function pP(t){this._context=t}pP.prototype={areaStart:px,areaEnd:px,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,e){t*=1,e*=1,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))}};function pA(t,e,r){var n=t._x1-t._x0,o=e-t._x1,i=(t._y1-t._y0)/(n||o<0&&-0),a=(r-t._y1)/(o||n<0&&-0);return((i<0?-1:1)+(a<0?-1:1))*Math.min(Math.abs(i),Math.abs(a),.5*Math.abs((i*o+a*n)/(n+o)))||0}function pk(t,e){var r=t._x1-t._x0;return r?(3*(t._y1-t._y0)/r-e)/2:e}function pM(t,e,r){var n=t._x0,o=t._y0,i=t._x1,a=t._y1,u=(i-n)/3;t._context.bezierCurveTo(n+u,o+u*e,i-u,a-u*r,i,a)}function pT(t){this._context=t}function p_(t){this._context=new pC(t)}function pC(t){this._context=t}function pD(t){this._context=t}function pI(t){var e,r,n=t.length-1,o=Array(n),i=Array(n),a=Array(n);for(o[0]=0,i[0]=2,a[0]=t[0]+2*t[1],e=1;e=0;--e)o[e]=(a[e]-o[e+1])/i[e];for(e=0,i[n-1]=(t[n]+o[n-1])/2;e=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t*=1,e*=1,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var r=this._x*(1-this._t)+t*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,e)}}this._x=t,this._y=e}};var pU={curveBasisClosed:function(t){return new pS(t)},curveBasisOpen:function(t){return new pj(t)},curveBasis:function(t){return new pO(t)},curveBumpX:function(t){return new pE(t,!0)},curveBumpY:function(t){return new pE(t,!1)},curveLinearClosed:function(t){return new pP(t)},curveLinear:py,curveMonotoneX:function(t){return new pT(t)},curveMonotoneY:function(t){return new p_(t)},curveNatural:function(t){return new pD(t)},curveStep:function(t){return new pN(t,.5)},curveStepAfter:function(t){return new pN(t,1)},curveStepBefore:function(t){return new pN(t,0)}},pF=function(t){return t.x===+t.x&&t.y===+t.y},p$=function(t){return t.x},pW=function(t){return t.y},pq=function(t,e){if((0,L.default)(t))return t;var r="curve".concat((0,t4.default)(t));return("curveMonotone"===r||"curveBump"===r)&&e?pU["".concat(r).concat("vertical"===e?"Y":"X")]:pU[r]||py},pV=function(t){var e,r=t.type,n=t.points,o=void 0===n?[]:n,i=t.baseLine,a=t.layout,u=t.connectNulls,l=void 0!==u&&u,c=pq(void 0===r?"linear":r,a),s=l?o.filter(function(t){return pF(t)}):o;if(Array.isArray(i)){var f=l?i.filter(function(t){return pF(t)}):i,p=s.map(function(t,e){return pz(pz({},t),{},{base:f[e]})});return(e="vertical"===a?pg().y(pW).x1(p$).x0(function(t){return t.base.x}):pg().x(p$).y1(pW).y0(function(t){return t.base.y})).defined(pF).curve(c),e(p)}return(e="vertical"===a&&E(i)?pg().y(pW).x1(p$).x0(i):E(i)?pg().x(p$).y1(pW).y0(i):pb().x(p$).y(pW)).defined(pF).curve(c),e(s)},pX=function(t){var e=t.className,r=t.points,n=t.path,o=t.pathRef;if((!r||!r.length)&&!n)return null;var i=r&&r.length?pV(t):n;return y.createElement("path",pL({},tl(t,!1),X(t),{className:(0,v.default)("recharts-curve",e),d:i,ref:o}))};function pG(t){return(pG="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}t.s(["Curve",0,pX],372733);var pH=["x","y","top","left","width","height","className"];function pY(){return(pY=Object.assign.bind()).apply(this,arguments)}function pK(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}var pZ=function(t){var e=t.x,r=void 0===e?0:e,n=t.y,o=void 0===n?0:n,i=t.top,a=void 0===i?0:i,u=t.left,l=void 0===u?0:u,c=t.width,s=void 0===c?0:c,f=t.height,p=void 0===f?0:f,d=t.className,h=function(t){for(var e=1;e=0)continue;r[n]=t[n]}return r}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(n=0;n=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}(t,pH));return E(r)&&E(o)&&E(s)&&E(p)&&E(a)&&E(l)?y.default.createElement("path",pY({},tl(h,!0),{className:(0,v.default)("recharts-cross",d),d:"M".concat(r,",").concat(a,"v").concat(p,"M").concat(l,",").concat(o,"h").concat(s)})):null};function pJ(t){var e=t.cx,r=t.cy,n=t.radius,o=t.startAngle,i=t.endAngle;return{points:[cH(e,r,n,o),cH(e,r,n,i)],cx:e,cy:r,radius:n,startAngle:o,endAngle:i}}function pQ(t){return(pQ="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function p0(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function p1(t){for(var e=1;etypeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,o,i,a,u=[],l=!0,c=!1;try{if(i=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;l=!1}else for(;!(l=(n=i.call(r)).done)&&(u.push(n.value),u.length!==e);l=!0);}catch(t){c=!0,o=t}finally{try{if(!l&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(c)throw o}}return u}}(t,e)||dn(t,e)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function p4(t,e){if(null==t)return{};var r,n,o=function(t,e){if(null==t)return{};var r={};for(var n in t)if(Object.prototype.hasOwnProperty.call(t,n)){if(e.indexOf(n)>=0)continue;r[n]=t[n]}return r}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(n=0;n=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}function p9(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(p9=function(){return!!t})()}function dt(t){return(dt=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}function de(t,e){return(de=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t})(t,e)}function dr(t){return function(t){if(Array.isArray(t))return di(t)}(t)||function(t){if("u">typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||dn(t)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function dn(t,e){if(t){if("string"==typeof t)return di(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);if("Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r)return Array.from(t);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return di(t,e)}}function di(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r0?i:t&&t.length&&E(n)&&E(o)?t.slice(n,o+1):[]};function dv(t){return"number"===t?[0,"auto"]:void 0}var dm=function(t,e,r,n){var o=t.graphicalItems,i=t.tooltipAxis,a=dy(e,t);return r<0||!o||!o.length||r>=a.length?null:o.reduce(function(o,u){var l,c,s=null!=(l=u.props.data)?l:e;return(s&&t.dataStartIndex+t.dataEndIndex!==0&&t.dataEndIndex-t.dataStartIndex>=r&&(s=s.slice(t.dataStartIndex,t.dataEndIndex+1)),c=i.dataKey&&!i.allowDuplicatedCategory?I(void 0===s?a:s,i.dataKey,n):s&&s[r]||a[r])?[].concat(dr(o),[cO(u,c)]):o},[])},db=function(t,e,r,n){var o=n||{x:t.chartX,y:t.chartY},i="horizontal"===r?o.x:"vertical"===r?o.y:"centric"===r?o.angle:o.radius,a=t.orderedTooltipTicks,u=t.tooltipAxis,l=t.tooltipTicks,c=l1(i,a,l,u);if(c>=0&&l){var s=l[c]&&l[c].value,f=dm(t,e,c,s),p=dh(r,a,c,o);return{activeTooltipIndex:c,activeLabel:s,activePayload:f,activeCoordinate:p}}return null},dg=function(t,e){var r=e.axes,n=e.graphicalItems,o=e.axisType,i=e.axisIdKey,a=e.stackGroups,u=e.dataStartIndex,l=e.dataEndIndex,c=t.layout,s=t.children,f=t.stackOffset,p=l9(c,o);return r.reduce(function(e,r){var d=void 0!==r.type.defaultProps?du(du({},r.type.defaultProps),r.props):r.props,h=d.type,y=d.dataKey,v=d.allowDataOverflow,m=d.allowDuplicatedCategory,b=d.scale,g=d.ticks,x=d.includeHidden,w=d[i];if(e[w])return e;var S=dy(t.data,{graphicalItems:n.filter(function(t){var e;return(i in t.props?t.props[i]:null==(e=t.type.defaultProps)?void 0:e[i])===w}),dataStartIndex:u,dataEndIndex:l}),j=S.length;(function(t,e,r){if("number"===r&&!0===e&&Array.isArray(t)){var n=null==t?void 0:t[0],o=null==t?void 0:t[1];if(n&&o&&E(n)&&E(o))return!0}return!1})(d.domain,v,h)&&(k=cg(d.domain,null,v),p&&("number"===h||"auto"!==b)&&(T=l0(S,y,"category")));var P=dv(h);if(!k||0===k.length){var A,k,M,T,_,D=null!=(_=d.domain)?_:P;if(y){if(k=l0(S,y,h),"category"===h&&p){var I=C(k);m&&I?(M=k,k=(0,tg.default)(0,j)):m||(k=cw(D,k,r).reduce(function(t,e){return t.indexOf(e)>=0?t:[].concat(dr(t),[e])},[]))}else if("category"===h)k=m?k.filter(function(t){return""!==t&&!(0,O.default)(t)}):cw(D,k,r).reduce(function(t,e){return t.indexOf(e)>=0||""===e||(0,O.default)(e)?t:[].concat(dr(t),[e])},[]);else if("number"===h){var N=l7(S,n.filter(function(t){var e,r,n=i in t.props?t.props[i]:null==(e=t.type.defaultProps)?void 0:e[i],o="hide"in t.props?t.props.hide:null==(r=t.type.defaultProps)?void 0:r.hide;return n===w&&(x||!o)}),y,o,c);N&&(k=N)}p&&("number"===h||"auto"!==b)&&(T=l0(S,y,"category"))}else k=p?(0,tg.default)(0,j):a&&a[w]&&a[w].hasStack&&"number"===h?"expand"===f?[0,1]:cv(a[w].stackGroups,u,l):l4(S,n.filter(function(t){var e=i in t.props?t.props[i]:t.type.defaultProps[i],r="hide"in t.props?t.props.hide:t.type.defaultProps.hide;return e===w&&(x||!r)}),h,c,!0);"number"===h?(k=pu(s,k,w,o,g),D&&(k=cg(D,k,v))):"category"===h&&D&&k.every(function(t){return D.indexOf(t)>=0})&&(k=D)}return du(du({},e),{},dl({},w,du(du({},d),{},{axisType:o,domain:k,categoricalDomain:T,duplicateDomain:M,originalDomain:null!=(A=d.domain)?A:P,isCategorical:p,layout:c})))},{})},dx=function(t,e){var r=e.graphicalItems,n=e.Axis,o=e.axisType,i=e.axisIdKey,a=e.stackGroups,u=e.dataStartIndex,l=e.dataEndIndex,c=t.layout,s=t.children,f=dy(t.data,{graphicalItems:r,dataStartIndex:u,dataEndIndex:l}),p=f.length,d=l9(c,o),h=-1;return r.reduce(function(t,e){var y,v=(void 0!==e.type.defaultProps?du(du({},e.type.defaultProps),e.props):e.props)[i],m=dv("number");return t[v]?t:(h++,y=d?(0,tg.default)(0,p):a&&a[v]&&a[v].hasStack?pu(s,y=cv(a[v].stackGroups,u,l),v,o):pu(s,y=cg(m,l4(f,r.filter(function(t){var e,r,n=i in t.props?t.props[i]:null==(e=t.type.defaultProps)?void 0:e[i],o="hide"in t.props?t.props.hide:null==(r=t.type.defaultProps)?void 0:r.hide;return n===v&&!o}),"number",c),n.defaultProps.allowDataOverflow),v,o),du(du({},t),{},dl({},v,du(du({axisType:o},n.defaultProps),{},{hide:!0,orientation:(0,x.default)(ds,"".concat(o,".").concat(h%2),null),domain:y,originalDomain:m,isCategorical:d,layout:c}))))},{})},dw=function(t,e){var r=e.axisType,n=void 0===r?"xAxis":r,o=e.AxisComp,i=e.graphicalItems,a=e.stackGroups,u=e.dataStartIndex,l=e.dataEndIndex,c=t.children,s="".concat(n,"Id"),f=tn(c,o),p={};return f&&f.length?p=dg(t,{axes:f,graphicalItems:i,axisType:n,axisIdKey:s,stackGroups:a,dataStartIndex:u,dataEndIndex:l}):i&&i.length&&(p=dx(t,{Axis:o,graphicalItems:i,axisType:n,axisIdKey:s,stackGroups:a,dataStartIndex:u,dataEndIndex:l})),p},dO=function(t){var e=_(t),r=ce(e,!1,!0);return{tooltipTicks:r,orderedTooltipTicks:(0,tx.default)(r,function(t){return t.coordinate}),tooltipAxis:e,tooltipAxisBandSize:cx(e,r)}},dS=function(t){var e=t.children,r=t.defaultShowTooltip,n=to(e,cF),o=0,i=0;return t.data&&0!==t.data.length&&(i=t.data.length-1),n&&n.props&&(n.props.startIndex>=0&&(o=n.props.startIndex),n.props.endIndex>=0&&(i=n.props.endIndex)),{chartX:0,chartY:0,dataStartIndex:o,dataEndIndex:i,activeTooltipIndex:-1,isTooltipActive:!!r}},dj=function(t){return"horizontal"===t?{numericAxisName:"yAxis",cateAxisName:"xAxis"}:"vertical"===t?{numericAxisName:"xAxis",cateAxisName:"yAxis"}:"centric"===t?{numericAxisName:"radiusAxis",cateAxisName:"angleAxis"}:{numericAxisName:"angleAxis",cateAxisName:"radiusAxis"}},dE=function(t,e){var r=t.props,n=t.graphicalItems,o=t.xAxisMap,i=void 0===o?{}:o,a=t.yAxisMap,u=void 0===a?{}:a,l=r.width,c=r.height,s=r.children,f=r.margin||{},p=to(s,cF),d=to(s,eK),h=Object.keys(u).reduce(function(t,e){var r=u[e],n=r.orientation;return r.mirror||r.hide?t:du(du({},t),{},dl({},n,t[n]+r.width))},{left:f.left||0,right:f.right||0}),y=Object.keys(i).reduce(function(t,e){var r=i[e],n=r.orientation;return r.mirror||r.hide?t:du(du({},t),{},dl({},n,(0,x.default)(t,"".concat(n))+r.height))},{top:f.top||0,bottom:f.bottom||0}),v=du(du({},y),h),m=v.bottom;p&&(v.bottom+=p.props.height||cF.defaultProps.height),d&&e&&(v=l8(v,n,r,e));var b=l-v.left-v.right,g=c-v.top-v.bottom;return du(du({brushBottom:m},v),{},{width:Math.max(b,0),height:Math.max(g,0)})},dP=function(t){var e=t.chartName,r=t.GraphicalChild,n=t.defaultTooltipEventType,o=void 0===n?"axis":n,i=t.validateTooltipEventTypes,a=void 0===i?["axis"]:i,u=t.axisComponents,l=t.legendContent,c=t.formatAxisMap,s=t.defaultProps,f=function(t,e){var r=e.graphicalItems,n=e.stackGroups,o=e.offset,i=e.updateId,a=e.dataStartIndex,l=e.dataEndIndex,c=t.barSize,s=t.layout,f=t.barGap,p=t.barCategoryGap,d=t.maxBarSize,h=dj(s),y=h.numericAxisName,v=h.cateAxisName,m=!!r&&!!r.length&&r.some(function(t){var e=Q(t&&t.type);return e&&e.indexOf("Bar")>=0}),b=[];return r.forEach(function(r,h){var g=dy(t.data,{graphicalItems:[r],dataStartIndex:a,dataEndIndex:l}),x=void 0!==r.type.defaultProps?du(du({},r.type.defaultProps),r.props):r.props,w=x.dataKey,S=x.maxBarSize,j=x["".concat(y,"Id")],E=x["".concat(v,"Id")],P=u.reduce(function(t,r){var n=e["".concat(r.axisType,"Map")],o=x["".concat(r.axisType,"Id")];n&&n[o]||"zAxis"===r.axisType||tw(!1);var i=n[o];return du(du({},t),{},dl(dl({},r.axisType,i),"".concat(r.axisType,"Ticks"),ce(i)))},{}),A=P[v],k=P["".concat(v,"Ticks")],M=n&&n[j]&&n[j].hasStack&&cy(r,n[j].stackGroups),T=Q(r.type).indexOf("Bar")>=0,_=cx(A,k),C=[],D=m&&l3({barSize:c,stackGroups:n,totalSize:"xAxis"===v?P[v].width:"yAxis"===v?P[v].height:void 0});if(T){var I,N,B=(0,O.default)(S)?d:S,L=null!=(I=null!=(N=cx(A,k,!0))?N:B)?I:0;C=l5({barGap:f,barCategoryGap:p,bandSize:L!==_?L:_,sizeList:D[E],maxBarSize:B}),L!==_&&(C=C.map(function(t){return du(du({},t),{},{position:du(du({},t.position),{},{offset:t.position.offset-L/2})})}))}var R=r&&r.type&&r.type.getComposedData;R&&b.push({props:du(du({},R(du(du({},P),{},{displayedData:g,props:t,dataKey:w,item:r,bandSize:_,barPosition:C,offset:o,stackedData:M,layout:s,dataStartIndex:a,dataEndIndex:l}))),{},dl(dl(dl({key:r.key||"item-".concat(h)},y,P[y]),v,P[v]),"animationId",i)),childIndex:td(r,t.children),item:r})}),b},p=function(t,n){var o=t.props,i=t.dataStartIndex,a=t.dataEndIndex,l=t.updateId;if(!ti({props:o}))return null;var s=o.children,p=o.layout,d=o.stackOffset,h=o.data,y=o.reverseStackOrder,v=dj(p),m=v.numericAxisName,b=v.cateAxisName,g=tn(s,r),x=cs(h,g,"".concat(m,"Id"),"".concat(b,"Id"),d,y),w=u.reduce(function(t,e){var r="".concat(e.axisType,"Map");return du(du({},t),{},dl({},r,dw(o,du(du({},e),{},{graphicalItems:g,stackGroups:e.axisType===m&&x,dataStartIndex:i,dataEndIndex:a}))))},{}),O=dE(du(du({},w),{},{props:o,graphicalItems:g}),null==n?void 0:n.legendBBox);Object.keys(w).forEach(function(t){w[t]=c(o,w[t],O,t.replace("Map",""),e)});var S=dO(w["".concat(b,"Map")]),j=f(o,du(du({},w),{},{dataStartIndex:i,dataEndIndex:a,updateId:l,graphicalItems:g,stackGroups:x,offset:O}));return du(du({formattedGraphicalItems:j,graphicalItems:g,offset:O,stackGroups:x},S),w)},d=function(t){var r;function n(t){var r,o,i,a,u;if(!(this instanceof n))throw TypeError("Cannot call a class as a function");return a=n,u=[t],a=dt(a),dl(i=function(t,e){if(e&&("object"===p8(e)||"function"==typeof e))return e;if(void 0!==e)throw TypeError("Derived constructors may only return object or undefined");var r=t;if(void 0===r)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return r}(this,p9()?Reflect.construct(a,u||[],dt(this).constructor):a.apply(this,u)),"eventEmitterSymbol",Symbol("rechartsEventEmitter")),dl(i,"accessibilityManager",new pd),dl(i,"handleLegendBBoxUpdate",function(t){if(t){var e=i.state,r=e.dataStartIndex,n=e.dataEndIndex,o=e.updateId;i.setState(du({legendBBox:t},p({props:i.props,dataStartIndex:r,dataEndIndex:n,updateId:o},du(du({},i.state),{},{legendBBox:t}))))}}),dl(i,"handleReceiveSyncEvent",function(t,e,r){i.props.syncId===t&&(r!==i.eventEmitterSymbol||"function"==typeof i.props.syncMethod)&&i.applySyncEvent(e)}),dl(i,"handleBrushChange",function(t){var e=t.startIndex,r=t.endIndex;if(e!==i.state.dataStartIndex||r!==i.state.dataEndIndex){var n=i.state.updateId;i.setState(function(){return du({dataStartIndex:e,dataEndIndex:r},p({props:i.props,dataStartIndex:e,dataEndIndex:r,updateId:n},i.state))}),i.triggerSyncEvent({dataStartIndex:e,dataEndIndex:r})}}),dl(i,"handleMouseEnter",function(t){var e=i.getMouseInfo(t);if(e){var r=du(du({},e),{},{isTooltipActive:!0});i.setState(r),i.triggerSyncEvent(r);var n=i.props.onMouseEnter;(0,L.default)(n)&&n(r,t)}}),dl(i,"triggeredAfterMouseMove",function(t){var e=i.getMouseInfo(t),r=e?du(du({},e),{},{isTooltipActive:!0}):{isTooltipActive:!1};i.setState(r),i.triggerSyncEvent(r);var n=i.props.onMouseMove;(0,L.default)(n)&&n(r,t)}),dl(i,"handleItemMouseEnter",function(t){i.setState(function(){return{isTooltipActive:!0,activeItem:t,activePayload:t.tooltipPayload,activeCoordinate:t.tooltipPosition||{x:t.cx,y:t.cy}}})}),dl(i,"handleItemMouseLeave",function(){i.setState(function(){return{isTooltipActive:!1}})}),dl(i,"handleMouseMove",function(t){t.persist(),i.throttleTriggeredAfterMouseMove(t)}),dl(i,"handleMouseLeave",function(t){i.throttleTriggeredAfterMouseMove.cancel();var e={isTooltipActive:!1};i.setState(e),i.triggerSyncEvent(e);var r=i.props.onMouseLeave;(0,L.default)(r)&&r(e,t)}),dl(i,"handleOuterEvent",function(t){var e,r=tp(t),n=(0,x.default)(i.props,"".concat(r));r&&(0,L.default)(n)&&n(null!=(e=/.*touch.*/i.test(r)?i.getMouseInfo(t.changedTouches[0]):i.getMouseInfo(t))?e:{},t)}),dl(i,"handleClick",function(t){var e=i.getMouseInfo(t);if(e){var r=du(du({},e),{},{isTooltipActive:!0});i.setState(r),i.triggerSyncEvent(r);var n=i.props.onClick;(0,L.default)(n)&&n(r,t)}}),dl(i,"handleMouseDown",function(t){var e=i.props.onMouseDown;(0,L.default)(e)&&e(i.getMouseInfo(t),t)}),dl(i,"handleMouseUp",function(t){var e=i.props.onMouseUp;(0,L.default)(e)&&e(i.getMouseInfo(t),t)}),dl(i,"handleTouchMove",function(t){null!=t.changedTouches&&t.changedTouches.length>0&&i.throttleTriggeredAfterMouseMove(t.changedTouches[0])}),dl(i,"handleTouchStart",function(t){null!=t.changedTouches&&t.changedTouches.length>0&&i.handleMouseDown(t.changedTouches[0])}),dl(i,"handleTouchEnd",function(t){null!=t.changedTouches&&t.changedTouches.length>0&&i.handleMouseUp(t.changedTouches[0])}),dl(i,"handleDoubleClick",function(t){var e=i.props.onDoubleClick;(0,L.default)(e)&&e(i.getMouseInfo(t),t)}),dl(i,"handleContextMenu",function(t){var e=i.props.onContextMenu;(0,L.default)(e)&&e(i.getMouseInfo(t),t)}),dl(i,"triggerSyncEvent",function(t){void 0!==i.props.syncId&&pl.emit(pc,i.props.syncId,t,i.eventEmitterSymbol)}),dl(i,"applySyncEvent",function(t){var e=i.props,r=e.layout,n=e.syncMethod,o=i.state.updateId,a=t.dataStartIndex,u=t.dataEndIndex;if(void 0!==t.dataStartIndex||void 0!==t.dataEndIndex)i.setState(du({dataStartIndex:a,dataEndIndex:u},p({props:i.props,dataStartIndex:a,dataEndIndex:u,updateId:o},i.state)));else if(void 0!==t.activeTooltipIndex){var l=t.chartX,c=t.chartY,s=t.activeTooltipIndex,f=i.state,d=f.offset,h=f.tooltipTicks;if(!d)return;if("function"==typeof n)s=n(h,t);else if("value"===n){s=-1;for(var y=0;y=0){if(l.dataKey&&!l.allowDuplicatedCategory){var P="function"==typeof l.dataKey?function(t){return"function"==typeof l.dataKey?l.dataKey(t.payload):null}:"payload.".concat(l.dataKey.toString());k=I(d,P,s),M=h&&v&&I(v,P,s)}else k=null==d?void 0:d[c],M=h&&v&&v[c];if(w||x){var A=void 0!==t.props.activeIndex?t.props.activeIndex:c;return[(0,y.cloneElement)(t,du(du(du({},n.props),j),{},{activeIndex:A})),null,null]}if(!(0,O.default)(k))return[E].concat(dr(i.renderActivePoints({item:n,activePoint:k,basePoint:M,childIndex:c,isRange:h})))}else{var k,M,T,_=(null!=(T=i.getItemByXY(i.state.activeCoordinate))?T:{graphicalItem:E}).graphicalItem,C=_.item,D=void 0===C?t:C,N=_.childIndex,B=du(du(du({},n.props),j),{},{activeIndex:N});return[(0,y.cloneElement)(D,B),null,null]}return h?[E,null,null]:[E,null]}),dl(i,"renderCustomized",function(t,e,r){return(0,y.cloneElement)(t,du(du({key:"recharts-customized-".concat(r)},i.props),i.state))}),dl(i,"renderMap",{CartesianGrid:{handler:dd,once:!0},ReferenceArea:{handler:i.renderReferenceElement},ReferenceLine:{handler:dd},ReferenceDot:{handler:i.renderReferenceElement},XAxis:{handler:dd},YAxis:{handler:dd},Brush:{handler:i.renderBrush,once:!0},Bar:{handler:i.renderGraphicChild},Line:{handler:i.renderGraphicChild},Area:{handler:i.renderGraphicChild},Radar:{handler:i.renderGraphicChild},RadialBar:{handler:i.renderGraphicChild},Scatter:{handler:i.renderGraphicChild},Pie:{handler:i.renderGraphicChild},Funnel:{handler:i.renderGraphicChild},Tooltip:{handler:i.renderCursor,once:!0},PolarGrid:{handler:i.renderPolarGrid,once:!0},PolarAngleAxis:{handler:i.renderPolarAxis},PolarRadiusAxis:{handler:i.renderPolarAxis},Customized:{handler:i.renderCustomized}}),i.clipPathId="".concat(null!=(r=t.id)?r:M("recharts"),"-clip"),i.throttleTriggeredAfterMouseMove=(0,m.default)(i.triggeredAfterMouseMove,null!=(o=t.throttleDelay)?o:1e3/60),i.state={},i}if("function"!=typeof t&&null!==t)throw TypeError("Super expression must either be null or a function");return n.prototype=Object.create(t&&t.prototype,{constructor:{value:n,writable:!0,configurable:!0}}),Object.defineProperty(n,"prototype",{writable:!1}),t&&de(n,t),r=[{key:"componentDidMount",value:function(){var t,e;this.addListener(),this.accessibilityManager.setDetails({container:this.container,offset:{left:null!=(t=this.props.margin.left)?t:0,top:null!=(e=this.props.margin.top)?e:0},coordinateList:this.state.tooltipTicks,mouseHandlerCallback:this.triggeredAfterMouseMove,layout:this.props.layout}),this.displayDefaultTooltip()}},{key:"displayDefaultTooltip",value:function(){var t=this.props,e=t.children,r=t.data,n=t.height,o=t.layout,i=to(e,t7);if(i){var a=i.props.defaultIndex;if("number"==typeof a&&!(a<0)&&!(a>this.state.tooltipTicks.length-1)){var u=this.state.tooltipTicks[a]&&this.state.tooltipTicks[a].value,l=dm(this.state,r,a,u),c=this.state.tooltipTicks[a].coordinate,s=(this.state.offset.top+n)/2,f="horizontal"===o?{x:c,y:s}:{y:c,x:s},p=this.state.formattedGraphicalItems.find(function(t){return"Scatter"===t.item.type.name});p&&(f=du(du({},f),p.props.points[a].tooltipPosition),l=p.props.points[a].tooltipPayload);var d={activeTooltipIndex:a,isTooltipActive:!0,activeLabel:u,activePayload:l,activeCoordinate:f};this.setState(d),this.renderCursor(i),this.accessibilityManager.setIndex(a)}}}},{key:"getSnapshotBeforeUpdate",value:function(t,e){if(!this.props.accessibilityLayer)return null;if(this.state.tooltipTicks!==e.tooltipTicks&&this.accessibilityManager.setDetails({coordinateList:this.state.tooltipTicks}),this.props.layout!==t.layout&&this.accessibilityManager.setDetails({layout:this.props.layout}),this.props.margin!==t.margin){var r,n;this.accessibilityManager.setDetails({offset:{left:null!=(r=this.props.margin.left)?r:0,top:null!=(n=this.props.margin.top)?n:0}})}return null}},{key:"componentDidUpdate",value:function(t){tc([to(t.children,t7)],[to(this.props.children,t7)])||this.displayDefaultTooltip()}},{key:"componentWillUnmount",value:function(){this.removeListener(),this.throttleTriggeredAfterMouseMove.cancel()}},{key:"getTooltipEventType",value:function(){var t=to(this.props.children,t7);if(t&&"boolean"==typeof t.props.shared){var e=t.props.shared?"axis":"item";return a.indexOf(e)>=0?e:o}return o}},{key:"getMouseInfo",value:function(t){if(!this.container)return null;var e=this.container,r=e.getBoundingClientRect(),n={top:r.top+window.scrollY-document.documentElement.clientTop,left:r.left+window.scrollX-document.documentElement.clientLeft},o={chartX:Math.round(t.pageX-n.left),chartY:Math.round(t.pageY-n.top)},i=r.width/e.offsetWidth||1,a=this.inRange(o.chartX,o.chartY,i);if(!a)return null;var u=this.state,l=u.xAxisMap,c=u.yAxisMap,s=this.getTooltipEventType(),f=db(this.state,this.props.data,this.props.layout,a);if("axis"!==s&&l&&c){var p=_(l).scale,d=_(c).scale,h=p&&p.invert?p.invert(o.chartX):null,y=d&&d.invert?d.invert(o.chartY):null;return du(du({},o),{},{xValue:h,yValue:y},f)}return f?du(du({},o),f):null}},{key:"inRange",value:function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,n=this.props.layout,o=t/r,i=e/r;if("horizontal"===n||"vertical"===n){var a=this.state.offset;return o>=a.left&&o<=a.left+a.width&&i>=a.top&&i<=a.top+a.height?{x:o,y:i}:null}var u=this.state,l=u.angleAxisMap,c=u.radiusAxisMap;return l&&c?cQ({x:o,y:i},_(l)):null}},{key:"parseEventsOfWrapper",value:function(){var t=this.props.children,e=this.getTooltipEventType(),r=to(t,t7),n={};return r&&"axis"===e&&(n="click"===r.props.trigger?{onClick:this.handleClick}:{onMouseEnter:this.handleMouseEnter,onDoubleClick:this.handleDoubleClick,onMouseMove:this.handleMouseMove,onMouseLeave:this.handleMouseLeave,onTouchMove:this.handleTouchMove,onTouchStart:this.handleTouchStart,onTouchEnd:this.handleTouchEnd,onContextMenu:this.handleContextMenu}),du(du({},X(this.props,this.handleOuterEvent)),n)}},{key:"addListener",value:function(){pl.on(pc,this.handleReceiveSyncEvent)}},{key:"removeListener",value:function(){pl.removeListener(pc,this.handleReceiveSyncEvent)}},{key:"filterFormatItem",value:function(t,e,r){for(var n=this.state.formattedGraphicalItems,o=0,i=n.length;ot*o)return!1;var i=r();return t*(e-t*i/2-n)>=0&&t*(e+t*i/2-o)<=0}function dM(t){return(dM="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function dT(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function d_(t){for(var e=1;e=2?S(c[1].coordinate-c[0].coordinate):1,w=(n="width"===m,o=s.x,i=s.y,a=s.width,u=s.height,1===x?{start:n?o:i,end:n?o+a:i+u}:{start:n?o+a:i+u,end:n?o:i});return"equidistantPreserveStart"===d?function(t,e,r,n,o){for(var i,a=(n||[]).slice(),u=e.start,l=e.end,c=0,s=1,f=u;s<=a.length;)if(i=function(){var e,i=null==n?void 0:n[c];if(void 0===i)return{v:dA(n,s)};var a=c,p=function(){return void 0===e&&(e=r(i,a)),e},d=i.coordinate,h=0===c||dk(t,d,p,f,l);h||(c=0,f=u,s+=1),h&&(f=d+t*(p()/2+o),c+=s)}())return i.v;return[]}(x,w,g,c,f):("preserveStart"===d||"preserveStartEnd"===d?function(t,e,r,n,o,i){var a=(n||[]).slice(),u=a.length,l=e.start,c=e.end;if(i){var s=n[u-1],f=r(s,u-1),p=t*(s.coordinate+t*f/2-c);a[u-1]=s=d_(d_({},s),{},{tickCoord:p>0?s.coordinate-p*t:s.coordinate}),dk(t,s.tickCoord,function(){return f},l,c)&&(c=s.tickCoord-t*(f/2+o),a[u-1]=d_(d_({},s),{},{isShow:!0}))}for(var d=i?u-1:u,h=function(e){var n,i=a[e],u=function(){return void 0===n&&(n=r(i,e)),n};if(0===e){var s=t*(i.coordinate-t*u()/2-l);a[e]=i=d_(d_({},i),{},{tickCoord:s<0?i.coordinate-s*t:i.coordinate})}else a[e]=i=d_(d_({},i),{},{tickCoord:i.coordinate});dk(t,i.tickCoord,u,l,c)&&(l=i.tickCoord+t*(u()/2+o),a[e]=d_(d_({},i),{},{isShow:!0}))},y=0;y0?c.coordinate-f*t:c.coordinate})}else i[e]=c=d_(d_({},c),{},{tickCoord:c.coordinate});dk(t,c.tickCoord,s,u,l)&&(l=c.tickCoord-t*(s()/2+o),i[e]=d_(d_({},c),{},{isShow:!0}))},s=a-1;s>=0;s--)c(s);return i}(x,w,g,c,f)).filter(function(t){return t.isShow})}t.s(["generateCategoricalChart",0,dP],883966);var dD=["viewBox"],dI=["viewBox"],dN=["ticks"];function dB(t){return(dB="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function dL(){return(dL=Object.assign.bind()).apply(this,arguments)}function dR(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function dz(t){for(var e=1;e=0)continue;r[n]=t[n]}return r}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(n=0;n=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}function dF(t,e){for(var r=0;r0?this.props:c)),n<=0||o<=0||!s||!s.length)?null:y.default.createElement(tA,{className:(0,v.default)("recharts-cartesian-axis",a),ref:function(e){t.layerReference=e}},r&&this.renderAxisLine(),this.renderTicks(s,this.state.fontSize,this.state.letterSpacing),st.renderCallByParent(this.props))}}],r=[{key:"renderTickItem",value:function(t,e,r){var n=(0,v.default)(e.className,"recharts-cartesian-axis-tick-value");return y.default.isValidElement(t)?y.default.cloneElement(t,dz(dz({},e),{},{className:n})):(0,L.default)(t)?t(dz(dz({},e),{},{className:n})):y.default.createElement(ov,dL({},e,{className:"recharts-cartesian-axis-tick-value"}),r)}}],e&&dF(n.prototype,e),r&&dF(n,r),Object.defineProperty(n,"prototype",{writable:!1}),n}(y.Component);function dH(t){return(dH="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}dV(dG,"displayName","CartesianAxis"),dV(dG,"defaultProps",{x:0,y:0,width:0,height:0,viewBox:{x:0,y:0,width:0,height:0},orientation:"bottom",ticks:[],stroke:"#666",tickLine:!0,axisLine:!0,tick:!0,mirror:!1,minTickGap:5,tickSize:6,tickMargin:2,interval:"preserveEnd"});function dY(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(dY=function(){return!!t})()}function dK(t){return(dK=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}function dZ(t,e){return(dZ=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t})(t,e)}function dJ(t,e,r){return(e=dQ(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function dQ(t){var e=function(t,e){if("object"!=dH(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0!==r){var n=r.call(t,e||"default");if("object"!=dH(n))return n;throw TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(t)}(t,"string");return"symbol"==dH(e)?e:e+""}function d0(){return(d0=Object.assign.bind()).apply(this,arguments)}function d1(t){var e=t.xAxisId,r=f$(),n=fW(),o=fz(e);return null==o?null:y.createElement(dG,d0({},o,{className:(0,v.default)("recharts-".concat(o.axisType," ").concat(o.axisType),o.className),viewBox:{x:0,y:0,width:r,height:n},ticksGenerator:function(t){return ce(t,!0)}}))}var d2=function(t){var e;function r(){var t,e;if(!(this instanceof r))throw TypeError("Cannot call a class as a function");return t=r,e=arguments,t=dK(t),function(t,e){if(e&&("object"===dH(e)||"function"==typeof e))return e;if(void 0!==e)throw TypeError("Derived constructors may only return object or undefined");var r=t;if(void 0===r)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return r}(this,dY()?Reflect.construct(t,e||[],dK(this).constructor):t.apply(this,e))}if("function"!=typeof t&&null!==t)throw TypeError("Super expression must either be null or a function");return r.prototype=Object.create(t&&t.prototype,{constructor:{value:r,writable:!0,configurable:!0}}),Object.defineProperty(r,"prototype",{writable:!1}),t&&dZ(r,t),e=[{key:"render",value:function(){return y.createElement(d1,this.props)}}],function(t,e){for(var r=0;r=0)continue;r[n]=t[n]}return r}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(n=0;n=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}var hs=function(t){var e=t.fill;if(!e||"none"===e)return null;var r=t.fillOpacity,n=t.x,o=t.y,i=t.width,a=t.height,u=t.ry;return y.default.createElement("rect",{x:n,y:o,ry:u,width:i,height:a,stroke:"none",fill:e,fillOpacity:r,className:"recharts-cartesian-grid-bg"})};function hf(t,e){var r;if(y.default.isValidElement(t))r=y.default.cloneElement(t,e);else if((0,L.default)(t))r=t(e);else{var n=e.x1,o=e.y1,i=e.x2,a=e.y2,u=e.key,l=tl(hc(e,hn),!1),c=(l.offset,hc(l,ho));r=y.default.createElement("line",hl({},c,{x1:n,y1:o,x2:i,y2:a,fill:"none",key:u}))}return r}function hp(t){var e=t.x,r=t.width,n=t.horizontal,o=void 0===n||n,i=t.horizontalPoints;if(!o||!i||!i.length)return null;var a=i.map(function(n,i){return hf(o,hu(hu({},t),{},{x1:e,y1:n,x2:e+r,y2:n,key:"line-".concat(i),index:i}))});return y.default.createElement("g",{className:"recharts-cartesian-grid-horizontal"},a)}function hd(t){var e=t.y,r=t.height,n=t.vertical,o=void 0===n||n,i=t.verticalPoints;if(!o||!i||!i.length)return null;var a=i.map(function(n,i){return hf(o,hu(hu({},t),{},{x1:n,y1:e,x2:n,y2:e+r,key:"line-".concat(i),index:i}))});return y.default.createElement("g",{className:"recharts-cartesian-grid-vertical"},a)}function hh(t){var e=t.horizontalFill,r=t.fillOpacity,n=t.x,o=t.y,i=t.width,a=t.height,u=t.horizontalPoints,l=t.horizontal;if(!(void 0===l||l)||!e||!e.length)return null;var c=u.map(function(t){return Math.round(t+o-o)}).sort(function(t,e){return t-e});o!==c[0]&&c.unshift(0);var s=c.map(function(t,u){var l=c[u+1]?c[u+1]-t:o+a-t;if(l<=0)return null;var s=u%e.length;return y.default.createElement("rect",{key:"react-".concat(u),y:t,x:n,height:l,width:i,stroke:"none",fill:e[s],fillOpacity:r,className:"recharts-cartesian-grid-bg"})});return y.default.createElement("g",{className:"recharts-cartesian-gridstripes-horizontal"},s)}function hy(t){var e=t.vertical,r=t.verticalFill,n=t.fillOpacity,o=t.x,i=t.y,a=t.width,u=t.height,l=t.verticalPoints;if(!(void 0===e||e)||!r||!r.length)return null;var c=l.map(function(t){return Math.round(t+o-o)}).sort(function(t,e){return t-e});o!==c[0]&&c.unshift(0);var s=c.map(function(t,e){var l=c[e+1]?c[e+1]-t:o+a-t;if(l<=0)return null;var s=e%r.length;return y.default.createElement("rect",{key:"react-".concat(e),x:t,y:i,width:l,height:u,stroke:"none",fill:r[s],fillOpacity:n,className:"recharts-cartesian-grid-bg"})});return y.default.createElement("g",{className:"recharts-cartesian-gridstripes-vertical"},s)}var hv=function(t,e){var r=t.xAxis,n=t.width,o=t.height,i=t.offset;return ct(dC(hu(hu(hu({},dG.defaultProps),r),{},{ticks:ce(r,!0),viewBox:{x:0,y:0,width:n,height:o}})),i.left,i.left+i.width,e)},hm=function(t,e){var r=t.yAxis,n=t.width,o=t.height,i=t.offset;return ct(dC(hu(hu(hu({},dG.defaultProps),r),{},{ticks:ce(r,!0),viewBox:{x:0,y:0,width:n,height:o}})),i.top,i.top+i.height,e)},hb=[],hg=[];function hx(t){var e,r,n,o,i,a,u=f$(),l=fW(),c=(0,y.useContext)(fI),s=hu(hu({},t),{},{stroke:null!=(e=t.stroke)?e:"#ccc",fill:null!=(r=t.fill)?r:"none",horizontal:null==(n=t.horizontal)||n,horizontalFill:null!=(o=t.horizontalFill)?o:hg,vertical:null==(i=t.vertical)||i,verticalFill:null!=(a=t.verticalFill)?a:hb,x:E(t.x)?t.x:c.left,y:E(t.y)?t.y:c.top,width:E(t.width)?t.width:c.width,height:E(t.height)?t.height:c.height}),f=s.x,p=s.y,d=s.width,h=s.height,v=s.syncWithTicks,m=s.horizontalValues,b=s.verticalValues,g=_((0,y.useContext)(f_)),x=fU();if(!E(d)||d<=0||!E(h)||h<=0||!E(f)||f!==+f||!E(p)||p!==+p)return null;var w=s.verticalCoordinatesGenerator||hv,O=s.horizontalCoordinatesGenerator||hm,S=s.horizontalPoints,j=s.verticalPoints;if((!S||!S.length)&&(0,L.default)(O)){var P=m&&m.length,A=O({yAxis:x?hu(hu({},x),{},{ticks:P?m:x.ticks}):void 0,width:u,height:l,offset:c},!!P||v);B(Array.isArray(A),"horizontalCoordinatesGenerator should return Array but instead it returned [".concat(hi(A),"]")),Array.isArray(A)&&(S=A)}if((!j||!j.length)&&(0,L.default)(w)){var k=b&&b.length,M=w({xAxis:g?hu(hu({},g),{},{ticks:k?b:g.ticks}):void 0,width:u,height:l,offset:c},!!k||v);B(Array.isArray(M),"verticalCoordinatesGenerator should return Array but instead it returned [".concat(hi(M),"]")),Array.isArray(M)&&(j=M)}return y.default.createElement("g",{className:"recharts-cartesian-grid"},y.default.createElement(hs,{fill:s.fill,fillOpacity:s.fillOpacity,x:s.x,y:s.y,width:s.width,height:s.height,ry:s.ry}),y.default.createElement(hp,hl({},s,{offset:c,horizontalPoints:S,xAxis:g,yAxis:x})),y.default.createElement(hd,hl({},s,{offset:c,verticalPoints:j,xAxis:g,yAxis:x})),y.default.createElement(hh,hl({},s,{horizontalPoints:S})),y.default.createElement(hy,hl({},s,{verticalPoints:j})))}hx.displayName="CartesianGrid",t.s(["CartesianGrid",0,hx],872526);let hw=t=>{var e=(0,s.__rest)(t,[]);return y.default.createElement("svg",Object.assign({},e,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"}),y.default.createElement("path",{d:"M8 12L14 6V18L8 12Z"}))},hO=t=>{var e=(0,s.__rest)(t,[]);return y.default.createElement("svg",Object.assign({},e,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"}),y.default.createElement("path",{d:"M16 12L10 18V6L16 12Z"}))},hS=(0,h.makeClassName)("Legend"),hj=({name:t,color:e,onClick:r,activeLegend:n})=>{let o=!!r;return y.default.createElement("li",{className:(0,d.tremorTwMerge)(hS("legendItem"),"group inline-flex items-center px-2 py-0.5 rounded-tremor-small transition whitespace-nowrap",o?"cursor-pointer":"cursor-default","text-tremor-content",o?"hover:bg-tremor-background-subtle":"","dark:text-dark-tremor-content",o?"dark:hover:bg-dark-tremor-background-subtle":""),onClick:n=>{n.stopPropagation(),null==r||r(t,e)}},y.default.createElement("svg",{className:(0,d.tremorTwMerge)("flex-none h-2 w-2 mr-1.5",(0,h.getColorClassNames)(e,p.colorPalette.text).textColor,n&&n!==t?"opacity-40":"opacity-100"),fill:"currentColor",viewBox:"0 0 8 8"},y.default.createElement("circle",{cx:4,cy:4,r:4})),y.default.createElement("p",{className:(0,d.tremorTwMerge)("whitespace-nowrap truncate text-tremor-default","text-tremor-content",o?"group-hover:text-tremor-content-emphasis":"","dark:text-dark-tremor-content",n&&n!==t?"opacity-40":"opacity-100",o?"dark:group-hover:text-dark-tremor-content-emphasis":"")},t))},hE=({icon:t,onClick:e,disabled:r})=>{let[n,o]=y.default.useState(!1),i=y.default.useRef(null);return y.default.useEffect(()=>(n?i.current=setInterval(()=>{null==e||e()},300):clearInterval(i.current),()=>clearInterval(i.current)),[n,e]),(0,y.useEffect)(()=>{r&&(clearInterval(i.current),o(!1))},[r]),y.default.createElement("button",{type:"button",className:(0,d.tremorTwMerge)(hS("legendSliderButton"),"w-5 group inline-flex items-center truncate rounded-tremor-small transition",r?"cursor-not-allowed":"cursor-pointer",r?"text-tremor-content-subtle":"text-tremor-content hover:text-tremor-content-emphasis hover:bg-tremor-background-subtle",r?"dark:text-dark-tremor-subtle":"dark:text-dark-tremor dark:hover:text-tremor-content-emphasis dark:hover:bg-dark-tremor-background-subtle"),disabled:r,onClick:t=>{t.stopPropagation(),null==e||e()},onMouseDown:t=>{t.stopPropagation(),o(!0)},onMouseUp:t=>{t.stopPropagation(),o(!1)}},y.default.createElement(t,{className:"w-full"}))},hP=y.default.forwardRef((t,e)=>{let{categories:r,colors:n=p.themeColorRange,className:o,onClickLegendItem:i,activeLegend:a,enableLegendSlider:u=!1}=t,l=(0,s.__rest)(t,["categories","colors","className","onClickLegendItem","activeLegend","enableLegendSlider"]),c=y.default.useRef(null),f=y.default.useRef(null),[h,v]=y.default.useState(null),[m,b]=y.default.useState(null),g=y.default.useRef(null),x=(0,y.useCallback)(()=>{let t=null==c?void 0:c.current;t&&v({left:t.scrollLeft>0,right:t.scrollWidth-t.clientWidth>t.scrollLeft})},[v]),w=(0,y.useCallback)(t=>{var e,r;let n=null==c?void 0:c.current,o=null==f?void 0:f.current,i=null!=(e=null==n?void 0:n.clientWidth)?e:0,a=null!=(r=null==o?void 0:o.clientWidth)?r:0;n&&u&&(n.scrollTo({left:"left"===t?n.scrollLeft-i+a:n.scrollLeft+i-a,behavior:"smooth"}),setTimeout(()=>{x()},400))},[u,x]);y.default.useEffect(()=>{let t=t=>{"ArrowLeft"===t?w("left"):"ArrowRight"===t&&w("right")};return m?(t(m),g.current=setInterval(()=>{t(m)},300)):clearInterval(g.current),()=>clearInterval(g.current)},[m,w]);let O=t=>{t.stopPropagation(),"ArrowLeft"!==t.key&&"ArrowRight"!==t.key||(t.preventDefault(),b(t.key))},S=t=>{t.stopPropagation(),b(null)};return y.default.useEffect(()=>{let t=null==c?void 0:c.current;return u&&(x(),null==t||t.addEventListener("keydown",O),null==t||t.addEventListener("keyup",S)),()=>{null==t||t.removeEventListener("keydown",O),null==t||t.removeEventListener("keyup",S)}},[x,u]),y.default.createElement("ol",Object.assign({ref:e,className:(0,d.tremorTwMerge)(hS("root"),"relative overflow-hidden",o)},l),y.default.createElement("div",{ref:c,tabIndex:0,className:(0,d.tremorTwMerge)("h-full flex",u?(null==h?void 0:h.right)||(null==h?void 0:h.left)?"pl-4 pr-12 items-center overflow-auto snap-mandatory [&::-webkit-scrollbar]:hidden [scrollbar-width:none]":"":"flex-wrap")},r.map((t,e)=>y.default.createElement(hj,{key:`item-${e}`,name:t,color:n[e%n.length],onClick:i,activeLegend:a}))),u&&((null==h?void 0:h.right)||(null==h?void 0:h.left))?y.default.createElement(y.default.Fragment,null,y.default.createElement("div",{className:(0,d.tremorTwMerge)("bg-tremor-background","dark:bg-dark-tremor-background","absolute flex top-0 pr-1 bottom-0 right-0 items-center justify-center h-full"),ref:f},y.default.createElement(hE,{icon:hw,onClick:()=>{b(null),w("left")},disabled:!(null==h?void 0:h.left)}),y.default.createElement(hE,{icon:hO,onClick:()=>{b(null),w("right")},disabled:!(null==h?void 0:h.right)}))):null)});hP.displayName="Legend";let hA=({payload:t},e,r,n,o,i)=>{var a;let u=(0,y.useRef)(null);a=()=>{var t,e;r((e=null==(t=u.current)?void 0:t.clientHeight)?Number(e)+20:60)},y.useEffect(()=>{let t=()=>{a()};return t(),window.addEventListener("resize",t),()=>window.removeEventListener("resize",t)},[a]);let l=t.filter(t=>"none"!==t.type);return y.default.createElement("div",{ref:u,className:"flex items-center justify-end"},y.default.createElement(hP,{categories:l.map(t=>t.value),colors:l.map(t=>e.get(t.value)),onClickLegendItem:o,activeLegend:n,enableLegendSlider:i}))};t.s(["default",0,hA],114887);let hk=({children:t})=>y.default.createElement("div",{className:(0,d.tremorTwMerge)("rounded-tremor-default text-tremor-default border","bg-tremor-background shadow-tremor-dropdown border-tremor-border","dark:bg-dark-tremor-background dark:shadow-dark-tremor-dropdown dark:border-dark-tremor-border")},t),hM=({value:t,name:e,color:r})=>y.default.createElement("div",{className:"flex items-center justify-between space-x-8"},y.default.createElement("div",{className:"flex items-center space-x-2"},y.default.createElement("span",{className:(0,d.tremorTwMerge)("shrink-0 rounded-tremor-full border-2 h-3 w-3","border-tremor-background shadow-tremor-card","dark:border-dark-tremor-background dark:shadow-dark-tremor-card",(0,h.getColorClassNames)(r,p.colorPalette.background).bgColor)}),y.default.createElement("p",{className:(0,d.tremorTwMerge)("text-right whitespace-nowrap","text-tremor-content","dark:text-dark-tremor-content")},e)),y.default.createElement("p",{className:(0,d.tremorTwMerge)("font-medium tabular-nums text-right whitespace-nowrap","text-tremor-content-emphasis","dark:text-dark-tremor-content-emphasis")},t)),hT=({active:t,payload:e,label:r,categoryColors:n,valueFormatter:o})=>{if(t&&e){let t=e.filter(t=>"none"!==t.type);return y.default.createElement(hk,null,y.default.createElement("div",{className:(0,d.tremorTwMerge)("border-tremor-border border-b px-4 py-2","dark:border-dark-tremor-border")},y.default.createElement("p",{className:(0,d.tremorTwMerge)("font-medium","text-tremor-content-emphasis","dark:text-dark-tremor-content-emphasis")},r)),y.default.createElement("div",{className:(0,d.tremorTwMerge)("px-4 py-2 space-y-1")},t.map(({value:t,name:e},r)=>{var i;return y.default.createElement(hM,{key:`id-${r}`,value:o(t),name:e,color:null!=(i=n.get(e))?i:f.BaseColors.Blue})})))}return null};t.s(["ChartTooltipFrame",0,hk,"ChartTooltipRow",0,hM,"default",0,hT],933303);let h_=({className:t,noDataText:e="No data"})=>y.default.createElement("div",{className:(0,d.tremorTwMerge)("flex items-center justify-center w-full h-full border border-dashed rounded-tremor-default","border-tremor-border","dark:border-dark-tremor-border",t)},y.default.createElement("p",{className:(0,d.tremorTwMerge)("text-tremor-content text-tremor-default","dark:text-dark-tremor-content")},e));t.s(["default",0,h_],628781);let hC=(t,e)=>{let r=new Map;return t.forEach((t,n)=>{r.set(t,e[n%e.length])}),r},hD=(t,e,r)=>[t?"auto":null!=e?e:0,null!=r?r:"auto"];function hI(t,e){if(t===e)return!0;if("object"!=typeof t||"object"!=typeof e||null===t||null===e)return!1;let r=Object.keys(t),n=Object.keys(e);if(r.length!==n.length)return!1;for(let o of r)if(!n.includes(o)||!hI(t[o],e[o]))return!1;return!0}t.s(["constructCategoryColors",0,hC,"deepEqual",0,hI,"getYAxisDomain",0,hD,"hasOnlyOneValueForThisKey",0,function(t,e){let r=[];for(let n of t)if(Object.prototype.hasOwnProperty.call(n,e)&&(r.push(n[e]),r.length>1))return!1;return!0}],472007);let hN=y.default.forwardRef((t,e)=>{let{data:r=[],categories:n=[],index:o,colors:i=p.themeColorRange,valueFormatter:a=h.defaultValueFormatter,layout:u="horizontal",stack:l=!1,relative:c=!1,startEndOnly:v=!1,animationDuration:m=900,showAnimation:b=!1,showXAxis:g=!0,showYAxis:x=!0,yAxisWidth:w=56,intervalType:O="equidistantPreserveStart",showTooltip:S=!0,showLegend:j=!0,showGridLines:E=!0,autoMinValue:P=!1,minValue:A,maxValue:k,allowDecimals:M=!0,noDataText:T,onValueChange:_,enableLegendSlider:C=!1,customTooltip:D,rotateLabelX:I,barCategoryGap:N,tickGap:B=5,xAxisLabel:L,yAxisLabel:R,className:z,padding:U=g||x?{left:20,right:20}:{left:0,right:0}}=t,F=(0,s.__rest)(t,["data","categories","index","colors","valueFormatter","layout","stack","relative","startEndOnly","animationDuration","showAnimation","showXAxis","showYAxis","yAxisWidth","intervalType","showTooltip","showLegend","showGridLines","autoMinValue","minValue","maxValue","allowDecimals","noDataText","onValueChange","enableLegendSlider","customTooltip","rotateLabelX","barCategoryGap","tickGap","xAxisLabel","yAxisLabel","className","padding"]),[$,W]=(0,y.useState)(60),q=hC(n,i),[V,X]=y.default.useState(void 0),[G,H]=(0,y.useState)(void 0),Y=!!_;function K(t,e,r){var n,o,i,a;r.stopPropagation(),_&&(hI(V,Object.assign(Object.assign({},t.payload),{value:t.value}))?(H(void 0),X(void 0),null==_||_(null)):(H(null==(o=null==(n=t.tooltipPayload)?void 0:n[0])?void 0:o.dataKey),X(Object.assign(Object.assign({},t.payload),{value:t.value})),null==_||_(Object.assign({eventType:"bar",categoryClicked:null==(a=null==(i=t.tooltipPayload)?void 0:i[0])?void 0:a.dataKey},t.payload))))}let Z=hD(P,A,k);return y.default.createElement("div",Object.assign({ref:e,className:(0,d.tremorTwMerge)("w-full h-80",z)},F),y.default.createElement(tb,{className:"h-full w-full"},(null==r?void 0:r.length)?y.default.createElement(hr,{barCategoryGap:N,data:r,stackOffset:l?"sign":c?"expand":"none",layout:"vertical"===u?"vertical":"horizontal",onClick:Y&&(G||V)?()=>{X(void 0),H(void 0),null==_||_(null)}:void 0,margin:{bottom:L?30:void 0,left:R?20:void 0,right:R?5:void 0,top:5}},E?y.default.createElement(hx,{className:(0,d.tremorTwMerge)("stroke-1","stroke-tremor-border","dark:stroke-dark-tremor-border"),horizontal:"vertical"!==u,vertical:"vertical"===u}):null,"vertical"!==u?y.default.createElement(d2,{padding:U,hide:!g,dataKey:o,interval:v?"preserveStartEnd":O,tick:{transform:"translate(0, 6)"},ticks:v?[r[0][o],r[r.length-1][o]]:void 0,fill:"",stroke:"",className:(0,d.tremorTwMerge)("mt-4 text-tremor-label","fill-tremor-content","dark:fill-dark-tremor-content"),tickLine:!1,axisLine:!1,angle:null==I?void 0:I.angle,dy:null==I?void 0:I.verticalShift,height:null==I?void 0:I.xAxisHeight,minTickGap:B},L&&y.default.createElement(st,{position:"insideBottom",offset:-20,className:"fill-tremor-content-emphasis text-tremor-default font-medium dark:fill-dark-tremor-content-emphasis"},L)):y.default.createElement(d2,{hide:!g,type:"number",tick:{transform:"translate(-3, 0)"},domain:Z,fill:"",stroke:"",className:(0,d.tremorTwMerge)("text-tremor-label","fill-tremor-content","dark:fill-dark-tremor-content"),tickLine:!1,axisLine:!1,tickFormatter:a,minTickGap:B,allowDecimals:M,angle:null==I?void 0:I.angle,dy:null==I?void 0:I.verticalShift,height:null==I?void 0:I.xAxisHeight},L&&y.default.createElement(st,{position:"insideBottom",offset:-20,className:"fill-tremor-content-emphasis text-tremor-default font-medium dark:fill-dark-tremor-content-emphasis"},L)),"vertical"!==u?y.default.createElement(he,{width:w,hide:!x,axisLine:!1,tickLine:!1,type:"number",domain:Z,tick:{transform:"translate(-3, 0)"},fill:"",stroke:"",className:(0,d.tremorTwMerge)("text-tremor-label","fill-tremor-content","dark:fill-dark-tremor-content"),tickFormatter:c?t=>`${(100*t).toString()} %`:a,allowDecimals:M},R&&y.default.createElement(st,{position:"insideLeft",style:{textAnchor:"middle"},angle:-90,offset:-15,className:"fill-tremor-content-emphasis text-tremor-default font-medium dark:fill-dark-tremor-content-emphasis"},R)):y.default.createElement(he,{width:w,hide:!x,dataKey:o,axisLine:!1,tickLine:!1,ticks:v?[r[0][o],r[r.length-1][o]]:void 0,type:"category",interval:"preserveStartEnd",tick:{transform:"translate(0, 6)"},fill:"",stroke:"",className:(0,d.tremorTwMerge)("text-tremor-label","fill-tremor-content","dark:fill-dark-tremor-content")},R&&y.default.createElement(st,{position:"insideLeft",style:{textAnchor:"middle"},angle:-90,offset:-15,className:"fill-tremor-content-emphasis text-tremor-default font-medium dark:fill-dark-tremor-content-emphasis"},R)),y.default.createElement(t7,{wrapperStyle:{outline:"none"},isAnimationActive:!1,cursor:{fill:"#d1d5db",opacity:"0.15"},content:S?({active:t,payload:e,label:r})=>D?y.default.createElement(D,{payload:null==e?void 0:e.map(t=>{var e;return Object.assign(Object.assign({},t),{color:null!=(e=q.get(t.dataKey))?e:f.BaseColors.Gray})}),active:t,label:r}):y.default.createElement(hT,{active:t,payload:e,label:r,valueFormatter:a,categoryColors:q}):y.default.createElement(y.default.Fragment,null),position:{y:0}}),j?y.default.createElement(eK,{verticalAlign:"top",height:$,content:({payload:t})=>hA({payload:t},q,W,G,Y?t=>{Y&&(t!==G||V?(H(t),null==_||_({eventType:"category",categoryClicked:t})):(H(void 0),null==_||_(null)),X(void 0))}:void 0,C)}):null,n.map(t=>{var e;return y.default.createElement(fo,{className:(0,d.tremorTwMerge)((0,h.getColorClassNames)(null!=(e=q.get(t))?e:f.BaseColors.Gray,p.colorPalette.background).fillColor,_?"cursor-pointer":""),key:t,name:t,type:"linear",stackId:l||c?"a":void 0,dataKey:t,fill:"",isAnimationActive:b,animationDuration:m,shape:t=>((t,e,r,n)=>{let{fillOpacity:o,name:i,payload:a,value:u}=t,{x:l,width:c,y:s,height:f}=t;return"horizontal"===n&&f<0?(s+=f,f=Math.abs(f)):"vertical"===n&&c<0&&(l+=c,c=Math.abs(c)),y.default.createElement("rect",{x:l,y:s,width:c,height:f,opacity:e||r&&r!==i?hI(e,Object.assign(Object.assign({},a),{value:u}))?o:.3:o})})(t,V,G,u),onClick:K})})):y.default.createElement(h_,{noDataText:T})))});hN.displayName="BarChart",t.s(["BarChart",0,hN],584935)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0z4fh7pvzmoy8.js b/litellm/proxy/_experimental/out/_next/static/chunks/0z4fh7pvzmoy8.js new file mode 100644 index 00000000000..68fcc5ec9b5 --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0z4fh7pvzmoy8.js @@ -0,0 +1 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,678784,678745,e=>{"use strict";let o=(0,e.i(475254).default)("check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);e.s(["default",0,o],678745),e.s(["CheckIcon",0,o],678784)},269200,e=>{"use strict";var o=e.i(290571),r=e.i(271645),t=e.i(444755);let a=(0,e.i(673706).makeClassName)("Table"),l=r.default.forwardRef((e,l)=>{let{children:n,className:i}=e,s=(0,o.__rest)(e,["children","className"]);return r.default.createElement("div",{className:(0,t.tremorTwMerge)(a("root"),"overflow-auto",i)},r.default.createElement("table",Object.assign({ref:l,className:(0,t.tremorTwMerge)(a("table"),"w-full text-tremor-default","text-tremor-content","dark:text-dark-tremor-content")},s),n))});l.displayName="Table",e.s(["Table",0,l],269200)},427612,e=>{"use strict";var o=e.i(290571),r=e.i(271645),t=e.i(444755);let a=(0,e.i(673706).makeClassName)("TableHead"),l=r.default.forwardRef((e,l)=>{let{children:n,className:i}=e,s=(0,o.__rest)(e,["children","className"]);return r.default.createElement(r.default.Fragment,null,r.default.createElement("thead",Object.assign({ref:l,className:(0,t.tremorTwMerge)(a("root"),"text-left","text-tremor-content","dark:text-dark-tremor-content",i)},s),n))});l.displayName="TableHead",e.s(["TableHead",0,l],427612)},496020,e=>{"use strict";var o=e.i(290571),r=e.i(271645),t=e.i(444755);let a=(0,e.i(673706).makeClassName)("TableRow"),l=r.default.forwardRef((e,l)=>{let{children:n,className:i}=e,s=(0,o.__rest)(e,["children","className"]);return r.default.createElement(r.default.Fragment,null,r.default.createElement("tr",Object.assign({ref:l,className:(0,t.tremorTwMerge)(a("row"),i)},s),n))});l.displayName="TableRow",e.s(["TableRow",0,l],496020)},64848,e=>{"use strict";var o=e.i(290571),r=e.i(271645),t=e.i(444755);let a=(0,e.i(673706).makeClassName)("TableHeaderCell"),l=r.default.forwardRef((e,l)=>{let{children:n,className:i}=e,s=(0,o.__rest)(e,["children","className"]);return r.default.createElement(r.default.Fragment,null,r.default.createElement("th",Object.assign({ref:l,className:(0,t.tremorTwMerge)(a("root"),"whitespace-nowrap text-left font-semibold top-0 px-4 py-3.5","text-tremor-content-strong","dark:text-dark-tremor-content-strong",i)},s),n))});l.displayName="TableHeaderCell",e.s(["TableHeaderCell",0,l],64848)},942232,e=>{"use strict";var o=e.i(290571),r=e.i(271645),t=e.i(444755);let a=(0,e.i(673706).makeClassName)("TableBody"),l=r.default.forwardRef((e,l)=>{let{children:n,className:i}=e,s=(0,o.__rest)(e,["children","className"]);return r.default.createElement(r.default.Fragment,null,r.default.createElement("tbody",Object.assign({ref:l,className:(0,t.tremorTwMerge)(a("root"),"align-top divide-y","divide-tremor-border","dark:divide-dark-tremor-border",i)},s),n))});l.displayName="TableBody",e.s(["TableBody",0,l],942232)},977572,e=>{"use strict";var o=e.i(290571),r=e.i(271645),t=e.i(444755);let a=(0,e.i(673706).makeClassName)("TableCell"),l=r.default.forwardRef((e,l)=>{let{children:n,className:i}=e,s=(0,o.__rest)(e,["children","className"]);return r.default.createElement(r.default.Fragment,null,r.default.createElement("td",Object.assign({ref:l,className:(0,t.tremorTwMerge)(a("root"),"align-middle whitespace-nowrap text-left p-4",i)},s),n))});l.displayName="TableCell",e.s(["TableCell",0,l],977572)},68155,e=>{"use strict";var o=e.i(271645);let r=o.forwardRef(function(e,r){return o.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:r},e),o.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"}))});e.s(["TrashIcon",0,r],68155)},728889,e=>{"use strict";var o=e.i(290571),r=e.i(271645),t=e.i(829087),a=e.i(480731),l=e.i(444755),n=e.i(673706),i=e.i(95779);let s={xs:{paddingX:"px-1.5",paddingY:"py-1.5"},sm:{paddingX:"px-1.5",paddingY:"py-1.5"},md:{paddingX:"px-2",paddingY:"py-2"},lg:{paddingX:"px-2",paddingY:"py-2"},xl:{paddingX:"px-2.5",paddingY:"py-2.5"}},d={xs:{height:"h-3",width:"w-3"},sm:{height:"h-5",width:"w-5"},md:{height:"h-5",width:"w-5"},lg:{height:"h-7",width:"w-7"},xl:{height:"h-9",width:"w-9"}},c={simple:{rounded:"",border:"",ring:"",shadow:""},light:{rounded:"rounded-tremor-default",border:"",ring:"",shadow:""},shadow:{rounded:"rounded-tremor-default",border:"border",ring:"",shadow:"shadow-tremor-card dark:shadow-dark-tremor-card"},solid:{rounded:"rounded-tremor-default",border:"border-2",ring:"ring-1",shadow:""},outlined:{rounded:"rounded-tremor-default",border:"border",ring:"ring-2",shadow:""}},g=(0,n.makeClassName)("Icon"),m=r.default.forwardRef((e,m)=>{let{icon:p,variant:u="simple",tooltip:h,size:b=a.Sizes.SM,color:k,className:f}=e,A=(0,o.__rest)(e,["icon","variant","tooltip","size","color","className"]),v=((e,o)=>{switch(e){case"simple":return{textColor:o?(0,n.getColorClassNames)(o,i.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:"",borderColor:"",ringColor:""};case"light":return{textColor:o?(0,n.getColorClassNames)(o,i.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:o?(0,l.tremorTwMerge)((0,n.getColorClassNames)(o,i.colorPalette.background).bgColor,"bg-opacity-20"):"bg-tremor-brand-muted dark:bg-dark-tremor-brand-muted",borderColor:"",ringColor:""};case"shadow":return{textColor:o?(0,n.getColorClassNames)(o,i.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:o?(0,l.tremorTwMerge)((0,n.getColorClassNames)(o,i.colorPalette.background).bgColor,"bg-opacity-20"):"bg-tremor-background dark:bg-dark-tremor-background",borderColor:"border-tremor-border dark:border-dark-tremor-border",ringColor:""};case"solid":return{textColor:o?(0,n.getColorClassNames)(o,i.colorPalette.text).textColor:"text-tremor-brand-inverted dark:text-dark-tremor-brand-inverted",bgColor:o?(0,l.tremorTwMerge)((0,n.getColorClassNames)(o,i.colorPalette.background).bgColor,"bg-opacity-20"):"bg-tremor-brand dark:bg-dark-tremor-brand",borderColor:"border-tremor-brand-inverted dark:border-dark-tremor-brand-inverted",ringColor:"ring-tremor-ring dark:ring-dark-tremor-ring"};case"outlined":return{textColor:o?(0,n.getColorClassNames)(o,i.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:o?(0,l.tremorTwMerge)((0,n.getColorClassNames)(o,i.colorPalette.background).bgColor,"bg-opacity-20"):"bg-tremor-background dark:bg-dark-tremor-background",borderColor:o?(0,n.getColorClassNames)(o,i.colorPalette.ring).borderColor:"border-tremor-brand-subtle dark:border-dark-tremor-brand-subtle",ringColor:o?(0,l.tremorTwMerge)((0,n.getColorClassNames)(o,i.colorPalette.ring).ringColor,"ring-opacity-40"):"ring-tremor-brand-muted dark:ring-dark-tremor-brand-muted"}}})(u,k),{tooltipProps:C,getReferenceProps:w}=(0,t.useTooltip)();return r.default.createElement("span",Object.assign({ref:(0,n.mergeRefs)([m,C.refs.setReference]),className:(0,l.tremorTwMerge)(g("root"),"inline-flex shrink-0 items-center justify-center",v.bgColor,v.textColor,v.borderColor,v.ringColor,c[u].rounded,c[u].border,c[u].shadow,c[u].ring,s[b].paddingX,s[b].paddingY,f)},w,A),r.default.createElement(t.default,Object.assign({text:h},C)),r.default.createElement(p,{className:(0,l.tremorTwMerge)(g("icon"),"shrink-0",d[b].height,d[b].width)}))});m.displayName="Icon",e.s(["default",0,m],728889)},752978,e=>{"use strict";var o=e.i(728889);e.s(["Icon",()=>o.default])},591935,e=>{"use strict";var o=e.i(271645);let r=o.forwardRef(function(e,r){return o.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:r},e),o.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z"}))});e.s(["PencilAltIcon",0,r],591935)},546467,e=>{"use strict";let o=(0,e.i(475254).default)("external-link",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]);e.s(["default",0,o])},916925,e=>{"use strict";var o,r=e.i(555987),t=((o={}).A2A_Agent="A2A Agent",o.AI21="Ai21",o.AI21_CHAT="Ai21 Chat",o.AIML="AI/ML API",o.AIOHTTP_OPENAI="Aiohttp Openai",o.Anthropic="Anthropic",o.ANTHROPIC_TEXT="Anthropic Text",o.AssemblyAI="AssemblyAI",o.AUTO_ROUTER="Auto Router",o.Bedrock="Amazon Bedrock",o.BedrockMantle="Amazon Bedrock Mantle",o.SageMaker="AWS SageMaker",o.Azure="Azure",o.Azure_AI_Studio="Azure AI Foundry (Studio)",o.AZURE_TEXT="Azure Text",o.BASETEN="Baseten",o.BYTEZ="Bytez",o.Cerebras="Cerebras",o.CLARIFAI="Clarifai",o.CLOUDFLARE="Cloudflare",o.CODESTRAL="Codestral",o.Cohere="Cohere",o.COHERE_CHAT="Cohere Chat",o.COMETAPI="Cometapi",o.COMPACTIFAI="Compactifai",o.Cursor="Cursor",o.Dashscope="Dashscope",o.Databricks="Databricks (Qwen API)",o.DATAROBOT="Datarobot",o.DeepInfra="DeepInfra",o.Deepgram="Deepgram",o.Deepseek="Deepseek",o.DOCKER_MODEL_RUNNER="Docker Model Runner",o.DOTPROMPT="Dotprompt",o.ElevenLabs="ElevenLabs",o.EMPOWER="Empower",o.FalAI="Fal AI",o.FEATHERLESS_AI="Featherless Ai",o.FireworksAI="Fireworks AI",o.FRIENDLIAI="Friendliai",o.GALADRIEL="Galadriel",o.GITHUB_COPILOT="Github Copilot",o.Google_AI_Studio="Google AI Studio",o.GradientAI="GradientAI",o.Groq="Groq",o.HEROKU="Heroku",o.Hosted_Vllm="vllm",o.HUGGINGFACE="Huggingface",o.HYPERBOLIC="Hyperbolic",o.Infinity="Infinity",o.JinaAI="Jina AI",o.LAMBDA_AI="Lambda Ai",o.LEMONADE="Lemonade",o.LLAMAFILE="Llamafile",o.LM_STUDIO="Lm Studio",o.LLAMA="Meta Llama",o.MARITALK="Maritalk",o.MiniMax="MiniMax",o.MistralAI="Mistral AI",o.MOONSHOT="Moonshot",o.MORPH="Morph",o.NEBIUS="Nebius",o.NLP_CLOUD="Nlp Cloud",o.NOVITA="Novita",o.NSCALE="Nscale",o.NVIDIA_NIM="Nvidia Nim",o.Ollama="Ollama",o.OLLAMA_CHAT="Ollama Chat",o.OOBABOOGA="Oobabooga",o.OpenAI="OpenAI",o.OPENAI_LIKE="Openai Like",o.OpenAI_Compatible="OpenAI-Compatible Chat Completions (Together AI, vLLM, etc.)",o.OpenAI_Text="OpenAI Text Completion",o.OpenAI_Text_Compatible="OpenAI-Compatible Completions (legacy /v1/completions)",o.Openrouter="Openrouter",o.Oracle="Oracle Cloud Infrastructure (OCI)",o.OVHCLOUD="Ovhcloud",o.Perplexity="Perplexity",o.PETALS="Petals",o.PG_VECTOR="Pg Vector",o.PREDIBASE="Predibase",o.RECRAFT="Recraft",o.REPLICATE="Replicate",o.RunwayML="RunwayML",o.SAGEMAKER_LEGACY="Sagemaker",o.Sambanova="Sambanova",o.SAP="SAP Generative AI Hub",o.Snowflake="Snowflake",o.Soniox="Soniox",o.TEXT_COMPLETION_CODESTRAL="Text-Completion-Codestral",o.TogetherAI="TogetherAI",o.TOPAZ="Topaz",o.Triton="Triton",o.V0="V0",o.VERCEL_AI_GATEWAY="Vercel Ai Gateway",o.Vertex_AI="Vertex AI (Anthropic, Gemini, etc.)",o.VERTEX_AI_BETA="Vertex Ai Beta",o.VLLM="Vllm",o.VolcEngine="VolcEngine",o.Voyage="Voyage AI",o.WANDB="Wandb",o.WATSONX="Watsonx",o.WATSONX_TEXT="Watsonx Text",o.xAI="xAI",o.XINFERENCE="Xinference",o.ZAI="Z.AI (Zhipu AI)",o);let a={A2A_Agent:"a2a_agent",AI21:"ai21",AI21_CHAT:"ai21_chat",AIML:"aiml",AIOHTTP_OPENAI:"aiohttp_openai",Anthropic:"anthropic",ANTHROPIC_TEXT:"anthropic_text",AssemblyAI:"assemblyai",AUTO_ROUTER:"auto_router",Azure:"azure",Azure_AI_Studio:"azure_ai",AZURE_TEXT:"azure_text",BASETEN:"baseten",Bedrock:"bedrock",BedrockMantle:"bedrock_mantle",BYTEZ:"bytez",Cerebras:"cerebras",CLARIFAI:"clarifai",CLOUDFLARE:"cloudflare",CODESTRAL:"codestral",Cohere:"cohere",COHERE_CHAT:"cohere_chat",COMETAPI:"cometapi",COMPACTIFAI:"compactifai",Cursor:"cursor",Dashscope:"dashscope",Databricks:"databricks",DATAROBOT:"datarobot",DeepInfra:"deepinfra",Deepgram:"deepgram",Deepseek:"deepseek",DOCKER_MODEL_RUNNER:"docker_model_runner",DOTPROMPT:"dotprompt",ElevenLabs:"elevenlabs",EMPOWER:"empower",FalAI:"fal_ai",FEATHERLESS_AI:"featherless_ai",FireworksAI:"fireworks_ai",FRIENDLIAI:"friendliai",GALADRIEL:"galadriel",GITHUB_COPILOT:"github_copilot",Google_AI_Studio:"gemini",GradientAI:"gradient_ai",Groq:"groq",HEROKU:"heroku",Hosted_Vllm:"hosted_vllm",HUGGINGFACE:"huggingface",HYPERBOLIC:"hyperbolic",Infinity:"infinity",JinaAI:"jina_ai",LAMBDA_AI:"lambda_ai",LEMONADE:"lemonade",LLAMAFILE:"llamafile",LLAMA:"meta_llama",LM_STUDIO:"lm_studio",MARITALK:"maritalk",MiniMax:"minimax",MistralAI:"mistral",MOONSHOT:"moonshot",MORPH:"morph",NEBIUS:"nebius",NLP_CLOUD:"nlp_cloud",NOVITA:"novita",NSCALE:"nscale",NVIDIA_NIM:"nvidia_nim",Ollama:"ollama",OLLAMA_CHAT:"ollama_chat",OOBABOOGA:"oobabooga",OpenAI:"openai",OPENAI_LIKE:"openai_like",OpenAI_Compatible:"openai",OpenAI_Text:"text-completion-openai",OpenAI_Text_Compatible:"text-completion-openai",Openrouter:"openrouter",Oracle:"oci",OVHCLOUD:"ovhcloud",Perplexity:"perplexity",PETALS:"petals",PG_VECTOR:"pg_vector",PREDIBASE:"predibase",RECRAFT:"recraft",REPLICATE:"replicate",RunwayML:"runwayml",SAGEMAKER_LEGACY:"sagemaker",SageMaker:"sagemaker_chat",Sambanova:"sambanova",SAP:"sap",Snowflake:"snowflake",Soniox:"soniox",TEXT_COMPLETION_CODESTRAL:"text-completion-codestral",TogetherAI:"together_ai",TOPAZ:"topaz",Triton:"triton",V0:"v0",VERCEL_AI_GATEWAY:"vercel_ai_gateway",Vertex_AI:"vertex_ai",VERTEX_AI_BETA:"vertex_ai_beta",VLLM:"vllm",VolcEngine:"volcengine",Voyage:"voyage",WANDB:"wandb",WATSONX:"watsonx",WATSONX_TEXT:"watsonx_text",xAI:"xai",XINFERENCE:"xinference",ZAI:"zai"},l=new Set(["bedrock_mantle"]),n="/ui/assets/logos/",i={"A2A Agent":`${n}a2a_agent.png`,Ai21:`${n}ai21.svg`,"Ai21 Chat":`${n}ai21.svg`,"AI/ML API":`${n}aiml_api.svg`,"Aiohttp Openai":`${n}openai_small.svg`,Anthropic:`${n}anthropic.svg`,"Anthropic Text":`${n}anthropic.svg`,AssemblyAI:`${n}assemblyai_small.png`,Azure:`${n}microsoft_azure.svg`,"Azure AI Foundry (Studio)":`${n}microsoft_azure.svg`,"Azure Text":`${n}microsoft_azure.svg`,Baseten:`${n}baseten.svg`,"Amazon Bedrock":`${n}bedrock.svg`,"Amazon Bedrock Mantle":`${n}bedrock.svg`,"AWS SageMaker":`${n}bedrock.svg`,Cerebras:`${n}cerebras.svg`,Cloudflare:`${n}cloudflare.svg`,Codestral:`${n}mistral.svg`,Cohere:`${n}cohere.svg`,"Cohere Chat":`${n}cohere.svg`,Cometapi:`${n}cometapi.svg`,Cursor:`${n}cursor.svg`,"Databricks (Qwen API)":`${n}databricks.svg`,Dashscope:`${n}dashscope.svg`,Deepseek:`${n}deepseek.svg`,Deepgram:`${n}deepgram.png`,DeepInfra:`${n}deepinfra.png`,ElevenLabs:`${n}elevenlabs.png`,"Fal AI":`${n}fal_ai.jpg`,"Featherless Ai":`${n}featherless.svg`,"Fireworks AI":`${n}fireworks.svg`,Friendliai:`${n}friendli.svg`,"Github Copilot":`${n}github_copilot.svg`,"Google AI Studio":`${n}google.svg`,GradientAI:`${n}gradientai.svg`,Groq:`${n}groq.svg`,vllm:`${n}vllm.png`,Huggingface:`${n}huggingface.svg`,Hyperbolic:`${n}hyperbolic.svg`,Infinity:`${n}infinity.png`,"Jina AI":`${n}jina.png`,"Lambda Ai":`${n}lambda.svg`,"Lm Studio":`${n}lmstudio.svg`,"Meta Llama":`${n}meta_llama.svg`,MiniMax:`${n}minimax.svg`,"Mistral AI":`${n}mistral.svg`,Moonshot:`${n}moonshot.svg`,Morph:`${n}morph.svg`,Nebius:`${n}nebius.svg`,Novita:`${n}novita.svg`,"Nvidia Nim":`${n}nvidia_nim.svg`,Ollama:`${n}ollama.svg`,"Ollama Chat":`${n}ollama.svg`,Oobabooga:`${n}openai_small.svg`,OpenAI:`${n}openai_small.svg`,"Openai Like":`${n}openai_small.svg`,"OpenAI Text Completion":`${n}openai_small.svg`,"OpenAI-Compatible Completions (legacy /v1/completions)":`${n}openai_small.svg`,"OpenAI-Compatible Chat Completions (Together AI, vLLM, etc.)":`${n}openai_small.svg`,Openrouter:`${n}openrouter.svg`,"Oracle Cloud Infrastructure (OCI)":`${n}oracle.svg`,Perplexity:`${n}perplexity-ai.svg`,Recraft:`${n}recraft.svg`,Replicate:`${n}replicate.svg`,RunwayML:`${n}runwayml.png`,Sagemaker:`${n}bedrock.svg`,Sambanova:`${n}sambanova.svg`,"SAP Generative AI Hub":`${n}sap.png`,Snowflake:`${n}snowflake.svg`,Soniox:`${n}soniox.svg`,"Text-Completion-Codestral":`${n}mistral.svg`,TogetherAI:`${n}togetherai.svg`,Topaz:`${n}topaz.svg`,Triton:`${n}nvidia_triton.png`,V0:`${n}v0.svg`,"Vercel Ai Gateway":`${n}vercel.svg`,"Vertex AI (Anthropic, Gemini, etc.)":`${n}google.svg`,"Vertex Ai Beta":`${n}google.svg`,Vllm:`${n}vllm.png`,VolcEngine:`${n}volcengine.png`,"Voyage AI":`${n}voyage.webp`,Watsonx:`${n}watsonx.svg`,"Watsonx Text":`${n}watsonx.svg`,xAI:`${n}xai.svg`,Xinference:`${n}xinference.svg`};e.s(["Providers",()=>t,"getPlaceholder",0,e=>{if("AI/ML API"===e)return"aiml/flux-pro/v1.1";if("Vertex AI (Anthropic, Gemini, etc.)"===e)return"gemini-pro";if("Anthropic"==e)return"claude-3-opus";if("Amazon Bedrock"==e)return"claude-3-opus";if("AWS SageMaker"==e)return"sagemaker/jumpstart-dft-meta-textgeneration-llama-2-7b";else if("Google AI Studio"==e)return"gemini-pro";else if("Azure AI Foundry (Studio)"==e)return"azure_ai/command-r-plus";else if("Azure"==e)return"my-deployment";else if("Oracle Cloud Infrastructure (OCI)"==e)return"oci/xai.grok-4";else if("Snowflake"==e)return"snowflake/mistral-7b";else if("Voyage AI"==e)return"voyage/";else if("Jina AI"==e)return"jina_ai/";else if("VolcEngine"==e)return"volcengine/";else if("DeepInfra"==e)return"deepinfra/";else if("Fal AI"==e)return"fal_ai/fal-ai/flux-pro/v1.1-ultra";else if("RunwayML"==e)return"runwayml/gen4_turbo";else if("Watsonx"===e)return"watsonx/ibm/granite-3-3-8b-instruct";else if("Cursor"===e)return"cursor/claude-4-sonnet";else if("Z.AI (Zhipu AI)"===e)return"zai/glm-4.5";else return"gpt-3.5-turbo"},"getProviderLogoAndName",0,e=>{if(!e)return{logo:"",displayName:"-"};if("gemini"===e.toLowerCase()){let e="Google AI Studio";return{logo:(0,r.resolveLogoSrc)(i[e])??"",displayName:e}}let o=Object.keys(a).find(o=>a[o].toLowerCase()===e.toLowerCase())??Object.keys(a).find(o=>o.toLowerCase()===e.toLowerCase());if(!o)return{logo:"",displayName:e};let l=t[o];return{logo:(0,r.resolveLogoSrc)(i[l])??"",displayName:l}},"getProviderModels",0,(e,o)=>{console.log(`Provider key: ${e}`);let r=a[e];console.log(`Provider mapped to: ${r}`);let t=[];return e&&"object"==typeof o&&(Object.entries(o).forEach(([e,o])=>{if(null!==o&&"object"==typeof o&&"litellm_provider"in o){let a=o.litellm_provider,n="string"==typeof a&&(a.startsWith(`${r}_`)||a.startsWith(`${r}-`));(a===r||n&&!l.has(a))&&t.push(e)}}),"Cohere"==e&&(console.log("Adding cohere chat models"),Object.entries(o).forEach(([e,o])=>{null!==o&&"object"==typeof o&&"litellm_provider"in o&&"cohere_chat"===o.litellm_provider&&t.push(e)})),"AWS SageMaker"==e&&(console.log("Adding sagemaker chat models"),Object.entries(o).forEach(([e,o])=>{null!==o&&"object"==typeof o&&"litellm_provider"in o&&"sagemaker_chat"===o.litellm_provider&&t.push(e)}))),t},"providerLogoMap",0,i,"provider_map",0,a])},240647,e=>{"use strict";var o=e.i(286612);e.s(["RightOutlined",()=>o.default])},836991,e=>{"use strict";var o=e.i(271645);let r=o.forwardRef(function(e,r){return o.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:r},e),o.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M6 18L18 6M6 6l12 12"}))});e.s(["XIcon",0,r],836991)},91500,e=>{"use strict";e.i(247167);var o=e.i(931067),r=e.i(271645);let t={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M531.3 574.4l.3-1.4c5.8-23.9 13.1-53.7 7.4-80.7-3.8-21.3-19.5-29.6-32.9-30.2-15.8-.7-29.9 8.3-33.4 21.4-6.6 24-.7 56.8 10.1 98.6-13.6 32.4-35.3 79.5-51.2 107.5-29.6 15.3-69.3 38.9-75.2 68.7-1.2 5.5.2 12.5 3.5 18.8 3.7 7 9.6 12.4 16.5 15 3 1.1 6.6 2 10.8 2 17.6 0 46.1-14.2 84.1-79.4 5.8-1.9 11.8-3.9 17.6-5.9 27.2-9.2 55.4-18.8 80.9-23.1 28.2 15.1 60.3 24.8 82.1 24.8 21.6 0 30.1-12.8 33.3-20.5 5.6-13.5 2.9-30.5-6.2-39.6-13.2-13-45.3-16.4-95.3-10.2-24.6-15-40.7-35.4-52.4-65.8zM421.6 726.3c-13.9 20.2-24.4 30.3-30.1 34.7 6.7-12.3 19.8-25.3 30.1-34.7zm87.6-235.5c5.2 8.9 4.5 35.8.5 49.4-4.9-19.9-5.6-48.1-2.7-51.4.8.1 1.5.7 2.2 2zm-1.6 120.5c10.7 18.5 24.2 34.4 39.1 46.2-21.6 4.9-41.3 13-58.9 20.2-4.2 1.7-8.3 3.4-12.3 5 13.3-24.1 24.4-51.4 32.1-71.4zm155.6 65.5c.1.2.2.5-.4.9h-.2l-.2.3c-.8.5-9 5.3-44.3-8.6 40.6-1.9 45 7.3 45.1 7.4zm191.4-388.2L639.4 73.4c-6-6-14.1-9.4-22.6-9.4H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V311.3c0-8.5-3.4-16.7-9.4-22.7zM790.2 326H602V137.8L790.2 326zm1.8 562H232V136h302v216a42 42 0 0042 42h216v494z"}}]},name:"file-pdf",theme:"outlined"};var a=e.i(9583),l=r.forwardRef(function(e,l){return r.createElement(a.default,(0,o.default)({},e,{ref:l,icon:t}))});e.s(["FilePdfOutlined",0,l],91500)},673709,e=>{"use strict";var o=e.i(843476),r=e.i(271645),t=e.i(678784);let a=(0,e.i(475254).default)("clipboard",[["rect",{width:"8",height:"4",x:"8",y:"2",rx:"1",ry:"1",key:"tgr4d6"}],["path",{d:"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2",key:"116196"}]]);var l=e.i(650056);let n={'code[class*="language-"]':{background:"hsl(230, 1%, 98%)",color:"hsl(230, 8%, 24%)",fontFamily:'"Fira Code", "Fira Mono", Menlo, Consolas, "DejaVu Sans Mono", monospace',direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",lineHeight:"1.5",MozTabSize:"2",OTabSize:"2",tabSize:"2",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none"},'pre[class*="language-"]':{background:"hsl(230, 1%, 98%)",color:"hsl(230, 8%, 24%)",fontFamily:'"Fira Code", "Fira Mono", Menlo, Consolas, "DejaVu Sans Mono", monospace',direction:"ltr",textAlign:"left",whiteSpace:"pre",wordSpacing:"normal",wordBreak:"normal",lineHeight:"1.5",MozTabSize:"2",OTabSize:"2",tabSize:"2",WebkitHyphens:"none",MozHyphens:"none",msHyphens:"none",hyphens:"none",padding:"1em",margin:"0.5em 0",overflow:"auto",borderRadius:"0.3em"},'code[class*="language-"]::-moz-selection':{background:"hsl(230, 1%, 90%)",color:"inherit"},'code[class*="language-"] *::-moz-selection':{background:"hsl(230, 1%, 90%)",color:"inherit"},'pre[class*="language-"] *::-moz-selection':{background:"hsl(230, 1%, 90%)",color:"inherit"},'code[class*="language-"]::selection':{background:"hsl(230, 1%, 90%)",color:"inherit"},'code[class*="language-"] *::selection':{background:"hsl(230, 1%, 90%)",color:"inherit"},'pre[class*="language-"] *::selection':{background:"hsl(230, 1%, 90%)",color:"inherit"},':not(pre) > code[class*="language-"]':{padding:"0.2em 0.3em",borderRadius:"0.3em",whiteSpace:"normal"},comment:{color:"hsl(230, 4%, 64%)",fontStyle:"italic"},prolog:{color:"hsl(230, 4%, 64%)"},cdata:{color:"hsl(230, 4%, 64%)"},doctype:{color:"hsl(230, 8%, 24%)"},punctuation:{color:"hsl(230, 8%, 24%)"},entity:{color:"hsl(230, 8%, 24%)",cursor:"help"},"attr-name":{color:"hsl(35, 99%, 36%)"},"class-name":{color:"hsl(35, 99%, 36%)"},boolean:{color:"hsl(35, 99%, 36%)"},constant:{color:"hsl(35, 99%, 36%)"},number:{color:"hsl(35, 99%, 36%)"},atrule:{color:"hsl(35, 99%, 36%)"},keyword:{color:"hsl(301, 63%, 40%)"},property:{color:"hsl(5, 74%, 59%)"},tag:{color:"hsl(5, 74%, 59%)"},symbol:{color:"hsl(5, 74%, 59%)"},deleted:{color:"hsl(5, 74%, 59%)"},important:{color:"hsl(5, 74%, 59%)"},selector:{color:"hsl(119, 34%, 47%)"},string:{color:"hsl(119, 34%, 47%)"},char:{color:"hsl(119, 34%, 47%)"},builtin:{color:"hsl(119, 34%, 47%)"},inserted:{color:"hsl(119, 34%, 47%)"},regex:{color:"hsl(119, 34%, 47%)"},"attr-value":{color:"hsl(119, 34%, 47%)"},"attr-value > .token.punctuation":{color:"hsl(119, 34%, 47%)"},variable:{color:"hsl(221, 87%, 60%)"},operator:{color:"hsl(221, 87%, 60%)"},function:{color:"hsl(221, 87%, 60%)"},url:{color:"hsl(198, 99%, 37%)"},"attr-value > .token.punctuation.attr-equals":{color:"hsl(230, 8%, 24%)"},"special-attr > .token.attr-value > .token.value.css":{color:"hsl(230, 8%, 24%)"},".language-css .token.selector":{color:"hsl(5, 74%, 59%)"},".language-css .token.property":{color:"hsl(230, 8%, 24%)"},".language-css .token.function":{color:"hsl(198, 99%, 37%)"},".language-css .token.url > .token.function":{color:"hsl(198, 99%, 37%)"},".language-css .token.url > .token.string.url":{color:"hsl(119, 34%, 47%)"},".language-css .token.important":{color:"hsl(301, 63%, 40%)"},".language-css .token.atrule .token.rule":{color:"hsl(301, 63%, 40%)"},".language-javascript .token.operator":{color:"hsl(301, 63%, 40%)"},".language-javascript .token.template-string > .token.interpolation > .token.interpolation-punctuation.punctuation":{color:"hsl(344, 84%, 43%)"},".language-json .token.operator":{color:"hsl(230, 8%, 24%)"},".language-json .token.null.keyword":{color:"hsl(35, 99%, 36%)"},".language-markdown .token.url":{color:"hsl(230, 8%, 24%)"},".language-markdown .token.url > .token.operator":{color:"hsl(230, 8%, 24%)"},".language-markdown .token.url-reference.url > .token.string":{color:"hsl(230, 8%, 24%)"},".language-markdown .token.url > .token.content":{color:"hsl(221, 87%, 60%)"},".language-markdown .token.url > .token.url":{color:"hsl(198, 99%, 37%)"},".language-markdown .token.url-reference.url":{color:"hsl(198, 99%, 37%)"},".language-markdown .token.blockquote.punctuation":{color:"hsl(230, 4%, 64%)",fontStyle:"italic"},".language-markdown .token.hr.punctuation":{color:"hsl(230, 4%, 64%)",fontStyle:"italic"},".language-markdown .token.code-snippet":{color:"hsl(119, 34%, 47%)"},".language-markdown .token.bold .token.content":{color:"hsl(35, 99%, 36%)"},".language-markdown .token.italic .token.content":{color:"hsl(301, 63%, 40%)"},".language-markdown .token.strike .token.content":{color:"hsl(5, 74%, 59%)"},".language-markdown .token.strike .token.punctuation":{color:"hsl(5, 74%, 59%)"},".language-markdown .token.list.punctuation":{color:"hsl(5, 74%, 59%)"},".language-markdown .token.title.important > .token.punctuation":{color:"hsl(5, 74%, 59%)"},bold:{fontWeight:"bold"},italic:{fontStyle:"italic"},namespace:{Opacity:"0.8"},"token.tab:not(:empty):before":{color:"hsla(230, 8%, 24%, 0.2)"},"token.cr:before":{color:"hsla(230, 8%, 24%, 0.2)"},"token.lf:before":{color:"hsla(230, 8%, 24%, 0.2)"},"token.space:before":{color:"hsla(230, 8%, 24%, 0.2)"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item":{marginRight:"0.4em"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item > button":{background:"hsl(230, 1%, 90%)",color:"hsl(230, 6%, 44%)",padding:"0.1em 0.4em",borderRadius:"0.3em"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item > a":{background:"hsl(230, 1%, 90%)",color:"hsl(230, 6%, 44%)",padding:"0.1em 0.4em",borderRadius:"0.3em"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item > span":{background:"hsl(230, 1%, 90%)",color:"hsl(230, 6%, 44%)",padding:"0.1em 0.4em",borderRadius:"0.3em"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:hover":{background:"hsl(230, 1%, 78%)",color:"hsl(230, 8%, 24%)"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item > button:focus":{background:"hsl(230, 1%, 78%)",color:"hsl(230, 8%, 24%)"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:hover":{background:"hsl(230, 1%, 78%)",color:"hsl(230, 8%, 24%)"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item > a:focus":{background:"hsl(230, 1%, 78%)",color:"hsl(230, 8%, 24%)"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:hover":{background:"hsl(230, 1%, 78%)",color:"hsl(230, 8%, 24%)"},"div.code-toolbar > .toolbar.toolbar > .toolbar-item > span:focus":{background:"hsl(230, 1%, 78%)",color:"hsl(230, 8%, 24%)"},".line-highlight.line-highlight":{background:"hsla(230, 8%, 24%, 0.05)"},".line-highlight.line-highlight:before":{background:"hsl(230, 1%, 90%)",color:"hsl(230, 8%, 24%)",padding:"0.1em 0.6em",borderRadius:"0.3em",boxShadow:"0 2px 0 0 rgba(0, 0, 0, 0.2)"},".line-highlight.line-highlight[data-end]:after":{background:"hsl(230, 1%, 90%)",color:"hsl(230, 8%, 24%)",padding:"0.1em 0.6em",borderRadius:"0.3em",boxShadow:"0 2px 0 0 rgba(0, 0, 0, 0.2)"},"pre[id].linkable-line-numbers.linkable-line-numbers span.line-numbers-rows > span:hover:before":{backgroundColor:"hsla(230, 8%, 24%, 0.05)"},".line-numbers.line-numbers .line-numbers-rows":{borderRightColor:"hsla(230, 8%, 24%, 0.2)"},".command-line .command-line-prompt":{borderRightColor:"hsla(230, 8%, 24%, 0.2)"},".line-numbers .line-numbers-rows > span:before":{color:"hsl(230, 1%, 62%)"},".command-line .command-line-prompt > span:before":{color:"hsl(230, 1%, 62%)"},".rainbow-braces .token.token.punctuation.brace-level-1":{color:"hsl(5, 74%, 59%)"},".rainbow-braces .token.token.punctuation.brace-level-5":{color:"hsl(5, 74%, 59%)"},".rainbow-braces .token.token.punctuation.brace-level-9":{color:"hsl(5, 74%, 59%)"},".rainbow-braces .token.token.punctuation.brace-level-2":{color:"hsl(119, 34%, 47%)"},".rainbow-braces .token.token.punctuation.brace-level-6":{color:"hsl(119, 34%, 47%)"},".rainbow-braces .token.token.punctuation.brace-level-10":{color:"hsl(119, 34%, 47%)"},".rainbow-braces .token.token.punctuation.brace-level-3":{color:"hsl(221, 87%, 60%)"},".rainbow-braces .token.token.punctuation.brace-level-7":{color:"hsl(221, 87%, 60%)"},".rainbow-braces .token.token.punctuation.brace-level-11":{color:"hsl(221, 87%, 60%)"},".rainbow-braces .token.token.punctuation.brace-level-4":{color:"hsl(301, 63%, 40%)"},".rainbow-braces .token.token.punctuation.brace-level-8":{color:"hsl(301, 63%, 40%)"},".rainbow-braces .token.token.punctuation.brace-level-12":{color:"hsl(301, 63%, 40%)"},"pre.diff-highlight > code .token.token.deleted:not(.prefix)":{backgroundColor:"hsla(353, 100%, 66%, 0.15)"},"pre > code.diff-highlight .token.token.deleted:not(.prefix)":{backgroundColor:"hsla(353, 100%, 66%, 0.15)"},"pre.diff-highlight > code .token.token.deleted:not(.prefix)::-moz-selection":{backgroundColor:"hsla(353, 95%, 66%, 0.25)"},"pre.diff-highlight > code .token.token.deleted:not(.prefix) *::-moz-selection":{backgroundColor:"hsla(353, 95%, 66%, 0.25)"},"pre > code.diff-highlight .token.token.deleted:not(.prefix)::-moz-selection":{backgroundColor:"hsla(353, 95%, 66%, 0.25)"},"pre > code.diff-highlight .token.token.deleted:not(.prefix) *::-moz-selection":{backgroundColor:"hsla(353, 95%, 66%, 0.25)"},"pre.diff-highlight > code .token.token.deleted:not(.prefix)::selection":{backgroundColor:"hsla(353, 95%, 66%, 0.25)"},"pre.diff-highlight > code .token.token.deleted:not(.prefix) *::selection":{backgroundColor:"hsla(353, 95%, 66%, 0.25)"},"pre > code.diff-highlight .token.token.deleted:not(.prefix)::selection":{backgroundColor:"hsla(353, 95%, 66%, 0.25)"},"pre > code.diff-highlight .token.token.deleted:not(.prefix) *::selection":{backgroundColor:"hsla(353, 95%, 66%, 0.25)"},"pre.diff-highlight > code .token.token.inserted:not(.prefix)":{backgroundColor:"hsla(137, 100%, 55%, 0.15)"},"pre > code.diff-highlight .token.token.inserted:not(.prefix)":{backgroundColor:"hsla(137, 100%, 55%, 0.15)"},"pre.diff-highlight > code .token.token.inserted:not(.prefix)::-moz-selection":{backgroundColor:"hsla(135, 73%, 55%, 0.25)"},"pre.diff-highlight > code .token.token.inserted:not(.prefix) *::-moz-selection":{backgroundColor:"hsla(135, 73%, 55%, 0.25)"},"pre > code.diff-highlight .token.token.inserted:not(.prefix)::-moz-selection":{backgroundColor:"hsla(135, 73%, 55%, 0.25)"},"pre > code.diff-highlight .token.token.inserted:not(.prefix) *::-moz-selection":{backgroundColor:"hsla(135, 73%, 55%, 0.25)"},"pre.diff-highlight > code .token.token.inserted:not(.prefix)::selection":{backgroundColor:"hsla(135, 73%, 55%, 0.25)"},"pre.diff-highlight > code .token.token.inserted:not(.prefix) *::selection":{backgroundColor:"hsla(135, 73%, 55%, 0.25)"},"pre > code.diff-highlight .token.token.inserted:not(.prefix)::selection":{backgroundColor:"hsla(135, 73%, 55%, 0.25)"},"pre > code.diff-highlight .token.token.inserted:not(.prefix) *::selection":{backgroundColor:"hsla(135, 73%, 55%, 0.25)"},".prism-previewer.prism-previewer:before":{borderColor:"hsl(0, 0, 95%)"},".prism-previewer-gradient.prism-previewer-gradient div":{borderColor:"hsl(0, 0, 95%)",borderRadius:"0.3em"},".prism-previewer-color.prism-previewer-color:before":{borderRadius:"0.3em"},".prism-previewer-easing.prism-previewer-easing:before":{borderRadius:"0.3em"},".prism-previewer.prism-previewer:after":{borderTopColor:"hsl(0, 0, 95%)"},".prism-previewer-flipped.prism-previewer-flipped.after":{borderBottomColor:"hsl(0, 0, 95%)"},".prism-previewer-angle.prism-previewer-angle:before":{background:"hsl(0, 0%, 100%)"},".prism-previewer-time.prism-previewer-time:before":{background:"hsl(0, 0%, 100%)"},".prism-previewer-easing.prism-previewer-easing":{background:"hsl(0, 0%, 100%)"},".prism-previewer-angle.prism-previewer-angle circle":{stroke:"hsl(230, 8%, 24%)",strokeOpacity:"1"},".prism-previewer-time.prism-previewer-time circle":{stroke:"hsl(230, 8%, 24%)",strokeOpacity:"1"},".prism-previewer-easing.prism-previewer-easing circle":{stroke:"hsl(230, 8%, 24%)",fill:"transparent"},".prism-previewer-easing.prism-previewer-easing path":{stroke:"hsl(230, 8%, 24%)"},".prism-previewer-easing.prism-previewer-easing line":{stroke:"hsl(230, 8%, 24%)"}};e.s(["default",0,({code:e,language:i})=>{let[s,d]=(0,r.useState)(!1);return(0,o.jsxs)("div",{className:"relative rounded-lg border border-gray-200 overflow-hidden",children:[(0,o.jsx)("button",{onClick:()=>{navigator.clipboard.writeText(e),d(!0),setTimeout(()=>d(!1),2e3)},className:"absolute top-3 right-3 p-2 rounded-md bg-gray-100 hover:bg-gray-200 text-gray-600 z-10","aria-label":"Copy code",children:s?(0,o.jsx)(t.CheckIcon,{size:16}):(0,o.jsx)(a,{size:16})}),(0,o.jsx)(l.Prism,{language:i,style:n,customStyle:{margin:0,padding:"1.5rem",borderRadius:"0.5rem",fontSize:"0.9rem",backgroundColor:"#fafafa"},showLineNumbers:!0,children:e})]})}],673709)},778917,e=>{"use strict";var o=e.i(546467);e.s(["ExternalLink",()=>o.default])}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0zqdpz_rk5.wq.js b/litellm/proxy/_experimental/out/_next/static/chunks/0zqdpz_rk5.wq.js new file mode 100644 index 00000000000..eb24c7b5fc9 --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0zqdpz_rk5.wq.js @@ -0,0 +1,14 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,464571,e=>{"use strict";var t=e.i(920228);e.s(["Button",()=>t.default])},190144,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M832 64H296c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h496v688c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8V96c0-17.7-14.3-32-32-32zM704 192H192c-17.7 0-32 14.3-32 32v530.7c0 8.5 3.4 16.6 9.4 22.6l173.3 173.3c2.2 2.2 4.7 4 7.4 5.5v1.9h4.2c3.5 1.3 7.2 2 11 2H704c17.7 0 32-14.3 32-32V224c0-17.7-14.3-32-32-32zM350 856.2L263.9 770H350v86.2zM664 888H414V746c0-22.1-17.9-40-40-40H232V264h432v624z"}}]},name:"copy",theme:"outlined"};var n=e.i(9583),i=r.forwardRef(function(e,i){return r.createElement(n.default,(0,t.default)({},e,{ref:i,icon:a}))});e.s(["default",0,i],190144)},735049,e=>{"use strict";var t=e.i(654310),r=function(e){if((0,t.default)()&&window.document.documentElement){var r=Array.isArray(e)?e:[e],a=window.document.documentElement;return r.some(function(e){return e in a.style})}return!1},a=function(e,t){if(!r(e))return!1;var a=document.createElement("div"),n=a.style[e];return a.style[e]=t,a.style[e]!==n};e.s(["isStyleSupport",0,function(e,t){return Array.isArray(e)||void 0===t?r(e):a(e,t)}])},185793,e=>{"use strict";e.i(247167);var t=e.i(271645),r=e.i(343794),a=e.i(242064),n=e.i(529681);let i=e=>{let{prefixCls:a,className:n,style:i,size:o,shape:l}=e,s=(0,r.default)({[`${a}-lg`]:"large"===o,[`${a}-sm`]:"small"===o}),u=(0,r.default)({[`${a}-circle`]:"circle"===l,[`${a}-square`]:"square"===l,[`${a}-round`]:"round"===l}),c=t.useMemo(()=>"number"==typeof o?{width:o,height:o,lineHeight:`${o}px`}:{},[o]);return t.createElement("span",{className:(0,r.default)(a,s,u,n),style:Object.assign(Object.assign({},c),i)})};e.i(296059);var o=e.i(694758),l=e.i(915654),s=e.i(246422),u=e.i(838378);let c=new o.Keyframes("ant-skeleton-loading",{"0%":{backgroundPosition:"100% 50%"},"100%":{backgroundPosition:"0 50%"}}),d=e=>({height:e,lineHeight:(0,l.unit)(e)}),h=e=>Object.assign({width:e},d(e)),f=(e,t)=>Object.assign({width:t(e).mul(5).equal(),minWidth:t(e).mul(5).equal()},d(e)),m=e=>Object.assign({width:e},d(e)),g=(e,t,r)=>{let{skeletonButtonCls:a}=e;return{[`${r}${a}-circle`]:{width:t,minWidth:t,borderRadius:"50%"},[`${r}${a}-round`]:{borderRadius:t}}},p=(e,t)=>Object.assign({width:t(e).mul(2).equal(),minWidth:t(e).mul(2).equal()},d(e)),b=(0,s.genStyleHooks)("Skeleton",e=>{let{componentCls:t,calc:r}=e;return(e=>{let{componentCls:t,skeletonAvatarCls:r,skeletonTitleCls:a,skeletonParagraphCls:n,skeletonButtonCls:i,skeletonInputCls:o,skeletonImageCls:l,controlHeight:s,controlHeightLG:u,controlHeightSM:d,gradientFromColor:b,padding:v,marginSM:C,borderRadius:y,titleHeight:k,blockRadius:x,paragraphLiHeight:$,controlHeightXS:w,paragraphMarginTop:R}=e;return{[t]:{display:"table",width:"100%",[`${t}-header`]:{display:"table-cell",paddingInlineEnd:v,verticalAlign:"top",[r]:Object.assign({display:"inline-block",verticalAlign:"top",background:b},h(s)),[`${r}-circle`]:{borderRadius:"50%"},[`${r}-lg`]:Object.assign({},h(u)),[`${r}-sm`]:Object.assign({},h(d))},[`${t}-content`]:{display:"table-cell",width:"100%",verticalAlign:"top",[a]:{width:"100%",height:k,background:b,borderRadius:x,[`+ ${n}`]:{marginBlockStart:d}},[n]:{padding:0,"> li":{width:"100%",height:$,listStyle:"none",background:b,borderRadius:x,"+ li":{marginBlockStart:w}}},[`${n}> li:last-child:not(:first-child):not(:nth-child(2))`]:{width:"61%"}},[`&-round ${t}-content`]:{[`${a}, ${n} > li`]:{borderRadius:y}}},[`${t}-with-avatar ${t}-content`]:{[a]:{marginBlockStart:C,[`+ ${n}`]:{marginBlockStart:R}}},[`${t}${t}-element`]:Object.assign(Object.assign(Object.assign(Object.assign({display:"inline-block",width:"auto"},(e=>{let{borderRadiusSM:t,skeletonButtonCls:r,controlHeight:a,controlHeightLG:n,controlHeightSM:i,gradientFromColor:o,calc:l}=e;return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({[r]:Object.assign({display:"inline-block",verticalAlign:"top",background:o,borderRadius:t,width:l(a).mul(2).equal(),minWidth:l(a).mul(2).equal()},p(a,l))},g(e,a,r)),{[`${r}-lg`]:Object.assign({},p(n,l))}),g(e,n,`${r}-lg`)),{[`${r}-sm`]:Object.assign({},p(i,l))}),g(e,i,`${r}-sm`))})(e)),(e=>{let{skeletonAvatarCls:t,gradientFromColor:r,controlHeight:a,controlHeightLG:n,controlHeightSM:i}=e;return{[t]:Object.assign({display:"inline-block",verticalAlign:"top",background:r},h(a)),[`${t}${t}-circle`]:{borderRadius:"50%"},[`${t}${t}-lg`]:Object.assign({},h(n)),[`${t}${t}-sm`]:Object.assign({},h(i))}})(e)),(e=>{let{controlHeight:t,borderRadiusSM:r,skeletonInputCls:a,controlHeightLG:n,controlHeightSM:i,gradientFromColor:o,calc:l}=e;return{[a]:Object.assign({display:"inline-block",verticalAlign:"top",background:o,borderRadius:r},f(t,l)),[`${a}-lg`]:Object.assign({},f(n,l)),[`${a}-sm`]:Object.assign({},f(i,l))}})(e)),(e=>{let{skeletonImageCls:t,imageSizeBase:r,gradientFromColor:a,borderRadiusSM:n,calc:i}=e;return{[t]:Object.assign(Object.assign({display:"inline-flex",alignItems:"center",justifyContent:"center",verticalAlign:"middle",background:a,borderRadius:n},m(i(r).mul(2).equal())),{[`${t}-path`]:{fill:"#bfbfbf"},[`${t}-svg`]:Object.assign(Object.assign({},m(r)),{maxWidth:i(r).mul(4).equal(),maxHeight:i(r).mul(4).equal()}),[`${t}-svg${t}-svg-circle`]:{borderRadius:"50%"}}),[`${t}${t}-circle`]:{borderRadius:"50%"}}})(e)),[`${t}${t}-block`]:{width:"100%",[i]:{width:"100%"},[o]:{width:"100%"}},[`${t}${t}-active`]:{[` + ${a}, + ${n} > li, + ${r}, + ${i}, + ${o}, + ${l} + `]:Object.assign({},{background:e.skeletonLoadingBackground,backgroundSize:"400% 100%",animationName:c,animationDuration:e.skeletonLoadingMotionDuration,animationTimingFunction:"ease",animationIterationCount:"infinite"})}}})((0,u.mergeToken)(e,{skeletonAvatarCls:`${t}-avatar`,skeletonTitleCls:`${t}-title`,skeletonParagraphCls:`${t}-paragraph`,skeletonButtonCls:`${t}-button`,skeletonInputCls:`${t}-input`,skeletonImageCls:`${t}-image`,imageSizeBase:r(e.controlHeight).mul(1.5).equal(),borderRadius:100,skeletonLoadingBackground:`linear-gradient(90deg, ${e.gradientFromColor} 25%, ${e.gradientToColor} 37%, ${e.gradientFromColor} 63%)`,skeletonLoadingMotionDuration:"1.4s"}))},e=>{let{colorFillContent:t,colorFill:r}=e;return{color:t,colorGradientEnd:r,gradientFromColor:t,gradientToColor:r,titleHeight:e.controlHeight/2,blockRadius:e.borderRadiusSM,paragraphMarginTop:e.marginLG+e.marginXXS,paragraphLiHeight:e.controlHeight/2}},{deprecatedTokens:[["color","gradientFromColor"],["colorGradientEnd","gradientToColor"]]}),v=e=>{let{prefixCls:a,className:n,style:i,rows:o=0}=e,l=Array.from({length:o}).map((r,a)=>t.createElement("li",{key:a,style:{width:((e,t)=>{let{width:r,rows:a=2}=t;return Array.isArray(r)?r[e]:a-1===e?r:void 0})(a,e)}}));return t.createElement("ul",{className:(0,r.default)(a,n),style:i},l)},C=({prefixCls:e,className:a,width:n,style:i})=>t.createElement("h3",{className:(0,r.default)(e,a),style:Object.assign({width:n},i)});function y(e){return e&&"object"==typeof e?e:{}}let k=e=>{let{prefixCls:n,loading:o,className:l,rootClassName:s,style:u,children:c,avatar:d=!1,title:h=!0,paragraph:f=!0,active:m,round:g}=e,{getPrefixCls:p,direction:k,className:x,style:$}=(0,a.useComponentConfig)("skeleton"),w=p("skeleton",n),[R,O,S]=b(w);if(o||!("loading"in e)){let e,a,n=!!d,o=!!h,c=!!f;if(n){let r=Object.assign(Object.assign({prefixCls:`${w}-avatar`},o&&!c?{size:"large",shape:"square"}:{size:"large",shape:"circle"}),y(d));e=t.createElement("div",{className:`${w}-header`},t.createElement(i,Object.assign({},r)))}if(o||c){let e,r;if(o){let r=Object.assign(Object.assign({prefixCls:`${w}-title`},!n&&c?{width:"38%"}:n&&c?{width:"50%"}:{}),y(h));e=t.createElement(C,Object.assign({},r))}if(c){let e,a=Object.assign(Object.assign({prefixCls:`${w}-paragraph`},(e={},n&&o||(e.width="61%"),!n&&o?e.rows=3:e.rows=2,e)),y(f));r=t.createElement(v,Object.assign({},a))}a=t.createElement("div",{className:`${w}-content`},e,r)}let p=(0,r.default)(w,{[`${w}-with-avatar`]:n,[`${w}-active`]:m,[`${w}-rtl`]:"rtl"===k,[`${w}-round`]:g},x,l,s,O,S);return R(t.createElement("div",{className:p,style:Object.assign(Object.assign({},$),u)},e,a))}return null!=c?c:null};k.Button=e=>{let{prefixCls:o,className:l,rootClassName:s,active:u,block:c=!1,size:d="default"}=e,{getPrefixCls:h}=t.useContext(a.ConfigContext),f=h("skeleton",o),[m,g,p]=b(f),v=(0,n.default)(e,["prefixCls"]),C=(0,r.default)(f,`${f}-element`,{[`${f}-active`]:u,[`${f}-block`]:c},l,s,g,p);return m(t.createElement("div",{className:C},t.createElement(i,Object.assign({prefixCls:`${f}-button`,size:d},v))))},k.Avatar=e=>{let{prefixCls:o,className:l,rootClassName:s,active:u,shape:c="circle",size:d="default"}=e,{getPrefixCls:h}=t.useContext(a.ConfigContext),f=h("skeleton",o),[m,g,p]=b(f),v=(0,n.default)(e,["prefixCls","className"]),C=(0,r.default)(f,`${f}-element`,{[`${f}-active`]:u},l,s,g,p);return m(t.createElement("div",{className:C},t.createElement(i,Object.assign({prefixCls:`${f}-avatar`,shape:c,size:d},v))))},k.Input=e=>{let{prefixCls:o,className:l,rootClassName:s,active:u,block:c,size:d="default"}=e,{getPrefixCls:h}=t.useContext(a.ConfigContext),f=h("skeleton",o),[m,g,p]=b(f),v=(0,n.default)(e,["prefixCls"]),C=(0,r.default)(f,`${f}-element`,{[`${f}-active`]:u,[`${f}-block`]:c},l,s,g,p);return m(t.createElement("div",{className:C},t.createElement(i,Object.assign({prefixCls:`${f}-input`,size:d},v))))},k.Image=e=>{let{prefixCls:n,className:i,rootClassName:o,style:l,active:s}=e,{getPrefixCls:u}=t.useContext(a.ConfigContext),c=u("skeleton",n),[d,h,f]=b(c),m=(0,r.default)(c,`${c}-element`,{[`${c}-active`]:s},i,o,h,f);return d(t.createElement("div",{className:m},t.createElement("div",{className:(0,r.default)(`${c}-image`,i),style:l},t.createElement("svg",{viewBox:"0 0 1098 1024",xmlns:"http://www.w3.org/2000/svg",className:`${c}-image-svg`},t.createElement("title",null,"Image placeholder"),t.createElement("path",{d:"M365.714286 329.142857q0 45.714286-32.036571 77.677714t-77.677714 32.036571-77.677714-32.036571-32.036571-77.677714 32.036571-77.677714 77.677714-32.036571 77.677714 32.036571 32.036571 77.677714zM950.857143 548.571429l0 256-804.571429 0 0-109.714286 182.857143-182.857143 91.428571 91.428571 292.571429-292.571429zM1005.714286 146.285714l-914.285714 0q-7.460571 0-12.873143 5.412571t-5.412571 12.873143l0 694.857143q0 7.460571 5.412571 12.873143t12.873143 5.412571l914.285714 0q7.460571 0 12.873143-5.412571t5.412571-12.873143l0-694.857143q0-7.460571-5.412571-12.873143t-12.873143-5.412571zM1097.142857 164.571429l0 694.857143q0 37.741714-26.843429 64.585143t-64.585143 26.843429l-914.285714 0q-37.741714 0-64.585143-26.843429t-26.843429-64.585143l0-694.857143q0-37.741714 26.843429-64.585143t64.585143-26.843429l914.285714 0q37.741714 0 64.585143 26.843429t26.843429 64.585143z",className:`${c}-image-path`})))))},k.Node=e=>{let{prefixCls:n,className:i,rootClassName:o,style:l,active:s,children:u}=e,{getPrefixCls:c}=t.useContext(a.ConfigContext),d=c("skeleton",n),[h,f,m]=b(d),g=(0,r.default)(d,`${d}-element`,{[`${d}-active`]:s},f,i,o,m);return h(t.createElement("div",{className:g},t.createElement("div",{className:(0,r.default)(`${d}-image`,i),style:l},u)))},e.s(["default",0,k],185793)},563113,887719,e=>{"use strict";var t=e.i(271645),r=e.i(864517),a=e.i(244009),n=e.i(408850),i=e.i(87414);let o=function(...e){let t={};return e.forEach(e=>{e&&Object.keys(e).forEach(r=>{void 0!==e[r]&&(t[r]=e[r])})}),t};function l(e){let{closable:r,closeIcon:a}=e||{};return t.default.useMemo(()=>{if(!r&&(!1===r||!1===a||null===a))return!1;if(void 0===r&&void 0===a)return null;let e={closeIcon:"boolean"!=typeof a&&null!==a?a:void 0};return r&&"object"==typeof r&&(e=Object.assign(Object.assign({},e),r)),e},[r,a])}e.s(["default",0,o],887719);let s={};e.s(["pickClosable",0,function(e){if(!e)return;let{closable:t,closeIcon:r}=e;return{closable:t,closeIcon:r}},"useClosable",0,(e,u,c=s)=>{let d=l(e),h=l(u),[f]=(0,n.useLocale)("global",i.default.global),m="boolean"!=typeof d&&!!(null==d?void 0:d.disabled),g=t.default.useMemo(()=>Object.assign({closeIcon:t.default.createElement(r.default,null)},c),[c]),p=t.default.useMemo(()=>!1!==d&&(d?o(g,h,d):!1!==h&&(h?o(g,h):!!g.closable&&g)),[d,h,g]);return t.default.useMemo(()=>{var e,r;if(!1===p)return[!1,null,m,{}];let{closeIconRender:n}=g,{closeIcon:i}=p,o=i,l=(0,a.default)(p,!0);return null!=o&&(n&&(o=n(i)),o=t.default.isValidElement(o)?t.default.cloneElement(o,Object.assign(Object.assign(Object.assign({},o.props),{"aria-label":null!=(r=null==(e=o.props)?void 0:e["aria-label"])?r:f.close}),l)):t.default.createElement("span",Object.assign({"aria-label":f.close},l),o)),[!0,o,m,l]},[m,f.close,p,g])}],563113)},922611,e=>{"use strict";var t=e.i(271645),r=e.i(175066);function a(){}let n=t.createContext({add:a,remove:a});e.s(["usePanelRef",0,function(e){let a=t.useContext(n),i=t.useRef(null);return(0,r.default)(t=>{if(t){let r=e?t.querySelector(e):t;r&&(a.add(r),i.current=r)}else a.remove(i.current)})}])},91874,e=>{"use strict";var t=e.i(931067),r=e.i(209428),a=e.i(211577),n=e.i(392221),i=e.i(703923),o=e.i(343794),l=e.i(914949),s=e.i(271645),u=["prefixCls","className","style","checked","disabled","defaultChecked","type","title","onChange"],c=(0,s.forwardRef)(function(e,c){var d=e.prefixCls,h=void 0===d?"rc-checkbox":d,f=e.className,m=e.style,g=e.checked,p=e.disabled,b=e.defaultChecked,v=e.type,C=void 0===v?"checkbox":v,y=e.title,k=e.onChange,x=(0,i.default)(e,u),$=(0,s.useRef)(null),w=(0,s.useRef)(null),R=(0,l.default)(void 0!==b&&b,{value:g}),O=(0,n.default)(R,2),S=O[0],E=O[1];(0,s.useImperativeHandle)(c,function(){return{focus:function(e){var t;null==(t=$.current)||t.focus(e)},blur:function(){var e;null==(e=$.current)||e.blur()},input:$.current,nativeElement:w.current}});var T=(0,o.default)(h,f,(0,a.default)((0,a.default)({},"".concat(h,"-checked"),S),"".concat(h,"-disabled"),p));return s.createElement("span",{className:T,title:y,style:m,ref:w},s.createElement("input",(0,t.default)({},x,{className:"".concat(h,"-input"),ref:$,onChange:function(t){p||("checked"in e||E(t.target.checked),null==k||k({target:(0,r.default)((0,r.default)({},e),{},{type:C,checked:t.target.checked}),stopPropagation:function(){t.stopPropagation()},preventDefault:function(){t.preventDefault()},nativeEvent:t.nativeEvent}))},disabled:p,checked:!!S,type:C})),s.createElement("span",{className:"".concat(h,"-inner")}))});e.s(["default",0,c])},421512,236836,e=>{"use strict";let t=e.i(271645).default.createContext(null);e.s(["default",0,t],421512),e.i(296059);var r=e.i(915654),a=e.i(183293),n=e.i(246422),i=e.i(838378);function o(e,t){return(e=>{let{checkboxCls:t}=e,n=`${t}-wrapper`;return[{[`${t}-group`]:Object.assign(Object.assign({},(0,a.resetComponent)(e)),{display:"inline-flex",flexWrap:"wrap",columnGap:e.marginXS,[`> ${e.antCls}-row`]:{flex:1}}),[n]:Object.assign(Object.assign({},(0,a.resetComponent)(e)),{display:"inline-flex",alignItems:"baseline",cursor:"pointer","&:after":{display:"inline-block",width:0,overflow:"hidden",content:"'\\a0'"},[`& + ${n}`]:{marginInlineStart:0},[`&${n}-in-form-item`]:{'input[type="checkbox"]':{width:14,height:14}}}),[t]:Object.assign(Object.assign({},(0,a.resetComponent)(e)),{position:"relative",whiteSpace:"nowrap",lineHeight:1,cursor:"pointer",borderRadius:e.borderRadiusSM,alignSelf:"center",[`${t}-input`]:{position:"absolute",inset:0,zIndex:1,cursor:"pointer",opacity:0,margin:0,[`&:focus-visible + ${t}-inner`]:(0,a.genFocusOutline)(e)},[`${t}-inner`]:{boxSizing:"border-box",display:"block",width:e.checkboxSize,height:e.checkboxSize,direction:"ltr",backgroundColor:e.colorBgContainer,border:`${(0,r.unit)(e.lineWidth)} ${e.lineType} ${e.colorBorder}`,borderRadius:e.borderRadiusSM,borderCollapse:"separate",transition:`all ${e.motionDurationSlow}`,"&:after":{boxSizing:"border-box",position:"absolute",top:"50%",insetInlineStart:"25%",display:"table",width:e.calc(e.checkboxSize).div(14).mul(5).equal(),height:e.calc(e.checkboxSize).div(14).mul(8).equal(),border:`${(0,r.unit)(e.lineWidthBold)} solid ${e.colorWhite}`,borderTop:0,borderInlineStart:0,transform:"rotate(45deg) scale(0) translate(-50%,-50%)",opacity:0,content:'""',transition:`all ${e.motionDurationFast} ${e.motionEaseInBack}, opacity ${e.motionDurationFast}`}},"& + span":{paddingInlineStart:e.paddingXS,paddingInlineEnd:e.paddingXS}})},{[` + ${n}:not(${n}-disabled), + ${t}:not(${t}-disabled) + `]:{[`&:hover ${t}-inner`]:{borderColor:e.colorPrimary}},[`${n}:not(${n}-disabled)`]:{[`&:hover ${t}-checked:not(${t}-disabled) ${t}-inner`]:{backgroundColor:e.colorPrimaryHover,borderColor:"transparent"},[`&:hover ${t}-checked:not(${t}-disabled):after`]:{borderColor:e.colorPrimaryHover}}},{[`${t}-checked`]:{[`${t}-inner`]:{backgroundColor:e.colorPrimary,borderColor:e.colorPrimary,"&:after":{opacity:1,transform:"rotate(45deg) scale(1) translate(-50%,-50%)",transition:`all ${e.motionDurationMid} ${e.motionEaseOutBack} ${e.motionDurationFast}`}}},[` + ${n}-checked:not(${n}-disabled), + ${t}-checked:not(${t}-disabled) + `]:{[`&:hover ${t}-inner`]:{backgroundColor:e.colorPrimaryHover,borderColor:"transparent"}}},{[t]:{"&-indeterminate":{"&":{[`${t}-inner`]:{backgroundColor:`${e.colorBgContainer}`,borderColor:`${e.colorBorder}`,"&:after":{top:"50%",insetInlineStart:"50%",width:e.calc(e.fontSizeLG).div(2).equal(),height:e.calc(e.fontSizeLG).div(2).equal(),backgroundColor:e.colorPrimary,border:0,transform:"translate(-50%, -50%) scale(1)",opacity:1,content:'""'}},[`&:hover ${t}-inner`]:{backgroundColor:`${e.colorBgContainer}`,borderColor:`${e.colorPrimary}`}}}}},{[`${n}-disabled`]:{cursor:"not-allowed"},[`${t}-disabled`]:{[`&, ${t}-input`]:{cursor:"not-allowed",pointerEvents:"none"},[`${t}-inner`]:{background:e.colorBgContainerDisabled,borderColor:e.colorBorder,"&:after":{borderColor:e.colorTextDisabled}},"&:after":{display:"none"},"& + span":{color:e.colorTextDisabled},[`&${t}-indeterminate ${t}-inner::after`]:{background:e.colorTextDisabled}}}]})((0,i.mergeToken)(t,{checkboxCls:`.${e}`,checkboxSize:t.controlInteractiveSize}))}let l=(0,n.genStyleHooks)("Checkbox",(e,{prefixCls:t})=>[o(t,e)]);e.s(["default",0,l,"getStyle",0,o],236836)},681216,e=>{"use strict";var t=e.i(271645),r=e.i(963188);e.s(["default",0,function(e){let a=t.default.useRef(null),n=()=>{r.default.cancel(a.current),a.current=null};return[()=>{n(),a.current=(0,r.default)(()=>{a.current=null})},t=>{a.current&&(t.stopPropagation(),n()),null==e||e(t)}]}])},374276,e=>{"use strict";e.i(247167);var t=e.i(271645),r=e.i(343794),a=e.i(91874),n=e.i(611935),i=e.i(121872),o=e.i(26905),l=e.i(242064),s=e.i(937328),u=e.i(321883),c=e.i(62139),d=e.i(421512),h=e.i(236836),f=e.i(681216),m=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&0>t.indexOf(a)&&(r[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var n=0,a=Object.getOwnPropertySymbols(e);nt.indexOf(a[n])&&Object.prototype.propertyIsEnumerable.call(e,a[n])&&(r[a[n]]=e[a[n]]);return r};let g=t.forwardRef((e,g)=>{var p;let{prefixCls:b,className:v,rootClassName:C,children:y,indeterminate:k=!1,style:x,onMouseEnter:$,onMouseLeave:w,skipGroup:R=!1,disabled:O}=e,S=m(e,["prefixCls","className","rootClassName","children","indeterminate","style","onMouseEnter","onMouseLeave","skipGroup","disabled"]),{getPrefixCls:E,direction:T,checkbox:j}=t.useContext(l.ConfigContext),B=t.useContext(d.default),{isFormItemInput:I}=t.useContext(c.FormItemInputContext),N=t.useContext(s.default),Q=null!=(p=(null==B?void 0:B.disabled)||O)?p:N,P=t.useRef(S.value),M=t.useRef(null),z=(0,n.composeRef)(g,M);t.useEffect(()=>{null==B||B.registerValue(S.value)},[]),t.useEffect(()=>{if(!R)return S.value!==P.current&&(null==B||B.cancelValue(P.current),null==B||B.registerValue(S.value),P.current=S.value),()=>null==B?void 0:B.cancelValue(S.value)},[S.value]),t.useEffect(()=>{var e;(null==(e=M.current)?void 0:e.input)&&(M.current.input.indeterminate=k)},[k]);let U=E("checkbox",b),_=(0,u.default)(U),[q,L,D]=(0,h.default)(U,_),F=Object.assign({},S);B&&!R&&(F.onChange=(...e)=>{S.onChange&&S.onChange.apply(S,e),B.toggleOption&&B.toggleOption({label:y,value:S.value})},F.name=B.name,F.checked=B.value.includes(S.value));let H=(0,r.default)(`${U}-wrapper`,{[`${U}-rtl`]:"rtl"===T,[`${U}-wrapper-checked`]:F.checked,[`${U}-wrapper-disabled`]:Q,[`${U}-wrapper-in-form-item`]:I},null==j?void 0:j.className,v,C,D,_,L),A=(0,r.default)({[`${U}-indeterminate`]:k},o.TARGET_CLS,L),[W,V]=(0,f.default)(F.onClick);return q(t.createElement(i.default,{component:"Checkbox",disabled:Q},t.createElement("label",{className:H,style:Object.assign(Object.assign({},null==j?void 0:j.style),x),onMouseEnter:$,onMouseLeave:w,onClick:W},t.createElement(a.default,Object.assign({},F,{onClick:V,prefixCls:U,className:A,disabled:Q,ref:z})),null!=y&&t.createElement("span",{className:`${U}-label`},y))))});var p=e.i(8211),b=e.i(529681),v=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&0>t.indexOf(a)&&(r[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var n=0,a=Object.getOwnPropertySymbols(e);nt.indexOf(a[n])&&Object.prototype.propertyIsEnumerable.call(e,a[n])&&(r[a[n]]=e[a[n]]);return r};let C=t.forwardRef((e,a)=>{let{defaultValue:n,children:i,options:o=[],prefixCls:s,className:c,rootClassName:f,style:m,onChange:C}=e,y=v(e,["defaultValue","children","options","prefixCls","className","rootClassName","style","onChange"]),{getPrefixCls:k,direction:x}=t.useContext(l.ConfigContext),[$,w]=t.useState(y.value||n||[]),[R,O]=t.useState([]);t.useEffect(()=>{"value"in y&&w(y.value||[])},[y.value]);let S=t.useMemo(()=>o.map(e=>"string"==typeof e||"number"==typeof e?{label:e,value:e}:e),[o]),E=e=>{O(t=>t.filter(t=>t!==e))},T=e=>{O(t=>[].concat((0,p.default)(t),[e]))},j=e=>{let t=$.indexOf(e.value),r=(0,p.default)($);-1===t?r.push(e.value):r.splice(t,1),"value"in y||w(r),null==C||C(r.filter(e=>R.includes(e)).sort((e,t)=>S.findIndex(t=>t.value===e)-S.findIndex(e=>e.value===t)))},B=k("checkbox",s),I=`${B}-group`,N=(0,u.default)(B),[Q,P,M]=(0,h.default)(B,N),z=(0,b.default)(y,["value","disabled"]),U=o.length?S.map(e=>t.createElement(g,{prefixCls:B,key:e.value.toString(),disabled:"disabled"in e?e.disabled:y.disabled,value:e.value,checked:$.includes(e.value),onChange:e.onChange,className:(0,r.default)(`${I}-item`,e.className),style:e.style,title:e.title,id:e.id,required:e.required},e.label)):i,_=t.useMemo(()=>({toggleOption:j,value:$,disabled:y.disabled,name:y.name,registerValue:T,cancelValue:E}),[j,$,y.disabled,y.name,T,E]),q=(0,r.default)(I,{[`${I}-rtl`]:"rtl"===x},c,f,M,N,P);return Q(t.createElement("div",Object.assign({className:q,style:m},z,{ref:a}),t.createElement(d.default.Provider,{value:_},U)))});g.Group=C,g.__ANT_CHECKBOX=!0,e.s(["default",0,g],374276)},599724,936325,e=>{"use strict";var t=e.i(95779),r=e.i(444755),a=e.i(673706),n=e.i(271645);let i=n.default.forwardRef((e,i)=>{let{color:o,className:l,children:s}=e;return n.default.createElement("p",{ref:i,className:(0,r.tremorTwMerge)("text-tremor-default",o?(0,a.getColorClassNames)(o,t.colorPalette.text).textColor:(0,r.tremorTwMerge)("text-tremor-content","dark:text-dark-tremor-content"),l)},s)});i.displayName="Text",e.s(["default",0,i],936325),e.s(["Text",0,i],599724)},618566,(e,t,r)=>{t.exports=e.r(976562)},612256,869230,469637,266027,243652,e=>{"use strict";let t;var r=e.i(602869),a=e.i(175555),n=e.i(273911),i=e.i(540143),o=e.i(286491),l=e.i(915823),s=e.i(793803),u=e.i(619273),c=e.i(180166),d=class extends l.Subscribable{constructor(e,t){super(),this.options=t,this.#e=e,this.#t=null,this.#r=(0,s.pendingThenable)(),this.bindMethods(),this.setOptions(t)}#e;#a=void 0;#n=void 0;#i=void 0;#o;#l;#r;#t;#s;#u;#c;#d;#h;#f;#m=new Set;bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){1===this.listeners.size&&(this.#a.addObserver(this),h(this.#a,this.options)?this.#g():this.updateResult(),this.#p())}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return f(this.#a,this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return f(this.#a,this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,this.#b(),this.#v(),this.#a.removeObserver(this)}setOptions(e){let t=this.options,r=this.#a;if(this.options=this.#e.defaultQueryOptions(e),void 0!==this.options.enabled&&"boolean"!=typeof this.options.enabled&&"function"!=typeof this.options.enabled&&"boolean"!=typeof(0,u.resolveQueryBoolean)(this.options.enabled,this.#a))throw Error("Expected enabled to be a boolean or a callback that returns a boolean");this.#C(),this.#a.setOptions(this.options),t._defaulted&&!(0,u.shallowEqualObjects)(this.options,t)&&this.#e.getQueryCache().notify({type:"observerOptionsUpdated",query:this.#a,observer:this});let a=this.hasListeners();a&&m(this.#a,r,this.options,t)&&this.#g(),this.updateResult(),a&&(this.#a!==r||(0,u.resolveQueryBoolean)(this.options.enabled,this.#a)!==(0,u.resolveQueryBoolean)(t.enabled,this.#a)||(0,u.resolveStaleTime)(this.options.staleTime,this.#a)!==(0,u.resolveStaleTime)(t.staleTime,this.#a))&&this.#y();let n=this.#k();a&&(this.#a!==r||(0,u.resolveQueryBoolean)(this.options.enabled,this.#a)!==(0,u.resolveQueryBoolean)(t.enabled,this.#a)||n!==this.#f)&&this.#x(n)}getOptimisticResult(e){var t,r;let a=this.#e.getQueryCache().build(this.#e,e),n=this.createResult(a,e);return t=this,r=n,(0,u.shallowEqualObjects)(t.getCurrentResult(),r)||(this.#i=n,this.#l=this.options,this.#o=this.#a.state),n}getCurrentResult(){return this.#i}trackResult(e,t){return new Proxy(e,{get:(e,r)=>(this.trackProp(r),t?.(r),"promise"===r&&(this.trackProp("data"),this.options.experimental_prefetchInRender||"pending"!==this.#r.status||this.#r.reject(Error("experimental_prefetchInRender feature flag is not enabled"))),Reflect.get(e,r))})}trackProp(e){this.#m.add(e)}getCurrentQuery(){return this.#a}refetch({...e}={}){return this.fetch({...e})}fetchOptimistic(e){let t=this.#e.defaultQueryOptions(e),r=this.#e.getQueryCache().build(this.#e,t);return r.fetch().then(()=>this.createResult(r,t))}fetch(e){return this.#g({...e,cancelRefetch:e.cancelRefetch??!0}).then(()=>(this.updateResult(),this.#i))}#g(e){this.#C();let t=this.#a.fetch(this.options,e);return e?.throwOnError||(t=t.catch(u.noop)),t}#y(){this.#b();let e=(0,u.resolveStaleTime)(this.options.staleTime,this.#a);if(n.environmentManager.isServer()||this.#i.isStale||!(0,u.isValidTimeout)(e))return;let t=(0,u.timeUntilStale)(this.#i.dataUpdatedAt,e);this.#d=c.timeoutManager.setTimeout(()=>{this.#i.isStale||this.updateResult()},t+1)}#k(){return("function"==typeof this.options.refetchInterval?this.options.refetchInterval(this.#a):this.options.refetchInterval)??!1}#x(e){this.#v(),this.#f=e,!n.environmentManager.isServer()&&!1!==(0,u.resolveQueryBoolean)(this.options.enabled,this.#a)&&(0,u.isValidTimeout)(this.#f)&&0!==this.#f&&(this.#h=c.timeoutManager.setInterval(()=>{(this.options.refetchIntervalInBackground||a.focusManager.isFocused())&&this.#g()},this.#f))}#p(){this.#y(),this.#x(this.#k())}#b(){void 0!==this.#d&&(c.timeoutManager.clearTimeout(this.#d),this.#d=void 0)}#v(){void 0!==this.#h&&(c.timeoutManager.clearInterval(this.#h),this.#h=void 0)}createResult(e,t){let r,a=this.#a,n=this.options,i=this.#i,l=this.#o,c=this.#l,d=e!==a?e.state:this.#n,{state:f}=e,p={...f},b=!1;if(t._optimisticResults){let r=this.hasListeners(),i=!r&&h(e,t),l=r&&m(e,a,t,n);(i||l)&&(p={...p,...(0,o.fetchState)(f.data,e.options)}),"isRestoring"===t._optimisticResults&&(p.fetchStatus="idle")}let{error:v,errorUpdatedAt:C,status:y}=p;r=p.data;let k=!1;if(void 0!==t.placeholderData&&void 0===r&&"pending"===y){let e;i?.isPlaceholderData&&t.placeholderData===c?.placeholderData?(e=i.data,k=!0):e="function"==typeof t.placeholderData?t.placeholderData(this.#c?.state.data,this.#c):t.placeholderData,void 0!==e&&(y="success",r=(0,u.replaceData)(i?.data,e,t),b=!0)}if(t.select&&void 0!==r&&!k)if(i&&r===l?.data&&t.select===this.#s)r=this.#u;else try{this.#s=t.select,r=t.select(r),r=(0,u.replaceData)(i?.data,r,t),this.#u=r,this.#t=null}catch(e){this.#t=e}this.#t&&(v=this.#t,r=this.#u,C=Date.now(),y="error");let x="fetching"===p.fetchStatus,$="pending"===y,w="error"===y,R=$&&x,O=void 0!==r,S={status:y,fetchStatus:p.fetchStatus,isPending:$,isSuccess:"success"===y,isError:w,isInitialLoading:R,isLoading:R,data:r,dataUpdatedAt:p.dataUpdatedAt,error:v,errorUpdatedAt:C,failureCount:p.fetchFailureCount,failureReason:p.fetchFailureReason,errorUpdateCount:p.errorUpdateCount,isFetched:e.isFetched(),isFetchedAfterMount:p.dataUpdateCount>d.dataUpdateCount||p.errorUpdateCount>d.errorUpdateCount,isFetching:x,isRefetching:x&&!$,isLoadingError:w&&!O,isPaused:"paused"===p.fetchStatus,isPlaceholderData:b,isRefetchError:w&&O,isStale:g(e,t),refetch:this.refetch,promise:this.#r,isEnabled:!1!==(0,u.resolveQueryBoolean)(t.enabled,e)};if(this.options.experimental_prefetchInRender){let t=void 0!==S.data,r="error"===S.status&&!t,n=e=>{r?e.reject(S.error):t&&e.resolve(S.data)},i=()=>{n(this.#r=S.promise=(0,s.pendingThenable)())},o=this.#r;switch(o.status){case"pending":e.queryHash===a.queryHash&&n(o);break;case"fulfilled":(r||S.data!==o.value)&&i();break;case"rejected":r&&S.error===o.reason||i()}}return S}updateResult(){let e=this.#i,t=this.createResult(this.#a,this.options);if(this.#o=this.#a.state,this.#l=this.options,void 0!==this.#o.data&&(this.#c=this.#a),(0,u.shallowEqualObjects)(t,e))return;this.#i=t;let r=()=>{if(!e)return!0;let{notifyOnChangeProps:t}=this.options,r="function"==typeof t?t():t;if("all"===r||!r&&!this.#m.size)return!0;let a=new Set(r??this.#m);return this.options.throwOnError&&a.add("error"),Object.keys(this.#i).some(t=>this.#i[t]!==e[t]&&a.has(t))};this.#$({listeners:r()})}#C(){let e=this.#e.getQueryCache().build(this.#e,this.options);if(e===this.#a)return;let t=this.#a;this.#a=e,this.#n=e.state,this.hasListeners()&&(t?.removeObserver(this),e.addObserver(this))}onQueryUpdate(){this.updateResult(),this.hasListeners()&&this.#p()}#$(e){i.notifyManager.batch(()=>{e.listeners&&this.listeners.forEach(e=>{e(this.#i)}),this.#e.getQueryCache().notify({query:this.#a,type:"observerResultsUpdated"})})}};function h(e,t){return!1!==(0,u.resolveQueryBoolean)(t.enabled,e)&&void 0===e.state.data&&("error"!==e.state.status||!1!==(0,u.resolveQueryBoolean)(t.retryOnMount,e))||void 0!==e.state.data&&f(e,t,t.refetchOnMount)}function f(e,t,r){if(!1!==(0,u.resolveQueryBoolean)(t.enabled,e)&&"static"!==(0,u.resolveStaleTime)(t.staleTime,e)){let a="function"==typeof r?r(e):r;return"always"===a||!1!==a&&g(e,t)}return!1}function m(e,t,r,a){return(e!==t||!1===(0,u.resolveQueryBoolean)(a.enabled,e))&&(!r.suspense||"error"!==e.state.status)&&g(e,r)}function g(e,t){return!1!==(0,u.resolveQueryBoolean)(t.enabled,e)&&e.isStaleByTime((0,u.resolveStaleTime)(t.staleTime,e))}e.s(["QueryObserver",0,d],869230),e.i(247167);var p=e.i(271645),b=e.i(912598);e.i(843476);var v=p.createContext((t=!1,{clearReset:()=>{t=!1},reset:()=>{t=!0},isReset:()=>t})),C=p.createContext(!1);C.Provider;var y=(e,t,r)=>t.fetchOptimistic(e).catch(()=>{r.clearReset()});function k(e,t,r){let a,o=p.useContext(C),l=p.useContext(v),s=(0,b.useQueryClient)(r),c=s.defaultQueryOptions(e);s.getDefaultOptions().queries?._experimental_beforeQuery?.(c);let d=s.getQueryCache().get(c.queryHash);if(c._optimisticResults=o?"isRestoring":"optimistic",c.suspense){let e=e=>"static"===e?e:Math.max(e??1e3,1e3),t=c.staleTime;c.staleTime="function"==typeof t?(...r)=>e(t(...r)):e(t),"number"==typeof c.gcTime&&(c.gcTime=Math.max(c.gcTime,1e3))}a=d?.state.error&&"function"==typeof c.throwOnError?(0,u.shouldThrowError)(c.throwOnError,[d.state.error,d]):c.throwOnError,(c.suspense||c.experimental_prefetchInRender||a)&&!l.isReset()&&(c.retryOnMount=!1),p.useEffect(()=>{l.clearReset()},[l]);let h=!s.getQueryCache().get(c.queryHash),[f]=p.useState(()=>new t(s,c)),m=f.getOptimisticResult(c),g=!o&&!1!==e.subscribed;if(p.useSyncExternalStore(p.useCallback(e=>{let t=g?f.subscribe(i.notifyManager.batchCalls(e)):u.noop;return f.updateResult(),t},[f,g]),()=>f.getCurrentResult(),()=>f.getCurrentResult()),p.useEffect(()=>{f.setOptions(c)},[c,f]),c?.suspense&&m.isPending)throw y(c,f,l);if((({result:e,errorResetBoundary:t,throwOnError:r,query:a,suspense:n})=>e.isError&&!t.isReset()&&!e.isFetching&&a&&(n&&void 0===e.data||(0,u.shouldThrowError)(r,[e.error,a])))({result:m,errorResetBoundary:l,throwOnError:c.throwOnError,query:d,suspense:c.suspense}))throw m.error;if(s.getDefaultOptions().queries?._experimental_afterQuery?.(c,m),c.experimental_prefetchInRender&&!n.environmentManager.isServer()&&m.isLoading&&m.isFetching&&!o){let e=h?y(c,f,l):d?.promise;e?.catch(u.noop).finally(()=>{f.updateResult()})}return c.notifyOnChangeProps?m:f.trackResult(m)}function x(e,t){return k(e,d,t)}function $(e){let t=[e];return{all:t,lists:()=>[...t,"list"],list:e=>[...t,"list",{params:e}],details:()=>[...t,"detail"],detail:e=>[...t,"detail",e]}}e.s(["useBaseQuery",0,k],469637),e.s(["useQuery",0,x],266027),e.s(["createQueryKeys",0,$],243652);let w=$("uiConfig");e.s(["useUIConfig",0,()=>x({queryKey:w.list({}),queryFn:async()=>await (0,r.getUiConfig)(),staleTime:864e5,gcTime:864e5})],612256)},321836,e=>{"use strict";let t="litellm_return_url",r="redirect_to";function a(){return window.location.href}function n(){if("u"typeof document&&(document.cookie=`${t}=; path=/; max-age=0`)}catch(e){console.error("Failed to clear return URL cookie:",e)}}function o(){return new URLSearchParams(window.location.search).get(r)}function l(){let e=window.location.hostname;return"localhost"===e||"127.0.0.1"===e||"::1"===e||e.startsWith("127.")||e.endsWith(".local")}function s(e){if(!e)return!1;if(e.startsWith("/")&&!e.startsWith("//"))return!0;try{let t=new URL(e),r=window.location.hostname;if(t.hostname!==r)return!1;if(l())return!0;return t.origin===window.location.origin}catch{return!1}}e.s(["buildLoginUrlWithReturn",0,function(e,t){let n=t||a();if(!n||n.includes("/login"))return e;let i=e.includes("?")?"&":"?";return`${e}${i}${r}=${encodeURIComponent(n)}`},"clearStoredReturnUrl",0,i,"consumeReturnUrl",0,function(){let e=o();if(e){if(s(e))return i(),e;l()&&console.warn("[returnUrlUtils] Invalid return URL in params rejected:",e)}let t=n();if(t){if(s(t))return i(),t;l()&&console.warn("[returnUrlUtils] Invalid return URL in cookie rejected:",t)}return null},"getReturnUrl",0,function(){let e=o();if(e)return e;let t=n();return t||null},"isValidReturnUrl",0,s,"normalizeUrlForCompare",0,function(e){try{let t=new URL(e,window.location.origin),r=t.pathname;r.length>1&&r.endsWith("/")&&(r=r.slice(0,-1));let a=new URLSearchParams(t.search),n=new URLSearchParams;Array.from(a.entries()).sort(([e],[t])=>e.localeCompare(t)).forEach(([e,t])=>{n.append(e,t)});let i=n.toString(),o=t.hash||"";return`${t.origin}${r}${i?`?${i}`:""}${o}`}catch{return e}},"storeReturnUrl",0,function(){let e=a();e&&function(e,t,r=300){if("u"{"use strict";var t=e.i(602869),r=e.i(268004),a=e.i(161281),n=e.i(321836),i=e.i(618566),o=e.i(271645),l=e.i(708347),s=e.i(612256);e.s(["default",0,()=>{let e=(0,i.useRouter)(),{data:u,isLoading:c}=(0,s.useUIConfig)(),d="u">typeof document?(0,r.getCookie)("token"):null,h=(0,o.useMemo)(()=>(0,a.decodeToken)(d),[d]),f=(0,o.useMemo)(()=>(0,a.checkTokenValidity)(d),[d])&&!u?.admin_ui_disabled,m=(0,o.useCallback)(()=>{(0,n.storeReturnUrl)();let r=`${(0,t.getProxyBaseUrl)()}/ui/login`,a=(0,n.buildLoginUrlWithReturn)(r);e.replace(a)},[e]);return(0,o.useEffect)(()=>{!c&&(f||(d&&(0,r.clearTokenCookies)(),m()))},[c,f,d,m]),{isLoading:c,isAuthorized:f,token:f?d:null,accessToken:h?.key??null,userId:h?.user_id??null,userEmail:h?.user_email??null,userRole:(0,l.formatUserRole)(h?.user_role),premiumUser:h?.premium_user??null,disabledPersonalKeyCreation:h?.disabled_non_admin_personal_key_creation??null,showSSOBanner:h?.login_method==="username_password"}}])},95779,e=>{"use strict";var t=e.i(480731);let r=[t.BaseColors.Blue,t.BaseColors.Cyan,t.BaseColors.Sky,t.BaseColors.Indigo,t.BaseColors.Violet,t.BaseColors.Purple,t.BaseColors.Fuchsia,t.BaseColors.Slate,t.BaseColors.Gray,t.BaseColors.Zinc,t.BaseColors.Neutral,t.BaseColors.Stone,t.BaseColors.Red,t.BaseColors.Orange,t.BaseColors.Amber,t.BaseColors.Yellow,t.BaseColors.Lime,t.BaseColors.Green,t.BaseColors.Emerald,t.BaseColors.Teal,t.BaseColors.Pink,t.BaseColors.Rose];e.s(["colorPalette",0,{canvasBackground:50,lightBackground:100,background:500,darkBackground:600,darkestBackground:800,lightBorder:200,border:500,darkBorder:700,lightRing:200,ring:300,iconRing:500,lightText:400,text:500,iconText:600,darkText:700,darkestText:900,icon:500},"themeColorRange",0,r])},994388,e=>{"use strict";var t=e.i(290571),r=e.i(829087),a=e.i(271645);let n=["preEnter","entering","entered","preExit","exiting","exited","unmounted"],i=e=>({_s:e,status:n[e],isEnter:e<3,isMounted:6!==e,isResolved:2===e||e>4}),o=e=>e?6:5,l=(e,t,r,a,n)=>{clearTimeout(a.current);let o=i(e);t(o),r.current=o,n&&n({current:o})};var s=e.i(480731),u=e.i(444755),c=e.i(673706);let d=e=>{var r=(0,t.__rest)(e,[]);return a.default.createElement("svg",Object.assign({},r,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"}),a.default.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}),a.default.createElement("path",{d:"M18.364 5.636L16.95 7.05A7 7 0 1 0 19 12h2a9 9 0 1 1-2.636-6.364z"}))};var h=e.i(95779);let f={xs:{height:"h-4",width:"w-4"},sm:{height:"h-5",width:"w-5"},md:{height:"h-5",width:"w-5"},lg:{height:"h-6",width:"w-6"},xl:{height:"h-6",width:"w-6"}},m=(e,t)=>{switch(e){case"primary":return{textColor:t?(0,c.getColorClassNames)("white").textColor:"text-tremor-brand-inverted dark:text-dark-tremor-brand-inverted",hoverTextColor:t?(0,c.getColorClassNames)("white").textColor:"text-tremor-brand-inverted dark:text-dark-tremor-brand-inverted",bgColor:t?(0,c.getColorClassNames)(t,h.colorPalette.background).bgColor:"bg-tremor-brand dark:bg-dark-tremor-brand",hoverBgColor:t?(0,c.getColorClassNames)(t,h.colorPalette.darkBackground).hoverBgColor:"hover:bg-tremor-brand-emphasis dark:hover:bg-dark-tremor-brand-emphasis",borderColor:t?(0,c.getColorClassNames)(t,h.colorPalette.border).borderColor:"border-tremor-brand dark:border-dark-tremor-brand",hoverBorderColor:t?(0,c.getColorClassNames)(t,h.colorPalette.darkBorder).hoverBorderColor:"hover:border-tremor-brand-emphasis dark:hover:border-dark-tremor-brand-emphasis"};case"secondary":return{textColor:t?(0,c.getColorClassNames)(t,h.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",hoverTextColor:t?(0,c.getColorClassNames)(t,h.colorPalette.text).textColor:"hover:text-tremor-brand-emphasis dark:hover:text-dark-tremor-brand-emphasis",bgColor:(0,c.getColorClassNames)("transparent").bgColor,hoverBgColor:t?(0,u.tremorTwMerge)((0,c.getColorClassNames)(t,h.colorPalette.background).hoverBgColor,"hover:bg-opacity-20 dark:hover:bg-opacity-20"):"hover:bg-tremor-brand-faint dark:hover:bg-dark-tremor-brand-faint",borderColor:t?(0,c.getColorClassNames)(t,h.colorPalette.border).borderColor:"border-tremor-brand dark:border-dark-tremor-brand"};case"light":return{textColor:t?(0,c.getColorClassNames)(t,h.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",hoverTextColor:t?(0,c.getColorClassNames)(t,h.colorPalette.darkText).hoverTextColor:"hover:text-tremor-brand-emphasis dark:hover:text-dark-tremor-brand-emphasis",bgColor:(0,c.getColorClassNames)("transparent").bgColor,borderColor:"",hoverBorderColor:""}}},g=(0,c.makeClassName)("Button"),p=({loading:e,iconSize:t,iconPosition:r,Icon:n,needMargin:i,transitionStatus:o})=>{let l=i?r===s.HorizontalPositions.Left?(0,u.tremorTwMerge)("-ml-1","mr-1.5"):(0,u.tremorTwMerge)("-mr-1","ml-1.5"):"",c=(0,u.tremorTwMerge)("w-0 h-0"),h={default:c,entering:c,entered:t,exiting:t,exited:c};return e?a.default.createElement(d,{className:(0,u.tremorTwMerge)(g("icon"),"animate-spin shrink-0",l,h.default,h[o]),style:{transition:"width 150ms"}}):a.default.createElement(n,{className:(0,u.tremorTwMerge)(g("icon"),"shrink-0",t,l)})},b=a.default.forwardRef((e,n)=>{let{icon:d,iconPosition:h=s.HorizontalPositions.Left,size:b=s.Sizes.SM,color:v,variant:C="primary",disabled:y,loading:k=!1,loadingText:x,children:$,tooltip:w,className:R}=e,O=(0,t.__rest)(e,["icon","iconPosition","size","color","variant","disabled","loading","loadingText","children","tooltip","className"]),S=k||y,E=void 0!==d||k,T=k&&x,j=!(!$&&!T),B=(0,u.tremorTwMerge)(f[b].height,f[b].width),I="light"!==C?(0,u.tremorTwMerge)("rounded-tremor-default border","shadow-tremor-input","dark:shadow-dark-tremor-input"):"",N=m(C,v),Q=("light"!==C?{xs:{paddingX:"px-2.5",paddingY:"py-1.5",fontSize:"text-xs"},sm:{paddingX:"px-4",paddingY:"py-2",fontSize:"text-sm"},md:{paddingX:"px-4",paddingY:"py-2",fontSize:"text-md"},lg:{paddingX:"px-4",paddingY:"py-2.5",fontSize:"text-lg"},xl:{paddingX:"px-4",paddingY:"py-3",fontSize:"text-xl"}}:{xs:{paddingX:"",paddingY:"",fontSize:"text-xs"},sm:{paddingX:"",paddingY:"",fontSize:"text-sm"},md:{paddingX:"",paddingY:"",fontSize:"text-md"},lg:{paddingX:"",paddingY:"",fontSize:"text-lg"},xl:{paddingX:"",paddingY:"",fontSize:"text-xl"}})[b],{tooltipProps:P,getReferenceProps:M}=(0,r.useTooltip)(300),[z,U]=(({enter:e=!0,exit:t=!0,preEnter:r,preExit:n,timeout:s,initialEntered:u,mountOnEnter:c,unmountOnExit:d,onStateChange:h}={})=>{let[f,m]=(0,a.useState)(()=>i(u?2:o(c))),g=(0,a.useRef)(f),p=(0,a.useRef)(0),[b,v]="object"==typeof s?[s.enter,s.exit]:[s,s],C=(0,a.useCallback)(()=>{let e=((e,t)=>{switch(e){case 1:case 0:return 2;case 4:case 3:return o(t)}})(g.current._s,d);e&&l(e,m,g,p,h)},[h,d]);return[f,(0,a.useCallback)(a=>{let i=e=>{switch(l(e,m,g,p,h),e){case 1:b>=0&&(p.current=((...e)=>setTimeout(...e))(C,b));break;case 4:v>=0&&(p.current=((...e)=>setTimeout(...e))(C,v));break;case 0:case 3:p.current=((...e)=>setTimeout(...e))(()=>{isNaN(document.body.offsetTop)||i(e+1)},0)}},s=g.current.isEnter;"boolean"!=typeof a&&(a=!s),a?s||i(e?+!r:2):s&&i(t?n?3:4:o(d))},[C,h,e,t,r,n,b,v,d]),C]})({timeout:50});return(0,a.useEffect)(()=>{U(k)},[k]),a.default.createElement("button",Object.assign({ref:(0,c.mergeRefs)([n,P.refs.setReference]),className:(0,u.tremorTwMerge)(g("root"),"shrink-0 inline-flex justify-center items-center group font-medium outline-none",I,Q.paddingX,Q.paddingY,Q.fontSize,N.textColor,N.bgColor,N.borderColor,N.hoverBorderColor,S?"opacity-50 cursor-not-allowed":(0,u.tremorTwMerge)(m(C,v).hoverTextColor,m(C,v).hoverBgColor,m(C,v).hoverBorderColor),R),disabled:S},M,O),a.default.createElement(r.default,Object.assign({text:w},P)),E&&h!==s.HorizontalPositions.Right?a.default.createElement(p,{loading:k,iconSize:B,iconPosition:h,Icon:d,transitionStatus:z.status,needMargin:j}):null,T||$?a.default.createElement("span",{className:(0,u.tremorTwMerge)(g("text"),"text-tremor-default whitespace-nowrap")},T?x:$):null,E&&h===s.HorizontalPositions.Right?a.default.createElement(p,{loading:k,iconSize:B,iconPosition:h,Icon:d,transitionStatus:z.status,needMargin:j}):null)});b.displayName="Button",e.s(["Button",0,b],994388)},304967,e=>{"use strict";var t=e.i(290571),r=e.i(271645),a=e.i(480731),n=e.i(95779),i=e.i(444755),o=e.i(673706);let l=(0,o.makeClassName)("Card"),s=r.default.forwardRef((e,s)=>{let{decoration:u="",decorationColor:c,children:d,className:h}=e,f=(0,t.__rest)(e,["decoration","decorationColor","children","className"]);return r.default.createElement("div",Object.assign({ref:s,className:(0,i.tremorTwMerge)(l("root"),"relative w-full text-left ring-1 rounded-tremor-default p-6","bg-tremor-background ring-tremor-ring shadow-tremor-card","dark:bg-dark-tremor-background dark:ring-dark-tremor-ring dark:shadow-dark-tremor-card",c?(0,o.getColorClassNames)(c,n.colorPalette.border).borderColor:"border-tremor-brand dark:border-dark-tremor-brand",(e=>{if(!e)return"";switch(e){case a.HorizontalPositions.Left:return"border-l-4";case a.VerticalPositions.Top:return"border-t-4";case a.HorizontalPositions.Right:return"border-r-4";case a.VerticalPositions.Bottom:return"border-b-4";default:return""}})(u),h)},f),d)});s.displayName="Card",e.s(["Card",0,s],304967)},629569,e=>{"use strict";var t=e.i(290571),r=e.i(95779),a=e.i(444755),n=e.i(673706),i=e.i(271645);let o=i.default.forwardRef((e,o)=>{let{color:l,children:s,className:u}=e,c=(0,t.__rest)(e,["color","children","className"]);return i.default.createElement("p",Object.assign({ref:o,className:(0,a.tremorTwMerge)("font-medium text-tremor-title",l?(0,n.getColorClassNames)(l,r.colorPalette.darkText).textColor:"text-tremor-content-strong dark:text-dark-tremor-content-strong",u)},c),s)});o.displayName="Title",e.s(["Title",0,o],629569)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0zrbitbm~0koh.js b/litellm/proxy/_experimental/out/_next/static/chunks/0zrbitbm~0koh.js new file mode 100644 index 00000000000..9544ef4d8a3 --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0zrbitbm~0koh.js @@ -0,0 +1,14 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,544195,e=>{"use strict";var t=e.i(271645),i=e.i(343794),n=e.i(981444),o=e.i(914949),r=e.i(244009),l=e.i(242064),a=e.i(321883),c=e.i(517455);let d=t.createContext(null),u=d.Provider,s=t.createContext(null),m=s.Provider;e.i(247167);var p=e.i(91874),g=e.i(611935),b=e.i(121872),f=e.i(26905),h=e.i(681216),v=e.i(937328),$=e.i(62139);e.i(296059);var C=e.i(915654),S=e.i(183293),k=e.i(246422),y=e.i(838378);let x=(0,k.genStyleHooks)("Radio",e=>{let{controlOutline:t,controlOutlineWidth:i}=e,n=`0 0 0 ${(0,C.unit)(i)} ${t}`,o=(0,y.mergeToken)(e,{radioFocusShadow:n,radioButtonFocusShadow:n});return[(e=>{let{componentCls:t,antCls:i}=e,n=`${t}-group`;return{[n]:Object.assign(Object.assign({},(0,S.resetComponent)(e)),{display:"inline-block",fontSize:0,[`&${n}-rtl`]:{direction:"rtl"},[`&${n}-block`]:{display:"flex"},[`${i}-badge ${i}-badge-count`]:{zIndex:1},[`> ${i}-badge:not(:first-child) > ${i}-button-wrapper`]:{borderInlineStart:"none"}})}})(o),(e=>{let{componentCls:t,wrapperMarginInlineEnd:i,colorPrimary:n,radioSize:o,motionDurationSlow:r,motionDurationMid:l,motionEaseInOutCirc:a,colorBgContainer:c,colorBorder:d,lineWidth:u,colorBgContainerDisabled:s,colorTextDisabled:m,paddingXS:p,dotColorDisabled:g,lineType:b,radioColor:f,radioBgColor:h,calc:v}=e,$=`${t}-inner`,k=v(o).sub(v(4).mul(2)),y=v(1).mul(o).equal({unit:!0});return{[`${t}-wrapper`]:Object.assign(Object.assign({},(0,S.resetComponent)(e)),{display:"inline-flex",alignItems:"baseline",marginInlineStart:0,marginInlineEnd:i,cursor:"pointer","&:last-child":{marginInlineEnd:0},[`&${t}-wrapper-rtl`]:{direction:"rtl"},"&-disabled":{cursor:"not-allowed",color:e.colorTextDisabled},"&::after":{display:"inline-block",width:0,overflow:"hidden",content:'"\\a0"'},"&-block":{flex:1,justifyContent:"center"},[`${t}-checked::after`]:{position:"absolute",insetBlockStart:0,insetInlineStart:0,width:"100%",height:"100%",border:`${(0,C.unit)(u)} ${b} ${n}`,borderRadius:"50%",visibility:"hidden",opacity:0,content:'""'},[t]:Object.assign(Object.assign({},(0,S.resetComponent)(e)),{position:"relative",display:"inline-block",outline:"none",cursor:"pointer",alignSelf:"center",borderRadius:"50%"}),[`${t}-wrapper:hover &, + &:hover ${$}`]:{borderColor:n},[`${t}-input:focus-visible + ${$}`]:(0,S.genFocusOutline)(e),[`${t}:hover::after, ${t}-wrapper:hover &::after`]:{visibility:"visible"},[`${t}-inner`]:{"&::after":{boxSizing:"border-box",position:"absolute",insetBlockStart:"50%",insetInlineStart:"50%",display:"block",width:y,height:y,marginBlockStart:v(1).mul(o).div(-2).equal({unit:!0}),marginInlineStart:v(1).mul(o).div(-2).equal({unit:!0}),backgroundColor:f,borderBlockStart:0,borderInlineStart:0,borderRadius:y,transform:"scale(0)",opacity:0,transition:`all ${r} ${a}`,content:'""'},boxSizing:"border-box",position:"relative",insetBlockStart:0,insetInlineStart:0,display:"block",width:y,height:y,backgroundColor:c,borderColor:d,borderStyle:"solid",borderWidth:u,borderRadius:"50%",transition:`all ${l}`},[`${t}-input`]:{position:"absolute",inset:0,zIndex:1,cursor:"pointer",opacity:0},[`${t}-checked`]:{[$]:{borderColor:n,backgroundColor:h,"&::after":{transform:`scale(${e.calc(e.dotSize).div(o).equal()})`,opacity:1,transition:`all ${r} ${a}`}}},[`${t}-disabled`]:{cursor:"not-allowed",[$]:{backgroundColor:s,borderColor:d,cursor:"not-allowed","&::after":{backgroundColor:g}},[`${t}-input`]:{cursor:"not-allowed"},[`${t}-disabled + span`]:{color:m,cursor:"not-allowed"},[`&${t}-checked`]:{[$]:{"&::after":{transform:`scale(${v(k).div(o).equal()})`}}}},[`span${t} + *`]:{paddingInlineStart:p,paddingInlineEnd:p}})}})(o),(e=>{let{buttonColor:t,controlHeight:i,componentCls:n,lineWidth:o,lineType:r,colorBorder:l,motionDurationMid:a,buttonPaddingInline:c,fontSize:d,buttonBg:u,fontSizeLG:s,controlHeightLG:m,controlHeightSM:p,paddingXS:g,borderRadius:b,borderRadiusSM:f,borderRadiusLG:h,buttonCheckedBg:v,buttonSolidCheckedColor:$,colorTextDisabled:k,colorBgContainerDisabled:y,buttonCheckedBgDisabled:x,buttonCheckedColorDisabled:E,colorPrimary:w,colorPrimaryHover:z,colorPrimaryActive:O,buttonSolidCheckedBg:j,buttonSolidCheckedHoverBg:I,buttonSolidCheckedActiveBg:N,calc:B}=e;return{[`${n}-button-wrapper`]:{position:"relative",display:"inline-block",height:i,margin:0,paddingInline:c,paddingBlock:0,color:t,fontSize:d,lineHeight:(0,C.unit)(B(i).sub(B(o).mul(2)).equal()),background:u,border:`${(0,C.unit)(o)} ${r} ${l}`,borderBlockStartWidth:B(o).add(.02).equal(),borderInlineEndWidth:o,cursor:"pointer",transition:`color ${a},background ${a},box-shadow ${a}`,a:{color:t},[`> ${n}-button`]:{position:"absolute",insetBlockStart:0,insetInlineStart:0,zIndex:-1,width:"100%",height:"100%"},"&:not(:last-child)":{marginInlineEnd:B(o).mul(-1).equal()},"&:first-child":{borderInlineStart:`${(0,C.unit)(o)} ${r} ${l}`,borderStartStartRadius:b,borderEndStartRadius:b},"&:last-child":{borderStartEndRadius:b,borderEndEndRadius:b},"&:first-child:last-child":{borderRadius:b},[`${n}-group-large &`]:{height:m,fontSize:s,lineHeight:(0,C.unit)(B(m).sub(B(o).mul(2)).equal()),"&:first-child":{borderStartStartRadius:h,borderEndStartRadius:h},"&:last-child":{borderStartEndRadius:h,borderEndEndRadius:h}},[`${n}-group-small &`]:{height:p,paddingInline:B(g).sub(o).equal(),paddingBlock:0,lineHeight:(0,C.unit)(B(p).sub(B(o).mul(2)).equal()),"&:first-child":{borderStartStartRadius:f,borderEndStartRadius:f},"&:last-child":{borderStartEndRadius:f,borderEndEndRadius:f}},"&:hover":{position:"relative",color:w},"&:has(:focus-visible)":(0,S.genFocusOutline)(e),[`${n}-inner, input[type='checkbox'], input[type='radio']`]:{width:0,height:0,opacity:0,pointerEvents:"none"},[`&-checked:not(${n}-button-wrapper-disabled)`]:{zIndex:1,color:w,background:v,borderColor:w,"&::before":{backgroundColor:w},"&:first-child":{borderColor:w},"&:hover":{color:z,borderColor:z,"&::before":{backgroundColor:z}},"&:active":{color:O,borderColor:O,"&::before":{backgroundColor:O}}},[`${n}-group-solid &-checked:not(${n}-button-wrapper-disabled)`]:{color:$,background:j,borderColor:j,"&:hover":{color:$,background:I,borderColor:I},"&:active":{color:$,background:N,borderColor:N}},"&-disabled":{color:k,backgroundColor:y,borderColor:l,cursor:"not-allowed","&:first-child, &:hover":{color:k,backgroundColor:y,borderColor:l}},[`&-disabled${n}-button-wrapper-checked`]:{color:E,backgroundColor:x,borderColor:l,boxShadow:"none"},"&-block":{flex:1,textAlign:"center"}}}})(o)]},e=>{let{wireframe:t,padding:i,marginXS:n,lineWidth:o,fontSizeLG:r,colorText:l,colorBgContainer:a,colorTextDisabled:c,controlItemBgActiveDisabled:d,colorTextLightSolid:u,colorPrimary:s,colorPrimaryHover:m,colorPrimaryActive:p,colorWhite:g}=e;return{radioSize:r,dotSize:t?r-8:r-(4+o)*2,dotColorDisabled:c,buttonSolidCheckedColor:u,buttonSolidCheckedBg:s,buttonSolidCheckedHoverBg:m,buttonSolidCheckedActiveBg:p,buttonBg:a,buttonCheckedBg:a,buttonColor:l,buttonCheckedBgDisabled:d,buttonCheckedColorDisabled:c,buttonPaddingInline:i-o,wrapperMarginInlineEnd:n,radioColor:t?s:g,radioBgColor:t?a:s}},{unitless:{radioSize:!0,dotSize:!0}});var E=function(e,t){var i={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&0>t.indexOf(n)&&(i[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,n=Object.getOwnPropertySymbols(e);ot.indexOf(n[o])&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(i[n[o]]=e[n[o]]);return i};let w=t.forwardRef((e,n)=>{var o,r;let c=t.useContext(d),u=t.useContext(s),{getPrefixCls:m,direction:C,radio:S}=t.useContext(l.ConfigContext),k=t.useRef(null),y=(0,g.composeRef)(n,k),{isFormItemInput:w}=t.useContext($.FormItemInputContext),{prefixCls:z,className:O,rootClassName:j,children:I,style:N,title:B}=e,M=E(e,["prefixCls","className","rootClassName","children","style","title"]),T=m("radio",z),P="button"===((null==c?void 0:c.optionType)||u),R=P?`${T}-button`:T,D=(0,a.default)(T),[H,A,_]=x(T,D),q=Object.assign({},M),W=t.useContext(v.default);c&&(q.name=c.name,q.onChange=t=>{var i,n;null==(i=e.onChange)||i.call(e,t),null==(n=null==c?void 0:c.onChange)||n.call(c,t)},q.checked=e.value===c.value,q.disabled=null!=(o=q.disabled)?o:c.disabled),q.disabled=null!=(r=q.disabled)?r:W;let L=(0,i.default)(`${R}-wrapper`,{[`${R}-wrapper-checked`]:q.checked,[`${R}-wrapper-disabled`]:q.disabled,[`${R}-wrapper-rtl`]:"rtl"===C,[`${R}-wrapper-in-form-item`]:w,[`${R}-wrapper-block`]:!!(null==c?void 0:c.block)},null==S?void 0:S.className,O,j,A,_,D),[K,F]=(0,h.default)(q.onClick);return H(t.createElement(b.default,{component:"Radio",disabled:q.disabled},t.createElement("label",{className:L,style:Object.assign(Object.assign({},null==S?void 0:S.style),N),onMouseEnter:e.onMouseEnter,onMouseLeave:e.onMouseLeave,title:B,onClick:K},t.createElement(p.default,Object.assign({},q,{className:(0,i.default)(q.className,{[f.TARGET_CLS]:!P}),type:"radio",prefixCls:R,ref:y,onClick:F})),void 0!==I?t.createElement("span",{className:`${R}-label`},I):null)))});var z=e.i(286039);let O=t.forwardRef((e,d)=>{let{getPrefixCls:s,direction:m}=t.useContext(l.ConfigContext),{name:p}=t.useContext($.FormItemInputContext),g=(0,n.default)((0,z.toNamePathStr)(p)),{prefixCls:b,className:f,rootClassName:h,options:v,buttonStyle:C="outline",disabled:S,children:k,size:y,style:E,id:O,optionType:j,name:I=g,defaultValue:N,value:B,block:M=!1,onChange:T,onMouseEnter:P,onMouseLeave:R,onFocus:D,onBlur:H}=e,[A,_]=(0,o.default)(N,{value:B}),q=t.useCallback(t=>{let i=t.target.value;"value"in e||_(i),i!==A&&(null==T||T(t))},[A,_,T]),W=s("radio",b),L=`${W}-group`,K=(0,a.default)(W),[F,X,U]=x(W,K),G=k;v&&v.length>0&&(G=v.map(e=>"string"==typeof e||"number"==typeof e?t.createElement(w,{key:e.toString(),prefixCls:W,disabled:S,value:e,checked:A===e},e):t.createElement(w,{key:`radio-group-value-options-${e.value}`,prefixCls:W,disabled:e.disabled||S,value:e.value,checked:A===e.value,title:e.title,style:e.style,className:e.className,id:e.id,required:e.required},e.label)));let J=(0,c.default)(y),Q=(0,i.default)(L,`${L}-${C}`,{[`${L}-${J}`]:J,[`${L}-rtl`]:"rtl"===m,[`${L}-block`]:M},f,h,X,U,K),V=t.useMemo(()=>({onChange:q,value:A,disabled:S,name:I,optionType:j,block:M}),[q,A,S,I,j,M]);return F(t.createElement("div",Object.assign({},(0,r.default)(e,{aria:!0,data:!0}),{className:Q,style:E,onMouseEnter:P,onMouseLeave:R,onFocus:D,onBlur:H,id:O,ref:d}),t.createElement(u,{value:V},G)))}),j=t.memo(O);var I=function(e,t){var i={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&0>t.indexOf(n)&&(i[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,n=Object.getOwnPropertySymbols(e);ot.indexOf(n[o])&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(i[n[o]]=e[n[o]]);return i};let N=t.forwardRef((e,i)=>{let{getPrefixCls:n}=t.useContext(l.ConfigContext),{prefixCls:o}=e,r=I(e,["prefixCls"]),a=n("radio",o);return t.createElement(m,{value:"button"},t.createElement(w,Object.assign({prefixCls:a},r,{type:"radio",ref:i})))});w.Button=N,w.Group=j,w.__ANT_RADIO=!0,e.s(["default",0,w],544195)},165370,e=>{"use strict";e.i(247167);var t=e.i(271645),i=e.i(931067);let n={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M272.9 512l265.4-339.1c4.1-5.2.4-12.9-6.3-12.9h-77.3c-4.9 0-9.6 2.3-12.6 6.1L186.8 492.3a31.99 31.99 0 000 39.5l255.3 326.1c3 3.9 7.7 6.1 12.6 6.1H532c6.7 0 10.4-7.7 6.3-12.9L272.9 512zm304 0l265.4-339.1c4.1-5.2.4-12.9-6.3-12.9h-77.3c-4.9 0-9.6 2.3-12.6 6.1L490.8 492.3a31.99 31.99 0 000 39.5l255.3 326.1c3 3.9 7.7 6.1 12.6 6.1H836c6.7 0 10.4-7.7 6.3-12.9L576.9 512z"}}]},name:"double-left",theme:"outlined"};var o=e.i(9583),r=t.forwardRef(function(e,r){return t.createElement(o.default,(0,i.default)({},e,{ref:r,icon:n}))});let l={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M533.2 492.3L277.9 166.1c-3-3.9-7.7-6.1-12.6-6.1H188c-6.7 0-10.4 7.7-6.3 12.9L447.1 512 181.7 851.1A7.98 7.98 0 00188 864h77.3c4.9 0 9.6-2.3 12.6-6.1l255.3-326.1c9.1-11.7 9.1-27.9 0-39.5zm304 0L581.9 166.1c-3-3.9-7.7-6.1-12.6-6.1H492c-6.7 0-10.4 7.7-6.3 12.9L751.1 512 485.7 851.1A7.98 7.98 0 00492 864h77.3c4.9 0 9.6-2.3 12.6-6.1l255.3-326.1c9.1-11.7 9.1-27.9 0-39.5z"}}]},name:"double-right",theme:"outlined"};var a=t.forwardRef(function(e,n){return t.createElement(o.default,(0,i.default)({},e,{ref:n,icon:l}))}),c=e.i(801312),d=e.i(286612),u=e.i(343794),s=e.i(211577),m=e.i(410160),p=e.i(209428),g=e.i(392221),b=e.i(914949),f=e.i(404948),h=e.i(244009);e.i(883110);let v={items_per_page:"条/页",jump_to:"跳至",jump_to_confirm:"确定",page:"页",prev_page:"上一页",next_page:"下一页",prev_5:"向前 5 页",next_5:"向后 5 页",prev_3:"向前 3 页",next_3:"向后 3 页",page_size:"页码"};var $=[10,20,50,100];let C=function(e){var i=e.pageSizeOptions,n=void 0===i?$:i,o=e.locale,r=e.changeSize,l=e.pageSize,a=e.goButton,c=e.quickGo,d=e.rootPrefixCls,u=e.disabled,s=e.buildOptionText,m=e.showSizeChanger,p=e.sizeChangerRender,b=t.default.useState(""),h=(0,g.default)(b,2),v=h[0],C=h[1],S=function(){return!v||Number.isNaN(v)?void 0:Number(v)},k="function"==typeof s?s:function(e){return"".concat(e," ").concat(o.items_per_page)},y=function(e){""!==v&&(e.keyCode===f.default.ENTER||"click"===e.type)&&(C(""),null==c||c(S()))},x="".concat(d,"-options");if(!m&&!c)return null;var E=null,w=null,z=null;return m&&p&&(E=p({disabled:u,size:l,onSizeChange:function(e){null==r||r(Number(e))},"aria-label":o.page_size,className:"".concat(x,"-size-changer"),options:(n.some(function(e){return e.toString()===l.toString()})?n:n.concat([l]).sort(function(e,t){return(Number.isNaN(Number(e))?0:Number(e))-(Number.isNaN(Number(t))?0:Number(t))})).map(function(e){return{label:k(e),value:e}})})),c&&(a&&(z="boolean"==typeof a?t.default.createElement("button",{type:"button",onClick:y,onKeyUp:y,disabled:u,className:"".concat(x,"-quick-jumper-button")},o.jump_to_confirm):t.default.createElement("span",{onClick:y,onKeyUp:y},a)),w=t.default.createElement("div",{className:"".concat(x,"-quick-jumper")},o.jump_to,t.default.createElement("input",{disabled:u,type:"text",value:v,onChange:function(e){C(e.target.value)},onKeyUp:y,onBlur:function(e){a||""===v||(C(""),e.relatedTarget&&(e.relatedTarget.className.indexOf("".concat(d,"-item-link"))>=0||e.relatedTarget.className.indexOf("".concat(d,"-item"))>=0)||null==c||c(S()))},"aria-label":o.page}),o.page,z)),t.default.createElement("li",{className:x},E,w)},S=function(e){var i=e.rootPrefixCls,n=e.page,o=e.active,r=e.className,l=e.showTitle,a=e.onClick,c=e.onKeyPress,d=e.itemRender,m="".concat(i,"-item"),p=(0,u.default)(m,"".concat(m,"-").concat(n),(0,s.default)((0,s.default)({},"".concat(m,"-active"),o),"".concat(m,"-disabled"),!n),r),g=d(n,"page",t.default.createElement("a",{rel:"nofollow"},n));return g?t.default.createElement("li",{title:l?String(n):null,className:p,onClick:function(){a(n)},onKeyDown:function(e){c(e,a,n)},tabIndex:0},g):null};var k=function(e,t,i){return i};function y(){}function x(e){var t=Number(e);return"number"==typeof t&&!Number.isNaN(t)&&isFinite(t)&&Math.floor(t)===t}function E(e,t,i){return Math.floor((i-1)/(void 0===e?t:e))+1}let w=function(e){var n,o,r,l,a=e.prefixCls,c=void 0===a?"rc-pagination":a,d=e.selectPrefixCls,$=e.className,w=e.current,z=e.defaultCurrent,O=e.total,j=void 0===O?0:O,I=e.pageSize,N=e.defaultPageSize,B=e.onChange,M=void 0===B?y:B,T=e.hideOnSinglePage,P=e.align,R=e.showPrevNextJumpers,D=e.showQuickJumper,H=e.showLessItems,A=e.showTitle,_=void 0===A||A,q=e.onShowSizeChange,W=void 0===q?y:q,L=e.locale,K=void 0===L?v:L,F=e.style,X=e.totalBoundaryShowSizeChanger,U=e.disabled,G=e.simple,J=e.showTotal,Q=e.showSizeChanger,V=void 0===Q?j>(void 0===X?50:X):Q,Y=e.sizeChangerRender,Z=e.pageSizeOptions,ee=e.itemRender,et=void 0===ee?k:ee,ei=e.jumpPrevIcon,en=e.jumpNextIcon,eo=e.prevIcon,er=e.nextIcon,el=t.default.useRef(null),ea=(0,b.default)(10,{value:I,defaultValue:void 0===N?10:N}),ec=(0,g.default)(ea,2),ed=ec[0],eu=ec[1],es=(0,b.default)(1,{value:w,defaultValue:void 0===z?1:z,postState:function(e){return Math.max(1,Math.min(e,E(void 0,ed,j)))}}),em=(0,g.default)(es,2),ep=em[0],eg=em[1],eb=t.default.useState(ep),ef=(0,g.default)(eb,2),eh=ef[0],ev=ef[1];(0,t.useEffect)(function(){ev(ep)},[ep]);var e$=Math.max(1,ep-(H?3:5)),eC=Math.min(E(void 0,ed,j),ep+(H?3:5));function eS(i,n){var o=i||t.default.createElement("button",{type:"button","aria-label":n,className:"".concat(c,"-item-link")});return"function"==typeof i&&(o=t.default.createElement(i,(0,p.default)({},e))),o}function ek(e){var t=e.target.value,i=E(void 0,ed,j);return""===t?t:Number.isNaN(Number(t))?eh:t>=i?i:Number(t)}var ey=j>ed&&D;function ex(e){var t=ek(e);switch(t!==eh&&ev(t),e.keyCode){case f.default.ENTER:eE(t);break;case f.default.UP:eE(t-1);break;case f.default.DOWN:eE(t+1)}}function eE(e){if(x(e)&&e!==ep&&x(j)&&j>0&&!U){var t=E(void 0,ed,j),i=e;return e>t?i=t:e<1&&(i=1),i!==eh&&ev(i),eg(i),null==M||M(i,ed),i}return ep}var ew=ep>1,ez=ep2?i-2:0),o=2;oj?j:ep*ed])),eD=null,eH=E(void 0,ed,j);if(T&&j<=ed)return null;var eA=[],e_={rootPrefixCls:c,onClick:eE,onKeyPress:eB,showTitle:_,itemRender:et,page:-1},eq=ep-1>0?ep-1:0,eW=ep+1=2*eU&&3!==ep&&(eA[0]=t.default.cloneElement(eA[0],{className:(0,u.default)("".concat(c,"-item-after-jump-prev"),eA[0].props.className)}),eA.unshift(eT)),eH-ep>=2*eU&&ep!==eH-2){var e2=eA[eA.length-1];eA[eA.length-1]=t.default.cloneElement(e2,{className:(0,u.default)("".concat(c,"-item-before-jump-next"),e2.props.className)}),eA.push(eD)}1!==eZ&&eA.unshift(t.default.createElement(S,(0,i.default)({},e_,{key:1,page:1}))),e0!==eH&&eA.push(t.default.createElement(S,(0,i.default)({},e_,{key:eH,page:eH})))}var e9=(n=et(eq,"prev",eS(eo,"prev page")),t.default.isValidElement(n)?t.default.cloneElement(n,{disabled:!ew}):n);if(e9){var e3=!ew||!eH;e9=t.default.createElement("li",{title:_?K.prev_page:null,onClick:eO,tabIndex:e3?null:0,onKeyDown:function(e){eB(e,eO)},className:(0,u.default)("".concat(c,"-prev"),(0,s.default)({},"".concat(c,"-disabled"),e3)),"aria-disabled":e3},e9)}var e4=(o=et(eW,"next",eS(er,"next page")),t.default.isValidElement(o)?t.default.cloneElement(o,{disabled:!ez}):o);e4&&(G?(r=!ez,l=ew?0:null):l=(r=!ez||!eH)?null:0,e4=t.default.createElement("li",{title:_?K.next_page:null,onClick:ej,tabIndex:l,onKeyDown:function(e){eB(e,ej)},className:(0,u.default)("".concat(c,"-next"),(0,s.default)({},"".concat(c,"-disabled"),r)),"aria-disabled":r},e4));var e6=(0,u.default)(c,$,(0,s.default)((0,s.default)((0,s.default)((0,s.default)((0,s.default)({},"".concat(c,"-start"),"start"===P),"".concat(c,"-center"),"center"===P),"".concat(c,"-end"),"end"===P),"".concat(c,"-simple"),G),"".concat(c,"-disabled"),U));return t.default.createElement("ul",(0,i.default)({className:e6,style:F,ref:el},eP),eR,e9,G?eX:eA,e4,t.default.createElement(C,{locale:K,rootPrefixCls:c,disabled:U,selectPrefixCls:void 0===d?"rc-select":d,changeSize:function(e){var t=E(e,ed,j),i=ep>t&&0!==t?t:ep;eu(e),ev(i),null==W||W(ep,e),eg(i),null==M||M(i,e)},pageSize:ed,pageSizeOptions:Z,quickGo:ey?eE:null,goButton:eF,showSizeChanger:V,sizeChangerRender:Y}))};var z=e.i(727214),O=e.i(242064),j=e.i(517455),I=e.i(150073),N=e.i(408850),B=e.i(327494),M=e.i(104458);e.i(296059);var T=e.i(915654),P=e.i(349942),R=e.i(517458),D=e.i(889943),H=e.i(183293),A=e.i(246422),_=e.i(838378);let q=e=>Object.assign({itemBg:e.colorBgContainer,itemSize:e.controlHeight,itemSizeSM:e.controlHeightSM,itemActiveBg:e.colorBgContainer,itemActiveColor:e.colorPrimary,itemActiveColorHover:e.colorPrimaryHover,itemLinkBg:e.colorBgContainer,itemActiveColorDisabled:e.colorTextDisabled,itemActiveBgDisabled:e.controlItemBgActiveDisabled,itemInputBg:e.colorBgContainer,miniOptionsSizeChangerTop:0},(0,R.initComponentToken)(e)),W=e=>(0,_.mergeToken)(e,{inputOutlineOffset:0,quickJumperInputWidth:e.calc(e.controlHeightLG).mul(1.25).equal(),paginationMiniOptionsMarginInlineStart:e.calc(e.marginXXS).div(2).equal(),paginationMiniQuickJumperInputWidth:e.calc(e.controlHeightLG).mul(1.1).equal(),paginationItemPaddingInline:e.calc(e.marginXXS).mul(1.5).equal(),paginationEllipsisLetterSpacing:e.calc(e.marginXXS).div(2).equal(),paginationSlashMarginInlineStart:e.marginSM,paginationSlashMarginInlineEnd:e.marginSM,paginationEllipsisTextIndent:"0.13em"},(0,R.initInputToken)(e)),L=(0,A.genStyleHooks)("Pagination",e=>{let t=W(e);return[(e=>{let{componentCls:t}=e;return{[t]:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},(0,H.resetComponent)(e)),{display:"flex",flexWrap:"wrap",rowGap:e.paddingXS,"&-start":{justifyContent:"start"},"&-center":{justifyContent:"center"},"&-end":{justifyContent:"end"},"ul, ol":{margin:0,padding:0,listStyle:"none"},"&::after":{display:"block",clear:"both",height:0,overflow:"hidden",visibility:"hidden",content:'""'},[`${t}-total-text`]:{display:"inline-block",height:e.itemSize,marginInlineEnd:e.marginXS,lineHeight:(0,T.unit)(e.calc(e.itemSize).sub(2).equal()),verticalAlign:"middle"}}),(e=>{let{componentCls:t}=e;return{[`${t}-item`]:{display:"inline-block",minWidth:e.itemSize,height:e.itemSize,marginInlineEnd:e.marginXS,fontFamily:e.fontFamily,lineHeight:(0,T.unit)(e.calc(e.itemSize).sub(2).equal()),textAlign:"center",verticalAlign:"middle",listStyle:"none",backgroundColor:e.itemBg,border:`${(0,T.unit)(e.lineWidth)} ${e.lineType} transparent`,borderRadius:e.borderRadius,outline:0,cursor:"pointer",userSelect:"none",a:{display:"block",padding:`0 ${(0,T.unit)(e.paginationItemPaddingInline)}`,color:e.colorText,"&:hover":{textDecoration:"none"}},[`&:not(${t}-item-active)`]:{"&:hover":{transition:`all ${e.motionDurationMid}`,backgroundColor:e.colorBgTextHover},"&:active":{backgroundColor:e.colorBgTextActive}},"&-active":{fontWeight:e.fontWeightStrong,backgroundColor:e.itemActiveBg,borderColor:e.colorPrimary,a:{color:e.itemActiveColor},"&:hover":{borderColor:e.colorPrimaryHover},"&:hover a":{color:e.itemActiveColorHover}}}}})(e)),(e=>{let{componentCls:t}=e;return{[`${t}-jump-prev, ${t}-jump-next`]:{outline:0,[`${t}-item-container`]:{position:"relative",[`${t}-item-link-icon`]:{color:e.colorPrimary,fontSize:e.fontSizeSM,opacity:0,transition:`all ${e.motionDurationMid}`,"&-svg":{top:0,insetInlineEnd:0,bottom:0,insetInlineStart:0,margin:"auto"}},[`${t}-item-ellipsis`]:{position:"absolute",top:0,insetInlineEnd:0,bottom:0,insetInlineStart:0,display:"block",margin:"auto",color:e.colorTextDisabled,letterSpacing:e.paginationEllipsisLetterSpacing,textAlign:"center",textIndent:e.paginationEllipsisTextIndent,opacity:1,transition:`all ${e.motionDurationMid}`}},"&:hover":{[`${t}-item-link-icon`]:{opacity:1},[`${t}-item-ellipsis`]:{opacity:0}}},[` + ${t}-prev, + ${t}-jump-prev, + ${t}-jump-next + `]:{marginInlineEnd:e.marginXS},[` + ${t}-prev, + ${t}-next, + ${t}-jump-prev, + ${t}-jump-next + `]:{display:"inline-block",minWidth:e.itemSize,height:e.itemSize,color:e.colorText,fontFamily:e.fontFamily,lineHeight:(0,T.unit)(e.itemSize),textAlign:"center",verticalAlign:"middle",listStyle:"none",borderRadius:e.borderRadius,cursor:"pointer",transition:`all ${e.motionDurationMid}`},[`${t}-prev, ${t}-next`]:{outline:0,button:{color:e.colorText,cursor:"pointer",userSelect:"none"},[`${t}-item-link`]:{display:"block",width:"100%",height:"100%",padding:0,fontSize:e.fontSizeSM,textAlign:"center",backgroundColor:"transparent",border:`${(0,T.unit)(e.lineWidth)} ${e.lineType} transparent`,borderRadius:e.borderRadius,outline:"none",transition:`all ${e.motionDurationMid}`},[`&:hover ${t}-item-link`]:{backgroundColor:e.colorBgTextHover},[`&:active ${t}-item-link`]:{backgroundColor:e.colorBgTextActive},[`&${t}-disabled:hover`]:{[`${t}-item-link`]:{backgroundColor:"transparent"}}},[`${t}-slash`]:{marginInlineEnd:e.paginationSlashMarginInlineEnd,marginInlineStart:e.paginationSlashMarginInlineStart},[`${t}-options`]:{display:"inline-block",marginInlineStart:e.margin,verticalAlign:"middle","&-size-changer":{display:"inline-block",width:"auto"},"&-quick-jumper":{display:"inline-block",height:e.controlHeight,marginInlineStart:e.marginXS,lineHeight:(0,T.unit)(e.controlHeight),verticalAlign:"top",input:Object.assign(Object.assign(Object.assign({},(0,P.genBasicInputStyle)(e)),(0,D.genBaseOutlinedStyle)(e,{borderColor:e.colorBorder,hoverBorderColor:e.colorPrimaryHover,activeBorderColor:e.colorPrimary,activeShadow:e.activeShadow})),{"&[disabled]":Object.assign({},(0,D.genDisabledStyle)(e)),width:e.quickJumperInputWidth,height:e.controlHeight,boxSizing:"border-box",margin:0,marginInlineStart:e.marginXS,marginInlineEnd:e.marginXS})}}}})(e)),(e=>{let{componentCls:t}=e;return{[`&${t}-simple`]:{[`${t}-prev, ${t}-next`]:{height:e.itemSize,lineHeight:(0,T.unit)(e.itemSize),verticalAlign:"top",[`${t}-item-link`]:{height:e.itemSize,backgroundColor:"transparent",border:0,"&:hover":{backgroundColor:e.colorBgTextHover},"&:active":{backgroundColor:e.colorBgTextActive},"&::after":{height:e.itemSize,lineHeight:(0,T.unit)(e.itemSize)}}},[`${t}-simple-pager`]:{display:"inline-flex",alignItems:"center",height:e.itemSize,marginInlineEnd:e.marginXS,input:{boxSizing:"border-box",height:"100%",width:e.quickJumperInputWidth,padding:`0 ${(0,T.unit)(e.paginationItemPaddingInline)}`,textAlign:"center",backgroundColor:e.itemInputBg,border:`${(0,T.unit)(e.lineWidth)} ${e.lineType} ${e.colorBorder}`,borderRadius:e.borderRadius,outline:"none",transition:`border-color ${e.motionDurationMid}`,color:"inherit","&:hover":{borderColor:e.colorPrimary},"&:focus":{borderColor:e.colorPrimaryHover,boxShadow:`${(0,T.unit)(e.inputOutlineOffset)} 0 ${(0,T.unit)(e.controlOutlineWidth)} ${e.controlOutline}`},"&[disabled]":{color:e.colorTextDisabled,backgroundColor:e.colorBgContainerDisabled,borderColor:e.colorBorder,cursor:"not-allowed"}}},[`&${t}-disabled`]:{[`${t}-prev, ${t}-next`]:{[`${t}-item-link`]:{"&:hover, &:active":{backgroundColor:"transparent"}}}},[`&${t}-mini`]:{[`${t}-prev, ${t}-next`]:{height:e.itemSizeSM,lineHeight:(0,T.unit)(e.itemSizeSM),[`${t}-item-link`]:{height:e.itemSizeSM,"&::after":{height:e.itemSizeSM,lineHeight:(0,T.unit)(e.itemSizeSM)}}},[`${t}-simple-pager`]:{height:e.itemSizeSM,input:{width:e.paginationMiniQuickJumperInputWidth}}}}}})(e)),(e=>{let{componentCls:t}=e;return{[`&${t}-mini ${t}-total-text, &${t}-mini ${t}-simple-pager`]:{height:e.itemSizeSM,lineHeight:(0,T.unit)(e.itemSizeSM)},[`&${t}-mini ${t}-item`]:{minWidth:e.itemSizeSM,height:e.itemSizeSM,margin:0,lineHeight:(0,T.unit)(e.calc(e.itemSizeSM).sub(2).equal())},[`&${t}-mini ${t}-prev, &${t}-mini ${t}-next`]:{minWidth:e.itemSizeSM,height:e.itemSizeSM,margin:0,lineHeight:(0,T.unit)(e.itemSizeSM)},[`&${t}-mini:not(${t}-disabled)`]:{[`${t}-prev, ${t}-next`]:{[`&:hover ${t}-item-link`]:{backgroundColor:e.colorBgTextHover},[`&:active ${t}-item-link`]:{backgroundColor:e.colorBgTextActive},[`&${t}-disabled:hover ${t}-item-link`]:{backgroundColor:"transparent"}}},[` + &${t}-mini ${t}-prev ${t}-item-link, + &${t}-mini ${t}-next ${t}-item-link + `]:{backgroundColor:"transparent",borderColor:"transparent","&::after":{height:e.itemSizeSM,lineHeight:(0,T.unit)(e.itemSizeSM)}},[`&${t}-mini ${t}-jump-prev, &${t}-mini ${t}-jump-next`]:{height:e.itemSizeSM,marginInlineEnd:0,lineHeight:(0,T.unit)(e.itemSizeSM)},[`&${t}-mini ${t}-options`]:{marginInlineStart:e.paginationMiniOptionsMarginInlineStart,"&-size-changer":{top:e.miniOptionsSizeChangerTop},"&-quick-jumper":{height:e.itemSizeSM,lineHeight:(0,T.unit)(e.itemSizeSM),input:Object.assign(Object.assign({},(0,P.genInputSmallStyle)(e)),{width:e.paginationMiniQuickJumperInputWidth,height:e.controlHeightSM})}}}})(e)),(e=>{let{componentCls:t}=e;return{[`${t}-disabled`]:{"&, &:hover":{cursor:"not-allowed",[`${t}-item-link`]:{color:e.colorTextDisabled,cursor:"not-allowed"}},"&:focus-visible":{cursor:"not-allowed",[`${t}-item-link`]:{color:e.colorTextDisabled,cursor:"not-allowed"}}},[`&${t}-disabled`]:{cursor:"not-allowed",[`${t}-item`]:{cursor:"not-allowed",backgroundColor:"transparent","&:hover, &:active":{backgroundColor:"transparent"},a:{color:e.colorTextDisabled,backgroundColor:"transparent",border:"none",cursor:"not-allowed"},"&-active":{borderColor:e.colorBorder,backgroundColor:e.itemActiveBgDisabled,"&:hover, &:active":{backgroundColor:e.itemActiveBgDisabled},a:{color:e.itemActiveColorDisabled}}},[`${t}-item-link`]:{color:e.colorTextDisabled,cursor:"not-allowed","&:hover, &:active":{backgroundColor:"transparent"},[`${t}-simple&`]:{backgroundColor:"transparent","&:hover, &:active":{backgroundColor:"transparent"}}},[`${t}-simple-pager`]:{color:e.colorTextDisabled},[`${t}-jump-prev, ${t}-jump-next`]:{[`${t}-item-link-icon`]:{opacity:0},[`${t}-item-ellipsis`]:{opacity:1}}}}})(e)),{[`@media only screen and (max-width: ${e.screenLG}px)`]:{[`${t}-item`]:{"&-after-jump-prev, &-before-jump-next":{display:"none"}}},[`@media only screen and (max-width: ${e.screenSM}px)`]:{[`${t}-options`]:{display:"none"}}}),[`&${e.componentCls}-rtl`]:{direction:"rtl"}}})(t),(e=>{let{componentCls:t}=e;return{[`${t}:not(${t}-disabled)`]:{[`${t}-item`]:Object.assign({},(0,H.genFocusStyle)(e)),[`${t}-jump-prev, ${t}-jump-next`]:{"&:focus-visible":Object.assign({[`${t}-item-link-icon`]:{opacity:1},[`${t}-item-ellipsis`]:{opacity:0}},(0,H.genFocusOutline)(e))},[`${t}-prev, ${t}-next`]:{[`&:focus-visible ${t}-item-link`]:(0,H.genFocusOutline)(e)}}}})(t)]},q),K=(0,A.genSubStyleComponent)(["Pagination","bordered"],e=>(e=>{let{componentCls:t}=e;return{[`${t}${t}-bordered${t}-disabled:not(${t}-mini)`]:{"&, &:hover":{[`${t}-item-link`]:{borderColor:e.colorBorder}},"&:focus-visible":{[`${t}-item-link`]:{borderColor:e.colorBorder}},[`${t}-item, ${t}-item-link`]:{backgroundColor:e.colorBgContainerDisabled,borderColor:e.colorBorder,[`&:hover:not(${t}-item-active)`]:{backgroundColor:e.colorBgContainerDisabled,borderColor:e.colorBorder,a:{color:e.colorTextDisabled}},[`&${t}-item-active`]:{backgroundColor:e.itemActiveBgDisabled}},[`${t}-prev, ${t}-next`]:{"&:hover button":{backgroundColor:e.colorBgContainerDisabled,borderColor:e.colorBorder,color:e.colorTextDisabled},[`${t}-item-link`]:{backgroundColor:e.colorBgContainerDisabled,borderColor:e.colorBorder}}},[`${t}${t}-bordered:not(${t}-mini)`]:{[`${t}-prev, ${t}-next`]:{"&:hover button":{borderColor:e.colorPrimaryHover,backgroundColor:e.itemBg},[`${t}-item-link`]:{backgroundColor:e.itemLinkBg,borderColor:e.colorBorder},[`&:hover ${t}-item-link`]:{borderColor:e.colorPrimary,backgroundColor:e.itemBg,color:e.colorPrimary},[`&${t}-disabled`]:{[`${t}-item-link`]:{borderColor:e.colorBorder,color:e.colorTextDisabled}}},[`${t}-item`]:{backgroundColor:e.itemBg,border:`${(0,T.unit)(e.lineWidth)} ${e.lineType} ${e.colorBorder}`,[`&:hover:not(${t}-item-active)`]:{borderColor:e.colorPrimary,backgroundColor:e.itemBg,a:{color:e.colorPrimary}},"&-active":{borderColor:e.colorPrimary}}}}})(W(e)),q);function F(e){return(0,t.useMemo)(()=>"boolean"==typeof e?[e,{}]:e&&"object"==typeof e?[!0,e]:[void 0,void 0],[e])}var X=function(e,t){var i={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&0>t.indexOf(n)&&(i[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var o=0,n=Object.getOwnPropertySymbols(e);ot.indexOf(n[o])&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(i[n[o]]=e[n[o]]);return i};e.s(["default",0,e=>{let{align:i,prefixCls:n,selectPrefixCls:o,className:l,rootClassName:s,style:m,size:p,locale:g,responsive:b,showSizeChanger:f,selectComponentClass:h,pageSizeOptions:v}=e,$=X(e,["align","prefixCls","selectPrefixCls","className","rootClassName","style","size","locale","responsive","showSizeChanger","selectComponentClass","pageSizeOptions"]),{xs:C}=(0,I.default)(b),[,S]=(0,M.useToken)(),{getPrefixCls:k,direction:y,showSizeChanger:x,className:E,style:T}=(0,O.useComponentConfig)("pagination"),P=k("pagination",n),[R,D,H]=L(P),A=(0,j.default)(p),_="small"===A||!!(C&&!A&&b),[q]=(0,N.useLocale)("Pagination",z.default),W=Object.assign(Object.assign({},q),g),[U,G]=F(f),[J,Q]=F(x),V=null!=G?G:Q,Y=h||B.default,Z=t.useMemo(()=>v?v.map(e=>Number(e)):void 0,[v]),ee=t.useMemo(()=>{let e=t.createElement("span",{className:`${P}-item-ellipsis`},"•••"),i=t.createElement("button",{className:`${P}-item-link`,type:"button",tabIndex:-1},"rtl"===y?t.createElement(d.default,null):t.createElement(c.default,null)),n=t.createElement("button",{className:`${P}-item-link`,type:"button",tabIndex:-1},"rtl"===y?t.createElement(c.default,null):t.createElement(d.default,null));return{prevIcon:i,nextIcon:n,jumpPrevIcon:t.createElement("a",{className:`${P}-item-link`},t.createElement("div",{className:`${P}-item-container`},"rtl"===y?t.createElement(a,{className:`${P}-item-link-icon`}):t.createElement(r,{className:`${P}-item-link-icon`}),e)),jumpNextIcon:t.createElement("a",{className:`${P}-item-link`},t.createElement("div",{className:`${P}-item-container`},"rtl"===y?t.createElement(r,{className:`${P}-item-link-icon`}):t.createElement(a,{className:`${P}-item-link-icon`}),e))}},[y,P]),et=k("select",o),ei=(0,u.default)({[`${P}-${i}`]:!!i,[`${P}-mini`]:_,[`${P}-rtl`]:"rtl"===y,[`${P}-bordered`]:S.wireframe},E,l,s,D,H),en=Object.assign(Object.assign({},T),m);return R(t.createElement(t.Fragment,null,S.wireframe&&t.createElement(K,{prefixCls:P}),t.createElement(w,Object.assign({},ee,$,{style:en,prefixCls:P,selectPrefixCls:et,className:ei,locale:W,pageSizeOptions:Z,showSizeChanger:null!=U?U:J,sizeChangerRender:e=>{var i;let{disabled:n,size:o,onSizeChange:r,"aria-label":l,className:a,options:c}=e,{className:d,onChange:s}=V||{},m=null==(i=c.find(e=>String(e.value)===String(o)))?void 0:i.value;return t.createElement(Y,Object.assign({disabled:n,showSearch:!0,popupMatchSelectWidth:!1,getPopupContainer:e=>e.parentNode,"aria-label":l,options:c},V,{value:m,onChange:(e,t)=>{null==r||r(e),null==s||s(e,t)},size:_?"small":"middle",className:(0,u.default)(a,d)}))}}))))}],165370)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0~-ovi6c4wjt1.js b/litellm/proxy/_experimental/out/_next/static/chunks/0~-ovi6c4wjt1.js new file mode 100644 index 00000000000..eef86b55753 --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0~-ovi6c4wjt1.js @@ -0,0 +1 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,94629,e=>{"use strict";var r=e.i(271645);let l=r.forwardRef(function(e,l){return r.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:l},e),r.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M7 16V4m0 0L3 8m4-4l4 4m6 0v12m0 0l4-4m-4 4l-4-4"}))});e.s(["SwitchVerticalIcon",0,l],94629)},969550,e=>{"use strict";var r=e.i(843476),l=e.i(271645);let t=l.forwardRef(function(e,r){return l.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:r},e),l.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3 4a1 1 0 011-1h16a1 1 0 011 1v2.586a1 1 0 01-.293.707l-6.414 6.414a1 1 0 00-.293.707V17l-4 4v-6.586a1 1 0 00-.293-.707L3.293 7.293A1 1 0 013 6.586V4z"}))});var a=e.i(464571),o=e.i(311451),s=e.i(199133),n=e.i(374009);e.s(["default",0,({options:e,onApplyFilters:i,onResetFilters:d,initialValues:u={},buttonLabel:c="Filters"})=>{let[m,h]=(0,l.useState)(!1),[p,g]=(0,l.useState)(u),[f,x]=(0,l.useState)({}),[b,y]=(0,l.useState)({}),[v,w]=(0,l.useState)({}),[C,j]=(0,l.useState)({}),k=(0,l.useCallback)((0,n.default)(async(e,r)=>{if(r.isSearchable&&r.searchFn){y(e=>({...e,[r.name]:!0}));try{let l=await r.searchFn(e);x(e=>({...e,[r.name]:l}))}catch(e){console.error("Error searching:",e),x(e=>({...e,[r.name]:[]}))}finally{y(e=>({...e,[r.name]:!1}))}}},300),[]),S=(0,l.useCallback)(async e=>{if(e.isSearchable&&e.searchFn&&!C[e.name]){y(r=>({...r,[e.name]:!0})),j(r=>({...r,[e.name]:!0}));try{let r=await e.searchFn("");x(l=>({...l,[e.name]:r}))}catch(r){console.error("Error loading initial options:",r),x(r=>({...r,[e.name]:[]}))}finally{y(r=>({...r,[e.name]:!1}))}}},[C]);(0,l.useEffect)(()=>{m&&e.forEach(e=>{e.isSearchable&&!C[e.name]&&S(e)})},[m,e,S,C]);let _=(e,r)=>{let l={...p,[e]:r};g(l),i(l)};return(0,r.jsxs)("div",{className:"w-full",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 mb-6",children:[(0,r.jsx)(a.Button,{icon:(0,r.jsx)(t,{className:"h-4 w-4"}),onClick:()=>h(!m),className:"flex items-center gap-2",children:c}),(0,r.jsx)(a.Button,{onClick:()=>{let r={};e.forEach(e=>{r[e.name]=""}),g(r),d()},children:"Reset Filters"})]}),m&&(0,r.jsx)("div",{className:"grid grid-cols-3 gap-x-6 gap-y-4 mb-6",children:e.map(e=>{let l;return(0,r.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,r.jsx)("label",{className:"text-sm text-gray-600",children:e.label||e.name}),e.isSearchable?(0,r.jsx)(s.Select,{showSearch:!0,className:"w-full",placeholder:`Search ${e.label||e.name}...`,value:p[e.name]||void 0,onChange:r=>_(e.name,r),onOpenChange:r=>{r&&e.isSearchable&&!C[e.name]&&S(e)},onSearch:r=>{w(l=>({...l,[e.name]:r})),e.searchFn&&k(r,e)},filterOption:!1,loading:b[e.name],options:f[e.name]||[],allowClear:!0,notFoundContent:b[e.name]?"Loading...":"No results found"}):e.options?(0,r.jsx)(s.Select,{className:"w-full",placeholder:`Select ${e.label||e.name}...`,value:p[e.name]||void 0,onChange:r=>_(e.name,r),allowClear:!0,children:e.options.map(e=>(0,r.jsx)(s.Select.Option,{value:e.value,children:e.label},e.value))}):e.customComponent?(l=e.customComponent,(0,r.jsx)(l,{value:p[e.name]||void 0,onChange:r=>_(e.name,r??""),placeholder:`Select ${e.label||e.name}...`,allFilters:p})):(0,r.jsx)(o.Input,{className:"w-full",placeholder:`Enter ${e.label||e.name}...`,value:p[e.name]||"",onChange:r=>_(e.name,r.target.value),allowClear:!0})]},e.name)})})]})}],969550)},633627,e=>{"use strict";var r=e.i(602869);let l=(e,r,l,t)=>{for(let a of e){let e=a?.key_alias;e&&"string"==typeof e&&r.add(e.trim());let o=a?.organization_id??a?.org_id;o&&"string"==typeof o&&l.add(o.trim());let s=a?.user_id;if(s&&"string"==typeof s){let e=a?.user?.user_email||s;t.set(s,e)}}},t=async(e,t)=>{if(!e||!t)return{keyAliases:[],organizationIds:[],userIds:[]};try{let a=new Set,o=new Set,s=new Map,n=await (0,r.keyListCall)(e,null,t,null,null,null,1,100,null,null,"user",null),i=n?.keys||[],d=n?.total_pages??1;l(i,a,o,s);let u=Math.min(d,10)-1;if(u>0){let n=Array.from({length:u},(l,a)=>(0,r.keyListCall)(e,null,t,null,null,null,a+2,100,null,null,"user",null));for(let e of(await Promise.allSettled(n)))"fulfilled"===e.status&&l(e.value?.keys||[],a,o,s)}return{keyAliases:Array.from(a).sort(),organizationIds:Array.from(o).sort(),userIds:Array.from(s.entries()).map(([e,r])=>({id:e,email:r}))}}catch(e){return console.error("Error fetching team filter options:",e),{keyAliases:[],organizationIds:[],userIds:[]}}},a=async(e,l)=>{if(!e)return[];try{let t=[],a=1,o=!0;for(;o;){let s=await (0,r.teamListCall)(e,l||null,null);t=[...t,...s],a{if(!e)return[];try{let l=[],t=1,a=!0;for(;a;){let o=await (0,r.organizationListCall)(e);l=[...l,...o],t{"use strict";var r=e.i(290571),l=e.i(271645),t=e.i(829087),a=e.i(480731),o=e.i(444755),s=e.i(673706),n=e.i(95779);let i={xs:{paddingX:"px-1.5",paddingY:"py-1.5"},sm:{paddingX:"px-1.5",paddingY:"py-1.5"},md:{paddingX:"px-2",paddingY:"py-2"},lg:{paddingX:"px-2",paddingY:"py-2"},xl:{paddingX:"px-2.5",paddingY:"py-2.5"}},d={xs:{height:"h-3",width:"w-3"},sm:{height:"h-5",width:"w-5"},md:{height:"h-5",width:"w-5"},lg:{height:"h-7",width:"w-7"},xl:{height:"h-9",width:"w-9"}},u={simple:{rounded:"",border:"",ring:"",shadow:""},light:{rounded:"rounded-tremor-default",border:"",ring:"",shadow:""},shadow:{rounded:"rounded-tremor-default",border:"border",ring:"",shadow:"shadow-tremor-card dark:shadow-dark-tremor-card"},solid:{rounded:"rounded-tremor-default",border:"border-2",ring:"ring-1",shadow:""},outlined:{rounded:"rounded-tremor-default",border:"border",ring:"ring-2",shadow:""}},c=(0,s.makeClassName)("Icon"),m=l.default.forwardRef((e,m)=>{let{icon:h,variant:p="simple",tooltip:g,size:f=a.Sizes.SM,color:x,className:b}=e,y=(0,r.__rest)(e,["icon","variant","tooltip","size","color","className"]),v=((e,r)=>{switch(e){case"simple":return{textColor:r?(0,s.getColorClassNames)(r,n.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:"",borderColor:"",ringColor:""};case"light":return{textColor:r?(0,s.getColorClassNames)(r,n.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:r?(0,o.tremorTwMerge)((0,s.getColorClassNames)(r,n.colorPalette.background).bgColor,"bg-opacity-20"):"bg-tremor-brand-muted dark:bg-dark-tremor-brand-muted",borderColor:"",ringColor:""};case"shadow":return{textColor:r?(0,s.getColorClassNames)(r,n.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:r?(0,o.tremorTwMerge)((0,s.getColorClassNames)(r,n.colorPalette.background).bgColor,"bg-opacity-20"):"bg-tremor-background dark:bg-dark-tremor-background",borderColor:"border-tremor-border dark:border-dark-tremor-border",ringColor:""};case"solid":return{textColor:r?(0,s.getColorClassNames)(r,n.colorPalette.text).textColor:"text-tremor-brand-inverted dark:text-dark-tremor-brand-inverted",bgColor:r?(0,o.tremorTwMerge)((0,s.getColorClassNames)(r,n.colorPalette.background).bgColor,"bg-opacity-20"):"bg-tremor-brand dark:bg-dark-tremor-brand",borderColor:"border-tremor-brand-inverted dark:border-dark-tremor-brand-inverted",ringColor:"ring-tremor-ring dark:ring-dark-tremor-ring"};case"outlined":return{textColor:r?(0,s.getColorClassNames)(r,n.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:r?(0,o.tremorTwMerge)((0,s.getColorClassNames)(r,n.colorPalette.background).bgColor,"bg-opacity-20"):"bg-tremor-background dark:bg-dark-tremor-background",borderColor:r?(0,s.getColorClassNames)(r,n.colorPalette.ring).borderColor:"border-tremor-brand-subtle dark:border-dark-tremor-brand-subtle",ringColor:r?(0,o.tremorTwMerge)((0,s.getColorClassNames)(r,n.colorPalette.ring).ringColor,"ring-opacity-40"):"ring-tremor-brand-muted dark:ring-dark-tremor-brand-muted"}}})(p,x),{tooltipProps:w,getReferenceProps:C}=(0,t.useTooltip)();return l.default.createElement("span",Object.assign({ref:(0,s.mergeRefs)([m,w.refs.setReference]),className:(0,o.tremorTwMerge)(c("root"),"inline-flex shrink-0 items-center justify-center",v.bgColor,v.textColor,v.borderColor,v.ringColor,u[p].rounded,u[p].border,u[p].shadow,u[p].ring,i[f].paddingX,i[f].paddingY,b)},C,y),l.default.createElement(t.default,Object.assign({text:g},w)),l.default.createElement(h,{className:(0,o.tremorTwMerge)(c("icon"),"shrink-0",d[f].height,d[f].width)}))});m.displayName="Icon",e.s(["default",0,m],728889)},752978,e=>{"use strict";var r=e.i(728889);e.s(["Icon",()=>r.default])},591935,e=>{"use strict";var r=e.i(271645);let l=r.forwardRef(function(e,l){return r.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:l},e),r.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z"}))});e.s(["PencilAltIcon",0,l],591935)},434626,e=>{"use strict";var r=e.i(271645);let l=r.forwardRef(function(e,l){return r.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:l},e),r.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"}))});e.s(["ExternalLinkIcon",0,l],434626)},122577,e=>{"use strict";var r=e.i(271645);let l=r.forwardRef(function(e,l){return r.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:l},e),r.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M14.752 11.168l-3.197-2.132A1 1 0 0010 9.87v4.263a1 1 0 001.555.832l3.197-2.132a1 1 0 000-1.664z"}),r.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M21 12a9 9 0 11-18 0 9 9 0 0118 0z"}))});e.s(["PlayIcon",0,l],122577)},551332,e=>{"use strict";var r=e.i(271645);let l=r.forwardRef(function(e,l){return r.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:l},e),r.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M8 5H6a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2v-1M8 5a2 2 0 002 2h2a2 2 0 002-2M8 5a2 2 0 012-2h2a2 2 0 012 2m0 0h2a2 2 0 012 2v3m2 4H10m0 0l3-3m-3 3l3 3"}))});e.s(["ClipboardCopyIcon",0,l],551332)},902555,e=>{"use strict";var r=e.i(843476),l=e.i(591935),t=e.i(122577),a=e.i(278587),o=e.i(68155),s=e.i(360820),n=e.i(871943),i=e.i(434626),d=e.i(551332),u=e.i(592968),c=e.i(115504),m=e.i(752978);function h({icon:e,onClick:l,className:t,disabled:a,dataTestId:o}){return a?(0,r.jsx)(m.Icon,{icon:e,size:"sm",className:"opacity-50 cursor-not-allowed","data-testid":o}):(0,r.jsx)(m.Icon,{icon:e,size:"sm",onClick:l,className:(0,c.cx)("cursor-pointer",t),"data-testid":o})}let p={Edit:{icon:l.PencilAltIcon,className:"hover:text-blue-600"},Delete:{icon:o.TrashIcon,className:"hover:text-red-600"},Test:{icon:t.PlayIcon,className:"hover:text-blue-600"},Regenerate:{icon:a.RefreshIcon,className:"hover:text-green-600"},Up:{icon:s.ChevronUpIcon,className:"hover:text-blue-600"},Down:{icon:n.ChevronDownIcon,className:"hover:text-blue-600"},Open:{icon:i.ExternalLinkIcon,className:"hover:text-green-600"},Copy:{icon:d.ClipboardCopyIcon,className:"hover:text-blue-600"}};e.s(["default",0,function({onClick:e,tooltipText:l,disabled:t=!1,disabledTooltipText:a,dataTestId:o,variant:s}){let{icon:n,className:i}=p[s];return(0,r.jsx)(u.Tooltip,{title:t?a:l,children:(0,r.jsx)("span",{children:(0,r.jsx)(h,{icon:n,onClick:e,className:i,disabled:t,dataTestId:o})})})}],902555)},625901,e=>{"use strict";var r=e.i(266027),l=e.i(621482),t=e.i(243652),a=e.i(602869),o=e.i(135214);let s=(0,t.createQueryKeys)("models"),n=(0,t.createQueryKeys)("modelHub"),i=(0,t.createQueryKeys)("allProxyModels");(0,t.createQueryKeys)("selectedTeamModels");let d=(0,t.createQueryKeys)("infiniteModels"),u=(0,t.createQueryKeys)("userModels");e.s(["useAllProxyModels",0,()=>{let{accessToken:e,userId:l,userRole:t}=(0,o.default)();return(0,r.useQuery)({queryKey:i.list({}),queryFn:async()=>await (0,a.modelAvailableCall)(e,l,t,!0,null,!0,!1,"expand"),enabled:!!(e&&l&&t)})},"useInfiniteModelInfo",0,(e=50,r)=>{let{accessToken:t,userId:s,userRole:n}=(0,o.default)();return(0,l.useInfiniteQuery)({queryKey:d.list({filters:{...s&&{userId:s},...n&&{userRole:n},size:e,...r&&{search:r}}}),queryFn:async({pageParam:l})=>await (0,a.modelInfoCall)(t,s,n,l,e,r),initialPageParam:1,getNextPageParam:e=>{if(e.current_page{let{accessToken:e}=(0,o.default)();return(0,r.useQuery)({queryKey:n.list({}),queryFn:async()=>await (0,a.modelHubCall)(e),enabled:!!e})},"useModelsInfo",0,(e=1,l=50,t,n,i,d,u)=>{let{accessToken:c,userId:m,userRole:h}=(0,o.default)();return(0,r.useQuery)({queryKey:s.list({filters:{...m&&{userId:m},...h&&{userRole:h},page:e,size:l,...t&&{search:t},...n&&{modelId:n},...i&&{teamId:i},...d&&{sortBy:d},...u&&{sortOrder:u}}}),queryFn:async()=>await (0,a.modelInfoCall)(c,m,h,e,l,t,n,i,d,u),enabled:!!(c&&m&&h)})},"useUserModels",0,()=>{let{accessToken:e,userId:l,userRole:t}=(0,o.default)();return(0,r.useQuery)({queryKey:u.list({}),queryFn:async()=>(await (0,a.modelAvailableCall)(e,l,t)).data.map(e=>e.id),enabled:!!(e&&l&&t)})}])},738014,e=>{"use strict";var r=e.i(135214),l=e.i(602869),t=e.i(266027);let a=(0,e.i(243652).createQueryKeys)("users");e.s(["useCurrentUser",0,()=>{let{accessToken:e,userId:o}=(0,r.default)();return(0,t.useQuery)({queryKey:a.detail(o),queryFn:async()=>await (0,l.userGetInfoV2)(e),enabled:!!(e&&o)})}])},162386,e=>{"use strict";var r=e.i(843476),l=e.i(625901),t=e.i(109799),a=e.i(785242),o=e.i(738014),s=e.i(199133),n=e.i(981339),i=e.i(592968);let d={label:"All Proxy Models",value:"all-proxy-models"},u={label:"No Default Models",value:"no-default-models"},c=[d,u],m={user:({allProxyModels:e,userModels:r,options:l})=>r&&l?.includeUserModels?r:[],team:({allProxyModels:e,selectedOrganization:r,userModels:l})=>r?r.models.includes(d.value)||0===r.models.length?e:e.filter(e=>r.models.includes(e)):e??[],organization:({allProxyModels:e})=>e,global:({allProxyModels:e})=>e};e.s(["ModelSelect",0,e=>{let{teamID:h,organizationID:p,options:g,context:f,dataTestId:x,value:b=[],onChange:y,style:v}=e,{includeUserModels:w,showAllTeamModelsOption:C,showAllProxyModelsOverride:j,includeSpecialOptions:k}=g||{},{data:S,isLoading:_}=(0,l.useAllProxyModels)(),{data:I,isLoading:N}=(0,a.useTeam)(h),{data:M,isLoading:E}=(0,t.useOrganization)(p),{data:A,isLoading:O}=(0,o.useCurrentUser)(),F=e=>c.some(r=>r.value===e),T=b.some(F),P=M?.models.includes(d.value)||M?.models.length===0;if(_||N||E||O)return(0,r.jsx)(n.Skeleton.Input,{active:!0,block:!0});let{wildcard:L,regular:R}=(e=>{let r=[],l=[];for(let t of e)t.endsWith("/*")?r.push(t):l.push(t);return{wildcard:r,regular:l}})(((e,r,l)=>{let t=Array.from(new Map(e.map(e=>[e.id,e])).values()).map(e=>e.id);if(r.options?.showAllProxyModelsOverride)return t;let a=m[r.context];return a?a({allProxyModels:t,...l,options:r.options}):[]})(S?.data??[],e,{selectedTeam:I,selectedOrganization:M,userModels:A?.models}));return(0,r.jsx)(s.Select,{"data-testid":x,value:b,onChange:e=>{let r=e.filter(F);y(r.length>0?[r[r.length-1]]:e)},style:v,options:[...k?[{label:(0,r.jsx)("span",{children:"Special Options"}),title:"Special Options",options:[...j||P&&k||"global"===f?[{label:(0,r.jsx)("span",{children:"All Proxy Models"}),value:d.value,disabled:b.length>0&&b.some(e=>F(e)&&e!==d.value),key:d.value}]:[],{label:(0,r.jsx)("span",{children:"No Default Models"}),value:u.value,disabled:b.length>0&&b.some(e=>F(e)&&e!==u.value),key:u.value}]}]:[],...L.length>0?[{label:(0,r.jsx)("span",{children:"Wildcard Options"}),title:"Wildcard Options",options:L.map(e=>{let l=e.replace("/*",""),t=l.charAt(0).toUpperCase()+l.slice(1);return{label:(0,r.jsx)("span",{children:`All ${t} models`}),value:e,disabled:T}})}]:[],{label:(0,r.jsx)("span",{children:"Models"}),title:"Models",options:R.map(e=>({label:(0,r.jsx)("span",{children:e}),value:e,disabled:T}))}],mode:"multiple",placeholder:"Select Models",allowClear:!0,maxTagCount:"responsive",maxTagPlaceholder:e=>(0,r.jsx)(i.Tooltip,{styles:{root:{pointerEvents:"none"}},title:e.map(({value:e})=>e).join(", "),children:(0,r.jsxs)("span",{children:["+",e.length," more"]})})})}],162386)},294612,e=>{"use strict";var r=e.i(843476),l=e.i(100486),t=e.i(827252),a=e.i(213205),o=e.i(771674),s=e.i(464571),n=e.i(770914),i=e.i(291542),d=e.i(262218),u=e.i(592968),c=e.i(898586),m=e.i(902555);let{Text:h}=c.Typography;e.s(["default",0,function({members:e,canEdit:c,onEdit:p,onDelete:g,onAddMember:f,roleColumnTitle:x="Role",roleTooltip:b,extraColumns:y=[],showDeleteForMember:v,emptyText:w}){let C=[{title:"User Email",dataIndex:"user_email",key:"user_email",render:e=>(0,r.jsx)(h,{children:e||"-"})},{title:"User ID",dataIndex:"user_id",key:"user_id",render:e=>"default_user_id"===e?(0,r.jsx)(d.Tag,{color:"blue",children:"Default Proxy Admin"}):(0,r.jsx)(h,{children:e||"-"})},{title:b?(0,r.jsxs)(n.Space,{direction:"horizontal",children:[x,(0,r.jsx)(u.Tooltip,{title:b,children:(0,r.jsx)(t.InfoCircleOutlined,{})})]}):x,dataIndex:"role",key:"role",render:e=>(0,r.jsxs)(n.Space,{children:[e?.toLowerCase()==="admin"||e?.toLowerCase()==="org_admin"?(0,r.jsx)(l.CrownOutlined,{}):(0,r.jsx)(o.UserOutlined,{}),(0,r.jsx)(h,{style:{textTransform:"capitalize"},children:e||"-"})]})},...y,{title:"Actions",key:"actions",fixed:"right",width:120,render:(e,l)=>c?(0,r.jsxs)(n.Space,{children:[(0,r.jsx)(m.default,{variant:"Edit",tooltipText:"Edit member",dataTestId:"edit-member",onClick:()=>p(l)}),(!v||v(l))&&(0,r.jsx)(m.default,{variant:"Delete",tooltipText:"Delete member",dataTestId:"delete-member",onClick:()=>g(l)})]}):null}];return(0,r.jsxs)(n.Space,{direction:"vertical",style:{width:"100%"},children:[(0,r.jsxs)("span",{className:"inline-flex text-sm text-gray-700",children:[e.length," Member",1!==e.length?"s":""]}),(0,r.jsx)(i.Table,{columns:C,dataSource:e,rowKey:e=>e.user_id??e.user_email??JSON.stringify(e),pagination:!1,size:"small",scroll:{x:"max-content"},locale:w?{emptyText:w}:void 0}),f&&c&&(0,r.jsx)(s.Button,{icon:(0,r.jsx)(a.UserAddOutlined,{}),type:"primary",onClick:f,children:"Add Member"})]})}])},907308,276173,e=>{"use strict";var r=e.i(843476),l=e.i(271645),t=e.i(212931),a=e.i(808613),o=e.i(464571),s=e.i(199133),n=e.i(592968),i=e.i(213205),d=e.i(374009),u=e.i(602869);e.s(["default",0,({isVisible:e,onCancel:c,onSubmit:m,accessToken:h,title:p="Add Team Member",roles:g=[{label:"admin",value:"admin",description:"Admin role. Can create team keys, add members, and manage settings."},{label:"user",value:"user",description:"User role. Can view team info, but not manage it."}],defaultRole:f="user",teamId:x})=>{let[b]=a.Form.useForm(),[y,v]=(0,l.useState)([]),[w,C]=(0,l.useState)(!1),[j,k]=(0,l.useState)("user_email"),[S,_]=(0,l.useState)(!1),I=async(e,r)=>{if(!e)return void v([]);C(!0);try{let l=new URLSearchParams;if(l.append(r,e),x&&l.append("team_id",x),null==h)return;let t=(await (0,u.userFilterUICall)(h,l)).map(e=>({label:"user_email"===r?`${e.user_email}`:`${e.user_id}`,value:"user_email"===r?e.user_email:e.user_id,user:e}));v(t)}catch(e){console.error("Error fetching users:",e)}finally{C(!1)}},N=(0,l.useCallback)((0,d.default)((e,r)=>I(e,r),300),[]),M=(e,r)=>{k(r),N(e,r)},E=(e,r)=>{let l=r.user;b.setFieldsValue({user_email:l.user_email,user_id:l.user_id,role:b.getFieldValue("role")})},A=async e=>{_(!0);try{await m(e)}finally{_(!1)}};return(0,r.jsx)(t.Modal,{title:p,open:e,onCancel:()=>{b.resetFields(),v([]),c()},footer:null,width:800,maskClosable:!S,children:(0,r.jsxs)(a.Form,{form:b,onFinish:A,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",initialValues:{role:f},children:[(0,r.jsx)(a.Form.Item,{label:"Email",name:"user_email",className:"mb-4",children:(0,r.jsx)(s.Select,{showSearch:!0,className:"w-full",placeholder:"Search by email",filterOption:!1,onSearch:e=>M(e,"user_email"),onSelect:(e,r)=>E(e,r),options:"user_email"===j?y:[],loading:w,allowClear:!0,"data-testid":"member-email-search"})}),(0,r.jsx)("div",{className:"text-center mb-4",children:"OR"}),(0,r.jsx)(a.Form.Item,{label:"User ID",name:"user_id",className:"mb-4",children:(0,r.jsx)(s.Select,{showSearch:!0,className:"w-full",placeholder:"Search by user ID",filterOption:!1,onSearch:e=>M(e,"user_id"),onSelect:(e,r)=>E(e,r),options:"user_id"===j?y:[],loading:w,allowClear:!0})}),(0,r.jsx)(a.Form.Item,{label:"Member Role",name:"role",className:"mb-4",children:(0,r.jsx)(s.Select,{defaultValue:f,children:g.map(e=>(0,r.jsx)(s.Select.Option,{value:e.value,children:(0,r.jsxs)(n.Tooltip,{title:e.description,children:[(0,r.jsx)("span",{className:"font-medium",children:e.label}),(0,r.jsxs)("span",{className:"ml-2 text-gray-500 text-sm",children:["- ",e.description]})]})},e.value))})}),(0,r.jsx)("div",{className:"text-right mt-4",children:(0,r.jsx)(o.Button,{type:"primary",htmlType:"submit",icon:(0,r.jsx)(i.UserAddOutlined,{}),loading:S,children:S?"Adding...":"Add Member"})})]})})}],907308);var c=e.i(599724),m=e.i(779241),h=e.i(435451),p=e.i(860585);e.s(["default",0,({visible:e,onCancel:n,onSubmit:i,initialData:d,mode:u,config:g})=>{let f,[x]=a.Form.useForm(),[b,y]=(0,l.useState)(!1);console.log("Initial Data:",d),(0,l.useEffect)(()=>{if(e)if("edit"===u&&d){let e={...d,role:d.role||g.defaultRole,max_budget_in_team:d.max_budget_in_team||null,tpm_limit:d.tpm_limit||null,rpm_limit:d.rpm_limit||null,budget_duration:d.budget_duration||null,allowed_models:d.allowed_models||[]};console.log("Setting form values:",e),x.setFieldsValue(e)}else x.resetFields(),x.setFieldsValue({role:g.defaultRole||g.roleOptions[0]?.value})},[e,d,u,x,g.defaultRole,g.roleOptions]);let v=async e=>{try{y(!0);let r=Object.entries(e).reduce((e,[r,l])=>{if("string"==typeof l){let t=l.trim();return""===t&&("max_budget_in_team"===r||"tpm_limit"===r||"rpm_limit"===r)?{...e,[r]:null}:{...e,[r]:t}}return{...e,[r]:l}},{});console.log("Submitting form data:",r),await Promise.resolve(i(r)),x.resetFields()}catch(e){console.error("Form submission error:",e)}finally{y(!1)}};return(0,r.jsx)(t.Modal,{title:g.title||("add"===u?"Add Member":"Edit Member"),open:e,width:1e3,footer:null,onCancel:n,children:(0,r.jsxs)(a.Form,{form:x,onFinish:v,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[g.showEmail&&(0,r.jsx)(a.Form.Item,{label:"Email",name:"user_email",className:"mb-4",rules:[{type:"email",message:"Please enter a valid email!"}],children:(0,r.jsx)(m.TextInput,{placeholder:"user@example.com"})}),g.showEmail&&g.showUserId&&(0,r.jsx)("div",{className:"text-center mb-4",children:(0,r.jsx)(c.Text,{children:"OR"})}),g.showUserId&&(0,r.jsx)(a.Form.Item,{label:"User ID",name:"user_id",className:"mb-4",children:(0,r.jsx)(m.TextInput,{placeholder:"user_123"})}),(0,r.jsx)(a.Form.Item,{label:(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{children:"Role"}),"edit"===u&&d&&(0,r.jsxs)("span",{className:"text-gray-500 text-sm",children:["(Current: ",(f=d.role,g.roleOptions.find(e=>e.value===f)?.label||f),")"]})]}),name:"role",className:"mb-4",rules:[{required:!0,message:"Please select a role!"}],children:(0,r.jsx)(s.Select,{children:"edit"===u&&d?[...g.roleOptions.filter(e=>e.value===d.role),...g.roleOptions.filter(e=>e.value!==d.role)].map(e=>(0,r.jsx)(s.Select.Option,{value:e.value,children:e.label},e.value)):g.roleOptions.map(e=>(0,r.jsx)(s.Select.Option,{value:e.value,children:e.label},e.value))})}),g.additionalFields?.map(e=>(0,r.jsx)(a.Form.Item,{label:e.label,name:e.name,className:"mb-4",rules:e.rules,children:(e=>{switch(e.type){case"input":return(0,r.jsx)(m.TextInput,{placeholder:e.placeholder});case"numerical":return(0,r.jsx)(h.default,{step:e.step||1,min:e.min||0,style:{width:"100%"},placeholder:e.placeholder||"Enter a numerical value"});case"select":return(0,r.jsx)(s.Select,{children:e.options?.map(e=>(0,r.jsx)(s.Select.Option,{value:e.value,children:e.label},e.value))});case"multi-select":return(0,r.jsx)(s.Select,{mode:"multiple",placeholder:e.placeholder||"Select options",options:e.options,allowClear:!0});case"budget-duration":return(0,r.jsx)(p.default,{});default:return null}})(e)},e.name)),(0,r.jsxs)("div",{className:"text-right mt-6",children:[(0,r.jsx)(o.Button,{onClick:n,className:"mr-2",disabled:b,children:"Cancel"}),(0,r.jsx)(o.Button,{type:"default",htmlType:"submit",loading:b,children:"add"===u?b?"Adding...":"Add Member":b?"Saving...":"Save Changes"})]})]})})}],276173)},871135,e=>{"use strict";var r=e.i(843476),l=e.i(502501),t=e.i(785242),a=e.i(936578),o=e.i(602869),s=e.i(846835),n=e.i(693569),i=e.i(557951),d=e.i(321836),u=e.i(571353),c=e.i(618566),m=e.i(271645);function h(){let{authLoading:e,token:h,userID:p,userRole:g,userEmail:f,accessToken:x,premiumUser:b,setUserRole:y,setUserEmail:v}=(0,i.useAuth)(),[w,C]=(0,m.useState)(null),[j,k]=(0,m.useState)([]),[S,_]=(0,m.useState)([]),I=(0,c.useRouter)(),N=(0,c.useSearchParams)(),[M,E]=(0,m.useState)(!1),A=N.get("invitation_id"),O=N.get("page"),F=O||"api-keys",T=(0,m.useRef)(!1),P=!1===e&&null===h&&null===A;(0,m.useEffect)(()=>{if(P){(0,d.storeReturnUrl)();let e=(o.proxyBaseUrl||"")+"/ui/login",r=(0,d.buildLoginUrlWithReturn)(e);window.location.replace(r)}},[P]);let L=null!==O&&O in u.MIGRATED_PAGES;return((0,m.useEffect)(()=>{!e&&L&&I.replace((0,u.migratedHref)(u.MIGRATED_PAGES[F]))},[e,L,F,I]),(0,m.useEffect)(()=>{if(e||!h||T.current)return;T.current=!0;let r=(0,d.consumeReturnUrl)();if(r&&(0,d.isValidReturnUrl)(r)){let e=new URL(r,window.location.origin);if(e.origin!==window.location.origin)return;let l=window.location.href;(0,d.normalizeUrlForCompare)(r)!==(0,d.normalizeUrlForCompare)(l)&&window.location.replace(e.href)}},[e,h]),(0,m.useEffect)(()=>{h||(T.current=!1)},[h]),(0,m.useEffect)(()=>{x&&p&&g&&(0,t.teamListCall)(x,1,100,{userID:"Admin"!==g&&"Admin Viewer"!==g?p:null}).then(e=>C(e.teams??[])).catch(console.error),x&&(0,s.fetchOrganizations)(x,_)},[x,p,g]),e||P||L)?(0,r.jsx)(a.default,{}):(0,r.jsx)(r.Fragment,{children:A?(0,r.jsx)(n.default,{userID:p,userRole:g,premiumUser:b,teams:w,keys:j,setUserRole:y,userEmail:f,setUserEmail:v,setTeams:C,setKeys:k,organizations:S,addKey:e=>{k(r=>r?[...r,e]:[e]),E(()=>!M)},createClicked:M}):(0,r.jsx)(l.default,{})})}e.s(["default",0,function(){return(0,r.jsx)(m.Suspense,{fallback:(0,r.jsx)(a.default,{}),children:(0,r.jsx)(h,{})})}])}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0~0su3wi_7f6-.js b/litellm/proxy/_experimental/out/_next/static/chunks/0~0su3wi_7f6-.js new file mode 100644 index 00000000000..3823dba20dc --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0~0su3wi_7f6-.js @@ -0,0 +1 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,728889,e=>{"use strict";var t=e.i(290571),r=e.i(271645),a=e.i(829087),l=e.i(480731),n=e.i(444755),s=e.i(673706),o=e.i(95779);let i={xs:{paddingX:"px-1.5",paddingY:"py-1.5"},sm:{paddingX:"px-1.5",paddingY:"py-1.5"},md:{paddingX:"px-2",paddingY:"py-2"},lg:{paddingX:"px-2",paddingY:"py-2"},xl:{paddingX:"px-2.5",paddingY:"py-2.5"}},d={xs:{height:"h-3",width:"w-3"},sm:{height:"h-5",width:"w-5"},md:{height:"h-5",width:"w-5"},lg:{height:"h-7",width:"w-7"},xl:{height:"h-9",width:"w-9"}},c={simple:{rounded:"",border:"",ring:"",shadow:""},light:{rounded:"rounded-tremor-default",border:"",ring:"",shadow:""},shadow:{rounded:"rounded-tremor-default",border:"border",ring:"",shadow:"shadow-tremor-card dark:shadow-dark-tremor-card"},solid:{rounded:"rounded-tremor-default",border:"border-2",ring:"ring-1",shadow:""},outlined:{rounded:"rounded-tremor-default",border:"border",ring:"ring-2",shadow:""}},u=(0,s.makeClassName)("Icon"),m=r.default.forwardRef((e,m)=>{let{icon:h,variant:g="simple",tooltip:p,size:x=l.Sizes.SM,color:f,className:b}=e,C=(0,t.__rest)(e,["icon","variant","tooltip","size","color","className"]),v=((e,t)=>{switch(e){case"simple":return{textColor:t?(0,s.getColorClassNames)(t,o.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:"",borderColor:"",ringColor:""};case"light":return{textColor:t?(0,s.getColorClassNames)(t,o.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:t?(0,n.tremorTwMerge)((0,s.getColorClassNames)(t,o.colorPalette.background).bgColor,"bg-opacity-20"):"bg-tremor-brand-muted dark:bg-dark-tremor-brand-muted",borderColor:"",ringColor:""};case"shadow":return{textColor:t?(0,s.getColorClassNames)(t,o.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:t?(0,n.tremorTwMerge)((0,s.getColorClassNames)(t,o.colorPalette.background).bgColor,"bg-opacity-20"):"bg-tremor-background dark:bg-dark-tremor-background",borderColor:"border-tremor-border dark:border-dark-tremor-border",ringColor:""};case"solid":return{textColor:t?(0,s.getColorClassNames)(t,o.colorPalette.text).textColor:"text-tremor-brand-inverted dark:text-dark-tremor-brand-inverted",bgColor:t?(0,n.tremorTwMerge)((0,s.getColorClassNames)(t,o.colorPalette.background).bgColor,"bg-opacity-20"):"bg-tremor-brand dark:bg-dark-tremor-brand",borderColor:"border-tremor-brand-inverted dark:border-dark-tremor-brand-inverted",ringColor:"ring-tremor-ring dark:ring-dark-tremor-ring"};case"outlined":return{textColor:t?(0,s.getColorClassNames)(t,o.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:t?(0,n.tremorTwMerge)((0,s.getColorClassNames)(t,o.colorPalette.background).bgColor,"bg-opacity-20"):"bg-tremor-background dark:bg-dark-tremor-background",borderColor:t?(0,s.getColorClassNames)(t,o.colorPalette.ring).borderColor:"border-tremor-brand-subtle dark:border-dark-tremor-brand-subtle",ringColor:t?(0,n.tremorTwMerge)((0,s.getColorClassNames)(t,o.colorPalette.ring).ringColor,"ring-opacity-40"):"ring-tremor-brand-muted dark:ring-dark-tremor-brand-muted"}}})(g,f),{tooltipProps:w,getReferenceProps:j}=(0,a.useTooltip)();return r.default.createElement("span",Object.assign({ref:(0,s.mergeRefs)([m,w.refs.setReference]),className:(0,n.tremorTwMerge)(u("root"),"inline-flex shrink-0 items-center justify-center",v.bgColor,v.textColor,v.borderColor,v.ringColor,c[g].rounded,c[g].border,c[g].shadow,c[g].ring,i[x].paddingX,i[x].paddingY,b)},j,C),r.default.createElement(a.default,Object.assign({text:p},w)),r.default.createElement(h,{className:(0,n.tremorTwMerge)(u("icon"),"shrink-0",d[x].height,d[x].width)}))});m.displayName="Icon",e.s(["default",0,m],728889)},278587,e=>{"use strict";var t=e.i(271645);let r=t.forwardRef(function(e,r){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:r},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"}))});e.s(["RefreshIcon",0,r],278587)},149121,e=>{"use strict";var t=e.i(843476),r=e.i(271645),a=e.i(152990),l=e.i(682830),n=e.i(269200),s=e.i(427612),o=e.i(64848),i=e.i(942232),d=e.i(496020),c=e.i(977572);e.s(["DataTable",0,function({data:e=[],columns:u,onRowClick:m,renderSubComponent:h,renderChildRows:g,getRowCanExpand:p,isLoading:x=!1,loadingMessage:f="🚅 Loading logs...",noDataMessage:b="No logs found",enableSorting:C=!1}){let v=!!(h||g)&&!!p,[w,j]=(0,r.useState)([]),y=(0,a.useReactTable)({data:e,columns:u,...C&&{state:{sorting:w},onSortingChange:j,enableSortingRemoval:!1},...v&&{getRowCanExpand:p},getRowId:(e,t)=>e?.request_id??String(t),getCoreRowModel:(0,l.getCoreRowModel)(),...C&&{getSortedRowModel:(0,l.getSortedRowModel)()},...v&&{getExpandedRowModel:(0,l.getExpandedRowModel)()}});return(0,t.jsx)("div",{className:"rounded-lg custom-border overflow-x-auto w-full max-w-full box-border",children:(0,t.jsxs)(n.Table,{className:"[&_td]:py-0.5 [&_th]:py-1 table-fixed w-full box-border",style:{minWidth:"400px"},children:[(0,t.jsx)(s.TableHead,{children:y.getHeaderGroups().map(e=>(0,t.jsx)(d.TableRow,{children:e.headers.map(e=>{let r=C&&e.column.getCanSort(),l=e.column.getIsSorted();return(0,t.jsx)(o.TableHeaderCell,{className:`py-1 h-8 ${r?"cursor-pointer select-none hover:bg-gray-50":""}`,onClick:r?e.column.getToggleSortingHandler():void 0,children:e.isPlaceholder?null:(0,t.jsxs)("div",{className:"flex items-center gap-1",children:[(0,a.flexRender)(e.column.columnDef.header,e.getContext()),r&&(0,t.jsx)("span",{className:"text-gray-400",children:"asc"===l?"↑":"desc"===l?"↓":"⇅"})]})},e.id)})},e.id))}),(0,t.jsx)(i.TableBody,{children:x?(0,t.jsx)(d.TableRow,{children:(0,t.jsx)(c.TableCell,{colSpan:u.length,className:"h-8 text-center",children:(0,t.jsx)("div",{className:"text-center text-gray-500",children:(0,t.jsx)("p",{children:f})})})}):y.getRowModel().rows.length>0?y.getRowModel().rows.map(e=>(0,t.jsxs)(r.Fragment,{children:[(0,t.jsx)(d.TableRow,{className:`h-8 ${m?"cursor-pointer hover:bg-gray-50":""}`,onClick:()=>m?.(e.original),children:e.getVisibleCells().map(e=>(0,t.jsx)(c.TableCell,{className:"py-0.5 max-h-8 overflow-hidden text-ellipsis whitespace-nowrap",children:(0,a.flexRender)(e.column.columnDef.cell,e.getContext())},e.id))}),v&&e.getIsExpanded()&&g&&g({row:e}),v&&e.getIsExpanded()&&h&&!g&&(0,t.jsx)(d.TableRow,{children:(0,t.jsx)(c.TableCell,{colSpan:e.getVisibleCells().length,className:"p-0",children:(0,t.jsx)("div",{className:"w-full max-w-full overflow-hidden box-border",children:h({row:e})})})})]},e.id)):(0,t.jsx)(d.TableRow,{children:(0,t.jsx)(c.TableCell,{colSpan:u.length,className:"h-8 text-center",children:(0,t.jsx)("div",{className:"text-center text-gray-500",children:(0,t.jsx)("p",{children:b})})})})})]})})}])},888288,e=>{"use strict";var t=e.i(271645);e.s(["default",0,(e,r)=>{let a=void 0!==r,[l,n]=(0,t.useState)(e);return[a?r:l,e=>{a||n(e)}]}])},37091,e=>{"use strict";var t=e.i(290571),r=e.i(95779),a=e.i(444755),l=e.i(673706),n=e.i(271645);let s=n.default.forwardRef((e,s)=>{let{color:o,children:i,className:d}=e,c=(0,t.__rest)(e,["color","children","className"]);return n.default.createElement("p",Object.assign({ref:s,className:(0,a.tremorTwMerge)(o?(0,l.getColorClassNames)(o,r.colorPalette.lightText).textColor:"text-tremor-content-emphasis dark:text-dark-tremor-content-emphasis",d)},c),i)});s.displayName="Subtitle",e.s(["Subtitle",0,s],37091)},446428,854056,e=>{"use strict";let t;var r=e.i(290571),a=e.i(271645);e.s(["default",0,e=>{var t=(0,r.__rest)(e,[]);return a.default.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"},t),a.default.createElement("path",{d:"M12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22ZM12 10.5858L9.17157 7.75736L7.75736 9.17157L10.5858 12L7.75736 14.8284L9.17157 16.2426L12 13.4142L14.8284 16.2426L16.2426 14.8284L13.4142 12L16.2426 9.17157L14.8284 7.75736L12 10.5858Z"}))}],446428);var l=e.i(746725),n=e.i(914189),s=e.i(553521),o=e.i(835696),i=e.i(941444),d=e.i(178677),c=e.i(294316),u=e.i(83733),m=e.i(233137),h=e.i(732607),g=e.i(397701),p=e.i(700020);function x(e){var t;return!!(e.enter||e.enterFrom||e.enterTo||e.leave||e.leaveFrom||e.leaveTo)||(null!=(t=e.as)?t:j)!==a.Fragment||1===a.default.Children.count(e.children)}let f=(0,a.createContext)(null);f.displayName="TransitionContext";var b=((t=b||{}).Visible="visible",t.Hidden="hidden",t);let C=(0,a.createContext)(null);function v(e){return"children"in e?v(e.children):e.current.filter(({el:e})=>null!==e.current).filter(({state:e})=>"visible"===e).length>0}function w(e,t){let r=(0,i.useLatestValue)(e),o=(0,a.useRef)([]),d=(0,s.useIsMounted)(),c=(0,l.useDisposables)(),u=(0,n.useEvent)((e,t=p.RenderStrategy.Hidden)=>{let a=o.current.findIndex(({el:t})=>t===e);-1!==a&&((0,g.match)(t,{[p.RenderStrategy.Unmount](){o.current.splice(a,1)},[p.RenderStrategy.Hidden](){o.current[a].state="hidden"}}),c.microTask(()=>{var e;!v(o)&&d.current&&(null==(e=r.current)||e.call(r))}))}),m=(0,n.useEvent)(e=>{let t=o.current.find(({el:t})=>t===e);return t?"visible"!==t.state&&(t.state="visible"):o.current.push({el:e,state:"visible"}),()=>u(e,p.RenderStrategy.Unmount)}),h=(0,a.useRef)([]),x=(0,a.useRef)(Promise.resolve()),f=(0,a.useRef)({enter:[],leave:[]}),b=(0,n.useEvent)((e,r,a)=>{h.current.splice(0),t&&(t.chains.current[r]=t.chains.current[r].filter(([t])=>t!==e)),null==t||t.chains.current[r].push([e,new Promise(e=>{h.current.push(e)})]),null==t||t.chains.current[r].push([e,new Promise(e=>{Promise.all(f.current[r].map(([e,t])=>t)).then(()=>e())})]),"enter"===r?x.current=x.current.then(()=>null==t?void 0:t.wait.current).then(()=>a(r)):a(r)}),C=(0,n.useEvent)((e,t,r)=>{Promise.all(f.current[t].splice(0).map(([e,t])=>t)).then(()=>{var e;null==(e=h.current.shift())||e()}).then(()=>r(t))});return(0,a.useMemo)(()=>({children:o,register:m,unregister:u,onStart:b,onStop:C,wait:x,chains:f}),[m,u,o,b,C,f,x])}C.displayName="NestingContext";let j=a.Fragment,y=p.RenderFeatures.RenderStrategy,T=(0,p.forwardRefWithAs)(function(e,t){let{show:r,appear:l=!1,unmount:s=!0,...i}=e,u=(0,a.useRef)(null),h=x(e),g=(0,c.useSyncRefs)(...h?[u,t]:null===t?[]:[t]);(0,d.useServerHandoffComplete)();let b=(0,m.useOpenClosed)();if(void 0===r&&null!==b&&(r=(b&m.State.Open)===m.State.Open),void 0===r)throw Error("A is used but it is missing a `show={true | false}` prop.");let[j,T]=(0,a.useState)(r?"visible":"hidden"),S=w(()=>{r||T("hidden")}),[N,E]=(0,a.useState)(!0),M=(0,a.useRef)([r]);(0,o.useIsoMorphicEffect)(()=>{!1!==N&&M.current[M.current.length-1]!==r&&(M.current.push(r),E(!1))},[M,r]);let _=(0,a.useMemo)(()=>({show:r,appear:l,initial:N}),[r,l,N]);(0,o.useIsoMorphicEffect)(()=>{r?T("visible"):v(S)||null===u.current||T("hidden")},[r,S]);let R={unmount:s},I=(0,n.useEvent)(()=>{var t;N&&E(!1),null==(t=e.beforeEnter)||t.call(e)}),P=(0,n.useEvent)(()=>{var t;N&&E(!1),null==(t=e.beforeLeave)||t.call(e)}),D=(0,p.useRender)();return a.default.createElement(C.Provider,{value:S},a.default.createElement(f.Provider,{value:_},D({ourProps:{...R,as:a.Fragment,children:a.default.createElement(k,{ref:g,...R,...i,beforeEnter:I,beforeLeave:P})},theirProps:{},defaultTag:a.Fragment,features:y,visible:"visible"===j,name:"Transition"})))}),k=(0,p.forwardRefWithAs)(function(e,t){var r,l;let{transition:s=!0,beforeEnter:i,afterEnter:b,beforeLeave:T,afterLeave:k,enter:S,enterFrom:N,enterTo:E,entered:M,leave:_,leaveFrom:R,leaveTo:I,...P}=e,[D,L]=(0,a.useState)(null),F=(0,a.useRef)(null),A=x(e),O=(0,c.useSyncRefs)(...A?[F,t,L]:null===t?[]:[t]),V=null==(r=P.unmount)||r?p.RenderStrategy.Unmount:p.RenderStrategy.Hidden,{show:B,appear:W,initial:H}=function(){let e=(0,a.useContext)(f);if(null===e)throw Error("A is used but it is missing a parent or .");return e}(),[U,Y]=(0,a.useState)(B?"visible":"hidden"),G=function(){let e=(0,a.useContext)(C);if(null===e)throw Error("A is used but it is missing a parent or .");return e}(),{register:$,unregister:q}=G;(0,o.useIsoMorphicEffect)(()=>$(F),[$,F]),(0,o.useIsoMorphicEffect)(()=>{if(V===p.RenderStrategy.Hidden&&F.current)return B&&"visible"!==U?void Y("visible"):(0,g.match)(U,{hidden:()=>q(F),visible:()=>$(F)})},[U,F,$,q,B,V]);let K=(0,d.useServerHandoffComplete)();(0,o.useIsoMorphicEffect)(()=>{if(A&&K&&"visible"===U&&null===F.current)throw Error("Did you forget to passthrough the `ref` to the actual DOM node?")},[F,U,K,A]);let X=H&&!W,z=W&&B&&H,Q=(0,a.useRef)(!1),Z=w(()=>{Q.current||(Y("hidden"),q(F))},G),J=(0,n.useEvent)(e=>{Q.current=!0,Z.onStart(F,e?"enter":"leave",e=>{"enter"===e?null==i||i():"leave"===e&&(null==T||T())})}),ee=(0,n.useEvent)(e=>{let t=e?"enter":"leave";Q.current=!1,Z.onStop(F,t,e=>{"enter"===e?null==b||b():"leave"===e&&(null==k||k())}),"leave"!==t||v(Z)||(Y("hidden"),q(F))});(0,a.useEffect)(()=>{A&&s||(J(B),ee(B))},[B,A,s]);let et=!(!s||!A||!K||X),[,er]=(0,u.useTransition)(et,D,B,{start:J,end:ee}),ea=(0,p.compact)({ref:O,className:(null==(l=(0,h.classNames)(P.className,z&&S,z&&N,er.enter&&S,er.enter&&er.closed&&N,er.enter&&!er.closed&&E,er.leave&&_,er.leave&&!er.closed&&R,er.leave&&er.closed&&I,!er.transition&&B&&M))?void 0:l.trim())||void 0,...(0,u.transitionDataAttributes)(er)}),el=0;"visible"===U&&(el|=m.State.Open),"hidden"===U&&(el|=m.State.Closed),er.enter&&(el|=m.State.Opening),er.leave&&(el|=m.State.Closing);let en=(0,p.useRender)();return a.default.createElement(C.Provider,{value:Z},a.default.createElement(m.OpenClosedProvider,{value:el},en({ourProps:ea,theirProps:P,defaultTag:j,features:y,visible:"visible"===U,name:"Transition.Child"})))}),S=(0,p.forwardRefWithAs)(function(e,t){let r=null!==(0,a.useContext)(f),l=null!==(0,m.useOpenClosed)();return a.default.createElement(a.default.Fragment,null,!r&&l?a.default.createElement(T,{ref:t,...e}):a.default.createElement(k,{ref:t,...e}))}),N=Object.assign(T,{Child:S,Root:T});e.s(["Transition",0,N],854056)},757440,e=>{"use strict";var t=e.i(290571),r=e.i(271645);e.s(["default",0,e=>{var a=(0,t.__rest)(e,[]);return r.default.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"},a),r.default.createElement("path",{d:"M11.9999 13.1714L16.9497 8.22168L18.3639 9.63589L11.9999 15.9999L5.63599 9.63589L7.0502 8.22168L11.9999 13.1714Z"}))}])},206929,e=>{"use strict";var t=e.i(290571),r=e.i(757440),a=e.i(271645),l=e.i(446428),n=e.i(444755),s=e.i(673706),o=e.i(103471),i=e.i(495470),d=e.i(854056),c=e.i(888288);let u=(0,s.makeClassName)("Select"),m=a.default.forwardRef((e,s)=>{let{defaultValue:m="",value:h,onValueChange:g,placeholder:p="Select...",disabled:x=!1,icon:f,enableClear:b=!1,required:C,children:v,name:w,error:j=!1,errorMessage:y,className:T,id:k}=e,S=(0,t.__rest)(e,["defaultValue","value","onValueChange","placeholder","disabled","icon","enableClear","required","children","name","error","errorMessage","className","id"]),N=(0,a.useRef)(null),E=a.Children.toArray(v),[M,_]=(0,c.default)(m,h),R=(0,a.useMemo)(()=>{let e=a.default.Children.toArray(v).filter(a.isValidElement);return(0,o.constructValueToNameMapping)(e)},[v]);return a.default.createElement("div",{className:(0,n.tremorTwMerge)("w-full min-w-[10rem] text-tremor-default",T)},a.default.createElement("div",{className:"relative"},a.default.createElement("select",{title:"select-hidden",required:C,className:(0,n.tremorTwMerge)("h-full w-full absolute left-0 top-0 -z-10 opacity-0"),value:M,onChange:e=>{e.preventDefault()},name:w,disabled:x,id:k,onFocus:()=>{let e=N.current;e&&e.focus()}},a.default.createElement("option",{className:"hidden",value:"",disabled:!0,hidden:!0},p),E.map(e=>{let t=e.props.value,r=e.props.children;return a.default.createElement("option",{className:"hidden",key:t,value:t},r)})),a.default.createElement(i.Listbox,Object.assign({as:"div",ref:s,defaultValue:M,value:M,onChange:e=>{null==g||g(e),_(e)},disabled:x,id:k},S),({value:e})=>{var t;return a.default.createElement(a.default.Fragment,null,a.default.createElement(i.ListboxButton,{ref:N,className:(0,n.tremorTwMerge)("w-full outline-none text-left whitespace-nowrap truncate rounded-tremor-default focus:ring-2 transition duration-100 border pr-8 py-2","border-tremor-border shadow-tremor-input focus:border-tremor-brand-subtle focus:ring-tremor-brand-muted","dark:border-dark-tremor-border dark:shadow-dark-tremor-input dark:focus:border-dark-tremor-brand-subtle dark:focus:ring-dark-tremor-brand-muted",f?"pl-10":"pl-3",(0,o.getSelectButtonColors)((0,o.hasValue)(e),x,j))},f&&a.default.createElement("span",{className:(0,n.tremorTwMerge)("absolute inset-y-0 left-0 flex items-center ml-px pl-2.5")},a.default.createElement(f,{className:(0,n.tremorTwMerge)(u("Icon"),"flex-none h-5 w-5","text-tremor-content-subtle","dark:text-dark-tremor-content-subtle")})),a.default.createElement("span",{className:"w-[90%] block truncate"},e&&null!=(t=R.get(e))?t:p),a.default.createElement("span",{className:(0,n.tremorTwMerge)("absolute inset-y-0 right-0 flex items-center mr-3")},a.default.createElement(r.default,{className:(0,n.tremorTwMerge)(u("arrowDownIcon"),"flex-none h-5 w-5","text-tremor-content-subtle","dark:text-dark-tremor-content-subtle")}))),b&&M?a.default.createElement("button",{type:"button",className:(0,n.tremorTwMerge)("absolute inset-y-0 right-0 flex items-center mr-8"),onClick:e=>{e.preventDefault(),_(""),null==g||g("")}},a.default.createElement(l.default,{className:(0,n.tremorTwMerge)(u("clearIcon"),"flex-none h-4 w-4","text-tremor-content-subtle","dark:text-dark-tremor-content-subtle")})):null,a.default.createElement(d.Transition,{enter:"transition ease duration-100 transform",enterFrom:"opacity-0 -translate-y-4",enterTo:"opacity-100 translate-y-0",leave:"transition ease duration-100 transform",leaveFrom:"opacity-100 translate-y-0",leaveTo:"opacity-0 -translate-y-4"},a.default.createElement(i.ListboxOptions,{anchor:"bottom start",className:(0,n.tremorTwMerge)("z-10 w-[var(--button-width)] divide-y overflow-y-auto outline-none rounded-tremor-default max-h-[228px] border [--anchor-gap:4px]","bg-tremor-background border-tremor-border divide-tremor-border shadow-tremor-dropdown","dark:bg-dark-tremor-background dark:border-dark-tremor-border dark:divide-dark-tremor-border dark:shadow-dark-tremor-dropdown")},v)))})),j&&y?a.default.createElement("p",{className:(0,n.tremorTwMerge)("errorMessage","text-sm text-rose-500 mt-1")},y):null)});m.displayName="Select",e.s(["Select",0,m],206929)},183051,e=>{"use strict";var t=e.i(843476);e.i(247167);var r=e.i(584935),a=e.i(290571),l=e.i(271645),n=e.i(95779),s=e.i(444755),o=e.i(673706);let i=(0,o.makeClassName)("BarList");function d(e,t){let{data:r=[],color:d,valueFormatter:c=o.defaultValueFormatter,showAnimation:u=!1,onValueChange:m,sortOrder:h="descending",className:g}=e,p=(0,a.__rest)(e,["data","color","valueFormatter","showAnimation","onValueChange","sortOrder","className"]),x=m?"button":"div",f=l.default.useMemo(()=>"none"===h?r:[...r].sort((e,t)=>"ascending"===h?e.value-t.value:t.value-e.value),[r,h]),b=l.default.useMemo(()=>{let e=Math.max(...f.map(e=>e.value),0);return f.map(t=>0===t.value?0:Math.max(t.value/e*100,2))},[f]);return l.default.createElement("div",Object.assign({ref:t,className:(0,s.tremorTwMerge)(i("root"),"flex justify-between space-x-6",g),"aria-sort":h},p),l.default.createElement("div",{className:(0,s.tremorTwMerge)(i("bars"),"relative w-full space-y-1.5")},f.map((e,t)=>{var r,a,c;let h=e.icon;return l.default.createElement(x,{key:null!=(r=e.key)?r:t,onClick:()=>{null==m||m(e)},className:(0,s.tremorTwMerge)(i("bar"),"group w-full flex items-center rounded-tremor-small",m?["cursor-pointer","hover:bg-tremor-background-muted dark:hover:bg-dark-tremor-background-subtle/40"]:"")},l.default.createElement("div",{className:(0,s.tremorTwMerge)("flex items-center rounded transition-all bg-opacity-40","h-8",e.color||d?[(0,o.getColorClassNames)(null!=(a=e.color)?a:d,n.colorPalette.background).bgColor,m?"group-hover:bg-opacity-30":""]:"bg-tremor-brand-subtle dark:bg-dark-tremor-brand-subtle/60",!m||e.color||d?"":"group-hover:bg-tremor-brand-subtle/30 group-hover:dark:bg-dark-tremor-brand-subtle/70",t===f.length-1?"mb-0":"",u?"duration-500":""),style:{width:`${b[t]}%`,transition:u?"all 1s":""}},l.default.createElement("div",{className:(0,s.tremorTwMerge)("absolute left-2 pr-4 flex max-w-full")},h?l.default.createElement(h,{className:(0,s.tremorTwMerge)(i("barIcon"),"flex-none h-5 w-5 mr-2","text-tremor-content","dark:text-dark-tremor-content")}):null,e.href?l.default.createElement("a",{href:e.href,target:null!=(c=e.target)?c:"_blank",rel:"noreferrer",className:(0,s.tremorTwMerge)(i("barLink"),"whitespace-nowrap hover:underline truncate text-tremor-default",m?"cursor-pointer":"","text-tremor-content-emphasis","dark:text-dark-tremor-content-emphasis"),onClick:e=>e.stopPropagation()},e.name):l.default.createElement("p",{className:(0,s.tremorTwMerge)(i("barText"),"whitespace-nowrap truncate text-tremor-default","text-tremor-content-emphasis","dark:text-dark-tremor-content-emphasis")},e.name))))})),l.default.createElement("div",{className:i("labels")},f.map((e,t)=>{var r;return l.default.createElement("div",{key:null!=(r=e.key)?r:t,className:(0,s.tremorTwMerge)(i("labelWrapper"),"flex justify-end items-center","h-8",t===f.length-1?"mb-0":"mb-1.5")},l.default.createElement("p",{className:(0,s.tremorTwMerge)(i("labelText"),"whitespace-nowrap leading-none truncate text-tremor-default","text-tremor-content-emphasis","dark:text-dark-tremor-content-emphasis")},c(e.value)))})))}d.displayName="BarList";let c=l.default.forwardRef(d);var u=e.i(304967),m=e.i(629569),h=e.i(269200),g=e.i(427612),p=e.i(64848),x=e.i(496020),f=e.i(977572),b=e.i(942232),C=e.i(37091),v=e.i(617802),w=e.i(144267),j=e.i(350967),y=e.i(309426),T=e.i(599724),k=e.i(404206),S=e.i(723731),N=e.i(653824),E=e.i(881073),M=e.i(197647),_=e.i(206929),R=e.i(35983),I=e.i(413990),P=e.i(476961),D=e.i(994388),L=e.i(621642),F=e.i(25080),A=e.i(602869),O=e.i(1023),V=e.i(500330);console.log("process.env.NODE_ENV","production");let B=e=>null!==e&&("Admin"===e||"Admin Viewer"===e),W=({accessToken:e,token:a,userRole:n,userID:s,keys:o,premiumUser:i})=>{let d=new Date,[W,H]=(0,l.useState)([]),[U,Y]=(0,l.useState)([]),[G,$]=(0,l.useState)([]),[q,K]=(0,l.useState)([]),[X,z]=(0,l.useState)([]),[Q,Z]=(0,l.useState)([]),[J,ee]=(0,l.useState)([]),[et,er]=(0,l.useState)([]),[ea,el]=(0,l.useState)([]),[en,es]=(0,l.useState)([]),[eo,ei]=(0,l.useState)({}),[ed,ec]=(0,l.useState)([]),[eu,em]=(0,l.useState)(""),[eh,eg]=(0,l.useState)(["all-tags"]),[ep,ex]=(0,l.useState)({from:new Date(Date.now()-6048e5),to:new Date}),[ef,eb]=(0,l.useState)(null),[eC,ev]=(0,l.useState)(0),ew=new Date(d.getFullYear(),d.getMonth(),1),ej=new Date(d.getFullYear(),d.getMonth()+1,0),ey=eM(ew),eT=eM(ej);function ek(e){return new Intl.NumberFormat("en-US",{maximumFractionDigits:0,notation:"compact",compactDisplay:"short"}).format(e)}console.log("keys in usage",o),console.log("premium user in usage",i);let eS=async()=>{if(e)try{let t=await (0,A.getProxyUISettings)(e);return console.log("usage tab: proxy_settings",t),t}catch(e){console.error("Error fetching proxy settings:",e)}};(0,l.useEffect)(()=>{eE(ep.from,ep.to)},[ep,eh]);let eN=async(t,r,a)=>{if(!t||!r||!e)return;console.log("uiSelectedKey",a);let l=await (0,A.adminTopEndUsersCall)(e,a,t.toISOString(),r.toISOString());console.log("End user data updated successfully",l),K(l)},eE=async(t,r)=>{if(!t||!r||!e)return;let a=await eS();a?.DISABLE_EXPENSIVE_DB_QUERIES||(Z((await (0,A.tagsSpendLogsCall)(e,t.toISOString(),r.toISOString(),0===eh.length?void 0:eh)).spend_per_tag),console.log("Tag spend data updated successfully"))};function eM(e){let t=e.getFullYear(),r=e.getMonth()+1,a=e.getDate();return`${t}-${r<10?"0"+r:r}-${a<10?"0"+a:a}`}console.log(`Start date is ${ey}`),console.log(`End date is ${eT}`);let e_=async(e,t,r)=>{try{let r=await e();t(r)}catch(e){console.error(r,e)}},eR=(e,t,r,a)=>{let l=[],n=new Date(t),s=new Map(e.map(e=>{let t=(e=>{if(e.includes("-"))return e;{let[t,r]=e.split(" ");return new Date(new Date().getFullYear(),new Date(`${t} 01 2024`).getMonth(),parseInt(r)).toISOString().split("T")[0]}})(e.date);return[t,{...e,date:t}]}));for(;n<=r;){let e=n.toISOString().split("T")[0];if(s.has(e))l.push(s.get(e));else{let t={date:e,api_requests:0,total_tokens:0};a.forEach(e=>{t[e]||(t[e]=0)}),l.push(t)}n.setDate(n.getDate()+1)}return l},eI=async()=>{if(e)try{let t=await (0,A.adminSpendLogsCall)(e),r=new Date,a=new Date(r.getFullYear(),r.getMonth(),1),l=new Date(r.getFullYear(),r.getMonth()+1,0),n=eR(t,a,l,[]),s=Number(n.reduce((e,t)=>e+(t.spend||0),0).toFixed(2));ev(s),H(n)}catch(e){console.error("Error fetching overall spend:",e)}},eP=async()=>{e&&await e_(async()=>(await (0,A.adminTopKeysCall)(e)).map(e=>({key:e.api_key.substring(0,10),api_key:e.api_key,key_alias:e.key_alias,spend:Number(e.total_spend.toFixed(2))})),Y,"Error fetching top keys")},eD=async()=>{e&&await e_(async()=>(await (0,A.adminTopModelsCall)(e)).map(e=>({key:e.model,spend:(0,V.formatNumberWithCommas)(e.total_spend,2)})),$,"Error fetching top models")},eL=async()=>{e&&await e_(async()=>{let t=await (0,A.teamSpendLogsCall)(e),r=new Date,a=new Date(r.getFullYear(),r.getMonth(),1),l=new Date(r.getFullYear(),r.getMonth()+1,0);return z(eR(t.daily_spend,a,l,t.teams)),er(t.teams),t.total_spend_per_team.map(e=>({name:e.team_id||"",value:(0,V.formatNumberWithCommas)(e.total_spend||0,2)}))},el,"Error fetching team spend")},eF=async()=>{if(e)try{let t=await (0,A.adminGlobalActivity)(e,ey,eT),r=new Date,a=new Date(r.getFullYear(),r.getMonth(),1),l=new Date(r.getFullYear(),r.getMonth()+1,0),n=eR(t.daily_data||[],a,l,["api_requests","total_tokens"]);ei({...t,daily_data:n})}catch(e){console.error("Error fetching global activity:",e)}},eA=async()=>{if(e)try{let t=await (0,A.adminGlobalActivityPerModel)(e,ey,eT),r=new Date,a=new Date(r.getFullYear(),r.getMonth(),1),l=new Date(r.getFullYear(),r.getMonth()+1,0),n=t.map(e=>({...e,daily_data:eR(e.daily_data||[],a,l,["api_requests","total_tokens"])}));ec(n)}catch(e){console.error("Error fetching global activity per model:",e)}};return((0,l.useEffect)(()=>{(async()=>{if(e&&a&&n&&s){let t=await eS();!(t&&(eb(t),t?.DISABLE_EXPENSIVE_DB_QUERIES))&&(console.log("fetching data - valiue of proxySettings",ef),eI(),e_(()=>e&&a?(0,A.adminspendByProvider)(e,a,ey,eT):Promise.reject("No access token or token"),es,"Error fetching provider spend"),eP(),eD(),eF(),eA(),B(n)&&(eL(),e&&e_(async()=>(await (0,A.allTagNamesCall)(e)).tag_names,ee,"Error fetching tag names"),e&&e_(()=>(0,A.tagsSpendLogsCall)(e,ep.from?.toISOString(),ep.to?.toISOString(),void 0),e=>Z(e.spend_per_tag),"Error fetching top tags"),e&&e_(()=>(0,A.adminTopEndUsersCall)(e,null,void 0,void 0),K,"Error fetching top end users")))}})()},[e,a,n,s,ey,eT]),ef?.DISABLE_EXPENSIVE_DB_QUERIES)?(0,t.jsx)("div",{style:{width:"100%"},className:"p-8",children:(0,t.jsxs)(u.Card,{children:[(0,t.jsx)(m.Title,{children:"Database Query Limit Reached"}),(0,t.jsxs)(T.Text,{className:"mt-4",children:["SpendLogs in DB has ",ef.NUM_SPEND_LOGS_ROWS," rows.",(0,t.jsx)("br",{}),"Please follow our guide to view usage when SpendLogs has more than 1M rows."]}),(0,t.jsx)(D.Button,{className:"mt-4",children:(0,t.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/cost_tracking",target:"_blank",children:"View Usage Guide"})})]})}):(0,t.jsx)("div",{style:{width:"100%"},className:"p-8",children:(0,t.jsxs)(N.TabGroup,{children:[(0,t.jsxs)(E.TabList,{className:"mt-2",children:[(0,t.jsx)(M.Tab,{children:"All Up"}),B(n)?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(M.Tab,{children:"Team Based Usage"}),(0,t.jsx)(M.Tab,{children:"Customer Usage"}),(0,t.jsx)(M.Tab,{children:"Tag Based Usage"})]}):(0,t.jsx)(t.Fragment,{children:(0,t.jsx)("div",{})})]}),(0,t.jsxs)(S.TabPanels,{children:[(0,t.jsx)(k.TabPanel,{children:(0,t.jsxs)(N.TabGroup,{children:[(0,t.jsxs)(E.TabList,{variant:"solid",className:"mt-1",children:[(0,t.jsx)(M.Tab,{children:"Cost"}),(0,t.jsx)(M.Tab,{children:"Activity"})]}),(0,t.jsxs)(S.TabPanels,{children:[(0,t.jsx)(k.TabPanel,{children:(0,t.jsxs)(j.Grid,{numItems:2,className:"gap-2 h-[100vh] w-full",children:[(0,t.jsxs)(y.Col,{numColSpan:2,children:[(0,t.jsxs)(T.Text,{className:"text-tremor-default text-tremor-content dark:text-dark-tremor-content mb-2 mt-2 text-lg",children:["Project Spend ",new Date().toLocaleString("default",{month:"long"})," 1 -"," ",new Date(new Date().getFullYear(),new Date().getMonth()+1,0).getDate()]}),(0,t.jsx)(v.default,{userSpend:eC,selectedTeam:null,userMaxBudget:null})]}),(0,t.jsx)(y.Col,{numColSpan:2,children:(0,t.jsxs)(u.Card,{children:[(0,t.jsx)(m.Title,{children:"Monthly Spend"}),(0,t.jsx)(r.BarChart,{data:W,index:"date",categories:["spend"],colors:["cyan"],valueFormatter:e=>`$ ${(0,V.formatNumberWithCommas)(e,2)}`,yAxisWidth:100,tickGap:5})]})}),(0,t.jsx)(y.Col,{numColSpan:1,children:(0,t.jsxs)(u.Card,{className:"h-full",children:[(0,t.jsx)(m.Title,{children:"Top Virtual Keys"}),(0,t.jsx)(O.default,{topKeys:U,teams:null,topKeysLimit:5,setTopKeysLimit:()=>{}})]})}),(0,t.jsx)(y.Col,{numColSpan:1,children:(0,t.jsxs)(u.Card,{className:"h-full",children:[(0,t.jsx)(m.Title,{children:"Top Models"}),(0,t.jsx)(r.BarChart,{className:"mt-4 h-40",data:G,index:"key",categories:["spend"],colors:["cyan"],yAxisWidth:200,layout:"vertical",showXAxis:!1,showLegend:!1,valueFormatter:e=>`$${(0,V.formatNumberWithCommas)(e,2)}`})]})}),(0,t.jsx)(y.Col,{numColSpan:1}),(0,t.jsx)(y.Col,{numColSpan:2,children:(0,t.jsxs)(u.Card,{className:"mb-2",children:[(0,t.jsx)(m.Title,{children:"Spend by Provider"}),(0,t.jsx)(t.Fragment,{children:(0,t.jsxs)(j.Grid,{numItems:2,children:[(0,t.jsx)(y.Col,{numColSpan:1,children:(0,t.jsx)(I.DonutChart,{className:"mt-4 h-40",variant:"pie",data:en,index:"provider",category:"spend",colors:["cyan"],valueFormatter:e=>`$${(0,V.formatNumberWithCommas)(e,2)}`})}),(0,t.jsx)(y.Col,{numColSpan:1,children:(0,t.jsxs)(h.Table,{children:[(0,t.jsx)(g.TableHead,{children:(0,t.jsxs)(x.TableRow,{children:[(0,t.jsx)(p.TableHeaderCell,{children:"Provider"}),(0,t.jsx)(p.TableHeaderCell,{children:"Spend"})]})}),(0,t.jsx)(b.TableBody,{children:en.map(e=>(0,t.jsxs)(x.TableRow,{children:[(0,t.jsx)(f.TableCell,{children:e.provider}),(0,t.jsx)(f.TableCell,{children:1e-5>parseFloat(e.spend.toFixed(2))?"less than 0.00":(0,V.formatNumberWithCommas)(e.spend,2)})]},e.provider))})]})})]})})]})})]})}),(0,t.jsx)(k.TabPanel,{children:(0,t.jsxs)(j.Grid,{numItems:1,className:"gap-2 h-[75vh] w-full",children:[(0,t.jsxs)(u.Card,{children:[(0,t.jsx)(m.Title,{children:"All Up"}),(0,t.jsxs)(j.Grid,{numItems:2,children:[(0,t.jsxs)(y.Col,{children:[(0,t.jsxs)(C.Subtitle,{style:{fontSize:"15px",fontWeight:"normal",color:"#535452"},children:["API Requests ",ek(eo.sum_api_requests)]}),(0,t.jsx)(P.AreaChart,{className:"h-40",data:eo.daily_data,valueFormatter:ek,index:"date",colors:["cyan"],categories:["api_requests"],onValueChange:e=>console.log(e)})]}),(0,t.jsxs)(y.Col,{children:[(0,t.jsxs)(C.Subtitle,{style:{fontSize:"15px",fontWeight:"normal",color:"#535452"},children:["Tokens ",ek(eo.sum_total_tokens)]}),(0,t.jsx)(r.BarChart,{className:"h-40",data:eo.daily_data,valueFormatter:ek,index:"date",colors:["cyan"],categories:["total_tokens"],onValueChange:e=>console.log(e)})]})]})]}),(0,t.jsx)(t.Fragment,{children:ed.map((e,a)=>(0,t.jsxs)(u.Card,{children:[(0,t.jsx)(m.Title,{children:e.model}),(0,t.jsxs)(j.Grid,{numItems:2,children:[(0,t.jsxs)(y.Col,{children:[(0,t.jsxs)(C.Subtitle,{style:{fontSize:"15px",fontWeight:"normal",color:"#535452"},children:["API Requests ",ek(e.sum_api_requests)]}),(0,t.jsx)(P.AreaChart,{className:"h-40",data:e.daily_data,index:"date",colors:["cyan"],categories:["api_requests"],valueFormatter:ek,onValueChange:e=>console.log(e)})]}),(0,t.jsxs)(y.Col,{children:[(0,t.jsxs)(C.Subtitle,{style:{fontSize:"15px",fontWeight:"normal",color:"#535452"},children:["Tokens ",ek(e.sum_total_tokens)]}),(0,t.jsx)(r.BarChart,{className:"h-40",data:e.daily_data,index:"date",colors:["cyan"],categories:["total_tokens"],valueFormatter:ek,onValueChange:e=>console.log(e)})]})]})]},a))})]})})]})]})}),(0,t.jsx)(k.TabPanel,{children:(0,t.jsxs)(j.Grid,{numItems:2,className:"gap-2 h-[75vh] w-full",children:[(0,t.jsxs)(y.Col,{numColSpan:2,children:[(0,t.jsxs)(u.Card,{className:"mb-2",children:[(0,t.jsx)(m.Title,{children:"Total Spend Per Team"}),(0,t.jsx)(c,{data:ea})]}),(0,t.jsxs)(u.Card,{children:[(0,t.jsx)(m.Title,{children:"Daily Spend Per Team"}),(0,t.jsx)(r.BarChart,{className:"h-72",data:X,showLegend:!0,index:"date",categories:et,yAxisWidth:80,stack:!0})]})]}),(0,t.jsx)(y.Col,{numColSpan:2})]})}),(0,t.jsxs)(k.TabPanel,{children:[(0,t.jsxs)("p",{className:"mb-2 text-gray-500 italic text-[12px]",children:["Customers of your LLM API calls. Tracked when a `user` param is passed in your LLM calls"," ",(0,t.jsx)("a",{className:"text-blue-500",href:"https://docs.litellm.ai/docs/proxy/users",target:"_blank",children:"docs here"})]}),(0,t.jsxs)(j.Grid,{numItems:2,children:[(0,t.jsx)(y.Col,{children:(0,t.jsx)(w.default,{value:ep,onValueChange:e=>{ex(e),eN(e.from,e.to,null)}})}),(0,t.jsxs)(y.Col,{children:[(0,t.jsx)(T.Text,{children:"Select Key"}),(0,t.jsxs)(_.Select,{defaultValue:"all-keys",children:[(0,t.jsx)(R.SelectItem,{value:"all-keys",onClick:()=>{eN(ep.from,ep.to,null)},children:"All Keys"},"all-keys"),o?.map((e,r)=>e&&null!==e.key_alias&&e.key_alias.length>0?(0,t.jsx)(R.SelectItem,{value:String(r),onClick:()=>{eN(ep.from,ep.to,e.token)},children:e.key_alias},r):null)]})]})]}),(0,t.jsx)(u.Card,{className:"mt-4",children:(0,t.jsxs)(h.Table,{className:"max-h-[70vh] min-h-[500px]",children:[(0,t.jsx)(g.TableHead,{children:(0,t.jsxs)(x.TableRow,{children:[(0,t.jsx)(p.TableHeaderCell,{children:"Customer"}),(0,t.jsx)(p.TableHeaderCell,{children:"Spend"}),(0,t.jsx)(p.TableHeaderCell,{children:"Total Events"})]})}),(0,t.jsx)(b.TableBody,{children:q?.map((e,r)=>(0,t.jsxs)(x.TableRow,{children:[(0,t.jsx)(f.TableCell,{children:e.end_user}),(0,t.jsx)(f.TableCell,{children:(0,V.formatNumberWithCommas)(e.total_spend,2)}),(0,t.jsx)(f.TableCell,{children:e.total_count})]},r))})]})})]}),(0,t.jsxs)(k.TabPanel,{children:[(0,t.jsxs)(j.Grid,{numItems:2,children:[(0,t.jsx)(y.Col,{numColSpan:1,children:(0,t.jsx)(w.default,{className:"mb-4",value:ep,onValueChange:e=>{ex(e),eE(e.from,e.to)}})}),(0,t.jsx)(y.Col,{children:i?(0,t.jsx)("div",{children:(0,t.jsxs)(L.MultiSelect,{value:eh,onValueChange:e=>eg(e),children:[(0,t.jsx)(F.MultiSelectItem,{value:"all-tags",onClick:()=>eg(["all-tags"]),children:"All Tags"},"all-tags"),J&&J.filter(e=>"all-tags"!==e).map((e,r)=>(0,t.jsx)(F.MultiSelectItem,{value:String(e),children:e},e))]})}):(0,t.jsx)("div",{children:(0,t.jsxs)(L.MultiSelect,{value:eh,onValueChange:e=>eg(e),children:[(0,t.jsx)(F.MultiSelectItem,{value:"all-tags",onClick:()=>eg(["all-tags"]),children:"All Tags"},"all-tags"),J&&J.filter(e=>"all-tags"!==e).map((e,r)=>(0,t.jsxs)(R.SelectItem,{value:String(e),disabled:!0,children:["✨ ",e," (Enterprise only Feature)"]},e))]})})})]}),(0,t.jsxs)(j.Grid,{numItems:2,className:"gap-2 h-[75vh] w-full mb-4",children:[(0,t.jsx)(y.Col,{numColSpan:2,children:(0,t.jsxs)(u.Card,{children:[(0,t.jsx)(m.Title,{children:"Spend Per Tag"}),(0,t.jsxs)(T.Text,{children:["Get Started by Tracking cost per tag"," ",(0,t.jsx)("a",{className:"text-blue-500",href:"https://docs.litellm.ai/docs/proxy/cost_tracking",target:"_blank",children:"here"})]}),(0,t.jsx)(r.BarChart,{className:"h-72",data:Q,index:"name",categories:["spend"],colors:["cyan"]})]})}),(0,t.jsx)(y.Col,{numColSpan:2})]})]})]})]})})};var H=e.i(135214);e.s(["default",0,function(){let{accessToken:e,token:r,userRole:a,userId:l,premiumUser:n}=(0,H.default)();return(0,t.jsx)(W,{accessToken:e,token:r,userRole:a,userID:l,keys:null,premiumUser:n})}],183051)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0~tp1mbr_st8h.js b/litellm/proxy/_experimental/out/_next/static/chunks/0~tp1mbr_st8h.js new file mode 100644 index 00000000000..3fc16ed8f8e --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0~tp1mbr_st8h.js @@ -0,0 +1 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,94629,e=>{"use strict";var r=e.i(271645);let l=r.forwardRef(function(e,l){return r.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:l},e),r.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M7 16V4m0 0L3 8m4-4l4 4m6 0v12m0 0l4-4m-4 4l-4-4"}))});e.s(["SwitchVerticalIcon",0,l],94629)},969550,e=>{"use strict";var r=e.i(843476),l=e.i(271645);let t=l.forwardRef(function(e,r){return l.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:r},e),l.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M3 4a1 1 0 011-1h16a1 1 0 011 1v2.586a1 1 0 01-.293.707l-6.414 6.414a1 1 0 00-.293.707V17l-4 4v-6.586a1 1 0 00-.293-.707L3.293 7.293A1 1 0 013 6.586V4z"}))});var a=e.i(464571),o=e.i(311451),s=e.i(199133),n=e.i(374009);e.s(["default",0,({options:e,onApplyFilters:i,onResetFilters:d,initialValues:c={},buttonLabel:u="Filters"})=>{let[m,h]=(0,l.useState)(!1),[p,g]=(0,l.useState)(c),[x,b]=(0,l.useState)({}),[f,y]=(0,l.useState)({}),[v,C]=(0,l.useState)({}),[w,j]=(0,l.useState)({}),k=(0,l.useCallback)((0,n.default)(async(e,r)=>{if(r.isSearchable&&r.searchFn){y(e=>({...e,[r.name]:!0}));try{let l=await r.searchFn(e);b(e=>({...e,[r.name]:l}))}catch(e){console.error("Error searching:",e),b(e=>({...e,[r.name]:[]}))}finally{y(e=>({...e,[r.name]:!1}))}}},300),[]),S=(0,l.useCallback)(async e=>{if(e.isSearchable&&e.searchFn&&!w[e.name]){y(r=>({...r,[e.name]:!0})),j(r=>({...r,[e.name]:!0}));try{let r=await e.searchFn("");b(l=>({...l,[e.name]:r}))}catch(r){console.error("Error loading initial options:",r),b(r=>({...r,[e.name]:[]}))}finally{y(r=>({...r,[e.name]:!1}))}}},[w]);(0,l.useEffect)(()=>{m&&e.forEach(e=>{e.isSearchable&&!w[e.name]&&S(e)})},[m,e,S,w]);let N=(e,r)=>{let l={...p,[e]:r};g(l),i(l)};return(0,r.jsxs)("div",{className:"w-full",children:[(0,r.jsxs)("div",{className:"flex items-center gap-2 mb-6",children:[(0,r.jsx)(a.Button,{icon:(0,r.jsx)(t,{className:"h-4 w-4"}),onClick:()=>h(!m),className:"flex items-center gap-2",children:u}),(0,r.jsx)(a.Button,{onClick:()=>{let r={};e.forEach(e=>{r[e.name]=""}),g(r),d()},children:"Reset Filters"})]}),m&&(0,r.jsx)("div",{className:"grid grid-cols-3 gap-x-6 gap-y-4 mb-6",children:e.map(e=>{let l;return(0,r.jsxs)("div",{className:"flex flex-col gap-2",children:[(0,r.jsx)("label",{className:"text-sm text-gray-600",children:e.label||e.name}),e.isSearchable?(0,r.jsx)(s.Select,{showSearch:!0,className:"w-full",placeholder:`Search ${e.label||e.name}...`,value:p[e.name]||void 0,onChange:r=>N(e.name,r),onOpenChange:r=>{r&&e.isSearchable&&!w[e.name]&&S(e)},onSearch:r=>{C(l=>({...l,[e.name]:r})),e.searchFn&&k(r,e)},filterOption:!1,loading:f[e.name],options:x[e.name]||[],allowClear:!0,notFoundContent:f[e.name]?"Loading...":"No results found"}):e.options?(0,r.jsx)(s.Select,{className:"w-full",placeholder:`Select ${e.label||e.name}...`,value:p[e.name]||void 0,onChange:r=>N(e.name,r),allowClear:!0,children:e.options.map(e=>(0,r.jsx)(s.Select.Option,{value:e.value,children:e.label},e.value))}):e.customComponent?(l=e.customComponent,(0,r.jsx)(l,{value:p[e.name]||void 0,onChange:r=>N(e.name,r??""),placeholder:`Select ${e.label||e.name}...`,allFilters:p})):(0,r.jsx)(o.Input,{className:"w-full",placeholder:`Enter ${e.label||e.name}...`,value:p[e.name]||"",onChange:r=>N(e.name,r.target.value),allowClear:!0})]},e.name)})})]})}],969550)},633627,e=>{"use strict";var r=e.i(602869);let l=(e,r,l,t)=>{for(let a of e){let e=a?.key_alias;e&&"string"==typeof e&&r.add(e.trim());let o=a?.organization_id??a?.org_id;o&&"string"==typeof o&&l.add(o.trim());let s=a?.user_id;if(s&&"string"==typeof s){let e=a?.user?.user_email||s;t.set(s,e)}}},t=async(e,t)=>{if(!e||!t)return{keyAliases:[],organizationIds:[],userIds:[]};try{let a=new Set,o=new Set,s=new Map,n=await (0,r.keyListCall)(e,null,t,null,null,null,1,100,null,null,"user",null),i=n?.keys||[],d=n?.total_pages??1;l(i,a,o,s);let c=Math.min(d,10)-1;if(c>0){let n=Array.from({length:c},(l,a)=>(0,r.keyListCall)(e,null,t,null,null,null,a+2,100,null,null,"user",null));for(let e of(await Promise.allSettled(n)))"fulfilled"===e.status&&l(e.value?.keys||[],a,o,s)}return{keyAliases:Array.from(a).sort(),organizationIds:Array.from(o).sort(),userIds:Array.from(s.entries()).map(([e,r])=>({id:e,email:r}))}}catch(e){return console.error("Error fetching team filter options:",e),{keyAliases:[],organizationIds:[],userIds:[]}}},a=async(e,l)=>{if(!e)return[];try{let t=[],a=1,o=!0;for(;o;){let s=await (0,r.teamListCall)(e,l||null,null);t=[...t,...s],a{if(!e)return[];try{let l=[],t=1,a=!0;for(;a;){let o=await (0,r.organizationListCall)(e);l=[...l,...o],t{"use strict";var r=e.i(290571),l=e.i(271645),t=e.i(829087),a=e.i(480731),o=e.i(444755),s=e.i(673706),n=e.i(95779);let i={xs:{paddingX:"px-1.5",paddingY:"py-1.5"},sm:{paddingX:"px-1.5",paddingY:"py-1.5"},md:{paddingX:"px-2",paddingY:"py-2"},lg:{paddingX:"px-2",paddingY:"py-2"},xl:{paddingX:"px-2.5",paddingY:"py-2.5"}},d={xs:{height:"h-3",width:"w-3"},sm:{height:"h-5",width:"w-5"},md:{height:"h-5",width:"w-5"},lg:{height:"h-7",width:"w-7"},xl:{height:"h-9",width:"w-9"}},c={simple:{rounded:"",border:"",ring:"",shadow:""},light:{rounded:"rounded-tremor-default",border:"",ring:"",shadow:""},shadow:{rounded:"rounded-tremor-default",border:"border",ring:"",shadow:"shadow-tremor-card dark:shadow-dark-tremor-card"},solid:{rounded:"rounded-tremor-default",border:"border-2",ring:"ring-1",shadow:""},outlined:{rounded:"rounded-tremor-default",border:"border",ring:"ring-2",shadow:""}},u=(0,s.makeClassName)("Icon"),m=l.default.forwardRef((e,m)=>{let{icon:h,variant:p="simple",tooltip:g,size:x=a.Sizes.SM,color:b,className:f}=e,y=(0,r.__rest)(e,["icon","variant","tooltip","size","color","className"]),v=((e,r)=>{switch(e){case"simple":return{textColor:r?(0,s.getColorClassNames)(r,n.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:"",borderColor:"",ringColor:""};case"light":return{textColor:r?(0,s.getColorClassNames)(r,n.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:r?(0,o.tremorTwMerge)((0,s.getColorClassNames)(r,n.colorPalette.background).bgColor,"bg-opacity-20"):"bg-tremor-brand-muted dark:bg-dark-tremor-brand-muted",borderColor:"",ringColor:""};case"shadow":return{textColor:r?(0,s.getColorClassNames)(r,n.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:r?(0,o.tremorTwMerge)((0,s.getColorClassNames)(r,n.colorPalette.background).bgColor,"bg-opacity-20"):"bg-tremor-background dark:bg-dark-tremor-background",borderColor:"border-tremor-border dark:border-dark-tremor-border",ringColor:""};case"solid":return{textColor:r?(0,s.getColorClassNames)(r,n.colorPalette.text).textColor:"text-tremor-brand-inverted dark:text-dark-tremor-brand-inverted",bgColor:r?(0,o.tremorTwMerge)((0,s.getColorClassNames)(r,n.colorPalette.background).bgColor,"bg-opacity-20"):"bg-tremor-brand dark:bg-dark-tremor-brand",borderColor:"border-tremor-brand-inverted dark:border-dark-tremor-brand-inverted",ringColor:"ring-tremor-ring dark:ring-dark-tremor-ring"};case"outlined":return{textColor:r?(0,s.getColorClassNames)(r,n.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:r?(0,o.tremorTwMerge)((0,s.getColorClassNames)(r,n.colorPalette.background).bgColor,"bg-opacity-20"):"bg-tremor-background dark:bg-dark-tremor-background",borderColor:r?(0,s.getColorClassNames)(r,n.colorPalette.ring).borderColor:"border-tremor-brand-subtle dark:border-dark-tremor-brand-subtle",ringColor:r?(0,o.tremorTwMerge)((0,s.getColorClassNames)(r,n.colorPalette.ring).ringColor,"ring-opacity-40"):"ring-tremor-brand-muted dark:ring-dark-tremor-brand-muted"}}})(p,b),{tooltipProps:C,getReferenceProps:w}=(0,t.useTooltip)();return l.default.createElement("span",Object.assign({ref:(0,s.mergeRefs)([m,C.refs.setReference]),className:(0,o.tremorTwMerge)(u("root"),"inline-flex shrink-0 items-center justify-center",v.bgColor,v.textColor,v.borderColor,v.ringColor,c[p].rounded,c[p].border,c[p].shadow,c[p].ring,i[x].paddingX,i[x].paddingY,f)},w,y),l.default.createElement(t.default,Object.assign({text:g},C)),l.default.createElement(h,{className:(0,o.tremorTwMerge)(u("icon"),"shrink-0",d[x].height,d[x].width)}))});m.displayName="Icon",e.s(["default",0,m],728889)},752978,e=>{"use strict";var r=e.i(728889);e.s(["Icon",()=>r.default])},591935,e=>{"use strict";var r=e.i(271645);let l=r.forwardRef(function(e,l){return r.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:l},e),r.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z"}))});e.s(["PencilAltIcon",0,l],591935)},434626,e=>{"use strict";var r=e.i(271645);let l=r.forwardRef(function(e,l){return r.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:l},e),r.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"}))});e.s(["ExternalLinkIcon",0,l],434626)},122577,e=>{"use strict";var r=e.i(271645);let l=r.forwardRef(function(e,l){return r.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:l},e),r.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M14.752 11.168l-3.197-2.132A1 1 0 0010 9.87v4.263a1 1 0 001.555.832l3.197-2.132a1 1 0 000-1.664z"}),r.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M21 12a9 9 0 11-18 0 9 9 0 0118 0z"}))});e.s(["PlayIcon",0,l],122577)},551332,e=>{"use strict";var r=e.i(271645);let l=r.forwardRef(function(e,l){return r.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:l},e),r.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M8 5H6a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2v-1M8 5a2 2 0 002 2h2a2 2 0 002-2M8 5a2 2 0 012-2h2a2 2 0 012 2m0 0h2a2 2 0 012 2v3m2 4H10m0 0l3-3m-3 3l3 3"}))});e.s(["ClipboardCopyIcon",0,l],551332)},902555,e=>{"use strict";var r=e.i(843476),l=e.i(591935),t=e.i(122577),a=e.i(278587),o=e.i(68155),s=e.i(360820),n=e.i(871943),i=e.i(434626),d=e.i(551332),c=e.i(592968),u=e.i(115504),m=e.i(752978);function h({icon:e,onClick:l,className:t,disabled:a,dataTestId:o}){return a?(0,r.jsx)(m.Icon,{icon:e,size:"sm",className:"opacity-50 cursor-not-allowed","data-testid":o}):(0,r.jsx)(m.Icon,{icon:e,size:"sm",onClick:l,className:(0,u.cx)("cursor-pointer",t),"data-testid":o})}let p={Edit:{icon:l.PencilAltIcon,className:"hover:text-blue-600"},Delete:{icon:o.TrashIcon,className:"hover:text-red-600"},Test:{icon:t.PlayIcon,className:"hover:text-blue-600"},Regenerate:{icon:a.RefreshIcon,className:"hover:text-green-600"},Up:{icon:s.ChevronUpIcon,className:"hover:text-blue-600"},Down:{icon:n.ChevronDownIcon,className:"hover:text-blue-600"},Open:{icon:i.ExternalLinkIcon,className:"hover:text-green-600"},Copy:{icon:d.ClipboardCopyIcon,className:"hover:text-blue-600"}};e.s(["default",0,function({onClick:e,tooltipText:l,disabled:t=!1,disabledTooltipText:a,dataTestId:o,variant:s}){let{icon:n,className:i}=p[s];return(0,r.jsx)(c.Tooltip,{title:t?a:l,children:(0,r.jsx)("span",{children:(0,r.jsx)(h,{icon:n,onClick:e,className:i,disabled:t,dataTestId:o})})})}],902555)},625901,e=>{"use strict";var r=e.i(266027),l=e.i(621482),t=e.i(243652),a=e.i(602869),o=e.i(135214);let s=(0,t.createQueryKeys)("models"),n=(0,t.createQueryKeys)("modelHub"),i=(0,t.createQueryKeys)("allProxyModels");(0,t.createQueryKeys)("selectedTeamModels");let d=(0,t.createQueryKeys)("infiniteModels"),c=(0,t.createQueryKeys)("userModels");e.s(["useAllProxyModels",0,()=>{let{accessToken:e,userId:l,userRole:t}=(0,o.default)();return(0,r.useQuery)({queryKey:i.list({}),queryFn:async()=>await (0,a.modelAvailableCall)(e,l,t,!0,null,!0,!1,"expand"),enabled:!!(e&&l&&t)})},"useInfiniteModelInfo",0,(e=50,r)=>{let{accessToken:t,userId:s,userRole:n}=(0,o.default)();return(0,l.useInfiniteQuery)({queryKey:d.list({filters:{...s&&{userId:s},...n&&{userRole:n},size:e,...r&&{search:r}}}),queryFn:async({pageParam:l})=>await (0,a.modelInfoCall)(t,s,n,l,e,r),initialPageParam:1,getNextPageParam:e=>{if(e.current_page{let{accessToken:e}=(0,o.default)();return(0,r.useQuery)({queryKey:n.list({}),queryFn:async()=>await (0,a.modelHubCall)(e),enabled:!!e})},"useModelsInfo",0,(e=1,l=50,t,n,i,d,c)=>{let{accessToken:u,userId:m,userRole:h}=(0,o.default)();return(0,r.useQuery)({queryKey:s.list({filters:{...m&&{userId:m},...h&&{userRole:h},page:e,size:l,...t&&{search:t},...n&&{modelId:n},...i&&{teamId:i},...d&&{sortBy:d},...c&&{sortOrder:c}}}),queryFn:async()=>await (0,a.modelInfoCall)(u,m,h,e,l,t,n,i,d,c),enabled:!!(u&&m&&h)})},"useUserModels",0,()=>{let{accessToken:e,userId:l,userRole:t}=(0,o.default)();return(0,r.useQuery)({queryKey:c.list({}),queryFn:async()=>(await (0,a.modelAvailableCall)(e,l,t)).data.map(e=>e.id),enabled:!!(e&&l&&t)})}])},738014,e=>{"use strict";var r=e.i(135214),l=e.i(602869),t=e.i(266027);let a=(0,e.i(243652).createQueryKeys)("users");e.s(["useCurrentUser",0,()=>{let{accessToken:e,userId:o}=(0,r.default)();return(0,t.useQuery)({queryKey:a.detail(o),queryFn:async()=>await (0,l.userGetInfoV2)(e),enabled:!!(e&&o)})}])},162386,e=>{"use strict";var r=e.i(843476),l=e.i(625901),t=e.i(109799),a=e.i(785242),o=e.i(738014),s=e.i(199133),n=e.i(981339),i=e.i(592968);let d={label:"All Proxy Models",value:"all-proxy-models"},c={label:"No Default Models",value:"no-default-models"},u=[d,c],m={user:({allProxyModels:e,userModels:r,options:l})=>r&&l?.includeUserModels?r:[],team:({allProxyModels:e,selectedOrganization:r,userModels:l})=>r?r.models.includes(d.value)||0===r.models.length?e:e.filter(e=>r.models.includes(e)):e??[],organization:({allProxyModels:e})=>e,global:({allProxyModels:e})=>e};e.s(["ModelSelect",0,e=>{let{teamID:h,organizationID:p,options:g,context:x,dataTestId:b,value:f=[],onChange:y,style:v}=e,{includeUserModels:C,showAllTeamModelsOption:w,showAllProxyModelsOverride:j,includeSpecialOptions:k}=g||{},{data:S,isLoading:N}=(0,l.useAllProxyModels)(),{data:_,isLoading:I}=(0,a.useTeam)(h),{data:M,isLoading:O}=(0,t.useOrganization)(p),{data:F,isLoading:T}=(0,o.useCurrentUser)(),E=e=>u.some(r=>r.value===e),A=f.some(E),P=M?.models.includes(d.value)||M?.models.length===0;if(N||I||O||T)return(0,r.jsx)(n.Skeleton.Input,{active:!0,block:!0});let{wildcard:L,regular:R}=(e=>{let r=[],l=[];for(let t of e)t.endsWith("/*")?r.push(t):l.push(t);return{wildcard:r,regular:l}})(((e,r,l)=>{let t=Array.from(new Map(e.map(e=>[e.id,e])).values()).map(e=>e.id);if(r.options?.showAllProxyModelsOverride)return t;let a=m[r.context];return a?a({allProxyModels:t,...l,options:r.options}):[]})(S?.data??[],e,{selectedTeam:_,selectedOrganization:M,userModels:F?.models}));return(0,r.jsx)(s.Select,{"data-testid":b,value:f,onChange:e=>{let r=e.filter(E);y(r.length>0?[r[r.length-1]]:e)},style:v,options:[...k?[{label:(0,r.jsx)("span",{children:"Special Options"}),title:"Special Options",options:[...j||P&&k||"global"===x?[{label:(0,r.jsx)("span",{children:"All Proxy Models"}),value:d.value,disabled:f.length>0&&f.some(e=>E(e)&&e!==d.value),key:d.value}]:[],{label:(0,r.jsx)("span",{children:"No Default Models"}),value:c.value,disabled:f.length>0&&f.some(e=>E(e)&&e!==c.value),key:c.value}]}]:[],...L.length>0?[{label:(0,r.jsx)("span",{children:"Wildcard Options"}),title:"Wildcard Options",options:L.map(e=>{let l=e.replace("/*",""),t=l.charAt(0).toUpperCase()+l.slice(1);return{label:(0,r.jsx)("span",{children:`All ${t} models`}),value:e,disabled:A}})}]:[],{label:(0,r.jsx)("span",{children:"Models"}),title:"Models",options:R.map(e=>({label:(0,r.jsx)("span",{children:e}),value:e,disabled:A}))}],mode:"multiple",placeholder:"Select Models",allowClear:!0,maxTagCount:"responsive",maxTagPlaceholder:e=>(0,r.jsx)(i.Tooltip,{styles:{root:{pointerEvents:"none"}},title:e.map(({value:e})=>e).join(", "),children:(0,r.jsxs)("span",{children:["+",e.length," more"]})})})}],162386)},294612,e=>{"use strict";var r=e.i(843476),l=e.i(100486),t=e.i(827252),a=e.i(213205),o=e.i(771674),s=e.i(464571),n=e.i(770914),i=e.i(291542),d=e.i(262218),c=e.i(592968),u=e.i(898586),m=e.i(902555);let{Text:h}=u.Typography;e.s(["default",0,function({members:e,canEdit:u,onEdit:p,onDelete:g,onAddMember:x,roleColumnTitle:b="Role",roleTooltip:f,extraColumns:y=[],showDeleteForMember:v,emptyText:C}){let w=[{title:"User Email",dataIndex:"user_email",key:"user_email",render:e=>(0,r.jsx)(h,{children:e||"-"})},{title:"User ID",dataIndex:"user_id",key:"user_id",render:e=>"default_user_id"===e?(0,r.jsx)(d.Tag,{color:"blue",children:"Default Proxy Admin"}):(0,r.jsx)(h,{children:e||"-"})},{title:f?(0,r.jsxs)(n.Space,{direction:"horizontal",children:[b,(0,r.jsx)(c.Tooltip,{title:f,children:(0,r.jsx)(t.InfoCircleOutlined,{})})]}):b,dataIndex:"role",key:"role",render:e=>(0,r.jsxs)(n.Space,{children:[e?.toLowerCase()==="admin"||e?.toLowerCase()==="org_admin"?(0,r.jsx)(l.CrownOutlined,{}):(0,r.jsx)(o.UserOutlined,{}),(0,r.jsx)(h,{style:{textTransform:"capitalize"},children:e||"-"})]})},...y,{title:"Actions",key:"actions",fixed:"right",width:120,render:(e,l)=>u?(0,r.jsxs)(n.Space,{children:[(0,r.jsx)(m.default,{variant:"Edit",tooltipText:"Edit member",dataTestId:"edit-member",onClick:()=>p(l)}),(!v||v(l))&&(0,r.jsx)(m.default,{variant:"Delete",tooltipText:"Delete member",dataTestId:"delete-member",onClick:()=>g(l)})]}):null}];return(0,r.jsxs)(n.Space,{direction:"vertical",style:{width:"100%"},children:[(0,r.jsxs)("span",{className:"inline-flex text-sm text-gray-700",children:[e.length," Member",1!==e.length?"s":""]}),(0,r.jsx)(i.Table,{columns:w,dataSource:e,rowKey:e=>e.user_id??e.user_email??JSON.stringify(e),pagination:!1,size:"small",scroll:{x:"max-content"},locale:C?{emptyText:C}:void 0}),x&&u&&(0,r.jsx)(s.Button,{icon:(0,r.jsx)(a.UserAddOutlined,{}),type:"primary",onClick:x,children:"Add Member"})]})}])},907308,276173,e=>{"use strict";var r=e.i(843476),l=e.i(271645),t=e.i(212931),a=e.i(808613),o=e.i(464571),s=e.i(199133),n=e.i(592968),i=e.i(213205),d=e.i(374009),c=e.i(602869);e.s(["default",0,({isVisible:e,onCancel:u,onSubmit:m,accessToken:h,title:p="Add Team Member",roles:g=[{label:"admin",value:"admin",description:"Admin role. Can create team keys, add members, and manage settings."},{label:"user",value:"user",description:"User role. Can view team info, but not manage it."}],defaultRole:x="user",teamId:b})=>{let[f]=a.Form.useForm(),[y,v]=(0,l.useState)([]),[C,w]=(0,l.useState)(!1),[j,k]=(0,l.useState)("user_email"),[S,N]=(0,l.useState)(!1),_=async(e,r)=>{if(!e)return void v([]);w(!0);try{let l=new URLSearchParams;if(l.append(r,e),b&&l.append("team_id",b),null==h)return;let t=(await (0,c.userFilterUICall)(h,l)).map(e=>({label:"user_email"===r?`${e.user_email}`:`${e.user_id}`,value:"user_email"===r?e.user_email:e.user_id,user:e}));v(t)}catch(e){console.error("Error fetching users:",e)}finally{w(!1)}},I=(0,l.useCallback)((0,d.default)((e,r)=>_(e,r),300),[]),M=(e,r)=>{k(r),I(e,r)},O=(e,r)=>{let l=r.user;f.setFieldsValue({user_email:l.user_email,user_id:l.user_id,role:f.getFieldValue("role")})},F=async e=>{N(!0);try{await m(e)}finally{N(!1)}};return(0,r.jsx)(t.Modal,{title:p,open:e,onCancel:()=>{f.resetFields(),v([]),u()},footer:null,width:800,maskClosable:!S,children:(0,r.jsxs)(a.Form,{form:f,onFinish:F,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",initialValues:{role:x},children:[(0,r.jsx)(a.Form.Item,{label:"Email",name:"user_email",className:"mb-4",children:(0,r.jsx)(s.Select,{showSearch:!0,className:"w-full",placeholder:"Search by email",filterOption:!1,onSearch:e=>M(e,"user_email"),onSelect:(e,r)=>O(e,r),options:"user_email"===j?y:[],loading:C,allowClear:!0,"data-testid":"member-email-search"})}),(0,r.jsx)("div",{className:"text-center mb-4",children:"OR"}),(0,r.jsx)(a.Form.Item,{label:"User ID",name:"user_id",className:"mb-4",children:(0,r.jsx)(s.Select,{showSearch:!0,className:"w-full",placeholder:"Search by user ID",filterOption:!1,onSearch:e=>M(e,"user_id"),onSelect:(e,r)=>O(e,r),options:"user_id"===j?y:[],loading:C,allowClear:!0})}),(0,r.jsx)(a.Form.Item,{label:"Member Role",name:"role",className:"mb-4",children:(0,r.jsx)(s.Select,{defaultValue:x,children:g.map(e=>(0,r.jsx)(s.Select.Option,{value:e.value,children:(0,r.jsxs)(n.Tooltip,{title:e.description,children:[(0,r.jsx)("span",{className:"font-medium",children:e.label}),(0,r.jsxs)("span",{className:"ml-2 text-gray-500 text-sm",children:["- ",e.description]})]})},e.value))})}),(0,r.jsx)("div",{className:"text-right mt-4",children:(0,r.jsx)(o.Button,{type:"primary",htmlType:"submit",icon:(0,r.jsx)(i.UserAddOutlined,{}),loading:S,children:S?"Adding...":"Add Member"})})]})})}],907308);var u=e.i(599724),m=e.i(779241),h=e.i(435451),p=e.i(860585);e.s(["default",0,({visible:e,onCancel:n,onSubmit:i,initialData:d,mode:c,config:g})=>{let x,[b]=a.Form.useForm(),[f,y]=(0,l.useState)(!1);console.log("Initial Data:",d),(0,l.useEffect)(()=>{if(e)if("edit"===c&&d){let e={...d,role:d.role||g.defaultRole,max_budget_in_team:d.max_budget_in_team||null,tpm_limit:d.tpm_limit||null,rpm_limit:d.rpm_limit||null,budget_duration:d.budget_duration||null,allowed_models:d.allowed_models||[]};console.log("Setting form values:",e),b.setFieldsValue(e)}else b.resetFields(),b.setFieldsValue({role:g.defaultRole||g.roleOptions[0]?.value})},[e,d,c,b,g.defaultRole,g.roleOptions]);let v=async e=>{try{y(!0);let r=Object.entries(e).reduce((e,[r,l])=>{if("string"==typeof l){let t=l.trim();return""===t&&("max_budget_in_team"===r||"tpm_limit"===r||"rpm_limit"===r)?{...e,[r]:null}:{...e,[r]:t}}return{...e,[r]:l}},{});console.log("Submitting form data:",r),await Promise.resolve(i(r)),b.resetFields()}catch(e){console.error("Form submission error:",e)}finally{y(!1)}};return(0,r.jsx)(t.Modal,{title:g.title||("add"===c?"Add Member":"Edit Member"),open:e,width:1e3,footer:null,onCancel:n,children:(0,r.jsxs)(a.Form,{form:b,onFinish:v,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[g.showEmail&&(0,r.jsx)(a.Form.Item,{label:"Email",name:"user_email",className:"mb-4",rules:[{type:"email",message:"Please enter a valid email!"}],children:(0,r.jsx)(m.TextInput,{placeholder:"user@example.com"})}),g.showEmail&&g.showUserId&&(0,r.jsx)("div",{className:"text-center mb-4",children:(0,r.jsx)(u.Text,{children:"OR"})}),g.showUserId&&(0,r.jsx)(a.Form.Item,{label:"User ID",name:"user_id",className:"mb-4",children:(0,r.jsx)(m.TextInput,{placeholder:"user_123"})}),(0,r.jsx)(a.Form.Item,{label:(0,r.jsxs)("div",{className:"flex items-center gap-2",children:[(0,r.jsx)("span",{children:"Role"}),"edit"===c&&d&&(0,r.jsxs)("span",{className:"text-gray-500 text-sm",children:["(Current: ",(x=d.role,g.roleOptions.find(e=>e.value===x)?.label||x),")"]})]}),name:"role",className:"mb-4",rules:[{required:!0,message:"Please select a role!"}],children:(0,r.jsx)(s.Select,{children:"edit"===c&&d?[...g.roleOptions.filter(e=>e.value===d.role),...g.roleOptions.filter(e=>e.value!==d.role)].map(e=>(0,r.jsx)(s.Select.Option,{value:e.value,children:e.label},e.value)):g.roleOptions.map(e=>(0,r.jsx)(s.Select.Option,{value:e.value,children:e.label},e.value))})}),g.additionalFields?.map(e=>(0,r.jsx)(a.Form.Item,{label:e.label,name:e.name,className:"mb-4",rules:e.rules,children:(e=>{switch(e.type){case"input":return(0,r.jsx)(m.TextInput,{placeholder:e.placeholder});case"numerical":return(0,r.jsx)(h.default,{step:e.step||1,min:e.min||0,style:{width:"100%"},placeholder:e.placeholder||"Enter a numerical value"});case"select":return(0,r.jsx)(s.Select,{children:e.options?.map(e=>(0,r.jsx)(s.Select.Option,{value:e.value,children:e.label},e.value))});case"multi-select":return(0,r.jsx)(s.Select,{mode:"multiple",placeholder:e.placeholder||"Select options",options:e.options,allowClear:!0});case"budget-duration":return(0,r.jsx)(p.default,{});default:return null}})(e)},e.name)),(0,r.jsxs)("div",{className:"text-right mt-6",children:[(0,r.jsx)(o.Button,{onClick:n,className:"mr-2",disabled:f,children:"Cancel"}),(0,r.jsx)(o.Button,{type:"default",htmlType:"submit",loading:f,children:"add"===c?f?"Adding...":"Add Member":f?"Saving...":"Save Changes"})]})]})})}],276173)},973095,e=>{"use strict";var r=e.i(843476),l=e.i(502501),t=e.i(135214),a=e.i(936578),o=e.i(271645);function s(){let{isLoading:e,isAuthorized:o}=(0,t.default)();return e||!o?(0,r.jsx)(a.default,{}):(0,r.jsx)(l.default,{})}e.s(["default",0,function(){return(0,r.jsx)(o.Suspense,{fallback:(0,r.jsx)(a.default,{}),children:(0,r.jsx)(s,{})})}])}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/0~~y94vmu8z5d.js b/litellm/proxy/_experimental/out/_next/static/chunks/0~~y94vmu8z5d.js new file mode 100644 index 00000000000..c14bc1eed81 --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/0~~y94vmu8z5d.js @@ -0,0 +1 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,362024,e=>{"use strict";var t=e.i(988122);e.s(["Collapse",()=>t.default])},211576,e=>{"use strict";var t=e.i(131757);e.s(["Col",()=>t.default])},178654,e=>{"use strict";let t=e.i(211576).Col;e.s(["Col",0,t],178654)},621192,e=>{"use strict";let t=e.i(264042).Row;e.s(["Row",0,t],621192)},263147,e=>{"use strict";var t=e.i(266027),l=e.i(243652),i=e.i(602869),r=e.i(431703),s=e.i(708347),a=e.i(135214);let n=(0,l.createQueryKeys)("accessGroups"),o=async e=>{let t=(0,i.getProxyBaseUrl)(),l=`${t}/v1/access_group`,s=await fetch(l,{method:"GET",headers:{[(0,i.getGlobalLitellmHeaderName)()]:`Bearer ${e}`,"Content-Type":"application/json"}});if(!s.ok){let e=await s.json(),t=(0,r.deriveErrorMessage)(e);throw(0,i.handleError)(t),Error(t)}return s.json()};e.s(["accessGroupKeys",0,n,"useAccessGroups",0,()=>{let{accessToken:e,userRole:l}=(0,a.default)();return(0,t.useQuery)({queryKey:n.list({}),queryFn:async()=>o(e),enabled:!!e&&s.all_admin_roles.includes(l||"")})}])},304911,e=>{"use strict";var t=e.i(843476),l=e.i(262218);let{Text:i}=e.i(898586).Typography;e.s(["default",0,function({userId:e}){return"default_user_id"===e?(0,t.jsx)(l.Tag,{color:"blue",children:"Default Proxy Admin"}):(0,t.jsx)(i,{children:e})}])},564897,e=>{"use strict";e.i(247167);var t=e.i(931067),l=e.i(271645);let i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M696 480H328c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h368c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z"}},{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}}]},name:"minus-circle",theme:"outlined"};var r=e.i(9583),s=l.forwardRef(function(e,s){return l.createElement(r.default,(0,t.default)({},e,{ref:s,icon:i}))});e.s(["MinusCircleOutlined",0,s],564897)},823429,e=>{"use strict";let t=(0,e.i(475254).default)("square-pen",[["path",{d:"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7",key:"1m0v6g"}],["path",{d:"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z",key:"ohrbg2"}]]);e.s(["default",0,t])},987432,e=>{"use strict";e.i(247167);var t=e.i(931067),l=e.i(271645);let i={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M893.3 293.3L730.7 130.7c-7.5-7.5-16.7-13-26.7-16V112H144c-17.7 0-32 14.3-32 32v736c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V338.5c0-17-6.7-33.2-18.7-45.2zM384 184h256v104H384V184zm456 656H184V184h136v136c0 17.7 14.3 32 32 32h320c17.7 0 32-14.3 32-32V205.8l136 136V840zM512 442c-79.5 0-144 64.5-144 144s64.5 144 144 144 144-64.5 144-144-64.5-144-144-144zm0 224c-44.2 0-80-35.8-80-80s35.8-80 80-80 80 35.8 80 80-35.8 80-80 80z"}}]},name:"save",theme:"outlined"};var r=e.i(9583),s=l.forwardRef(function(e,s){return l.createElement(r.default,(0,t.default)({},e,{ref:s,icon:i}))});e.s(["SaveOutlined",0,s],987432)},21548,e=>{"use strict";var t=e.i(616303);e.s(["Empty",()=>t.default])},54943,e=>{"use strict";let t=(0,e.i(475254).default)("search",[["path",{d:"m21 21-4.34-4.34",key:"14j7rj"}],["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}]]);e.s(["default",0,t])},988846,e=>{"use strict";var t=e.i(54943);e.s(["SearchIcon",()=>t.default])},438100,e=>{"use strict";let t=(0,e.i(475254).default)("key",[["path",{d:"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4",key:"g0fldk"}],["path",{d:"m21 2-9.6 9.6",key:"1j0ho8"}],["circle",{cx:"7.5",cy:"15.5",r:"5.5",key:"yqb3hr"}]]);e.s(["KeyIcon",0,t],438100)},497650,e=>{"use strict";var t=e.i(309821);e.s(["Progress",()=>t.default])},95684,e=>{"use strict";var t=e.i(165370);e.s(["Pagination",()=>t.default])},897565,166452,e=>{"use strict";let t=(0,e.i(475254).default)("layers",[["path",{d:"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z",key:"zw3jo"}],["path",{d:"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12",key:"1wduqc"}],["path",{d:"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17",key:"kqbvx6"}]]);e.s(["LayersIcon",0,t],897565);var l=e.i(98740);e.s(["UsersIcon",()=>l.default],166452)},516430,e=>{"use strict";let t=(0,e.i(475254).default)("arrow-left",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);e.s(["ArrowLeftIcon",0,t],516430)},44068,e=>{"use strict";var t=e.i(823429);e.s(["EditIcon",()=>t.default])},454587,e=>{"use strict";var t=e.i(843476),l=e.i(510674),i=e.i(785242),r=e.i(56456),s=e.i(646563),a=e.i(464571),n=e.i(175712),o=e.i(525720),d=e.i(311451),c=e.i(372943),m=e.i(95684),u=e.i(770914),p=e.i(482725),h=e.i(291542),j=e.i(262218),x=e.i(368869),y=e.i(592968),g=e.i(898586),f=e.i(897565),_=e.i(988846),b=e.i(271645),v=e.i(212931),w=e.i(808613);e.i(247167);var S=e.i(931067);let C={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M484 443.1V528h-84.5c-4.1 0-7.5 3.1-7.5 7v42c0 3.8 3.4 7 7.5 7H484v84.9c0 3.9 3.2 7.1 7 7.1h42c3.9 0 7-3.2 7-7.1V584h84.5c4.1 0 7.5-3.2 7.5-7v-42c0-3.9-3.4-7-7.5-7H540v-84.9c0-3.9-3.1-7.1-7-7.1h-42c-3.8 0-7 3.2-7 7.1zm396-144.7H521L403.7 186.2a8.15 8.15 0 00-5.5-2.2H144c-17.7 0-32 14.3-32 32v592c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V330.4c0-17.7-14.3-32-32-32zM840 768H184V256h188.5l119.6 114.4H840V768z"}}]},name:"folder-add",theme:"outlined"};var k=e.i(9583),I=b.forwardRef(function(e,t){return b.createElement(k.default,(0,S.default)({},e,{ref:t,icon:C}))}),F=e.i(888259),T=e.i(954616),M=e.i(912598),L=e.i(602869),E=e.i(431703),B=e.i(135214);let P=async(e,t)=>{let l=(0,L.getProxyBaseUrl)(),i=`${l}/project/new`,r=await fetch(i,{method:"POST",headers:{[(0,L.getGlobalLitellmHeaderName)()]:`Bearer ${e}`,"Content-Type":"application/json"},body:JSON.stringify(t)});if(!r.ok){let e=await r.json(),t=(0,E.deriveErrorMessage)(e);throw(0,L.handleError)(t),Error(t)}return r.json()};var z=e.i(560445),D=e.i(178654),O=e.i(362024),A=e.i(312361),H=e.i(28651),N=e.i(621192),G=e.i(199133),R=e.i(790848),V=e.i(564897),q=e.i(702597),K=e.i(355619);function $({form:e}){let{accessToken:l,userId:r,userRole:n}=(0,B.default)(),{data:c}=(0,i.useTeams)(),[m,p]=(0,b.useState)(null),[h,j]=(0,b.useState)([]),[x,y]=(0,b.useState)([]);(0,b.useEffect)(()=>{(async()=>{if(l)try{let e=(await (0,L.getGuardrailsList)(l)).guardrails.map(e=>e.guardrail_name);y(e)}catch(e){console.error("Failed to fetch guardrails:",e)}})()},[l]);let f=w.Form.useWatch("team_id",e);return(0,b.useEffect)(()=>{if(f&&c){let e=c.find(e=>e.team_id===f)??null;e&&e.team_id!==m?.team_id&&p(e)}},[f,c,m?.team_id]),(0,b.useEffect)(()=>{r&&n&&l&&m?(0,q.fetchTeamModels)(r,n,l,m.team_id).then(e=>{j(Array.from(new Set([...m.models??[],...e])))}):j([])},[m,l,r,n]),(0,t.jsxs)(w.Form,{form:e,layout:"vertical",name:"project_form",initialValues:{isBlocked:!1},style:{marginTop:24},children:[(0,t.jsx)(g.Typography.Text,{strong:!0,style:{fontSize:13,color:"#374151",textTransform:"uppercase",letterSpacing:"0.05em"},children:"Basic Information"}),(0,t.jsx)(A.Divider,{style:{marginTop:8,marginBottom:16}}),(0,t.jsxs)(N.Row,{gutter:24,children:[(0,t.jsx)(D.Col,{span:12,children:(0,t.jsx)(w.Form.Item,{name:"project_alias",label:"Project Name",rules:[{required:!0,message:"Please enter a project name"}],children:(0,t.jsx)(d.Input,{placeholder:"e.g. Customer Support Bot"})})}),(0,t.jsx)(D.Col,{span:12,children:(0,t.jsx)(w.Form.Item,{name:"team_id",label:"Team",rules:[{required:!0,message:"Please select a team"}],children:(0,t.jsx)(G.Select,{showSearch:!0,placeholder:"Search or select a team",onChange:t=>{p(c?.find(e=>e.team_id===t)??null),e.setFieldValue("models",[])},allowClear:!0,optionLabelProp:"label",filterOption:(e,t)=>{let l=c?.find(e=>e.team_id===t?.value);if(!l)return!1;let i=e.toLowerCase().trim();return(l.team_alias||"").toLowerCase().includes(i)||l.team_id.toLowerCase().includes(i)},children:c?.map(e=>(0,t.jsxs)(G.Select.Option,{value:e.team_id,label:e.team_alias||e.team_id,children:[(0,t.jsx)("span",{style:{fontWeight:500},children:e.team_alias})," ",(0,t.jsxs)("span",{style:{color:"#9ca3af"},children:["(",e.team_id,")"]})]},e.team_id))})})})]}),(0,t.jsx)(N.Row,{children:(0,t.jsx)(D.Col,{span:24,children:(0,t.jsx)(w.Form.Item,{name:"description",label:"Description",children:(0,t.jsx)(d.Input.TextArea,{placeholder:"Describe the purpose of this project",rows:3})})})}),(0,t.jsx)(N.Row,{children:(0,t.jsx)(D.Col,{span:24,children:(0,t.jsx)(w.Form.Item,{name:"models",label:"Allowed Models (scoped to selected team's models)",help:m?void 0:"Select a team first to see available models",children:(0,t.jsxs)(G.Select,{mode:"multiple",placeholder:m?"Select models":"Select a team first",disabled:!m,allowClear:!0,maxTagCount:"responsive",onChange:t=>{t.includes("all-team-models")&&e.setFieldsValue({models:["all-team-models"]})},children:[(0,t.jsx)(G.Select.Option,{value:"all-team-models",children:"All Team Models"},"all-team-models"),h.map(e=>(0,t.jsx)(G.Select.Option,{value:e,children:(0,K.getModelDisplayName)(e)},e))]})})})}),(0,t.jsx)(N.Row,{gutter:24,children:(0,t.jsx)(D.Col,{span:12,children:(0,t.jsx)(w.Form.Item,{name:"max_budget",label:"Max Budget (USD)",children:(0,t.jsx)(H.InputNumber,{prefix:"$",style:{width:"100%"},placeholder:"0.00",min:0,precision:2})})})}),(0,t.jsx)(N.Row,{children:(0,t.jsx)(D.Col,{span:24,children:(0,t.jsx)(O.Collapse,{ghost:!0,style:{background:"#f9fafb",borderRadius:8,border:"1px solid #e5e7eb"},items:[{key:"1",label:(0,t.jsx)(g.Typography.Text,{strong:!0,style:{color:"#374151"},children:"Advanced Settings"}),children:(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(o.Flex,{align:"center",gap:12,children:[(0,t.jsx)(g.Typography.Text,{strong:!0,children:"Block Project"}),(0,t.jsx)(w.Form.Item,{name:"isBlocked",valuePropName:"checked",noStyle:!0,children:(0,t.jsx)(R.Switch,{})})]}),(0,t.jsx)(w.Form.Item,{noStyle:!0,shouldUpdate:(e,t)=>e.isBlocked!==t.isBlocked,children:({getFieldValue:e})=>e("isBlocked")?(0,t.jsx)(z.Alert,{banner:!0,type:"warning",showIcon:!0,message:"All API requests using keys under this project will be rejected.",style:{marginTop:12}}):null}),(0,t.jsx)(A.Divider,{}),(0,t.jsx)(w.Form.Item,{label:"Guardrails",name:"guardrails",help:"Select existing guardrails or enter new ones",children:(0,t.jsx)(G.Select,{mode:"tags",style:{width:"100%"},placeholder:"Select or enter guardrails",options:x.map(e=>({value:e,label:e}))})}),(0,t.jsx)(A.Divider,{}),(0,t.jsx)(g.Typography.Text,{strong:!0,style:{display:"block",marginBottom:12},children:"Model-Specific Limits"}),(0,t.jsx)(w.Form.List,{name:"modelLimits",children:(l,{add:i,remove:r})=>(0,t.jsxs)(t.Fragment,{children:[l.map(({key:l,name:i,...s})=>(0,t.jsxs)(u.Space,{style:{display:"flex",marginBottom:8},align:"baseline",children:[(0,t.jsx)(w.Form.Item,{...s,name:[i,"model"],rules:[{required:!0,message:"Missing model"},{validator:(t,l)=>l&&(e.getFieldValue("modelLimits")??[]).filter(e=>e?.model===l).length>1?Promise.reject(Error("Duplicate model")):Promise.resolve()}],children:(0,t.jsx)(d.Input,{placeholder:"Model name (e.g. gpt-4)"})}),(0,t.jsx)(w.Form.Item,{...s,name:[i,"tpm"],children:(0,t.jsx)(H.InputNumber,{placeholder:"TPM Limit",min:0})}),(0,t.jsx)(w.Form.Item,{...s,name:[i,"rpm"],children:(0,t.jsx)(H.InputNumber,{placeholder:"RPM Limit",min:0})}),(0,t.jsx)(V.MinusCircleOutlined,{onClick:()=>r(i),style:{color:"#ef4444"}})]},l)),(0,t.jsx)(w.Form.Item,{children:(0,t.jsx)(a.Button,{type:"dashed",onClick:()=>i(),block:!0,icon:(0,t.jsx)(s.PlusOutlined,{}),children:"Add Model Limit"})})]})}),(0,t.jsx)(A.Divider,{}),(0,t.jsx)(g.Typography.Text,{strong:!0,style:{display:"block",marginBottom:12},children:"Metadata"}),(0,t.jsx)(w.Form.List,{name:"metadata",children:(l,{add:i,remove:r})=>(0,t.jsxs)(t.Fragment,{children:[l.map(({key:l,name:i,...s})=>(0,t.jsxs)(u.Space,{style:{display:"flex",marginBottom:8},align:"baseline",children:[(0,t.jsx)(w.Form.Item,{...s,name:[i,"key"],rules:[{required:!0,message:"Missing key"},{validator:(t,l)=>l&&(e.getFieldValue("metadata")??[]).filter(e=>e?.key===l).length>1?Promise.reject(Error("Duplicate key")):Promise.resolve()}],children:(0,t.jsx)(d.Input,{placeholder:"Key"})}),(0,t.jsx)(w.Form.Item,{...s,name:[i,"value"],rules:[{required:!0,message:"Missing value"}],children:(0,t.jsx)(d.Input,{placeholder:"Value"})}),(0,t.jsx)(V.MinusCircleOutlined,{onClick:()=>r(i),style:{color:"#ef4444"}})]},l)),(0,t.jsx)(w.Form.Item,{children:(0,t.jsx)(a.Button,{type:"dashed",onClick:()=>i(),block:!0,icon:(0,t.jsx)(s.PlusOutlined,{}),children:"Add Key-Value Pair"})})]})})]})}]})})})]})}function U(e){let t={},l={};for(let i of e.modelLimits??[])i.model&&(null!=i.rpm&&(t[i.model]=i.rpm),null!=i.tpm&&(l[i.model]=i.tpm));let i={};for(let t of e.metadata??[])t.key&&(i[t.key]=t.value);return{project_alias:e.project_alias,description:e.description,models:e.models??[],max_budget:e.max_budget,blocked:e.isBlocked??!1,...e.guardrails&&e.guardrails.length>0&&{guardrails:e.guardrails},...Object.keys(t).length>0&&{model_rpm_limit:t},...Object.keys(l).length>0&&{model_tpm_limit:l},...Object.keys(i).length>0&&{metadata:i}}}function Q({isOpen:e,onClose:i}){let[r]=w.Form.useForm(),s=(()=>{let{accessToken:e}=(0,B.default)(),t=(0,M.useQueryClient)();return(0,T.useMutation)({mutationFn:async t=>{if(!e)throw Error("Access token is required");return P(e,t)},onSuccess:()=>{t.invalidateQueries({queryKey:l.projectKeys.all})}})})(),n=async()=>{try{let e=await r.validateFields(),t={...U(e),team_id:e.team_id};s.mutate(t,{onSuccess:()=>{F.default.success("Project created successfully"),r.resetFields(),i()},onError:e=>{F.default.error(e.message||"Failed to create project")}})}catch(e){console.error("Validation failed:",e)}},o=()=>{r.resetFields(),i()};return(0,t.jsx)(v.Modal,{title:(0,t.jsx)(g.Typography.Text,{strong:!0,style:{fontSize:18},children:"Create New Project"}),open:e,onCancel:o,width:720,destroyOnHidden:!0,footer:[(0,t.jsx)(a.Button,{onClick:o,children:"Cancel"},"cancel"),(0,t.jsx)(a.Button,{type:"primary",icon:(0,t.jsx)(I,{}),loading:s.isPending,onClick:n,children:"Create Project"},"submit")],children:(0,t.jsx)($,{form:r})})}var W=e.i(266027),J=e.i(708347);let X=async(e,t)=>{let l=(0,L.getProxyBaseUrl)(),i=`${l}/project/info?project_id=${encodeURIComponent(t)}`,r=await fetch(i,{method:"GET",headers:{[(0,L.getGlobalLitellmHeaderName)()]:`Bearer ${e}`,"Content-Type":"application/json"}});if(!r.ok){let e=await r.json(),t=(0,E.deriveErrorMessage)(e);throw(0,L.handleError)(t),Error(t)}return r.json()};var Y=e.i(869216),Z=e.i(21548),ee=e.i(497650),et=e.i(584935),el=e.i(516430);let ei=(0,e.i(475254).default)("dollar-sign",[["line",{x1:"12",x2:"12",y1:"2",y2:"22",key:"7eqyqh"}],["path",{d:"M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6",key:"1b0p4s"}]]);var er=e.i(44068),es=e.i(438100),ea=e.i(166452),en=e.i(304911),eo=e.i(987432);let ed=async(e,t,l)=>{let i=(0,L.getProxyBaseUrl)(),r=`${i}/project/update`,s=await fetch(r,{method:"POST",headers:{[(0,L.getGlobalLitellmHeaderName)()]:`Bearer ${e}`,"Content-Type":"application/json"},body:JSON.stringify({project_id:t,...l})});if(!s.ok){let e=await s.json(),t=(0,E.deriveErrorMessage)(e);throw(0,L.handleError)(t),Error(t)}return s.json()};function ec({isOpen:e,project:i,onClose:r,onSuccess:s}){let[n]=w.Form.useForm(),o=(()=>{let{accessToken:e}=(0,B.default)(),t=(0,M.useQueryClient)();return(0,T.useMutation)({mutationFn:async({projectId:t,params:l})=>{if(!e)throw Error("Access token is required");return ed(e,t,l)},onSuccess:()=>{t.invalidateQueries({queryKey:l.projectKeys.all})}})})();(0,b.useEffect)(()=>{if(e&&i){let e=i.metadata??{},t=e.model_rpm_limit??{},l=e.model_tpm_limit??{},r=Array.isArray(e.guardrails)?e.guardrails:[],s=[];for(let e of new Set([...Object.keys(t),...Object.keys(l)]))s.push({model:e,rpm:t[e],tpm:l[e]});let a=new Set(["model_rpm_limit","model_tpm_limit","guardrails"]),o=[];for(let[t,l]of Object.entries(e))a.has(t)||o.push({key:t,value:String(l)});n.setFieldsValue({project_alias:i.project_alias??"",team_id:i.team_id??"",description:i.description??"",models:i.models??[],max_budget:i.litellm_budget_table?.max_budget??void 0,isBlocked:i.blocked,guardrails:r.length>0?r:void 0,modelLimits:s.length>0?s:void 0,metadata:o.length>0?o:void 0})}},[e,i,n]);let d=async()=>{try{let e=await n.validateFields(),t={...U(e),team_id:e.team_id};o.mutate({projectId:i.project_id,params:t},{onSuccess:()=>{F.default.success("Project updated successfully"),s?.(),r()},onError:e=>{F.default.error(e.message||"Failed to update project")}})}catch(e){console.error("Validation failed:",e)}};return(0,t.jsx)(v.Modal,{title:(0,t.jsx)(g.Typography.Text,{strong:!0,style:{fontSize:18},children:"Edit Project"}),open:e,onCancel:r,width:720,destroyOnHidden:!0,footer:[(0,t.jsx)(a.Button,{onClick:r,children:"Cancel"},"cancel"),(0,t.jsx)(a.Button,{type:"primary",icon:(0,t.jsx)(eo.SaveOutlined,{}),loading:o.isPending,onClick:d,children:"Save Changes"},"submit")],children:(0,t.jsx)($,{form:n})})}let{Title:em,Text:eu}=g.Typography,{Content:ep}=c.Layout;function eh({projectId:e,onBack:s}){let d,c,m,u,{data:h,isLoading:y}=(e=>{let{accessToken:t,userRole:i}=(0,B.default)(),r=(0,M.useQueryClient)();return(0,W.useQuery)({queryKey:l.projectKeys.detail(e),queryFn:async()=>X(t,e),enabled:!!(t&&e)&&J.all_admin_roles.includes(i||""),initialData:()=>{if(!e)return;let t=r.getQueryData(l.projectKeys.list({}));return t?.find(t=>t.project_id===e)}})})(e),{data:g}=(0,i.useTeam)(h?.team_id??void 0),f=g?.team_info??g,{token:_}=x.theme.useToken(),[v,w]=(0,b.useState)(!1),S=h?.spend??0,C=h?.litellm_budget_table?.max_budget??null,k=null!=C&&C>0,I=k?Math.min(S/C*100,100):0,F=(0,b.useMemo)(()=>Object.entries(h?.model_spend??{}).map(([e,t])=>({model:e,spend:t})).sort((e,t)=>t.spend-e.spend),[h?.model_spend]);return y?(0,t.jsx)(ep,{style:{padding:_.paddingLG,paddingInline:2*_.paddingLG},children:(0,t.jsx)(o.Flex,{justify:"center",align:"center",style:{minHeight:300},children:(0,t.jsx)(p.Spin,{indicator:(0,t.jsx)(r.LoadingOutlined,{spin:!0}),size:"large"})})}):h?(0,t.jsxs)(ep,{style:{padding:_.paddingLG,paddingInline:2*_.paddingLG},children:[(0,t.jsxs)("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:24},children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:16},children:[(0,t.jsx)(a.Button,{icon:(0,t.jsx)(el.ArrowLeftIcon,{size:16}),onClick:s,type:"text"}),(0,t.jsxs)("div",{children:[(0,t.jsxs)(o.Flex,{align:"center",gap:8,children:[(0,t.jsx)(em,{level:2,style:{margin:0},children:h.project_alias??h.project_id}),(0,t.jsx)(j.Tag,{color:h.blocked?"red":"green",children:h.blocked?"Blocked":"Active"})]}),(0,t.jsxs)(eu,{type:"secondary",children:["ID: ",(0,t.jsx)(eu,{copyable:!0,children:h.project_id})]})]})]}),(0,t.jsx)(a.Button,{type:"primary",icon:(0,t.jsx)(er.EditIcon,{size:16}),onClick:()=>w(!0),children:"Edit Project"})]}),(0,t.jsx)(N.Row,{style:{marginBottom:24},children:(0,t.jsx)(n.Card,{children:(0,t.jsxs)(Y.Descriptions,{title:"Project Details",column:1,children:[(0,t.jsx)(Y.Descriptions.Item,{label:"Description",children:h.description||"—"}),(0,t.jsxs)(Y.Descriptions.Item,{label:"Created",children:[new Date(h.created_at).toLocaleString(),h.created_by&&(0,t.jsxs)(eu,{children:[" ","by"," ",(0,t.jsx)(en.default,{userId:h.created_by})]})]}),(0,t.jsxs)(Y.Descriptions.Item,{label:"Last Updated",children:[new Date(h.updated_at).toLocaleString(),h.updated_by&&(0,t.jsxs)(eu,{children:[" ","by"," ",(0,t.jsx)(en.default,{userId:h.updated_by})]})]})]})})}),(0,t.jsxs)(N.Row,{gutter:[16,16],style:{marginBottom:24},children:[(0,t.jsx)(D.Col,{xs:24,lg:8,children:(0,t.jsx)(n.Card,{title:(0,t.jsxs)(o.Flex,{align:"center",gap:8,children:[(0,t.jsx)(ei,{size:16}),"Budget"]}),style:{height:"100%"},children:(0,t.jsxs)(o.Flex,{vertical:!0,gap:16,children:[(0,t.jsxs)("div",{children:[(0,t.jsxs)(eu,{strong:!0,style:{fontSize:28,lineHeight:1},children:["$",S.toFixed(2)]}),(0,t.jsx)("br",{}),(0,t.jsx)(eu,{type:"secondary",children:k?`of $${C.toFixed(2)} budget`:"No budget limit"})]}),k&&(0,t.jsxs)("div",{children:[(0,t.jsx)(ee.Progress,{percent:Math.round(10*I)/10,strokeColor:I>=90?"#f5222d":I>=70?"#faad14":"#52c41a",showInfo:!1}),(0,t.jsxs)(eu,{type:"secondary",style:{fontSize:12},children:[(Math.round(10*I)/10).toFixed(1),"% utilized"]})]})]})})}),(0,t.jsx)(D.Col,{xs:24,lg:16,children:(0,t.jsx)(n.Card,{title:"Spend by Model",style:{height:"100%"},children:F.length>0?(0,t.jsx)(et.BarChart,{data:F,index:"model",categories:["spend"],colors:["cyan"],layout:"vertical",valueFormatter:e=>`$${e.toFixed(4)}`,yAxisWidth:140,showLegend:!1,style:{height:Math.max(40*F.length,120)}}):(0,t.jsx)(Z.Empty,{description:"No model spend recorded yet",image:Z.Empty.PRESENTED_IMAGE_SIMPLE})})})]}),(0,t.jsxs)(N.Row,{gutter:[16,16],style:{marginBottom:24},children:[(0,t.jsx)(D.Col,{xs:24,lg:12,children:(0,t.jsx)(n.Card,{title:(0,t.jsxs)(o.Flex,{align:"center",gap:8,children:[(0,t.jsx)(es.KeyIcon,{size:16}),"Keys"]}),style:{height:"100%"},children:(0,t.jsx)(Z.Empty,{description:"No keys to display",image:Z.Empty.PRESENTED_IMAGE_SIMPLE})})}),(0,t.jsx)(D.Col,{xs:24,lg:12,children:(0,t.jsx)(n.Card,{title:(0,t.jsxs)(o.Flex,{align:"center",gap:8,children:[(0,t.jsx)(ea.UsersIcon,{size:16}),"Team"]}),style:{height:"100%"},children:f?(d=f.max_budget??null,c=f.spend??0,u=(m=null!=d&&d>0)?Math.min(c/d*100,100):0,(0,t.jsxs)(o.Flex,{vertical:!0,gap:12,children:[(0,t.jsxs)("div",{children:[(0,t.jsx)(eu,{strong:!0,style:{fontSize:16},children:f.team_alias||f.team_id}),(0,t.jsx)("br",{}),(0,t.jsxs)(eu,{type:"secondary",style:{fontSize:12},children:["ID:"," ",(0,t.jsx)(eu,{copyable:!0,style:{fontSize:12},children:f.team_id})]})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)(eu,{type:"secondary",style:{fontSize:12,display:"block",marginBottom:4},children:"Models"}),(f.models?.length??0)>0?(0,t.jsx)(o.Flex,{wrap:"wrap",gap:4,style:{maxHeight:60,overflow:"hidden"},children:f.models?.map(e=>(0,t.jsx)(j.Tag,{style:{margin:0},children:e},e))}):(0,t.jsx)(eu,{type:"secondary",children:"All models"})]}),(0,t.jsxs)("div",{children:[(0,t.jsxs)(o.Flex,{justify:"space-between",align:"center",style:{marginBottom:2},children:[(0,t.jsx)(eu,{type:"secondary",style:{fontSize:12},children:"Spend"}),(0,t.jsxs)(eu,{style:{fontSize:12},children:["$",c.toFixed(2),m?(0,t.jsxs)(eu,{type:"secondary",style:{fontSize:12},children:[" ","/ $",d.toFixed(2)]}):(0,t.jsxs)(eu,{type:"secondary",style:{fontSize:12},children:[" ","(Unlimited)"]})]})]}),m&&(0,t.jsx)(ee.Progress,{percent:Math.round(10*u)/10,strokeColor:u>=90?"#f5222d":u>=70?"#faad14":"#52c41a",size:"small",showInfo:!1})]}),(0,t.jsxs)(o.Flex,{justify:"space-between",children:[(0,t.jsx)(eu,{type:"secondary",style:{fontSize:12},children:"Members"}),(0,t.jsx)(eu,{style:{fontSize:12},children:f.members_with_roles?.length??0})]})]})):h.team_id?(0,t.jsx)(o.Flex,{justify:"center",align:"center",style:{padding:16},children:(0,t.jsx)(p.Spin,{indicator:(0,t.jsx)(r.LoadingOutlined,{spin:!0}),size:"small"})}):(0,t.jsx)(Z.Empty,{description:"No team assigned",image:Z.Empty.PRESENTED_IMAGE_SIMPLE})})})]}),(0,t.jsx)(ec,{isOpen:v,project:h,onClose:()=>w(!1)})]}):(0,t.jsxs)(ep,{style:{padding:_.paddingLG,paddingInline:2*_.paddingLG},children:[(0,t.jsx)(a.Button,{icon:(0,t.jsx)(el.ArrowLeftIcon,{size:16}),onClick:s,type:"text",style:{marginBottom:16}}),(0,t.jsx)(Z.Empty,{description:"Project not found"})]})}let{Title:ej,Text:ex}=g.Typography,{Content:ey}=c.Layout;function eg(){let{token:e}=x.theme.useToken(),{data:c,isLoading:g}=(0,l.useProjects)(),{data:v,isLoading:w}=(0,i.useTeams)(),[S,C]=(0,b.useState)(null),[k,I]=(0,b.useState)(!1),[F,T]=(0,b.useState)(""),[M,L]=(0,b.useState)(1);(0,b.useEffect)(()=>{L(1)},[F]);let E=(0,b.useMemo)(()=>{let e=new Map;for(let t of v??[])e.set(t.team_id,t.team_alias??t.team_id);return e},[v]),B=(0,b.useMemo)(()=>{let e=c??[];if(!F)return e;let t=F.toLowerCase();return e.filter(e=>{let l=E.get(e.team_id??"")??"";return(e.project_alias??"").toLowerCase().includes(t)||e.project_id.toLowerCase().includes(t)||(e.description??"").toLowerCase().includes(t)||l.toLowerCase().includes(t)})},[c,F,E]),P=[{title:"ID",dataIndex:"project_id",key:"project_id",width:170,render:e=>(0,t.jsx)(y.Tooltip,{title:e,children:(0,t.jsx)(ex,{ellipsis:!0,className:"text-blue-500 bg-blue-50 hover:bg-blue-100 text-xs cursor-pointer",style:{fontSize:14,padding:"1px 8px"},onClick:()=>C(e),children:e})})},{title:"Name",dataIndex:"project_alias",key:"project_alias",sorter:(e,t)=>(e.project_alias??"").localeCompare(t.project_alias??""),render:e=>e??"—"},{title:"Team",key:"team",sorter:(e,t)=>{let l=E.get(e.team_id??"")??"",i=E.get(t.team_id??"")??"";return l.localeCompare(i)},render:(e,l)=>{if(!l.team_id)return"—";let i=E.get(l.team_id);return i||(w?(0,t.jsx)(p.Spin,{indicator:(0,t.jsx)(r.LoadingOutlined,{spin:!0}),size:"small"}):l.team_id)}},{title:"Models",key:"models",render:(e,l)=>{let i=l.models??[];return(0,t.jsx)(y.Tooltip,{title:i.length>0?i.join(", "):"No models",children:(0,t.jsx)(j.Tag,{color:"blue",style:{fontSize:14,padding:"2px 8px",margin:0},children:(0,t.jsxs)(o.Flex,{align:"center",gap:6,children:[(0,t.jsx)(f.LayersIcon,{size:14}),i.length]})})})}},{title:"Status",dataIndex:"blocked",key:"status",render:e=>(0,t.jsx)(j.Tag,{color:e?"red":"green",children:e?"Blocked":"Active"})},{title:"Created",dataIndex:"created_at",key:"created_at",sorter:(e,t)=>new Date(e.created_at).getTime()-new Date(t.created_at).getTime(),responsive:["lg"],render:e=>new Date(e).toLocaleDateString()},{title:"Updated",dataIndex:"updated_at",key:"updated_at",responsive:["xl"],render:e=>new Date(e).toLocaleDateString()}];return S?(0,t.jsx)(eh,{projectId:S,onBack:()=>C(null)}):(0,t.jsxs)(ey,{style:{padding:e.paddingLG,paddingInline:2*e.paddingLG},children:[(0,t.jsxs)(o.Flex,{justify:"space-between",align:"center",style:{marginBottom:16},children:[(0,t.jsxs)(u.Space,{direction:"vertical",size:0,children:[(0,t.jsx)(ej,{level:2,style:{margin:0},children:"Projects"}),(0,t.jsx)(ex,{type:"secondary",children:"Manage projects within your teams"})]}),(0,t.jsx)(a.Button,{type:"primary",icon:(0,t.jsx)(s.PlusOutlined,{}),onClick:()=>I(!0),children:"Create Project"})]}),(0,t.jsxs)(n.Card,{styles:{body:{padding:0}},children:[(0,t.jsxs)(o.Flex,{justify:"space-between",align:"center",style:{padding:"12px 16px"},children:[(0,t.jsx)(d.Input,{prefix:(0,t.jsx)(_.SearchIcon,{size:16}),placeholder:"Search projects by name, ID, description, or team...",style:{maxWidth:400},value:F,onChange:e=>T(e.target.value),allowClear:!0}),(0,t.jsx)(m.Pagination,{current:M,total:B.length,pageSize:10,onChange:e=>L(e),size:"small",showTotal:e=>`${e} projects`,showSizeChanger:!1})]}),(0,t.jsx)(h.Table,{columns:P,dataSource:B.slice((M-1)*10,10*M),rowKey:"project_id",loading:g,pagination:!1})]}),(0,t.jsx)(Q,{isOpen:k,onClose:()=>I(!1)})]})}e.s(["default",0,function(){return(0,B.default)(),(0,t.jsx)(eg,{})}],454587)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/101az3fsw7lje.js b/litellm/proxy/_experimental/out/_next/static/chunks/101az3fsw7lje.js new file mode 100644 index 00000000000..66ecae7dd9c --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/101az3fsw7lje.js @@ -0,0 +1 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,126568,(e,t,n)=>{"use strict";var r=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,i=/\n/g,l=/^\s*/,o=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,a=/^:\s*/,u=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,s=/^[;\s]*/,c=/^\s+|\s+$/g;function f(e){return e?e.replace(c,""):""}t.exports=function(e,t){if("string"!=typeof e)throw TypeError("First argument must be a string");if(!e)return[];t=t||{};var n=1,c=1;function p(e){var t=e.match(i);t&&(n+=t.length);var r=e.lastIndexOf("\n");c=~r?e.length-r:c+e.length}function d(){var e={line:n,column:c};return function(t){return t.position=new h(e),g(l),t}}function h(e){this.start=e,this.end={line:n,column:c},this.source=t.source}function m(r){var i=Error(t.source+":"+n+":"+c+": "+r);if(i.reason=r,i.filename=t.source,i.line=n,i.column=c,i.source=e,t.silent);else throw i}function g(t){var n=t.exec(e);if(n){var r=n[0];return p(r),e=e.slice(r.length),n}}function y(e){var t;for(e=e||[];t=v();)!1!==t&&e.push(t);return e}function v(){var t=d();if("/"==e.charAt(0)&&"*"==e.charAt(1)){for(var n=2;""!=e.charAt(n)&&("*"!=e.charAt(n)||"/"!=e.charAt(n+1));)++n;if(n+=2,""===e.charAt(n-1))return m("End of comment missing");var r=e.slice(2,n-2);return c+=2,p(r),e=e.slice(n),c+=2,t({type:"comment",comment:r})}}h.prototype.content=e,g(l);var x,k=[];for(y(k);x=function(){var e=d(),t=g(o);if(t){if(v(),!g(a))return m("property missing ':'");var n=g(u),i=e({type:"declaration",property:f(t[0].replace(r,"")),value:n?f(n[0].replace(r,"")):""});return g(s),i}}();)!1!==x&&(k.push(x),y(k));return k}},270454,(e,t,n)=>{"use strict";var r=e.e&&e.e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(n,"__esModule",{value:!0}),n.default=function(e,t){let n=null;if(!e||"string"!=typeof e)return n;let r=(0,i.default)(e),l="function"==typeof t;return r.forEach(e=>{if("declaration"!==e.type)return;let{property:r,value:i}=e;l?t(r,i,e):i&&((n=n||{})[r]=i)}),n};let i=r(e.r(126568))},965185,(e,t,n)=>{"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.camelCase=void 0;var r=/^--[a-zA-Z0-9_-]+$/,i=/-([a-z])/g,l=/^[^-]+$/,o=/^-(webkit|moz|ms|o|khtml)-/,a=/^-(ms)-/,u=function(e,t){return t.toUpperCase()},s=function(e,t){return"".concat(t,"-")};n.camelCase=function(e,t){var n;return(void 0===t&&(t={}),!(n=e)||l.test(n)||r.test(n))?e:(e=e.toLowerCase(),(e=t.reactCompat?e.replace(a,s):e.replace(o,s)).replace(i,u))}},515511,(e,t,n)=>{"use strict";var r=(e.e&&e.e.__importDefault||function(e){return e&&e.__esModule?e:{default:e}})(e.r(270454)),i=e.r(965185);function l(e,t){var n={};return e&&"string"==typeof e&&(0,r.default)(e,function(e,r){e&&r&&(n[(0,i.camelCase)(e,t)]=r)}),n}l.default=l,t.exports=l},104100,(e,t,n)=>{"use strict";var r=Object.prototype.hasOwnProperty,i=Object.prototype.toString,l=Object.defineProperty,o=Object.getOwnPropertyDescriptor,a=function(e){return"function"==typeof Array.isArray?Array.isArray(e):"[object Array]"===i.call(e)},u=function(e){if(!e||"[object Object]"!==i.call(e))return!1;var t,n=r.call(e,"constructor"),l=e.constructor&&e.constructor.prototype&&r.call(e.constructor.prototype,"isPrototypeOf");if(e.constructor&&!n&&!l)return!1;for(t in e);return void 0===t||r.call(e,t)},s=function(e,t){l&&"__proto__"===t.name?l(e,t.name,{enumerable:!0,configurable:!0,value:t.newValue,writable:!0}):e[t.name]=t.newValue},c=function(e,t){if("__proto__"===t){if(!r.call(e,t))return;else if(o)return o(e,t).value}return e[t]};t.exports=function e(){var t,n,r,i,l,o,f=arguments[0],p=1,d=arguments.length,h=!1;for("boolean"==typeof f&&(h=f,f=arguments[1]||{},p=2),(null==f||"object"!=typeof f&&"function"!=typeof f)&&(f={});p{"use strict";function t(){}function n(){}let r=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,i=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,l={};function o(e,t){return((t||l).jsx?i:r).test(e)}let a=/[ \t\n\f\r]/g;function u(e){return""===e.replace(a,"")}class s{constructor(e,t){this.attribute=t,this.property=e}}s.prototype.attribute="",s.prototype.booleanish=!1,s.prototype.boolean=!1,s.prototype.commaOrSpaceSeparated=!1,s.prototype.commaSeparated=!1,s.prototype.defined=!1,s.prototype.mustUseProperty=!1,s.prototype.number=!1,s.prototype.overloadedBoolean=!1,s.prototype.property="",s.prototype.spaceSeparated=!1,s.prototype.space=void 0;let c=0,f=v(),p=v(),d=v(),h=v(),m=v(),g=v(),y=v();function v(){return 2**++c}e.s(["boolean",0,f,"booleanish",0,p,"commaOrSpaceSeparated",0,y,"commaSeparated",0,g,"number",0,h,"overloadedBoolean",0,d,"spaceSeparated",0,m],400744);var x=e.i(400744);let k=Object.keys(x);class b extends s{constructor(e,t,n,r){let i=-1;if(super(e,t),function(e,t,n){n&&(e[t]=n)}(this,"space",r),"number"==typeof n)for(;++i"role"===t?t:"aria-"+t.slice(4).toLowerCase()});function O(e,t){return t in e?e[t]:t}function M(e,t){return O(e,t.toLowerCase())}let F=L({attributes:{acceptcharset:"accept-charset",classname:"class",htmlfor:"for",httpequiv:"http-equiv"},mustUseProperty:["checked","multiple","muted","selected"],properties:{abbr:null,accept:g,acceptCharset:m,accessKey:m,action:null,allow:null,allowFullScreen:f,allowPaymentRequest:f,allowUserMedia:f,alt:null,as:null,async:f,autoCapitalize:null,autoComplete:m,autoFocus:f,autoPlay:f,blocking:m,capture:null,charSet:null,checked:f,cite:null,className:m,cols:h,colSpan:null,content:null,contentEditable:p,controls:f,controlsList:m,coords:h|g,crossOrigin:null,data:null,dateTime:null,decoding:null,default:f,defer:f,dir:null,dirName:null,disabled:f,download:d,draggable:p,encType:null,enterKeyHint:null,fetchPriority:null,form:null,formAction:null,formEncType:null,formMethod:null,formNoValidate:f,formTarget:null,headers:m,height:h,hidden:d,high:h,href:null,hrefLang:null,htmlFor:m,httpEquiv:m,id:null,imageSizes:null,imageSrcSet:null,inert:f,inputMode:null,integrity:null,is:null,isMap:f,itemId:null,itemProp:m,itemRef:m,itemScope:f,itemType:m,kind:null,label:null,lang:null,language:null,list:null,loading:null,loop:f,low:h,manifest:null,max:null,maxLength:h,media:null,method:null,min:null,minLength:h,multiple:f,muted:f,name:null,nonce:null,noModule:f,noValidate:f,onAbort:null,onAfterPrint:null,onAuxClick:null,onBeforeMatch:null,onBeforePrint:null,onBeforeToggle:null,onBeforeUnload:null,onBlur:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onContextLost:null,onContextMenu:null,onContextRestored:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnded:null,onError:null,onFocus:null,onFormData:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLanguageChange:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadEnd:null,onLoadStart:null,onMessage:null,onMessageError:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRejectionHandled:null,onReset:null,onResize:null,onScroll:null,onScrollEnd:null,onSecurityPolicyViolation:null,onSeeked:null,onSeeking:null,onSelect:null,onSlotChange:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnhandledRejection:null,onUnload:null,onVolumeChange:null,onWaiting:null,onWheel:null,open:f,optimum:h,pattern:null,ping:m,placeholder:null,playsInline:f,popover:null,popoverTarget:null,popoverTargetAction:null,poster:null,preload:null,readOnly:f,referrerPolicy:null,rel:m,required:f,reversed:f,rows:h,rowSpan:h,sandbox:m,scope:null,scoped:f,seamless:f,selected:f,shadowRootClonable:f,shadowRootDelegatesFocus:f,shadowRootMode:null,shape:null,size:h,sizes:null,slot:null,span:h,spellCheck:p,src:null,srcDoc:null,srcLang:null,srcSet:null,start:h,step:null,style:null,tabIndex:h,target:null,title:null,translate:null,type:null,typeMustMatch:f,useMap:null,value:p,width:h,wrap:null,writingSuggestions:null,align:null,aLink:null,archive:m,axis:null,background:null,bgColor:null,border:h,borderColor:null,bottomMargin:h,cellPadding:null,cellSpacing:null,char:null,charOff:null,classId:null,clear:null,code:null,codeBase:null,codeType:null,color:null,compact:f,declare:f,event:null,face:null,frame:null,frameBorder:null,hSpace:h,leftMargin:h,link:null,longDesc:null,lowSrc:null,marginHeight:h,marginWidth:h,noResize:f,noHref:f,noShade:f,noWrap:f,object:null,profile:null,prompt:null,rev:null,rightMargin:h,rules:null,scheme:null,scrolling:p,standby:null,summary:null,text:null,topMargin:h,valueType:null,version:null,vAlign:null,vLink:null,vSpace:h,allowTransparency:null,autoCorrect:null,autoSave:null,disablePictureInPicture:f,disableRemotePlayback:f,prefix:null,property:null,results:h,security:null,unselectable:null},space:"html",transform:M}),R=L({attributes:{accentHeight:"accent-height",alignmentBaseline:"alignment-baseline",arabicForm:"arabic-form",baselineShift:"baseline-shift",capHeight:"cap-height",className:"class",clipPath:"clip-path",clipRule:"clip-rule",colorInterpolation:"color-interpolation",colorInterpolationFilters:"color-interpolation-filters",colorProfile:"color-profile",colorRendering:"color-rendering",crossOrigin:"crossorigin",dataType:"datatype",dominantBaseline:"dominant-baseline",enableBackground:"enable-background",fillOpacity:"fill-opacity",fillRule:"fill-rule",floodColor:"flood-color",floodOpacity:"flood-opacity",fontFamily:"font-family",fontSize:"font-size",fontSizeAdjust:"font-size-adjust",fontStretch:"font-stretch",fontStyle:"font-style",fontVariant:"font-variant",fontWeight:"font-weight",glyphName:"glyph-name",glyphOrientationHorizontal:"glyph-orientation-horizontal",glyphOrientationVertical:"glyph-orientation-vertical",hrefLang:"hreflang",horizAdvX:"horiz-adv-x",horizOriginX:"horiz-origin-x",horizOriginY:"horiz-origin-y",imageRendering:"image-rendering",letterSpacing:"letter-spacing",lightingColor:"lighting-color",markerEnd:"marker-end",markerMid:"marker-mid",markerStart:"marker-start",navDown:"nav-down",navDownLeft:"nav-down-left",navDownRight:"nav-down-right",navLeft:"nav-left",navNext:"nav-next",navPrev:"nav-prev",navRight:"nav-right",navUp:"nav-up",navUpLeft:"nav-up-left",navUpRight:"nav-up-right",onAbort:"onabort",onActivate:"onactivate",onAfterPrint:"onafterprint",onBeforePrint:"onbeforeprint",onBegin:"onbegin",onCancel:"oncancel",onCanPlay:"oncanplay",onCanPlayThrough:"oncanplaythrough",onChange:"onchange",onClick:"onclick",onClose:"onclose",onCopy:"oncopy",onCueChange:"oncuechange",onCut:"oncut",onDblClick:"ondblclick",onDrag:"ondrag",onDragEnd:"ondragend",onDragEnter:"ondragenter",onDragExit:"ondragexit",onDragLeave:"ondragleave",onDragOver:"ondragover",onDragStart:"ondragstart",onDrop:"ondrop",onDurationChange:"ondurationchange",onEmptied:"onemptied",onEnd:"onend",onEnded:"onended",onError:"onerror",onFocus:"onfocus",onFocusIn:"onfocusin",onFocusOut:"onfocusout",onHashChange:"onhashchange",onInput:"oninput",onInvalid:"oninvalid",onKeyDown:"onkeydown",onKeyPress:"onkeypress",onKeyUp:"onkeyup",onLoad:"onload",onLoadedData:"onloadeddata",onLoadedMetadata:"onloadedmetadata",onLoadStart:"onloadstart",onMessage:"onmessage",onMouseDown:"onmousedown",onMouseEnter:"onmouseenter",onMouseLeave:"onmouseleave",onMouseMove:"onmousemove",onMouseOut:"onmouseout",onMouseOver:"onmouseover",onMouseUp:"onmouseup",onMouseWheel:"onmousewheel",onOffline:"onoffline",onOnline:"ononline",onPageHide:"onpagehide",onPageShow:"onpageshow",onPaste:"onpaste",onPause:"onpause",onPlay:"onplay",onPlaying:"onplaying",onPopState:"onpopstate",onProgress:"onprogress",onRateChange:"onratechange",onRepeat:"onrepeat",onReset:"onreset",onResize:"onresize",onScroll:"onscroll",onSeeked:"onseeked",onSeeking:"onseeking",onSelect:"onselect",onShow:"onshow",onStalled:"onstalled",onStorage:"onstorage",onSubmit:"onsubmit",onSuspend:"onsuspend",onTimeUpdate:"ontimeupdate",onToggle:"ontoggle",onUnload:"onunload",onVolumeChange:"onvolumechange",onWaiting:"onwaiting",onZoom:"onzoom",overlinePosition:"overline-position",overlineThickness:"overline-thickness",paintOrder:"paint-order",panose1:"panose-1",pointerEvents:"pointer-events",referrerPolicy:"referrerpolicy",renderingIntent:"rendering-intent",shapeRendering:"shape-rendering",stopColor:"stop-color",stopOpacity:"stop-opacity",strikethroughPosition:"strikethrough-position",strikethroughThickness:"strikethrough-thickness",strokeDashArray:"stroke-dasharray",strokeDashOffset:"stroke-dashoffset",strokeLineCap:"stroke-linecap",strokeLineJoin:"stroke-linejoin",strokeMiterLimit:"stroke-miterlimit",strokeOpacity:"stroke-opacity",strokeWidth:"stroke-width",tabIndex:"tabindex",textAnchor:"text-anchor",textDecoration:"text-decoration",textRendering:"text-rendering",transformOrigin:"transform-origin",typeOf:"typeof",underlinePosition:"underline-position",underlineThickness:"underline-thickness",unicodeBidi:"unicode-bidi",unicodeRange:"unicode-range",unitsPerEm:"units-per-em",vAlphabetic:"v-alphabetic",vHanging:"v-hanging",vIdeographic:"v-ideographic",vMathematical:"v-mathematical",vectorEffect:"vector-effect",vertAdvY:"vert-adv-y",vertOriginX:"vert-origin-x",vertOriginY:"vert-origin-y",wordSpacing:"word-spacing",writingMode:"writing-mode",xHeight:"x-height",playbackOrder:"playbackorder",timelineBegin:"timelinebegin"},properties:{about:y,accentHeight:h,accumulate:null,additive:null,alignmentBaseline:null,alphabetic:h,amplitude:h,arabicForm:null,ascent:h,attributeName:null,attributeType:null,azimuth:h,bandwidth:null,baselineShift:null,baseFrequency:null,baseProfile:null,bbox:null,begin:null,bias:h,by:null,calcMode:null,capHeight:h,className:m,clip:null,clipPath:null,clipPathUnits:null,clipRule:null,color:null,colorInterpolation:null,colorInterpolationFilters:null,colorProfile:null,colorRendering:null,content:null,contentScriptType:null,contentStyleType:null,crossOrigin:null,cursor:null,cx:null,cy:null,d:null,dataType:null,defaultAction:null,descent:h,diffuseConstant:h,direction:null,display:null,dur:null,divisor:h,dominantBaseline:null,download:f,dx:null,dy:null,edgeMode:null,editable:null,elevation:h,enableBackground:null,end:null,event:null,exponent:h,externalResourcesRequired:null,fill:null,fillOpacity:h,fillRule:null,filter:null,filterRes:null,filterUnits:null,floodColor:null,floodOpacity:null,focusable:null,focusHighlight:null,fontFamily:null,fontSize:null,fontSizeAdjust:null,fontStretch:null,fontStyle:null,fontVariant:null,fontWeight:null,format:null,fr:null,from:null,fx:null,fy:null,g1:g,g2:g,glyphName:g,glyphOrientationHorizontal:null,glyphOrientationVertical:null,glyphRef:null,gradientTransform:null,gradientUnits:null,handler:null,hanging:h,hatchContentUnits:null,hatchUnits:null,height:null,href:null,hrefLang:null,horizAdvX:h,horizOriginX:h,horizOriginY:h,id:null,ideographic:h,imageRendering:null,initialVisibility:null,in:null,in2:null,intercept:h,k:h,k1:h,k2:h,k3:h,k4:h,kernelMatrix:y,kernelUnitLength:null,keyPoints:null,keySplines:null,keyTimes:null,kerning:null,lang:null,lengthAdjust:null,letterSpacing:null,lightingColor:null,limitingConeAngle:h,local:null,markerEnd:null,markerMid:null,markerStart:null,markerHeight:null,markerUnits:null,markerWidth:null,mask:null,maskContentUnits:null,maskUnits:null,mathematical:null,max:null,media:null,mediaCharacterEncoding:null,mediaContentEncodings:null,mediaSize:h,mediaTime:null,method:null,min:null,mode:null,name:null,navDown:null,navDownLeft:null,navDownRight:null,navLeft:null,navNext:null,navPrev:null,navRight:null,navUp:null,navUpLeft:null,navUpRight:null,numOctaves:null,observer:null,offset:null,onAbort:null,onActivate:null,onAfterPrint:null,onBeforePrint:null,onBegin:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnd:null,onEnded:null,onError:null,onFocus:null,onFocusIn:null,onFocusOut:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadStart:null,onMessage:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onMouseWheel:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRepeat:null,onReset:null,onResize:null,onScroll:null,onSeeked:null,onSeeking:null,onSelect:null,onShow:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnload:null,onVolumeChange:null,onWaiting:null,onZoom:null,opacity:null,operator:null,order:null,orient:null,orientation:null,origin:null,overflow:null,overlay:null,overlinePosition:h,overlineThickness:h,paintOrder:null,panose1:null,path:null,pathLength:h,patternContentUnits:null,patternTransform:null,patternUnits:null,phase:null,ping:m,pitch:null,playbackOrder:null,pointerEvents:null,points:null,pointsAtX:h,pointsAtY:h,pointsAtZ:h,preserveAlpha:null,preserveAspectRatio:null,primitiveUnits:null,propagate:null,property:y,r:null,radius:null,referrerPolicy:null,refX:null,refY:null,rel:y,rev:y,renderingIntent:null,repeatCount:null,repeatDur:null,requiredExtensions:y,requiredFeatures:y,requiredFonts:y,requiredFormats:y,resource:null,restart:null,result:null,rotate:null,rx:null,ry:null,scale:null,seed:null,shapeRendering:null,side:null,slope:null,snapshotTime:null,specularConstant:h,specularExponent:h,spreadMethod:null,spacing:null,startOffset:null,stdDeviation:null,stemh:null,stemv:null,stitchTiles:null,stopColor:null,stopOpacity:null,strikethroughPosition:h,strikethroughThickness:h,string:null,stroke:null,strokeDashArray:y,strokeDashOffset:null,strokeLineCap:null,strokeLineJoin:null,strokeMiterLimit:h,strokeOpacity:h,strokeWidth:null,style:null,surfaceScale:h,syncBehavior:null,syncBehaviorDefault:null,syncMaster:null,syncTolerance:null,syncToleranceDefault:null,systemLanguage:y,tabIndex:h,tableValues:null,target:null,targetX:h,targetY:h,textAnchor:null,textDecoration:null,textRendering:null,textLength:null,timelineBegin:null,title:null,transformBehavior:null,type:null,typeOf:y,to:null,transform:null,transformOrigin:null,u1:null,u2:null,underlinePosition:h,underlineThickness:h,unicode:null,unicodeBidi:null,unicodeRange:null,unitsPerEm:h,values:null,vAlphabetic:h,vMathematical:h,vectorEffect:null,vHanging:h,vIdeographic:h,version:null,vertAdvY:h,vertOriginX:h,vertOriginY:h,viewBox:null,viewTarget:null,visibility:null,width:null,widths:null,wordSpacing:null,writingMode:null,x:null,x1:null,x2:null,xChannelSelector:null,xHeight:h,y:null,y1:null,y2:null,yChannelSelector:null,z:null,zoomAndPan:null},space:"svg",transform:O}),_=L({properties:{xLinkActuate:null,xLinkArcRole:null,xLinkHref:null,xLinkRole:null,xLinkShow:null,xLinkTitle:null,xLinkType:null},space:"xlink",transform:(e,t)=>"xlink:"+t.slice(5).toLowerCase()}),N=L({attributes:{xmlnsxlink:"xmlns:xlink"},properties:{xmlnsXLink:null,xmlns:null},space:"xmlns",transform:M}),j=L({properties:{xmlBase:null,xmlLang:null,xmlSpace:null},space:"xml",transform:(e,t)=>"xml:"+t.slice(3).toLowerCase()}),B=D([z,F,_,N,j],"html"),U=D([z,R,_,N,j],"svg");var H=e.i(515511);let V=W("end"),q=W("start");function W(e){return function(t){let n=t&&t.position&&t.position[e]||{};if("number"==typeof n.line&&n.line>0&&"number"==typeof n.column&&n.column>0)return{line:n.line,column:n.column,offset:"number"==typeof n.offset&&n.offset>-1?n.offset:void 0}}}function K(e){return e&&"object"==typeof e?"position"in e||"type"in e?$(e.position):"start"in e||"end"in e?$(e):"line"in e||"column"in e?Q(e):"":""}function Q(e){return X(e&&e.line)+":"+X(e&&e.column)}function $(e){return Q(e&&e.start)+"-"+Q(e&&e.end)}function X(e){return e&&"number"==typeof e?e:1}class J extends Error{constructor(e,t,n){super(),"string"==typeof t&&(n=t,t=void 0);let r="",i={},l=!1;if(t&&(i="line"in t&&"column"in t||"start"in t&&"end"in t?{place:t}:"type"in t?{ancestors:[t],place:t.position}:{...t}),"string"==typeof e?r=e:!i.cause&&e&&(l=!0,r=e.message,i.cause=e),!i.ruleId&&!i.source&&"string"==typeof n){const e=n.indexOf(":");-1===e?i.ruleId=n:(i.source=n.slice(0,e),i.ruleId=n.slice(e+1))}if(!i.place&&i.ancestors&&i.ancestors){const e=i.ancestors[i.ancestors.length-1];e&&(i.place=e.position)}const o=i.place&&"start"in i.place?i.place.start:i.place;this.ancestors=i.ancestors||void 0,this.cause=i.cause||void 0,this.column=o?o.column:void 0,this.fatal=void 0,this.file="",this.message=r,this.line=o?o.line:void 0,this.name=K(i.place)||"1:1",this.place=i.place||void 0,this.reason=this.message,this.ruleId=i.ruleId||void 0,this.source=i.source||void 0,this.stack=l&&i.cause&&"string"==typeof i.cause.stack?i.cause.stack:"",this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}}J.prototype.file="",J.prototype.name="",J.prototype.reason="",J.prototype.message="",J.prototype.stack="",J.prototype.column=void 0,J.prototype.line=void 0,J.prototype.ancestors=void 0,J.prototype.cause=void 0,J.prototype.fatal=void 0,J.prototype.place=void 0,J.prototype.ruleId=void 0,J.prototype.source=void 0;let Y={}.hasOwnProperty,Z=new Map,G=/[A-Z]/g,ee=new Set(["table","tbody","thead","tfoot","tr"]),et=new Set(["td","th"]),en="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function er(e,n,r){var i,l,o,a,c,f,p,d,h;let m,g,y,v,x,k,I,D,L,z,O;return"element"===n.type?(i=e,l=n,o=r,g=m=i.schema,"svg"===l.tagName.toLowerCase()&&"html"===m.space&&(i.schema=U),i.ancestors.push(l),y=ea(i,l.tagName,!1),v=function(e,t){let n,r,i={};for(r in t.properties)if("children"!==r&&Y.call(t.properties,r)){let l=function(e,t,n){let r=function(e,t){let n=w(t),r=t,i=s;if(n in e.normal)return e.property[e.normal[n]];if(n.length>4&&"data"===n.slice(0,4)&&E.test(t)){if("-"===t.charAt(4)){let e=t.slice(5).replace(C,T);r="data"+e.charAt(0).toUpperCase()+e.slice(1)}else{let e=t.slice(4);if(!C.test(e)){let n=e.replace(S,P);"-"!==n.charAt(0)&&(n="-"+n),t="data"+n}}i=b}return new i(r,t)}(e.schema,t);if(!(null==n||"number"==typeof n&&Number.isNaN(n))){var i;let t;if(Array.isArray(n)&&(n=r.commaSeparated?(t={},(""===(i=n)[i.length-1]?[...i,""]:i).join((t.padRight?" ":"")+","+(!1===t.padLeft?"":" ")).trim()):n.join(" ").trim()),"style"===r.property){let t="object"==typeof n?n:function(e,t){try{return(0,H.default)(t,{reactCompat:!0})}catch(n){if(e.ignoreInvalidStyle)return{};let t=new J("Cannot parse `style` attribute",{ancestors:e.ancestors,cause:n,ruleId:"style",source:"hast-util-to-jsx-runtime"});throw t.file=e.filePath||void 0,t.url=en+"#cannot-parse-style-attribute",t}}(e,String(n));return"css"===e.stylePropertyNameCase&&(t=function(e){let t,n={};for(t in e)Y.call(e,t)&&(n[function(e){let t=e.replace(G,es);return"ms-"===t.slice(0,3)&&(t="-"+t),t}(t)]=e[t]);return n}(t)),["style",t]}return["react"===e.elementAttributeNameCase&&r.space?A[r.property]||r.property:r.attribute,n]}}(e,r,t.properties[r]);if(l){let[r,o]=l;e.tableCellAlignToStyle&&"align"===r&&"string"==typeof o&&et.has(t.tagName)?n=o:i[r]=o}}return n&&((i.style||(i.style={}))["css"===e.stylePropertyNameCase?"text-align":"textAlign"]=n),i}(i,l),x=eo(i,l),ee.has(l.tagName)&&(x=x.filter(function(e){return"string"!=typeof e||!("object"==typeof e?"text"===e.type&&u(e.value):u(e))})),ei(i,v,y,l),el(v,x),i.ancestors.pop(),i.schema=m,i.create(l,y,v,o)):"mdxFlowExpression"===n.type||"mdxTextExpression"===n.type?function(e,n){if(n.data&&n.data.estree&&e.evaluater){let r=n.data.estree.body[0];return t("ExpressionStatement"===r.type),e.evaluater.evaluateExpression(r.expression)}eu(e,n.position)}(e,n):"mdxJsxFlowElement"===n.type||"mdxJsxTextElement"===n.type?(a=e,c=n,f=r,I=k=a.schema,"svg"===c.name&&"html"===k.space&&(a.schema=U),a.ancestors.push(c),D=null===c.name?a.Fragment:ea(a,c.name,!0),L=function(e,n){let r={};for(let i of n.attributes)if("mdxJsxExpressionAttribute"===i.type)if(i.data&&i.data.estree&&e.evaluater){let n=i.data.estree.body[0];t("ExpressionStatement"===n.type);let l=n.expression;t("ObjectExpression"===l.type);let o=l.properties[0];t("SpreadElement"===o.type),Object.assign(r,e.evaluater.evaluateExpression(o.argument))}else eu(e,n.position);else{let l,o=i.name;if(i.value&&"object"==typeof i.value)if(i.value.data&&i.value.data.estree&&e.evaluater){let n=i.value.data.estree.body[0];t("ExpressionStatement"===n.type),l=e.evaluater.evaluateExpression(n.expression)}else eu(e,n.position);else l=null===i.value||i.value;r[o]=l}return r}(a,c),z=eo(a,c),ei(a,L,D,c),el(L,z),a.ancestors.pop(),a.schema=k,a.create(c,D,L,f)):"mdxjsEsm"===n.type?function(e,t){if(t.data&&t.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(t.data.estree);eu(e,t.position)}(e,n):"root"===n.type?(p=e,d=n,h=r,el(O={},eo(p,d)),p.create(d,p.Fragment,O,h)):"text"===n.type?n.value:void 0}function ei(e,t,n,r){"string"!=typeof n&&n!==e.Fragment&&e.passNode&&(t.node=r)}function el(e,t){if(t.length>0){let n=t.length>1?t:t[0];n&&(e.children=n)}}function eo(e,t){let n=[],r=-1,i=e.passKeys?new Map:Z;for(;++rl?0:l+t:t>l?l:t,n=n>0?n:0,r.length<1e4)(i=Array.from(r)).unshift(t,n),e.splice(...i);else for(n&&e.splice(t,n);o0?(em(e,e.length,0,t),e):t}let ey={}.hasOwnProperty,ev=eD(/[A-Za-z]/),ex=eD(/[\dA-Za-z]/),ek=eD(/[#-'*+\--9=?A-Z^-~]/);function eb(e){return null!==e&&(e<32||127===e)}let ew=eD(/\d/),eS=eD(/[\dA-Fa-f]/),eC=eD(/[!-/:-@[-`{-~]/);function eE(e){return null!==e&&e<-2}function eP(e){return null!==e&&(e<0||32===e)}function eT(e){return -2===e||-1===e||32===e}let eA=eD(/\p{P}|\p{S}/u),eI=eD(/\s/);function eD(e){return function(t){return null!==t&&t>-1&&e.test(String.fromCharCode(t))}}function eL(e,t,n,r){let i=r?r-1:1/0,l=0;return function(r){return eT(r)?(e.enter(n),function r(o){return eT(o)&&l++r))return;let a=i.events.length,u=a;for(;u--;)if("exit"===i.events[u][0]&&"chunkFlow"===i.events[u][1].type){if(e){n=i.events[u][1].end;break}e=!0}for(g(o),l=a;lt;){let t=l[n];i.containerState=t[1],t[0].exit.call(i,e)}l.length=t}function y(){t.write([null]),n=void 0,t=void 0,i.containerState._closeFlow=void 0}}},eM={tokenize:function(e,t,n){return eL(e,e.attempt(this.parser.constructs.document,t,n),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}},eF={partial:!0,tokenize:function(e,t,n){return function(t){return eT(t)?eL(e,r,"linePrefix")(t):r(t)};function r(e){return null===e||eE(e)?t(e):n(e)}}};class eR{constructor(e){this.left=e?[...e]:[],this.right=[]}get(e){if(e<0||e>=this.left.length+this.right.length)throw RangeError("Cannot access index `"+e+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return ethis.left.length?this.right.slice(this.right.length-n+this.left.length,this.right.length-e+this.left.length).reverse():this.left.slice(e).concat(this.right.slice(this.right.length-n+this.left.length).reverse())}splice(e,t,n){this.setCursor(Math.trunc(e));let r=this.right.splice(this.right.length-(t||0),1/0);return n&&e_(this.left,n),r.reverse()}pop(){return this.setCursor(1/0),this.left.pop()}push(e){this.setCursor(1/0),this.left.push(e)}pushMany(e){this.setCursor(1/0),e_(this.left,e)}unshift(e){this.setCursor(0),this.right.push(e)}unshiftMany(e){this.setCursor(0),e_(this.right,e.reverse())}setCursor(e){if(e!==this.left.length&&(!(e>this.left.length)||0!==this.right.length)&&(!(e<0)||0!==this.left.length))if(e=4?t(i):e.interrupt(r.parser.constructs.flow,n,t)(i)}}},eU={tokenize:function(e){let t=this,n=e.attempt(eF,function(r){return null===r?void e.consume(r):(e.enter("lineEndingBlank"),e.consume(r),e.exit("lineEndingBlank"),t.currentConstruct=void 0,n)},e.attempt(this.parser.constructs.flowInitial,r,eL(e,e.attempt(this.parser.constructs.flow,r,e.attempt(ej,r)),"linePrefix")));return n;function r(r){return null===r?void e.consume(r):(e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),t.currentConstruct=void 0,n)}}},eH={resolveAll:eK()},eV=eW("string"),eq=eW("text");function eW(e){return{resolveAll:eK("text"===e?eQ:void 0),tokenize:function(t){let n=this,r=this.parser.constructs[e],i=t.attempt(r,l,o);return l;function l(e){return u(e)?i(e):o(e)}function o(e){return null===e?void t.consume(e):(t.enter("data"),t.consume(e),a)}function a(e){return u(e)?(t.exit("data"),i(e)):(t.consume(e),a)}function u(e){if(null===e)return!0;let t=r[e],i=-1;if(t)for(;++i1&&e[c][1].end.offset-e[c][1].start.offset>1?2:1;let f={...e[n][1].end},p={...e[c][1].start};eY(f,-a),eY(p,a),l={type:a>1?"strongSequence":"emphasisSequence",start:f,end:{...e[n][1].end}},o={type:a>1?"strongSequence":"emphasisSequence",start:{...e[c][1].start},end:p},i={type:a>1?"strongText":"emphasisText",start:{...e[n][1].end},end:{...e[c][1].start}},r={type:a>1?"strong":"emphasis",start:{...l.start},end:{...o.end}},e[n][1].end={...l.start},e[c][1].start={...o.end},u=[],e[n][1].end.offset-e[n][1].start.offset&&(u=eg(u,[["enter",e[n][1],t],["exit",e[n][1],t]])),u=eg(u,[["enter",r,t],["enter",l,t],["exit",l,t],["enter",i,t]]),u=eg(u,eX(t.parser.constructs.insideSpan.null,e.slice(n+1,c),t)),u=eg(u,[["exit",i,t],["enter",o,t],["exit",o,t],["exit",r,t]]),e[c][1].end.offset-e[c][1].start.offset?(s=2,u=eg(u,[["enter",e[c][1],t],["exit",e[c][1],t]])):s=0,em(e,n-1,c-n+3,u),c=n+u.length-s-2;break}}for(c=-1;++c=a?(e.exit("codeFencedFenceSequence"),eT(i)?eL(e,s,"whitespace")(i):s(i)):n(i)}(t)):n(t)}function s(r){return null===r||eE(r)?(e.exit("codeFencedFence"),t(r)):n(r)}}},o=0,a=0;return function(t){var l;let s;return l=t,o=(s=i.events[i.events.length-1])&&"linePrefix"===s[1].type?s[2].sliceSerialize(s[1],!0).length:0,r=l,e.enter("codeFenced"),e.enter("codeFencedFence"),e.enter("codeFencedFenceSequence"),function t(i){return i===r?(a++,e.consume(i),t):a<3?n(i):(e.exit("codeFencedFenceSequence"),eT(i)?eL(e,u,"whitespace")(i):u(i))}(l)};function u(l){return null===l||eE(l)?(e.exit("codeFencedFence"),i.interrupt?t(l):e.check(e4,c,h)(l)):(e.enter("codeFencedFenceInfo"),e.enter("chunkString",{contentType:"string"}),function t(i){return null===i||eE(i)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),u(i)):eT(i)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),eL(e,s,"whitespace")(i)):96===i&&i===r?n(i):(e.consume(i),t)}(l))}function s(t){return null===t||eE(t)?u(t):(e.enter("codeFencedFenceMeta"),e.enter("chunkString",{contentType:"string"}),function t(i){return null===i||eE(i)?(e.exit("chunkString"),e.exit("codeFencedFenceMeta"),u(i)):96===i&&i===r?n(i):(e.consume(i),t)}(t))}function c(t){return e.attempt(l,h,f)(t)}function f(t){return e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),p}function p(t){return o>0&&eT(t)?eL(e,d,"linePrefix",o+1)(t):d(t)}function d(t){return null===t||eE(t)?e.check(e4,c,h)(t):(e.enter("codeFlowValue"),function t(n){return null===n||eE(n)?(e.exit("codeFlowValue"),d(n)):(e.consume(n),t)}(t))}function h(n){return e.exit("codeFenced"),t(n)}}},e6={name:"codeIndented",tokenize:function(e,t,n){let r=this;return function(t){return e.enter("codeIndented"),eL(e,i,"linePrefix",5)(t)};function i(t){let i=r.events[r.events.length-1];return i&&"linePrefix"===i[1].type&&i[2].sliceSerialize(i[1],!0).length>=4?function t(n){return null===n?l(n):eE(n)?e.attempt(e3,t,l)(n):(e.enter("codeFlowValue"),function n(r){return null===r||eE(r)?(e.exit("codeFlowValue"),t(r)):(e.consume(r),n)}(n))}(t):n(t)}function l(n){return e.exit("codeIndented"),t(n)}}},e3={partial:!0,tokenize:function(e,t,n){let r=this;return i;function i(t){return r.parser.lazy[r.now().line]?n(t):eE(t)?(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),i):eL(e,l,"linePrefix",5)(t)}function l(e){let l=r.events[r.events.length-1];return l&&"linePrefix"===l[1].type&&l[2].sliceSerialize(l[1],!0).length>=4?t(e):eE(e)?i(e):n(e)}}};function e9(e,t,n,r,i,l,o,a,u){let s=u||1/0,c=0;return function(t){return 60===t?(e.enter(r),e.enter(i),e.enter(l),e.consume(t),e.exit(l),f):null===t||32===t||41===t||eb(t)?n(t):(e.enter(r),e.enter(o),e.enter(a),e.enter("chunkString",{contentType:"string"}),h(t))};function f(n){return 62===n?(e.enter(l),e.consume(n),e.exit(l),e.exit(i),e.exit(r),t):(e.enter(a),e.enter("chunkString",{contentType:"string"}),p(n))}function p(t){return 62===t?(e.exit("chunkString"),e.exit(a),f(t)):null===t||60===t||eE(t)?n(t):(e.consume(t),92===t?d:p)}function d(t){return 60===t||62===t||92===t?(e.consume(t),p):p(t)}function h(i){return!c&&(null===i||41===i||eP(i))?(e.exit("chunkString"),e.exit(a),e.exit(o),e.exit(r),t(i)):c999||null===f||91===f||93===f&&!o||94===f&&!u&&"_hiddenFootnoteSupport"in a.parser.constructs?n(f):93===f?(e.exit(l),e.enter(i),e.consume(f),e.exit(i),e.exit(r),t):eE(f)?(e.enter("lineEnding"),e.consume(f),e.exit("lineEnding"),s):(e.enter("chunkString",{contentType:"string"}),c(f))}function c(t){return null===t||91===t||93===t||eE(t)||u++>999?(e.exit("chunkString"),s(t)):(e.consume(t),o||(o=!eT(t)),92===t?f:c)}function f(t){return 91===t||92===t||93===t?(e.consume(t),u++,c):c(t)}}function e8(e,t,n,r,i,l){let o;return function(t){return 34===t||39===t||40===t?(e.enter(r),e.enter(i),e.consume(t),e.exit(i),o=40===t?41:t,a):n(t)};function a(n){return n===o?(e.enter(i),e.consume(n),e.exit(i),e.exit(r),t):(e.enter(l),u(n))}function u(t){return t===o?(e.exit(l),a(o)):null===t?n(t):eE(t)?(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),eL(e,u,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),s(t))}function s(t){return t===o||null===t||eE(t)?(e.exit("chunkString"),u(t)):(e.consume(t),92===t?c:s)}function c(t){return t===o||92===t?(e.consume(t),s):s(t)}}function te(e,t){let n;return function r(i){return eE(i)?(e.enter("lineEnding"),e.consume(i),e.exit("lineEnding"),n=!0,r):eT(i)?eL(e,r,n?"linePrefix":"lineSuffix")(i):t(i)}}function tt(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}let tn={partial:!0,tokenize:function(e,t,n){return function(t){return eP(t)?te(e,r)(t):n(t)};function r(t){return e8(e,i,n,"definitionTitle","definitionTitleMarker","definitionTitleString")(t)}function i(t){return eT(t)?eL(e,l,"whitespace")(t):l(t)}function l(e){return null===e||eE(e)?t(e):n(e)}}},tr=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],ti=["pre","script","style","textarea"],tl={partial:!0,tokenize:function(e,t,n){return function(r){return e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),e.attempt(eF,t,n)}}},to={partial:!0,tokenize:function(e,t,n){let r=this;return function(t){return eE(t)?(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),i):n(t)};function i(e){return r.parser.lazy[r.now().line]?n(e):t(e)}}},ta={name:"labelEnd",resolveAll:function(e){let t=-1,n=[];for(;++t=3&&(null===o||eE(o))?(e.exit("thematicBreak"),t(o)):n(o)}(o)}}},tm={continuation:{tokenize:function(e,t,n){let r=this;return r.containerState._closeFlow=void 0,e.check(eF,function(n){return r.containerState.furtherBlankLines=r.containerState.furtherBlankLines||r.containerState.initialBlankLine,eL(e,t,"listItemIndent",r.containerState.size+1)(n)},function(n){return r.containerState.furtherBlankLines||!eT(n)?(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,i(n)):(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,e.attempt(ty,t,i)(n))});function i(i){return r.containerState._closeFlow=!0,r.interrupt=void 0,eL(e,e.attempt(tm,t,n),"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(i)}}},exit:function(e){e.exit(this.containerState.type)},name:"list",tokenize:function(e,t,n){let r=this,i=r.events[r.events.length-1],l=i&&"linePrefix"===i[1].type?i[2].sliceSerialize(i[1],!0).length:0,o=0;return function(t){let i=r.containerState.type||(42===t||43===t||45===t?"listUnordered":"listOrdered");if("listUnordered"===i?!r.containerState.marker||t===r.containerState.marker:ew(t)){if(r.containerState.type||(r.containerState.type=i,e.enter(i,{_container:!0})),"listUnordered"===i)return e.enter("listItemPrefix"),42===t||45===t?e.check(th,n,a)(t):a(t);if(!r.interrupt||49===t)return e.enter("listItemPrefix"),e.enter("listItemValue"),function t(i){return ew(i)&&++o<10?(e.consume(i),t):(!r.interrupt||o<2)&&(r.containerState.marker?i===r.containerState.marker:41===i||46===i)?(e.exit("listItemValue"),a(i)):n(i)}(t)}return n(t)};function a(t){return e.enter("listItemMarker"),e.consume(t),e.exit("listItemMarker"),r.containerState.marker=r.containerState.marker||t,e.check(eF,r.interrupt?n:u,e.attempt(tg,c,s))}function u(e){return r.containerState.initialBlankLine=!0,l++,c(e)}function s(t){return eT(t)?(e.enter("listItemPrefixWhitespace"),e.consume(t),e.exit("listItemPrefixWhitespace"),c):n(t)}function c(n){return r.containerState.size=l+r.sliceSerialize(e.exit("listItemPrefix"),!0).length,t(n)}}},tg={partial:!0,tokenize:function(e,t,n){let r=this;return eL(e,function(e){let i=r.events[r.events.length-1];return!eT(e)&&i&&"listItemPrefixWhitespace"===i[1].type?t(e):n(e)},"listItemPrefixWhitespace",r.parser.constructs.disable.null.includes("codeIndented")?void 0:5)}},ty={partial:!0,tokenize:function(e,t,n){let r=this;return eL(e,function(e){let i=r.events[r.events.length-1];return i&&"listItemIndent"===i[1].type&&i[2].sliceSerialize(i[1],!0).length===r.containerState.size?t(e):n(e)},"listItemIndent",r.containerState.size+1)}},tv={name:"setextUnderline",resolveTo:function(e,t){let n,r,i,l=e.length;for(;l--;)if("enter"===e[l][0]){if("content"===e[l][1].type){n=l;break}"paragraph"===e[l][1].type&&(r=l)}else"content"===e[l][1].type&&e.splice(l,1),i||"definition"!==e[l][1].type||(i=l);let o={type:"setextHeading",start:{...e[n][1].start},end:{...e[e.length-1][1].end}};return e[r][1].type="setextHeadingText",i?(e.splice(r,0,["enter",o,t]),e.splice(i+1,0,["exit",e[n][1],t]),e[n][1].end={...e[i][1].end}):e[n][1]=o,e.push(["exit",o,t]),e},tokenize:function(e,t,n){let r,i=this;return function(t){var o;let a,u=i.events.length;for(;u--;)if("lineEnding"!==i.events[u][1].type&&"linePrefix"!==i.events[u][1].type&&"content"!==i.events[u][1].type){a="paragraph"===i.events[u][1].type;break}return!i.parser.lazy[i.now().line]&&(i.interrupt||a)?(e.enter("setextHeadingLine"),r=t,o=t,e.enter("setextHeadingLineSequence"),function t(n){return n===r?(e.consume(n),t):(e.exit("setextHeadingLineSequence"),eT(n)?eL(e,l,"lineSuffix")(n):l(n))}(o)):n(t)};function l(r){return null===r||eE(r)?(e.exit("setextHeadingLine"),t(r)):n(r)}}};e.s(["attentionMarkers",0,{null:[42,95]},"contentInitial",0,{91:{name:"definition",tokenize:function(e,t,n){let r,i=this;return function(t){var r;return e.enter("definition"),r=t,e7.call(i,e,l,n,"definitionLabel","definitionLabelMarker","definitionLabelString")(r)};function l(t){return(r=tt(i.sliceSerialize(i.events[i.events.length-1][1]).slice(1,-1)),58===t)?(e.enter("definitionMarker"),e.consume(t),e.exit("definitionMarker"),o):n(t)}function o(t){return eP(t)?te(e,a)(t):a(t)}function a(t){return e9(e,u,n,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(t)}function u(t){return e.attempt(tn,s,s)(t)}function s(t){return eT(t)?eL(e,c,"whitespace")(t):c(t)}function c(l){return null===l||eE(l)?(e.exit("definition"),i.parser.defined.push(r),t(l)):n(l)}}}},"disable",0,{null:[]},"document",0,{42:tm,43:tm,45:tm,48:tm,49:tm,50:tm,51:tm,52:tm,53:tm,54:tm,55:tm,56:tm,57:tm,62:eZ},"flow",0,{35:{name:"headingAtx",resolve:function(e,t){let n,r,i=e.length-2,l=3;return"whitespace"===e[3][1].type&&(l+=2),i-2>l&&"whitespace"===e[i][1].type&&(i-=2),"atxHeadingSequence"===e[i][1].type&&(l===i-1||i-4>l&&"whitespace"===e[i-2][1].type)&&(i-=l+1===i?2:4),i>l&&(n={type:"atxHeadingText",start:e[l][1].start,end:e[i][1].end},r={type:"chunkText",start:e[l][1].start,end:e[i][1].end,contentType:"text"},em(e,l,i-l+1,[["enter",n,t],["enter",r,t],["exit",r,t],["exit",n,t]])),e},tokenize:function(e,t,n){let r=0;return function(i){var l;return e.enter("atxHeading"),l=i,e.enter("atxHeadingSequence"),function i(l){return 35===l&&r++<6?(e.consume(l),i):null===l||eP(l)?(e.exit("atxHeadingSequence"),function n(r){return 35===r?(e.enter("atxHeadingSequence"),function t(r){return 35===r?(e.consume(r),t):(e.exit("atxHeadingSequence"),n(r))}(r)):null===r||eE(r)?(e.exit("atxHeading"),t(r)):eT(r)?eL(e,n,"whitespace")(r):(e.enter("atxHeadingText"),function t(r){return null===r||35===r||eP(r)?(e.exit("atxHeadingText"),n(r)):(e.consume(r),t)}(r))}(l)):n(l)}(l)}}},42:th,45:[tv,th],60:{concrete:!0,name:"htmlFlow",resolveTo:function(e){let t=e.length;for(;t--&&("enter"!==e[t][0]||"htmlFlow"!==e[t][1].type););return t>1&&"linePrefix"===e[t-2][1].type&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e},tokenize:function(e,t,n){let r,i,l,o,a,u=this;return function(t){var n;return n=t,e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(n),s};function s(o){return 33===o?(e.consume(o),c):47===o?(e.consume(o),i=!0,d):63===o?(e.consume(o),r=3,u.interrupt?t:z):ev(o)?(e.consume(o),l=String.fromCharCode(o),h):n(o)}function c(i){return 45===i?(e.consume(i),r=2,f):91===i?(e.consume(i),r=5,o=0,p):ev(i)?(e.consume(i),r=4,u.interrupt?t:z):n(i)}function f(r){return 45===r?(e.consume(r),u.interrupt?t:z):n(r)}function p(r){let i="CDATA[";return r===i.charCodeAt(o++)?(e.consume(r),o===i.length)?u.interrupt?t:C:p:n(r)}function d(t){return ev(t)?(e.consume(t),l=String.fromCharCode(t),h):n(t)}function h(o){if(null===o||47===o||62===o||eP(o)){let a=47===o,s=l.toLowerCase();return!a&&!i&&ti.includes(s)?(r=1,u.interrupt?t(o):C(o)):tr.includes(l.toLowerCase())?(r=6,a)?(e.consume(o),m):u.interrupt?t(o):C(o):(r=7,u.interrupt&&!u.parser.lazy[u.now().line]?n(o):i?function t(n){return eT(n)?(e.consume(n),t):w(n)}(o):g(o))}return 45===o||ex(o)?(e.consume(o),l+=String.fromCharCode(o),h):n(o)}function m(r){return 62===r?(e.consume(r),u.interrupt?t:C):n(r)}function g(t){return 47===t?(e.consume(t),w):58===t||95===t||ev(t)?(e.consume(t),y):eT(t)?(e.consume(t),g):w(t)}function y(t){return 45===t||46===t||58===t||95===t||ex(t)?(e.consume(t),y):v(t)}function v(t){return 61===t?(e.consume(t),x):eT(t)?(e.consume(t),v):g(t)}function x(t){return null===t||60===t||61===t||62===t||96===t?n(t):34===t||39===t?(e.consume(t),a=t,k):eT(t)?(e.consume(t),x):function t(n){return null===n||34===n||39===n||47===n||60===n||61===n||62===n||96===n||eP(n)?v(n):(e.consume(n),t)}(t)}function k(t){return t===a?(e.consume(t),a=null,b):null===t||eE(t)?n(t):(e.consume(t),k)}function b(e){return 47===e||62===e||eT(e)?g(e):n(e)}function w(t){return 62===t?(e.consume(t),S):n(t)}function S(t){return null===t||eE(t)?C(t):eT(t)?(e.consume(t),S):n(t)}function C(t){return 45===t&&2===r?(e.consume(t),A):60===t&&1===r?(e.consume(t),I):62===t&&4===r?(e.consume(t),O):63===t&&3===r?(e.consume(t),z):93===t&&5===r?(e.consume(t),L):eE(t)&&(6===r||7===r)?(e.exit("htmlFlowData"),e.check(tl,M,E)(t)):null===t||eE(t)?(e.exit("htmlFlowData"),E(t)):(e.consume(t),C)}function E(t){return e.check(to,P,M)(t)}function P(t){return e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),T}function T(t){return null===t||eE(t)?E(t):(e.enter("htmlFlowData"),C(t))}function A(t){return 45===t?(e.consume(t),z):C(t)}function I(t){return 47===t?(e.consume(t),l="",D):C(t)}function D(t){if(62===t){let n=l.toLowerCase();return ti.includes(n)?(e.consume(t),O):C(t)}return ev(t)&&l.length<8?(e.consume(t),l+=String.fromCharCode(t),D):C(t)}function L(t){return 93===t?(e.consume(t),z):C(t)}function z(t){return 62===t?(e.consume(t),O):45===t&&2===r?(e.consume(t),z):C(t)}function O(t){return null===t||eE(t)?(e.exit("htmlFlowData"),M(t)):(e.consume(t),O)}function M(n){return e.exit("htmlFlow"),t(n)}}},61:tv,95:th,96:e5,126:e5},"flowInitial",0,{[-2]:e6,[-1]:e6,32:e6},"insideSpan",0,{null:[eJ,eH]},"string",0,{38:e2,92:eG},"text",0,{[-5]:td,[-4]:td,[-3]:td,33:tf,38:e2,42:eJ,60:[{name:"autolink",tokenize:function(e,t,n){let r=0;return function(t){return e.enter("autolink"),e.enter("autolinkMarker"),e.consume(t),e.exit("autolinkMarker"),e.enter("autolinkProtocol"),i};function i(t){return ev(t)?(e.consume(t),l):64===t?n(t):a(t)}function l(t){return 43===t||45===t||46===t||ex(t)?(r=1,function t(n){return 58===n?(e.consume(n),r=0,o):(43===n||45===n||46===n||ex(n))&&r++<32?(e.consume(n),t):(r=0,a(n))}(t)):a(t)}function o(r){return 62===r?(e.exit("autolinkProtocol"),e.enter("autolinkMarker"),e.consume(r),e.exit("autolinkMarker"),e.exit("autolink"),t):null===r||32===r||60===r||eb(r)?n(r):(e.consume(r),o)}function a(t){return 64===t?(e.consume(t),u):ek(t)?(e.consume(t),a):n(t)}function u(i){return ex(i)?function i(l){return 46===l?(e.consume(l),r=0,u):62===l?(e.exit("autolinkProtocol").type="autolinkEmail",e.enter("autolinkMarker"),e.consume(l),e.exit("autolinkMarker"),e.exit("autolink"),t):function t(l){if((45===l||ex(l))&&r++<63){let n=45===l?t:i;return e.consume(l),n}return n(l)}(l)}(i):n(i)}}},{name:"htmlText",tokenize:function(e,t,n){let r,i,l,o=this;return function(t){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(t),a};function a(t){return 33===t?(e.consume(t),u):47===t?(e.consume(t),k):63===t?(e.consume(t),v):ev(t)?(e.consume(t),w):n(t)}function u(t){return 45===t?(e.consume(t),s):91===t?(e.consume(t),i=0,d):ev(t)?(e.consume(t),y):n(t)}function s(t){return 45===t?(e.consume(t),p):n(t)}function c(t){return null===t?n(t):45===t?(e.consume(t),f):eE(t)?(l=c,D(t)):(e.consume(t),c)}function f(t){return 45===t?(e.consume(t),p):c(t)}function p(e){return 62===e?I(e):45===e?f(e):c(e)}function d(t){let r="CDATA[";return t===r.charCodeAt(i++)?(e.consume(t),i===r.length?h:d):n(t)}function h(t){return null===t?n(t):93===t?(e.consume(t),m):eE(t)?(l=h,D(t)):(e.consume(t),h)}function m(t){return 93===t?(e.consume(t),g):h(t)}function g(t){return 62===t?I(t):93===t?(e.consume(t),g):h(t)}function y(t){return null===t||62===t?I(t):eE(t)?(l=y,D(t)):(e.consume(t),y)}function v(t){return null===t?n(t):63===t?(e.consume(t),x):eE(t)?(l=v,D(t)):(e.consume(t),v)}function x(e){return 62===e?I(e):v(e)}function k(t){return ev(t)?(e.consume(t),b):n(t)}function b(t){return 45===t||ex(t)?(e.consume(t),b):function t(n){return eE(n)?(l=t,D(n)):eT(n)?(e.consume(n),t):I(n)}(t)}function w(t){return 45===t||ex(t)?(e.consume(t),w):47===t||62===t||eP(t)?S(t):n(t)}function S(t){return 47===t?(e.consume(t),I):58===t||95===t||ev(t)?(e.consume(t),C):eE(t)?(l=S,D(t)):eT(t)?(e.consume(t),S):I(t)}function C(t){return 45===t||46===t||58===t||95===t||ex(t)?(e.consume(t),C):function t(n){return 61===n?(e.consume(n),E):eE(n)?(l=t,D(n)):eT(n)?(e.consume(n),t):S(n)}(t)}function E(t){return null===t||60===t||61===t||62===t||96===t?n(t):34===t||39===t?(e.consume(t),r=t,P):eE(t)?(l=E,D(t)):eT(t)?(e.consume(t),E):(e.consume(t),T)}function P(t){return t===r?(e.consume(t),r=void 0,A):null===t?n(t):eE(t)?(l=P,D(t)):(e.consume(t),P)}function T(t){return null===t||34===t||39===t||60===t||61===t||96===t?n(t):47===t||62===t||eP(t)?S(t):(e.consume(t),T)}function A(e){return 47===e||62===e||eP(e)?S(e):n(e)}function I(r){return 62===r?(e.consume(r),e.exit("htmlTextData"),e.exit("htmlText"),t):n(r)}function D(t){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),L}function L(t){return eT(t)?eL(e,z,"linePrefix",o.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(t):z(t)}function z(t){return e.enter("htmlTextData"),l(t)}}}],91:tp,92:[{name:"hardBreakEscape",tokenize:function(e,t,n){return function(t){return e.enter("hardBreakEscape"),e.consume(t),r};function r(r){return eE(r)?(e.exit("hardBreakEscape"),t(r)):n(r)}}},eG],93:ta,95:eJ,96:{name:"codeText",previous:function(e){return 96!==e||"characterEscape"===this.events[this.events.length-1][1].type},resolve:function(e){let t,n,r=e.length-4,i=3;if(("lineEnding"===e[3][1].type||"space"===e[i][1].type)&&("lineEnding"===e[r][1].type||"space"===e[r][1].type)){for(t=i;++t13&&n<32||n>126&&n<160||n>55295&&n<57344||n>64975&&n<65008||(65535&n)==65535||(65535&n)==65534||n>1114111?"�":String.fromCodePoint(n)}let tw=/\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;function tS(e,t,n){if(t)return t;if(35===n.charCodeAt(0)){let e=n.charCodeAt(1),t=120===e||88===e;return tb(n.slice(t?2:1),t?16:10)}return e0(n)||e}let tC={}.hasOwnProperty;function tE(e){return{line:e.line,column:e.column,offset:e.offset}}function tP(e,t){if(e)throw Error("Cannot close `"+e.type+"` ("+K({start:e.start,end:e.end})+"): a different token (`"+t.type+"`, "+K({start:t.start,end:t.end})+") is open");throw Error("Cannot close document, a token (`"+t.type+"`, "+K({start:t.start,end:t.end})+") is still open")}function tT(e){let t=this;t.parser=function(n){var r,i;let l,o,a,u;return"object"==typeof(r={...t.data("settings"),...e,extensions:t.data("micromarkExtensions")||[],mdastExtensions:t.data("fromMarkdownExtensions")||[]})&&(i=r,r=void 0),(function(e){let t={transforms:[],canContainEols:["emphasis","fragment","heading","paragraph","strong"],enter:{autolink:r(y),autolinkProtocol:s,autolinkEmail:s,atxHeading:r(h),blockQuote:r(function(){return{type:"blockquote",children:[]}}),characterEscape:s,characterReference:s,codeFenced:r(d),codeFencedFenceInfo:i,codeFencedFenceMeta:i,codeIndented:r(d,i),codeText:r(function(){return{type:"inlineCode",value:""}},i),codeTextData:s,data:s,codeFlowValue:s,definition:r(function(){return{type:"definition",identifier:"",label:null,title:null,url:""}}),definitionDestinationString:i,definitionLabelString:i,definitionTitleString:i,emphasis:r(function(){return{type:"emphasis",children:[]}}),hardBreakEscape:r(m),hardBreakTrailing:r(m),htmlFlow:r(g,i),htmlFlowData:s,htmlText:r(g,i),htmlTextData:s,image:r(function(){return{type:"image",title:null,url:"",alt:null}}),label:i,link:r(y),listItem:r(function(e){return{type:"listItem",spread:e._spread,checked:null,children:[]}}),listItemValue:function(e){this.data.expectingFirstListItemValue&&(this.stack[this.stack.length-2].start=Number.parseInt(this.sliceSerialize(e),10),this.data.expectingFirstListItemValue=void 0)},listOrdered:r(v,function(){this.data.expectingFirstListItemValue=!0}),listUnordered:r(v),paragraph:r(function(){return{type:"paragraph",children:[]}}),reference:function(){this.data.referenceType="collapsed"},referenceString:i,resourceDestinationString:i,resourceTitleString:i,setextHeading:r(h),strong:r(function(){return{type:"strong",children:[]}}),thematicBreak:r(function(){return{type:"thematicBreak"}})},exit:{atxHeading:o(),atxHeadingSequence:function(e){let t=this.stack[this.stack.length-1];t.depth||(t.depth=this.sliceSerialize(e).length)},autolink:o(),autolinkEmail:function(e){c.call(this,e),this.stack[this.stack.length-1].url="mailto:"+this.sliceSerialize(e)},autolinkProtocol:function(e){c.call(this,e),this.stack[this.stack.length-1].url=this.sliceSerialize(e)},blockQuote:o(),characterEscapeValue:c,characterReferenceMarkerHexadecimal:p,characterReferenceMarkerNumeric:p,characterReferenceValue:function(e){let t,n=this.sliceSerialize(e),r=this.data.characterReferenceType;r?(t=tb(n,"characterReferenceMarkerNumeric"===r?10:16),this.data.characterReferenceType=void 0):t=e0(n);let i=this.stack[this.stack.length-1];i.value+=t},characterReference:function(e){this.stack.pop().position.end=tE(e.end)},codeFenced:o(function(){let e=this.resume();this.stack[this.stack.length-1].value=e.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g,""),this.data.flowCodeInside=void 0}),codeFencedFence:function(){this.data.flowCodeInside||(this.buffer(),this.data.flowCodeInside=!0)},codeFencedFenceInfo:function(){let e=this.resume();this.stack[this.stack.length-1].lang=e},codeFencedFenceMeta:function(){let e=this.resume();this.stack[this.stack.length-1].meta=e},codeFlowValue:c,codeIndented:o(function(){let e=this.resume();this.stack[this.stack.length-1].value=e.replace(/(\r?\n|\r)$/g,"")}),codeText:o(function(){let e=this.resume();this.stack[this.stack.length-1].value=e}),codeTextData:c,data:c,definition:o(),definitionDestinationString:function(){let e=this.resume();this.stack[this.stack.length-1].url=e},definitionLabelString:function(e){let t=this.resume(),n=this.stack[this.stack.length-1];n.label=t,n.identifier=tt(this.sliceSerialize(e)).toLowerCase()},definitionTitleString:function(){let e=this.resume();this.stack[this.stack.length-1].title=e},emphasis:o(),hardBreakEscape:o(f),hardBreakTrailing:o(f),htmlFlow:o(function(){let e=this.resume();this.stack[this.stack.length-1].value=e}),htmlFlowData:c,htmlText:o(function(){let e=this.resume();this.stack[this.stack.length-1].value=e}),htmlTextData:c,image:o(function(){let e=this.stack[this.stack.length-1];if(this.data.inReference){let t=this.data.referenceType||"shortcut";e.type+="Reference",e.referenceType=t,delete e.url,delete e.title}else delete e.identifier,delete e.label;this.data.referenceType=void 0}),label:function(){let e=this.stack[this.stack.length-1],t=this.resume(),n=this.stack[this.stack.length-1];this.data.inReference=!0,"link"===n.type?n.children=e.children:n.alt=t},labelText:function(e){let t=this.sliceSerialize(e),n=this.stack[this.stack.length-2];n.label=t.replace(tw,tS),n.identifier=tt(t).toLowerCase()},lineEnding:function(e){let n=this.stack[this.stack.length-1];if(this.data.atHardBreak){n.children[n.children.length-1].position.end=tE(e.end),this.data.atHardBreak=void 0;return}!this.data.setextHeadingSlurpLineEnding&&t.canContainEols.includes(n.type)&&(s.call(this,e),c.call(this,e))},link:o(function(){let e=this.stack[this.stack.length-1];if(this.data.inReference){let t=this.data.referenceType||"shortcut";e.type+="Reference",e.referenceType=t,delete e.url,delete e.title}else delete e.identifier,delete e.label;this.data.referenceType=void 0}),listItem:o(),listOrdered:o(),listUnordered:o(),paragraph:o(),referenceString:function(e){let t=this.resume(),n=this.stack[this.stack.length-1];n.label=t,n.identifier=tt(this.sliceSerialize(e)).toLowerCase(),this.data.referenceType="full"},resourceDestinationString:function(){let e=this.resume();this.stack[this.stack.length-1].url=e},resourceTitleString:function(){let e=this.resume();this.stack[this.stack.length-1].title=e},resource:function(){this.data.inReference=void 0},setextHeading:o(function(){this.data.setextHeadingSlurpLineEnding=void 0}),setextHeadingLineSequence:function(e){this.stack[this.stack.length-1].depth=61===this.sliceSerialize(e).codePointAt(0)?1:2},setextHeadingText:function(){this.data.setextHeadingSlurpLineEnding=!0},strong:o(),thematicBreak:o()}};!function e(t,n){let r=-1;for(;++r0){let e=o.tokenStack[o.tokenStack.length-1];(e[1]||tP).call(o,void 0,e[0])}for(r.position={start:tE(e.length>0?e[0][1].start:{line:1,column:1,offset:0}),end:tE(e.length>0?e[e.length-2][1].end:{line:1,column:1,offset:0})},c=-1;++c-1){let e=n[0];"string"==typeof e?n[0]=e.slice(i):n.shift()}o>0&&n.push(e[l].slice(0,o))}return n}(o,e)}function p(){let{_bufferIndex:e,_index:t,line:n,column:i,offset:l}=r;return{_bufferIndex:e,_index:t,line:n,column:i,offset:l}}function d(e,t){t.restore()}function h(e,t){return function(n,i,l){var o;let c,f,d,h;return Array.isArray(n)?m(n):"tokenize"in n?m([n]):(o=n,function(e){let t=null!==e&&o[e],n=null!==e&&o.null;return m([...Array.isArray(t)?t:t?[t]:[],...Array.isArray(n)?n:n?[n]:[]])(e)});function m(e){return(c=e,f=0,0===e.length)?l:y(e[f])}function y(e){return function(n){let i,l,o,c,f;return(i=p(),l=s.previous,o=s.currentConstruct,c=s.events.length,f=Array.from(a),h={from:c,restore:function(){r=i,s.previous=l,s.currentConstruct=o,s.events.length=c,a=f,g()}},d=e,e.partial||(s.currentConstruct=e),e.name&&s.parser.constructs.disable.null.includes(e.name))?x(n):e.tokenize.call(t?Object.assign(Object.create(s),t):s,u,v,x)(n)}}function v(t){return e(d,h),i}function x(e){return(h.restore(),++f{var t;let n,r;return(t=new Map,n=(e,n)=>(t.set(n,e),e),r=i=>{if(t.has(i))return t.get(i);let[l,o]=e[i];switch(l){case 0:case -1:return n(o,i);case 1:{let e=n([],i);for(let t of o)e.push(r(t));return e}case 2:{let e=n({},i);for(let[t,n]of o)e[r(t)]=r(n);return e}case 3:return n(new Date(o),i);case 4:{let{source:e,flags:t}=o;return n(new RegExp(e,t),i)}case 5:{let e=n(new Map,i);for(let[t,n]of o)e.set(r(t),r(n));return e}case 6:{let e=n(new Set,i);for(let t of o)e.add(r(t));return e}case 7:{let{name:e,message:t}=o;return n(new tA[e](t),i)}case 8:return n(BigInt(o),i);case"BigInt":return n(Object(BigInt(o)),i);case"ArrayBuffer":return n(new Uint8Array(o).buffer,o);case"DataView":{let{buffer:e}=new Uint8Array(o);return n(new DataView(e),o)}}return n(new tA[l](o),i)})(0)},{toString:tD}={},{keys:tL}=Object,tz=e=>{let t=typeof e;if("object"!==t||!e)return[0,t];let n=tD.call(e).slice(8,-1);switch(n){case"Array":return[1,""];case"Object":return[2,""];case"Date":return[3,""];case"RegExp":return[4,""];case"Map":return[5,""];case"Set":return[6,""];case"DataView":return[1,n]}return n.includes("Array")?[1,n]:n.includes("Error")?[7,n]:[2,n]},tO=([e,t])=>0===e&&("function"===t||"symbol"===t),tM=(e,{json:t,lossy:n}={})=>{var r,i,l;let o,a,u=[];return(r=!(t||n),i=!!t,l=new Map,o=(e,t)=>{let n=u.push(e)-1;return l.set(t,n),n},a=e=>{if(l.has(e))return l.get(e);let[t,n]=tz(e);switch(t){case 0:{let i=e;switch(n){case"bigint":t=8,i=e.toString();break;case"function":case"symbol":if(r)throw TypeError("unable to serialize "+n);i=null;break;case"undefined":return o([-1],e)}return o([t,i],e)}case 1:{if(n){let t=e;return"DataView"===n?t=new Uint8Array(e.buffer):"ArrayBuffer"===n&&(t=new Uint8Array(e)),o([n,[...t]],e)}let r=[],i=o([t,r],e);for(let t of e)r.push(a(t));return i}case 2:{if(n)switch(n){case"BigInt":return o([n,e.toString()],e);case"Boolean":case"Number":case"String":return o([n,e.valueOf()],e)}if(i&&"toJSON"in e)return a(e.toJSON());let l=[],u=o([t,l],e);for(let t of tL(e))(r||!tO(tz(e[t])))&&l.push([a(t),a(e[t])]);return u}case 3:return o([t,e.toISOString()],e);case 4:{let{source:n,flags:r}=e;return o([t,{source:n,flags:r}],e)}case 5:{let n=[],i=o([t,n],e);for(let[t,i]of e)(r||!(tO(tz(t))||tO(tz(i))))&&n.push([a(t),a(i)]);return i}case 6:{let n=[],i=o([t,n],e);for(let t of e)(r||!tO(tz(t)))&&n.push(a(t));return i}}let{message:u}=e;return o([t,{name:n,message:u}],e)})(e),u},tF="function"==typeof structuredClone?(e,t)=>t&&("json"in t||"lossy"in t)?tI(tM(e,t)):structuredClone(e):(e,t)=>tI(tM(e,t));function tR(e){let t=[],n=-1,r=0,i=0;for(;++n55295&&l<57344){let t=e.charCodeAt(n+1);l<56320&&t>56319&&t<57344?(o=String.fromCharCode(l,t),i=1):o="�"}else o=String.fromCharCode(l);o&&(t.push(e.slice(r,n),encodeURIComponent(o)),r=n+i+1,o=""),i&&(n+=i,i=0)}return t.join("")+e.slice(r)}function t_(e,t){let n=[{type:"text",value:"↩"}];return t>1&&n.push({type:"element",tagName:"sup",properties:{},children:[{type:"text",value:String(t)}]}),n}function tN(e,t){return"Back to reference "+(e+1)+(t>1?"-"+t:"")}let tj=function(e){var t,n;if(null==e)return tU;if("function"==typeof e)return tB(e);if("object"==typeof e){return Array.isArray(e)?function(e){let t=[],n=-1;for(;++n":"")+")"})}return u;function u(){var a;let u,s,c,d=tH;if((!i||f(t,n,r[r.length-1]||void 0))&&!1===(d=Array.isArray(a=l(t,r))?a:"number"==typeof a?[!0,a]:null==a?tH:[a])[0])return d;if("children"in t&&t.children&&t.children&&"skip"!==d[0])for(s=(o?t.children.length:-1)+p,c=r.concat(t);s>-1&&s1:t}function tK(e,t,n){let r=0,i=e.length;if(t){let t=e.codePointAt(r);for(;9===t||32===t;)r++,t=e.codePointAt(r)}if(n){let t=e.codePointAt(i-1);for(;9===t||32===t;)i--,t=e.codePointAt(i-1)}return i>r?e.slice(r,i):""}let tQ={blockquote:function(e,t){let n={type:"element",tagName:"blockquote",properties:{},children:e.wrap(e.all(t),!0)};return e.patch(t,n),e.applyData(t,n)},break:function(e,t){let n={type:"element",tagName:"br",properties:{},children:[]};return e.patch(t,n),[e.applyData(t,n),{type:"text",value:"\n"}]},code:function(e,t){let n=t.value?t.value+"\n":"",r={},i=t.lang?t.lang.split(/\s+/):[];i.length>0&&(r.className=["language-"+i[0]]);let l={type:"element",tagName:"code",properties:r,children:[{type:"text",value:n}]};return t.meta&&(l.data={meta:t.meta}),e.patch(t,l),l={type:"element",tagName:"pre",properties:{},children:[l=e.applyData(t,l)]},e.patch(t,l),l},delete:function(e,t){let n={type:"element",tagName:"del",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)},emphasis:function(e,t){let n={type:"element",tagName:"em",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)},footnoteReference:function(e,t){let n,r="string"==typeof e.options.clobberPrefix?e.options.clobberPrefix:"user-content-",i=String(t.identifier).toUpperCase(),l=tR(i.toLowerCase()),o=e.footnoteOrder.indexOf(i),a=e.footnoteCounts.get(i);void 0===a?(a=0,e.footnoteOrder.push(i),n=e.footnoteOrder.length):n=o+1,a+=1,e.footnoteCounts.set(i,a);let u={type:"element",tagName:"a",properties:{href:"#"+r+"fn-"+l,id:r+"fnref-"+l+(a>1?"-"+a:""),dataFootnoteRef:!0,ariaDescribedBy:["footnote-label"]},children:[{type:"text",value:String(n)}]};e.patch(t,u);let s={type:"element",tagName:"sup",properties:{},children:[u]};return e.patch(t,s),e.applyData(t,s)},heading:function(e,t){let n={type:"element",tagName:"h"+t.depth,properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)},html:function(e,t){if(e.options.allowDangerousHtml){let n={type:"raw",value:t.value};return e.patch(t,n),e.applyData(t,n)}},imageReference:function(e,t){let n=String(t.identifier).toUpperCase(),r=e.definitionById.get(n);if(!r)return tq(e,t);let i={src:tR(r.url||""),alt:t.alt};null!==r.title&&void 0!==r.title&&(i.title=r.title);let l={type:"element",tagName:"img",properties:i,children:[]};return e.patch(t,l),e.applyData(t,l)},image:function(e,t){let n={src:tR(t.url)};null!==t.alt&&void 0!==t.alt&&(n.alt=t.alt),null!==t.title&&void 0!==t.title&&(n.title=t.title);let r={type:"element",tagName:"img",properties:n,children:[]};return e.patch(t,r),e.applyData(t,r)},inlineCode:function(e,t){let n={type:"text",value:t.value.replace(/\r?\n|\r/g," ")};e.patch(t,n);let r={type:"element",tagName:"code",properties:{},children:[n]};return e.patch(t,r),e.applyData(t,r)},linkReference:function(e,t){let n=String(t.identifier).toUpperCase(),r=e.definitionById.get(n);if(!r)return tq(e,t);let i={href:tR(r.url||"")};null!==r.title&&void 0!==r.title&&(i.title=r.title);let l={type:"element",tagName:"a",properties:i,children:e.all(t)};return e.patch(t,l),e.applyData(t,l)},link:function(e,t){let n={href:tR(t.url)};null!==t.title&&void 0!==t.title&&(n.title=t.title);let r={type:"element",tagName:"a",properties:n,children:e.all(t)};return e.patch(t,r),e.applyData(t,r)},listItem:function(e,t,n){let r=e.all(t),i=n?function(e){let t=!1;if("list"===e.type){t=e.spread||!1;let n=e.children,r=-1;for(;!t&&++r0&&e.children.unshift({type:"text",value:" "}),e.children.unshift({type:"element",tagName:"input",properties:{type:"checkbox",checked:t.checked,disabled:!0},children:[]}),l.className=["task-list-item"]}let a=-1;for(;++a0){let r={type:"element",tagName:"tbody",properties:{},children:e.wrap(n,!0)},l=q(t.children[1]),o=V(t.children[t.children.length-1]);l&&o&&(r.position={start:l,end:o}),i.push(r)}let l={type:"element",tagName:"table",properties:{},children:e.wrap(i,!0)};return e.patch(t,l),e.applyData(t,l)},tableCell:function(e,t){let n={type:"element",tagName:"td",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)},tableRow:function(e,t,n){let r=n?n.children:void 0,i=0===(r?r.indexOf(t):1)?"th":"td",l=n&&"table"===n.type?n.align:void 0,o=l?l.length:t.children.length,a=-1,u=[];for(;++a0,!0),r[0]),i=r.index+r[0].length,r=n.exec(t);return l.push(tK(t.slice(i),i>0,!1)),l.join("")}(String(t.value))};return e.patch(t,n),e.applyData(t,n)},thematicBreak:function(e,t){let n={type:"element",tagName:"hr",properties:{},children:[]};return e.patch(t,n),e.applyData(t,n)},toml:t$,yaml:t$,definition:t$,footnoteDefinition:t$};function t$(){}let tX={}.hasOwnProperty,tJ={};function tY(e,t){e.position&&(t.position=function(e){let t=q(e),n=V(e);if(t&&n)return{start:t,end:n}}(e))}function tZ(e,t){let n=t;if(e&&e.data){let t=e.data.hName,r=e.data.hChildren,i=e.data.hProperties;"string"==typeof t&&("element"===n.type?n.tagName=t:n={type:"element",tagName:t,properties:{},children:"children"in n?n.children:[n]}),"element"===n.type&&i&&Object.assign(n.properties,tF(i)),"children"in n&&n.children&&null!=r&&(n.children=r)}return n}function tG(e,t){let n=[],r=-1;for(t&&n.push({type:"text",value:"\n"});++r0&&n.push({type:"text",value:"\n"}),n}function t1(e){let t=0,n=e.charCodeAt(t);for(;9===n||32===n;)t++,n=e.charCodeAt(t);return e.slice(t)}function t0(e,n){let r,i,l,o,a=(r=n||tJ,i=new Map,l=new Map,o={all:function(e){let t=[];if("children"in e){let n=e.children,r=-1;for(;++r0&&f.push({type:"text",value:" "});let e="string"==typeof n?n:n(u,c);"string"==typeof e&&(e={type:"text",value:e}),f.push({type:"element",tagName:"a",properties:{href:"#"+t+"fnref-"+s+(c>1?"-"+c:""),dataFootnoteBackref:"",ariaLabel:"string"==typeof r?r:r(u,c),className:["data-footnote-backref"]},children:Array.isArray(e)?e:[e]})}let d=l[l.length-1];if(d&&"element"===d.type&&"p"===d.tagName){let e=d.children[d.children.length-1];e&&"text"===e.type?e.value+=" ":d.children.push({type:"text",value:" "}),d.children.push(...f)}else l.push(...f);let h={type:"element",tagName:"li",properties:{id:t+"fn-"+s},children:e.wrap(l,!0)};e.patch(i,h),a.push(h)}if(0!==a.length)return{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:l,properties:{...tF(o),id:"footnote-label"},children:[{type:"text",value:i}]},{type:"text",value:"\n"},{type:"element",tagName:"ol",properties:{},children:e.wrap(a,!0)},{type:"text",value:"\n"}]}}(a),c=Array.isArray(u)?{type:"root",children:u}:u||{type:"root",children:[]};return s&&(t("children"in c),c.children.push({type:"text",value:"\n"},s)),c}function t2(e,t){return e&&"run"in e?async function(n,r){let i=t0(n,{file:r,...t});await e.run(i,r)}:function(n,r){return t0(n,{file:r,...e||t})}}function t4(e){if(e)throw e}var t5=e.i(104100);function t6(e){if("object"!=typeof e||null===e)return!1;let t=Object.getPrototypeOf(e);return(null===t||t===Object.prototype||null===Object.getPrototypeOf(t))&&!(Symbol.toStringTag in e)&&!(Symbol.iterator in e)}let t3=function(e,t){let n;if(void 0!==t&&"string"!=typeof t)throw TypeError('"ext" argument must be a string');ne(e);let r=0,i=-1,l=e.length;if(void 0===t||0===t.length||t.length>e.length){for(;l--;)if(47===e.codePointAt(l)){if(n){r=l+1;break}}else i<0&&(n=!0,i=l+1);return i<0?"":e.slice(r,i)}if(t===e)return"";let o=-1,a=t.length-1;for(;l--;)if(47===e.codePointAt(l)){if(n){r=l+1;break}}else o<0&&(n=!0,o=l+1),a>-1&&(e.codePointAt(l)===t.codePointAt(a--)?a<0&&(i=l):(a=-1,i=o));return r===i?i=o:i<0&&(i=e.length),e.slice(r,i)},t9=function(e){let t;if(ne(e),0===e.length)return".";let n=-1,r=e.length;for(;--r;)if(47===e.codePointAt(r)){if(t){n=r;break}}else t||(t=!0);return n<0?47===e.codePointAt(0)?"/":".":1===n&&47===e.codePointAt(0)?"//":e.slice(0,n)},t7=function(e){let t;ne(e);let n=e.length,r=-1,i=0,l=-1,o=0;for(;n--;){let a=e.codePointAt(n);if(47===a){if(t){i=n+1;break}continue}r<0&&(t=!0,r=n+1),46===a?l<0?l=n:1!==o&&(o=1):l>-1&&(o=-1)}return l<0||r<0||0===o||1===o&&l===r-1&&l===i+1?"":e.slice(l,r)},t8=function(...e){var t;let n,r,i,l=-1;for(;++l2){if((r=i.lastIndexOf("/"))!==i.length-1){r<0?(i="",l=0):l=(i=i.slice(0,r)).length-1-i.lastIndexOf("/"),o=u,a=0;continue}}else if(i.length>0){i="",l=0,o=u,a=0;continue}}t&&(i=i.length>0?i+"/..":"..",l=2)}else i.length>0?i+="/"+e.slice(o+1,u):i=e.slice(o+1,u),l=u-o-1;o=u,a=0}else 46===n&&a>-1?a++:a=-1}return i}(t,!n)).length||n||(r="."),r.length>0&&47===t.codePointAt(t.length-1)&&(r+="/"),n?"/"+r:r)};function ne(e){if("string"!=typeof e)throw TypeError("Path must be a string. Received "+JSON.stringify(e))}function nt(e){return!!(null!==e&&"object"==typeof e&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&void 0===e.auth)}let nn=["history","path","basename","stem","extname","dirname"];class nr{constructor(e){let t,n;t=e?nt(e)?{path:e}:"string"==typeof e||function(e){return!!(e&&"object"==typeof e&&"byteLength"in e&&"byteOffset"in e)}(e)?{value:e}:e:{},this.cwd="cwd"in t?"":"/",this.data={},this.history=[],this.messages=[],this.value,this.map,this.result,this.stored;let r=-1;for(;++rt.length;o&&t.push(r);try{l=e.apply(this,t)}catch(e){if(o&&n)throw e;return r(e)}o||(l&&l.then&&"function"==typeof l.then?l.then(i,r):l instanceof Error?r(l):i(l))};function r(e,...i){n||(n=!0,t(e,...i))}function i(e){r(null,e)}})(a,i)(...o):r(null,...o)}(null,...t)},use:function(n){if("function"!=typeof n)throw TypeError("Expected `middelware` to be a function, not "+n);return e.push(n),t}};return t}()}copy(){let e=new ns,t=-1;for(;++t0){let[r,...l]=t,o=n[i][1];t6(o)&&t6(r)&&(r=(0,t5.default)(!0,o,r)),n[i]=[e,r,...l]}}}}let nc=new ns().freeze();function nf(e,t){if("function"!=typeof t)throw TypeError("Cannot `"+e+"` without `parser`")}function np(e,t){if("function"!=typeof t)throw TypeError("Cannot `"+e+"` without `compiler`")}function nd(e,t){if(t)throw Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function nh(e){if(!t6(e)||"string"!=typeof e.type)throw TypeError("Expected node, got `"+e+"`")}function nm(e,t,n){if(!n)throw Error("`"+e+"` finished async. Use `"+t+"` instead")}function ng(e){var t;return(t=e)&&"object"==typeof t&&"message"in t&&"messages"in t?e:new nr(e)}let ny=[],nv={allowDangerousHtml:!0},nx=/^(https?|ircs?|mailto|xmpp)$/i,nk=[{from:"astPlugins",id:"remove-buggy-html-in-markdown-parser"},{from:"allowDangerousHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"allowNode",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowElement"},{from:"allowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowedElements"},{from:"disallowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"disallowedElements"},{from:"escapeHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"includeElementIndex",id:"#remove-includeelementindex"},{from:"includeNodeIndex",id:"change-includenodeindex-to-includeelementindex"},{from:"linkTarget",id:"remove-linktarget"},{from:"plugins",id:"change-plugins-to-remarkplugins",to:"remarkPlugins"},{from:"rawSourcePos",id:"#remove-rawsourcepos"},{from:"renderers",id:"change-renderers-to-components",to:"components"},{from:"source",id:"change-source-to-children",to:"children"},{from:"sourcePos",id:"#remove-sourcepos"},{from:"transformImageUri",id:"#add-urltransform",to:"urlTransform"},{from:"transformLinkUri",id:"#add-urltransform",to:"urlTransform"}];function nb(e){let t=e.indexOf(":"),n=e.indexOf("?"),r=e.indexOf("#"),i=e.indexOf("/");return -1===t||-1!==i&&t>i||-1!==n&&t>n||-1!==r&&t>r||nx.test(e.slice(0,t))?e:""}e.s(["default",0,function(e){var t;let r,i,l,o,a,u=(r=(t=e).rehypePlugins||ny,i=t.remarkPlugins||ny,l=t.remarkRehypeOptions?{...t.remarkRehypeOptions,...nv}:nv,nc().use(tT).use(i).use(t2,l).use(r)),s=(o=e.children||"",a=new nr,"string"==typeof o?a.value=o:n("Unexpected value `"+o+"` for `children` prop, expected `string`"),a);return function(e,t){let r=t.allowedElements,i=t.allowElement,l=t.components,o=t.disallowedElements,a=t.skipHtml,u=t.unwrapDisallowed,s=t.urlTransform||nb;for(let e of nk)Object.hasOwn(t,e.from)&&n("Unexpected `"+e.from+"` prop, "+(e.to?"use `"+e.to+"` instead":"remove it")+" (see for more info)");return r&&o&&n("Unexpected combined `allowedElements` and `disallowedElements`, expected one or the other"),t.className&&(e={type:"element",tagName:"div",properties:{className:t.className},children:"root"===e.type?e.children:[e]}),tV(e,function(e,t,n){if("raw"===e.type&&n&&"number"==typeof t)return a?n.children.splice(t,1):n.children[t]={type:"text",value:e.value},t;if("element"===e.type){let t;for(t in ec)if(Object.hasOwn(ec,t)&&Object.hasOwn(e.properties,t)){let n=e.properties[t],r=ec[t];(null===r||r.includes(e.tagName))&&(e.properties[t]=s(String(n||""),t,e))}}if("element"===e.type){let l=r?!r.includes(e.tagName):!!o&&o.includes(e.tagName);if(!l&&i&&"number"==typeof t&&(l=!i(e,t,n)),l&&n&&"number"==typeof t)return u&&e.children?n.children.splice(t,1,...e.children):n.children.splice(t,1),t}}),function(e,t){var n,r,i,l;let o;if(!t||void 0===t.Fragment)throw TypeError("Expected `Fragment` in options");let a=t.filePath||void 0;if(t.development){if("function"!=typeof t.jsxDEV)throw TypeError("Expected `jsxDEV` in options when `development: true`");n=a,r=t.jsxDEV,o=function(e,t,i,l){let o=Array.isArray(i.children),a=q(e);return r(t,i,l,o,{columnNumber:a?a.column-1:void 0,fileName:n,lineNumber:a?a.line:void 0},void 0)}}else{if("function"!=typeof t.jsx)throw TypeError("Expected `jsx` in production options");if("function"!=typeof t.jsxs)throw TypeError("Expected `jsxs` in production options");i=t.jsx,l=t.jsxs,o=function(e,t,n,r){let o=Array.isArray(n.children)?l:i;return r?o(t,n,r):o(t,n)}}let u={Fragment:t.Fragment,ancestors:[],components:t.components||{},create:o,elementAttributeNameCase:t.elementAttributeNameCase||"react",evaluater:t.createEvaluater?t.createEvaluater():void 0,filePath:a,ignoreInvalidStyle:t.ignoreInvalidStyle||!1,passKeys:!1!==t.passKeys,passNode:t.passNode||!1,schema:"svg"===t.space?U:B,stylePropertyNameCase:t.stylePropertyNameCase||"dom",tableCellAlignToStyle:!1!==t.tableCellAlignToStyle},s=er(u,e,void 0);return s&&"string"!=typeof s?s:u.create(e,u.Fragment,{children:s||void 0},void 0)}(e,{Fragment:ef.Fragment,components:l,ignoreInvalidStyle:!0,jsx:ef.jsx,jsxs:ef.jsxs,passKeys:!0,passNode:!0})}(u.runSync(u.parse(s),s),e)}],918789)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/10e9lx.nawttb.js b/litellm/proxy/_experimental/out/_next/static/chunks/10e9lx.nawttb.js new file mode 100644 index 00000000000..5da7e17174d --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/10e9lx.nawttb.js @@ -0,0 +1 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,364769,e=>{"use strict";var t=e.i(843476),s=e.i(271645),a=e.i(237016),l=e.i(464571),r=e.i(888259);e.s(["default",0,({apiKey:e})=>{let[i,n]=(0,s.useState)(!1);return(0,t.jsxs)("div",{children:[(0,t.jsxs)("p",{className:"mb-2",children:["Please save this secret key somewhere safe and accessible. For security reasons,"," ",(0,t.jsx)("b",{children:"you will not be able to view it again"})," through your LiteLLM account. If you lose this secret key, you will need to generate a new one."]}),(0,t.jsx)("p",{className:"text-sm text-gray-600 mt-3 mb-1",children:"Virtual Key:"}),(0,t.jsx)("div",{style:{background:"#f8f8f8",padding:"10px",borderRadius:"5px",marginBottom:"10px"},children:(0,t.jsx)("pre",{style:{wordWrap:"break-word",whiteSpace:"normal",margin:0},children:e})}),(0,t.jsx)(a.CopyToClipboard,{text:e,onCopy:()=>{n(!0),r.default.success("Key copied to clipboard"),setTimeout(()=>n(!1),2e3)},children:(0,t.jsx)(l.Button,{type:"primary",style:{marginTop:12},children:i?"Copied!":"Copy Virtual Key"})})]})}])},390605,e=>{"use strict";var t=e.i(843476),s=e.i(271645),a=e.i(602869),l=e.i(599724),r=e.i(482725),i=e.i(91739),n=e.i(500727),o=e.i(531516),d=e.i(696609);e.s(["default",0,({accessToken:e,selectedServers:c,toolPermissions:u,onChange:m,disabled:p=!1})=>{let{data:g=[]}=(0,n.useMCPServers)(),[h,x]=(0,s.useState)({}),[y,_]=(0,s.useState)({}),[f,b]=(0,s.useState)({}),[j,v]=(0,s.useState)({}),w=(0,s.useRef)(u);(0,s.useEffect)(()=>{w.current=u},[u]);let N=(0,s.useMemo)(()=>0===c.length?[]:g.filter(e=>c.includes(e.server_id)),[g,c]),k=async(e,t)=>{_(t=>({...t,[e]:!0})),b(t=>({...t,[e]:""}));try{let s=await (0,a.listMCPTools)(t,e);if(s.error)b(t=>({...t,[e]:s.message||"Failed to fetch tools"})),x(t=>({...t,[e]:[]}));else{let t=s.tools||[];x(s=>({...s,[e]:t}));let a=w.current;if(!a[e]&&t.length>0){let s=t.filter(e=>"delete"!==(0,d.classifyToolOp)(e.name,e.description||"")).map(e=>e.name);m({...a,[e]:s})}}}catch(t){console.error(`Error fetching tools for server ${e}:`,t),b(t=>({...t,[e]:"Failed to fetch tools"})),x(t=>({...t,[e]:[]}))}finally{_(t=>({...t,[e]:!1}))}};(0,s.useEffect)(()=>{N.forEach(t=>{h[t.server_id]||y[t.server_id]||k(t.server_id,e)})},[N,e]);let S=(e,t)=>{m({...u,[e]:t})};return 0===c.length?null:(0,t.jsx)("div",{className:"space-y-4",children:N.map(e=>{let s=e.server_name||e.alias||e.server_id,a=h[e.server_id]||[],n=u[e.server_id]||[],d=y[e.server_id],c=f[e.server_id],g=j[e.server_id]??"crud";return(0,t.jsxs)("div",{className:"border rounded-lg bg-gray-50",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between p-4 border-b bg-white rounded-t-lg",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)(l.Text,{className:"font-semibold text-gray-900",children:s}),e.description&&(0,t.jsx)(l.Text,{className:"text-sm text-gray-500",children:e.description})]}),(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[!p&&a.length>0&&(0,t.jsx)(i.Radio.Group,{value:g,onChange:t=>v(s=>({...s,[e.server_id]:t.target.value})),size:"small",optionType:"button",buttonStyle:"solid",options:[{label:"Risk Groups",value:"crud"},{label:"Flat List",value:"flat"}]}),!p&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("button",{type:"button",className:"text-sm text-blue-600 hover:text-blue-700 font-medium",onClick:()=>{var t;let s;return s=h[t=e.server_id]||[],void m({...u,[t]:s.map(e=>e.name)})},disabled:d,children:"Select All"}),(0,t.jsx)("button",{type:"button",className:"text-sm text-blue-600 hover:text-blue-700 font-medium",onClick:()=>{var t;return t=e.server_id,void m({...u,[t]:[]})},disabled:d,children:"Deselect All"})]})]})]}),(0,t.jsxs)("div",{className:"p-4",children:[d&&(0,t.jsxs)("div",{className:"flex items-center justify-center py-8",children:[(0,t.jsx)(r.Spin,{size:"large"}),(0,t.jsx)(l.Text,{className:"ml-3 text-gray-500",children:"Loading tools..."})]}),c&&!d&&(0,t.jsxs)("div",{className:"p-4 bg-red-50 border border-red-200 rounded-lg text-center",children:[(0,t.jsx)(l.Text,{className:"text-red-600 font-medium",children:"Unable to load tools"}),(0,t.jsx)(l.Text,{className:"text-sm text-red-500 mt-1",children:c})]}),!d&&!c&&a.length>0&&"crud"===g&&(0,t.jsx)(o.default,{tools:a,value:u[e.server_id]?n:void 0,onChange:t=>S(e.server_id,t),readOnly:p}),!d&&!c&&a.length>0&&"flat"===g&&(0,t.jsx)("div",{className:"space-y-2",children:a.map(s=>{let a=n.includes(s.name);return(0,t.jsxs)("div",{className:"flex items-start gap-2",children:[(0,t.jsx)("input",{type:"checkbox",checked:a,onChange:()=>{if(p)return;let t=a?n.filter(e=>e!==s.name):[...n,s.name];S(e.server_id,t)},disabled:p,className:"mt-0.5"}),(0,t.jsx)("div",{className:"flex-1 min-w-0",children:(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(l.Text,{className:"font-medium text-gray-900",children:s.name}),(0,t.jsxs)(l.Text,{className:"text-sm text-gray-500",children:["- ",s.description||"No description"]})]})})]},s.name)})}),!d&&!c&&0===a.length&&(0,t.jsx)("div",{className:"text-center py-6",children:(0,t.jsx)(l.Text,{className:"text-gray-500",children:"No tools available"})})]})]},e.server_id)})})}])},207082,e=>{"use strict";var t=e.i(619273),s=e.i(266027),a=e.i(243652),l=e.i(602869),r=e.i(431703),i=e.i(135214);let n=(0,a.createQueryKeys)("keys"),o=async(e,t,s,a={})=>{try{let i=(0,l.getProxyBaseUrl)(),n=new URLSearchParams(Object.entries({team_id:a.teamID,project_id:a.projectID,agent_id:a.agentID,organization_id:a.organizationID,key_alias:a.selectedKeyAlias,key_hash:a.keyHash,user_id:a.userID,page:t,size:s,sort_by:a.sortBy,sort_order:a.sortOrder,expand:a.expand,status:a.status,return_full_object:"true",include_team_keys:"true",include_created_by_keys:"true",substring_matching:"true"}).filter(([,e])=>null!=e).map(([e,t])=>[e,String(t)])),o=`${i?`${i}/key/list`:"/key/list"}?${n}`,d=await fetch(o,{method:"GET",headers:{[(0,l.getGlobalLitellmHeaderName)()]:`Bearer ${e}`,"Content-Type":"application/json"}});if(!d.ok){let e=await d.json(),t=(0,r.deriveErrorMessage)(e);throw(0,l.handleError)(t),Error(t)}let c=await d.json();return console.log("/key/list API Response:",c),c}catch(e){throw console.error("Failed to list keys:",e),e}},d=(0,a.createQueryKeys)("deletedKeys");e.s(["keyKeys",0,n,"useDeletedKeys",0,(e,a,l={})=>{let{accessToken:r}=(0,i.default)();return(0,s.useQuery)({queryKey:d.list({page:e,limit:a,...l}),queryFn:async()=>await o(r,e,a,{...l,status:"deleted"}),enabled:!!r,staleTime:3e4,placeholderData:t.keepPreviousData})},"useKeys",0,(e,a,l={})=>{let{accessToken:r}=(0,i.default)();return(0,s.useQuery)({queryKey:n.list({page:e,limit:a,...l}),queryFn:async()=>await o(r,e,a,l),enabled:!!r,staleTime:3e4,placeholderData:t.keepPreviousData})}])},510674,e=>{"use strict";var t=e.i(266027),s=e.i(243652),a=e.i(602869),l=e.i(431703),r=e.i(135214),i=e.i(708347);let n=(0,s.createQueryKeys)("projects"),o=[...i.all_admin_roles,...i.internalUserRoles],d=async e=>{let t=(0,a.getProxyBaseUrl)(),s=`${t}/project/list`,r=await fetch(s,{method:"GET",headers:{[(0,a.getGlobalLitellmHeaderName)()]:`Bearer ${e}`,"Content-Type":"application/json"}});if(!r.ok){let e=await r.json(),t=(0,l.deriveErrorMessage)(e);throw(0,a.handleError)(t),Error(t)}return r.json()};e.s(["projectKeys",0,n,"useProjects",0,()=>{let{accessToken:e,userRole:s}=(0,r.default)();return(0,t.useQuery)({queryKey:n.list({}),queryFn:async()=>d(e),enabled:!!e&&o.includes(s)})}])},557662,e=>{"use strict";let t="/ui/assets/logos/",s=[{id:"arize",displayName:"Arize",logo:`${t}arize.png`,supports_key_team_logging:!0,dynamic_params:{arize_api_key:"password",arize_space_id:"password"},description:"Arize Logging Integration"},{id:"braintrust",displayName:"Braintrust",logo:`${t}braintrust.png`,supports_key_team_logging:!1,dynamic_params:{braintrust_api_key:"password",braintrust_project_name:"text"},description:"Braintrust Logging Integration"},{id:"custom_callback_api",displayName:"Custom Callback API",logo:`${t}custom.svg`,supports_key_team_logging:!0,dynamic_params:{custom_callback_api_url:"text",custom_callback_api_headers:"text"},description:"Custom Callback API Logging Integration"},{id:"galileo",displayName:"Galileo",logo:`${t}galileo.ico`,supports_key_team_logging:!1,dynamic_params:{GALILEO_API_KEY:"password",GALILEO_PROJECT_ID:"text",GALILEO_LOG_STREAM_ID:"text",GALILEO_BASE_URL:"text",GALILEO_USERNAME:"text",GALILEO_PASSWORD:"password"},description:"Galileo AI Observability Integration"},{id:"datadog",displayName:"Datadog",logo:`${t}datadog.png`,supports_key_team_logging:!1,dynamic_params:{dd_api_key:"password",dd_site:"text"},description:"Datadog Logging Integration"},{id:"lago",displayName:"Lago",logo:`${t}lago.svg`,supports_key_team_logging:!1,dynamic_params:{lago_api_url:"text",lago_api_key:"password"},description:"Lago Billing Logging Integration"},{id:"langfuse",displayName:"Langfuse",logo:`${t}langfuse.png`,supports_key_team_logging:!0,dynamic_params:{langfuse_public_key:"text",langfuse_secret_key:"password",langfuse_host:"text"},description:"Langfuse v2 Logging Integration"},{id:"langfuse_otel",displayName:"Langfuse OTEL",logo:`${t}langfuse.png`,supports_key_team_logging:!0,dynamic_params:{langfuse_public_key:"text",langfuse_secret_key:"password",langfuse_host:"text"},description:"Langfuse v3 OTEL Logging Integration"},{id:"langsmith",displayName:"LangSmith",logo:`${t}langsmith.png`,supports_key_team_logging:!0,dynamic_params:{langsmith_api_key:"password",langsmith_project:"text",langsmith_base_url:"text",langsmith_sampling_rate:"number"},description:"Langsmith Logging Integration"},{id:"openmeter",displayName:"OpenMeter",logo:`${t}openmeter.png`,supports_key_team_logging:!1,dynamic_params:{openmeter_api_key:"password",openmeter_base_url:"text"},description:"OpenMeter Logging Integration"},{id:"otel",displayName:"Open Telemetry",logo:`${t}otel.png`,supports_key_team_logging:!1,dynamic_params:{otel_endpoint:"text",otel_headers:"text"},description:"OpenTelemetry Logging Integration"},{id:"s3",displayName:"S3",logo:`${t}aws.svg`,supports_key_team_logging:!1,dynamic_params:{s3_bucket_name:"text",aws_access_key_id:"password",aws_secret_access_key:"password",aws_region:"text"},description:"S3 Bucket (AWS) Logging Integration"},{id:"SQS",displayName:"SQS",logo:`${t}aws.svg`,supports_key_team_logging:!1,dynamic_params:{sqs_queue_url:"text",aws_access_key_id:"password",aws_secret_access_key:"password",aws_region:"text"},description:"SQS Queue (AWS) Logging Integration"}],a=s.reduce((e,t)=>(e[t.displayName]=t,e),{}),l=s.reduce((e,t)=>(e[t.displayName]=t.id,e),{}),r=s.reduce((e,t)=>(e[t.id]=t.displayName,e),{});e.s(["callbackInfo",0,a,"callback_map",0,l,"mapDisplayToInternalNames",0,e=>e.map(e=>l[e]||e),"mapInternalToDisplayNames",0,e=>e.map(e=>r[e]||e),"reverse_callback_map",0,r])},810757,477386,e=>{"use strict";var t=e.i(271645);let s=t.forwardRef(function(e,s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z"}),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"}))});e.s(["CogIcon",0,s],810757);let a=t.forwardRef(function(e,s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728A9 9 0 015.636 5.636m12.728 12.728L5.636 5.636"}))});e.s(["BanIcon",0,a],477386)},552130,e=>{"use strict";var t=e.i(843476),s=e.i(271645),a=e.i(199133),l=e.i(602869);e.s(["default",0,({onChange:e,value:r,className:i,accessToken:n,placeholder:o="Select agents",disabled:d=!1})=>{let[c,u]=(0,s.useState)([]),[m,p]=(0,s.useState)([]),[g,h]=(0,s.useState)(!1);(0,s.useEffect)(()=>{(async()=>{if(n){h(!0);try{let e=await (0,l.getAgentsList)(n),t=e?.agents||[];u(t);let s=new Set;t.forEach(e=>{let t=e.agent_access_groups;t&&Array.isArray(t)&&t.forEach(e=>s.add(e))}),p(Array.from(s))}catch(e){console.error("Error fetching agents:",e)}finally{h(!1)}}})()},[n]);let x=[...m.map(e=>({label:e,value:`group:${e}`,isAccessGroup:!0,searchText:`${e} Access Group`})),...c.map(e=>({label:`${e.agent_name||e.agent_id}`,value:e.agent_id,isAccessGroup:!1,searchText:`${e.agent_name||e.agent_id} ${e.agent_id} Agent`}))],y=[...r?.agents||[],...(r?.accessGroups||[]).map(e=>`group:${e}`)];return(0,t.jsx)("div",{children:(0,t.jsx)(a.Select,{mode:"multiple",placeholder:o,onChange:t=>{e({agents:t.filter(e=>!e.startsWith("group:")),accessGroups:t.filter(e=>e.startsWith("group:")).map(e=>e.replace("group:",""))})},value:y,loading:g,className:i,allowClear:!0,showSearch:!0,style:{width:"100%"},disabled:d,filterOption:(e,t)=>(x.find(e=>e.value===t?.value)?.searchText||"").toLowerCase().includes(e.toLowerCase()),children:x.map(e=>(0,t.jsx)(a.Select.Option,{value:e.value,label:e.label,children:(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[(0,t.jsx)("span",{style:{display:"inline-block",width:8,height:8,borderRadius:"50%",background:e.isAccessGroup?"#52c41a":"#722ed1",flexShrink:0}}),(0,t.jsx)("span",{style:{flex:1},children:e.label}),(0,t.jsx)("span",{style:{color:e.isAccessGroup?"#52c41a":"#722ed1",fontSize:"12px",fontWeight:500,opacity:.8},children:e.isAccessGroup?"Access Group":"Agent"})]})},e.value))})})}])},9314,e=>{"use strict";var t=e.i(843476),s=e.i(199133),a=e.i(981339),l=e.i(645526),r=e.i(599724),i=e.i(263147);e.s(["default",0,({value:e,onChange:n,placeholder:o="Select access groups",disabled:d=!1,style:c,className:u,showLabel:m=!1,labelText:p="Access Group",allowClear:g=!0})=>{let{data:h,isLoading:x,isError:y}=(0,i.useAccessGroups)();if(x)return(0,t.jsxs)("div",{children:[m&&(0,t.jsxs)(r.Text,{className:"font-medium block mb-2 text-gray-700 flex items-center",children:[(0,t.jsx)(l.TeamOutlined,{className:"mr-2"})," ",p]}),(0,t.jsx)(a.Skeleton.Input,{active:!0,block:!0,style:{height:32,...c}})]});let _=(h??[]).map(e=>({label:(0,t.jsxs)("span",{children:[(0,t.jsx)("span",{className:"font-medium",children:e.access_group_name})," ",(0,t.jsxs)("span",{className:"text-gray-400 text-xs",children:["(",e.access_group_id,")"]})]}),value:e.access_group_id,selectedLabel:e.access_group_name,searchText:`${e.access_group_name} ${e.access_group_id}`}));return(0,t.jsxs)("div",{children:[m&&(0,t.jsxs)(r.Text,{className:"font-medium block mb-2 text-gray-700 flex items-center",children:[(0,t.jsx)(l.TeamOutlined,{className:"mr-2"})," ",p]}),(0,t.jsx)(s.Select,{mode:"multiple",value:e,placeholder:o,onChange:n,disabled:d,allowClear:g,showSearch:!0,style:{width:"100%",...c},className:`rounded-md ${u??""}`,notFoundContent:y?(0,t.jsx)("span",{className:"text-red-500",children:"Failed to load access groups"}):"No access groups found",filterOption:(e,t)=>(_.find(e=>e.value===t?.value)?.searchText??"").toLowerCase().includes(e.toLowerCase()),optionLabelProp:"selectedLabel",options:_.map(e=>({label:e.label,value:e.value,selectedLabel:e.selectedLabel}))})]})}])},392110,e=>{"use strict";var t=e.i(843476),s=e.i(271645),a=e.i(199133),l=e.i(592968),r=e.i(312361),i=e.i(790848),n=e.i(536916),o=e.i(827252),d=e.i(779241);let{Option:c}=a.Select;e.s(["default",0,({form:e,autoRotationEnabled:u,onAutoRotationChange:m,rotationInterval:p,onRotationIntervalChange:g,isCreateMode:h=!1,neverExpire:x=!1,onNeverExpireChange:y})=>{let _=p&&!["7d","30d","90d","180d","365d"].includes(p),[f,b]=(0,s.useState)(_),[j,v]=(0,s.useState)(_?p:""),[w,N]=(0,s.useState)(e?.getFieldValue?.("duration")||"");return(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsx)("span",{className:"text-sm font-medium text-gray-700",children:"Key Expiry Settings"}),(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsxs)("label",{className:"text-sm font-medium text-gray-700 flex items-center space-x-1",children:[(0,t.jsx)("span",{children:"Expire Key"}),(0,t.jsx)(l.Tooltip,{title:"Set when this key should expire. Format: 30s (seconds), 30m (minutes), 30h (hours), 30d (days). Leave empty to keep the current expiry unchanged.",children:(0,t.jsx)(o.InfoCircleOutlined,{className:"text-gray-400 cursor-help text-xs"})}),!h&&y&&(0,t.jsx)(n.Checkbox,{checked:x,onChange:t=>{let s=t.target.checked;y(s),s&&(N(""),e&&"function"==typeof e.setFieldValue?e.setFieldValue("duration",""):e&&"function"==typeof e.setFieldsValue&&e.setFieldsValue({duration:""}))},className:"ml-2 text-sm font-normal text-gray-600",children:"Never Expire"})]}),(0,t.jsx)(d.TextInput,{name:"duration",placeholder:h?"e.g., 30d or leave empty to never expire":"e.g., 30d",className:"w-full",value:w,onValueChange:t=>{N(t),e&&"function"==typeof e.setFieldValue?e.setFieldValue("duration",t):e&&"function"==typeof e.setFieldsValue&&e.setFieldsValue({duration:t})},disabled:!h&&x})]})]}),(0,t.jsx)(r.Divider,{}),(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsx)("span",{className:"text-sm font-medium text-gray-700",children:"Auto-Rotation Settings"}),(0,t.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsxs)("label",{className:"text-sm font-medium text-gray-700 flex items-center space-x-1",children:[(0,t.jsx)("span",{children:"Enable Auto-Rotation"}),(0,t.jsx)(l.Tooltip,{title:"Key will automatically regenerate at the specified interval for enhanced security.",children:(0,t.jsx)(o.InfoCircleOutlined,{className:"text-gray-400 cursor-help text-xs"})})]}),(0,t.jsx)(i.Switch,{checked:u,onChange:m,size:"default",className:u?"":"bg-gray-400"})]}),u&&(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsxs)("label",{className:"text-sm font-medium text-gray-700 flex items-center space-x-1",children:[(0,t.jsx)("span",{children:"Rotation Interval"}),(0,t.jsx)(l.Tooltip,{title:"How often the key should be automatically rotated. Choose the interval that best fits your security requirements.",children:(0,t.jsx)(o.InfoCircleOutlined,{className:"text-gray-400 cursor-help text-xs"})})]}),(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsxs)(a.Select,{value:f?"custom":p,onChange:e=>{"custom"===e?b(!0):(b(!1),v(""),g(e))},className:"w-full",placeholder:"Select interval",children:[(0,t.jsx)(c,{value:"7d",children:"7 days"}),(0,t.jsx)(c,{value:"30d",children:"30 days"}),(0,t.jsx)(c,{value:"90d",children:"90 days"}),(0,t.jsx)(c,{value:"180d",children:"180 days"}),(0,t.jsx)(c,{value:"365d",children:"365 days"}),(0,t.jsx)(c,{value:"custom",children:"Custom interval"})]}),f&&(0,t.jsxs)("div",{className:"space-y-1",children:[(0,t.jsx)(d.TextInput,{value:j,onChange:e=>{let t=e.target.value;v(t),g(t)},placeholder:"e.g., 1s, 5m, 2h, 14d"}),(0,t.jsx)("div",{className:"text-xs text-gray-500",children:"Supported formats: seconds (s), minutes (m), hours (h), days (d)"})]})]})]})]}),u&&(0,t.jsx)("div",{className:"bg-blue-50 p-3 rounded-md text-sm text-blue-700",children:"When rotation occurs, you'll receive a notification with the new key. The old key will be deactivated after a brief grace period."})]})]})}])},844565,e=>{"use strict";var t=e.i(843476),s=e.i(271645),a=e.i(199133),l=e.i(602869);e.s(["default",0,({onChange:e,value:r,className:i,accessToken:n,placeholder:o="Select pass through routes",disabled:d=!1,teamId:c})=>{let[u,m]=(0,s.useState)([]),[p,g]=(0,s.useState)(!1);return(0,s.useEffect)(()=>{(async()=>{if(n){g(!0);try{let e=await (0,l.getPassThroughEndpointsCall)(n,c);if(e.endpoints){let t=e.endpoints.flatMap(e=>{let t=e.path,s=e.methods;return s&&s.length>0?s.map(e=>({label:`${e} ${t}`,value:t})):[{label:t,value:t}]});m(t)}}catch(e){console.error("Error fetching pass through routes:",e)}finally{g(!1)}}})()},[n,c]),(0,t.jsx)(a.Select,{mode:"tags",placeholder:o,onChange:e,value:r,loading:p,className:i,allowClear:!0,options:u,optionFilterProp:"label",showSearch:!0,style:{width:"100%"},disabled:d})}])},939510,e=>{"use strict";var t=e.i(843476),s=e.i(808613),a=e.i(199133),l=e.i(592968),r=e.i(827252);let{Option:i}=a.Select;e.s(["default",0,({type:e,name:n,showDetailedDescriptions:o=!0,className:d="",initialValue:c=null,form:u,onChange:m})=>{let p=e.toUpperCase(),g=e.toLowerCase(),h=`Select 'guaranteed_throughput' to prevent overallocating ${p} limit when the key belongs to a Team with specific ${p} limits.`;return(0,t.jsx)(s.Form.Item,{label:(0,t.jsxs)("span",{children:[p," Rate Limit Type"," ",(0,t.jsx)(l.Tooltip,{title:h,children:(0,t.jsx)(r.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:n,initialValue:c,className:d,children:(0,t.jsx)(a.Select,{defaultValue:o?"default":void 0,placeholder:"Select rate limit type",style:{width:"100%"},optionLabelProp:o?"label":void 0,onChange:e=>{u&&u.setFieldValue(n,e),m&&m(e)},children:o?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i,{value:"best_effort_throughput",label:"Default",children:(0,t.jsxs)("div",{style:{padding:"4px 0"},children:[(0,t.jsx)("div",{style:{fontWeight:500},children:"Default"}),(0,t.jsxs)("div",{style:{fontSize:"11px",color:"#6b7280",marginTop:"2px"},children:["Best effort throughput - no error if we're overallocating ",g," (Team/Key Limits checked at runtime)."]})]})}),(0,t.jsx)(i,{value:"guaranteed_throughput",label:"Guaranteed throughput",children:(0,t.jsxs)("div",{style:{padding:"4px 0"},children:[(0,t.jsx)("div",{style:{fontWeight:500},children:"Guaranteed throughput"}),(0,t.jsxs)("div",{style:{fontSize:"11px",color:"#6b7280",marginTop:"2px"},children:["Guaranteed throughput - raise an error if we're overallocating ",g," (also checks model-specific limits)"]})]})}),(0,t.jsx)(i,{value:"dynamic",label:"Dynamic",children:(0,t.jsxs)("div",{style:{padding:"4px 0"},children:[(0,t.jsx)("div",{style:{fontWeight:500},children:"Dynamic"}),(0,t.jsxs)("div",{style:{fontSize:"11px",color:"#6b7280",marginTop:"2px"},children:["If the key has a set ",p," (e.g. 2 ",p,") and there are no 429 errors, it can dynamically exceed the limit when the model being called is not erroring."]})]})})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i,{value:"best_effort_throughput",children:"Best effort throughput"}),(0,t.jsx)(i,{value:"guaranteed_throughput",children:"Guaranteed throughput"}),(0,t.jsx)(i,{value:"dynamic",children:"Dynamic"})]})})})}])},363256,e=>{"use strict";var t=e.i(843476),s=e.i(199133);let{Text:a}=e.i(898586).Typography;e.s(["default",0,({organizations:e,value:l,onChange:r,disabled:i,loading:n,style:o})=>(0,t.jsx)(s.Select,{showSearch:!0,placeholder:"All Organizations",value:l,onChange:r,disabled:i,loading:n,allowClear:!0,style:{minWidth:280,...o},filterOption:(t,s)=>{if(!s)return!1;let a=e?.find(e=>e.organization_id===s.key);if(!a)return!1;let l=t.toLowerCase().trim(),r=(a.organization_alias||"").toLowerCase(),i=(a.organization_id||"").toLowerCase();return r.includes(l)||i.includes(l)},children:e?.map(e=>(0,t.jsxs)(s.Select.Option,{value:e.organization_id,children:[(0,t.jsx)("span",{className:"font-medium",children:e.organization_alias})," ",(0,t.jsxs)(a,{type:"secondary",children:["(",e.organization_id,")"]})]},e.organization_id))})])},319312,e=>{"use strict";var t=e.i(843476),s=e.i(464571),a=e.i(28651),l=e.i(199133);let r=[{value:"1h",label:"Hourly",resetHint:"Resets every hour"},{value:"24h",label:"Daily",resetHint:"Resets daily at midnight UTC"},{value:"7d",label:"Weekly",resetHint:"Resets every Sunday at midnight UTC"},{value:"30d",label:"Monthly",resetHint:"Resets on the 1st of every month at midnight UTC"}];e.s(["BudgetWindowsEditor",0,function({value:e,onChange:i}){let n=(t,s,a)=>{i(e.map((e,l)=>l===t?{...e,[s]:a}:e))};return(0,t.jsxs)("div",{children:[e.map((o,d)=>{let c=r.find(e=>e.value===o.budget_duration)?.resetHint;return(0,t.jsxs)("div",{style:{marginBottom:12},children:[(0,t.jsxs)("div",{style:{display:"flex",gap:8,alignItems:"center"},children:[(0,t.jsx)(l.Select,{value:o.budget_duration,onChange:e=>n(d,"budget_duration",e),style:{width:130},options:r.map(e=>({value:e.value,label:e.label}))}),(0,t.jsx)(a.InputNumber,{step:.01,min:0,precision:2,value:o.max_budget??void 0,onChange:e=>n(d,"max_budget",e??null),placeholder:"Max spend ($)",style:{width:160},prefix:"$"}),(0,t.jsx)(s.Button,{type:"text",danger:!0,size:"small",onClick:()=>{i(e.filter((e,t)=>t!==d))},style:{padding:"0 4px"},children:"✕"})]}),c&&(0,t.jsxs)("div",{style:{fontSize:11,color:"#888",marginTop:3,marginLeft:2},children:["↻ ",c]})]},d)}),(0,t.jsx)(s.Button,{size:"small",onClick:t=>{t.preventDefault(),i([...e,{budget_duration:"24h",max_budget:null}])},children:"+ Add Budget Window"})]})}])},109034,e=>{"use strict";var t=e.i(266027),s=e.i(243652),a=e.i(602869),l=e.i(135214);let r=(0,s.createQueryKeys)("tags");e.s(["useTags",0,()=>{let{accessToken:e,userId:s,userRole:i}=(0,l.default)();return(0,t.useQuery)({queryKey:r.list({}),queryFn:async()=>await (0,a.tagListCall)(e),enabled:!!(e&&s&&i)})}])},533882,e=>{"use strict";var t=e.i(843476),s=e.i(271645),a=e.i(250980),l=e.i(797672),r=e.i(68155),i=e.i(304967),n=e.i(629569),o=e.i(599724),d=e.i(269200),c=e.i(427612),u=e.i(64848),m=e.i(942232),p=e.i(496020),g=e.i(977572),h=e.i(992619),x=e.i(727749);e.s(["default",0,({accessToken:e,initialModelAliases:y={},onAliasUpdate:_,showExampleConfig:f=!0})=>{let[b,j]=(0,s.useState)([]),[v,w]=(0,s.useState)({aliasName:"",targetModel:""}),[N,k]=(0,s.useState)(null);(0,s.useEffect)(()=>{j(Object.entries(y).map(([e,t],s)=>({id:`${s}-${e}`,aliasName:e,targetModel:t})))},[y]);let S=()=>{if(!N)return;if(!N.aliasName||!N.targetModel)return void x.default.fromBackend("Please provide both alias name and target model");if(b.some(e=>e.id!==N.id&&e.aliasName===N.aliasName))return void x.default.fromBackend("An alias with this name already exists");let e=b.map(e=>e.id===N.id?N:e);j(e),k(null);let t={};e.forEach(e=>{t[e.aliasName]=e.targetModel}),_&&_(t),x.default.success("Alias updated successfully")},C=()=>{k(null)},T=b.reduce((e,t)=>(e[t.aliasName]=t.targetModel,e),{});return(0,t.jsxs)("div",{className:"mt-4",children:[(0,t.jsxs)("div",{className:"mb-6",children:[(0,t.jsx)(o.Text,{className:"text-sm font-medium text-gray-700 mb-2",children:"Add New Alias"}),(0,t.jsxs)("div",{className:"grid grid-cols-3 gap-4",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"block text-xs text-gray-500 mb-1",children:"Alias Name"}),(0,t.jsx)("input",{type:"text",value:v.aliasName,onChange:e=>w({...v,aliasName:e.target.value}),placeholder:"e.g., gpt-4o",className:"w-full px-3 py-2 border border-gray-300 rounded-md text-sm"})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"block text-xs text-gray-500 mb-1",children:"Target Model"}),(0,t.jsx)(h.default,{accessToken:e,value:v.targetModel,placeholder:"Select target model",onChange:e=>w({...v,targetModel:e}),showLabel:!1})]}),(0,t.jsx)("div",{className:"flex items-end",children:(0,t.jsxs)("button",{onClick:()=>{if(!v.aliasName||!v.targetModel)return void x.default.fromBackend("Please provide both alias name and target model");if(b.some(e=>e.aliasName===v.aliasName))return void x.default.fromBackend("An alias with this name already exists");let e=[...b,{id:`${Date.now()}-${v.aliasName}`,aliasName:v.aliasName,targetModel:v.targetModel}];j(e),w({aliasName:"",targetModel:""});let t={};e.forEach(e=>{t[e.aliasName]=e.targetModel}),_&&_(t),x.default.success("Alias added successfully")},disabled:!v.aliasName||!v.targetModel,className:`flex items-center px-4 py-2 rounded-md text-sm ${!v.aliasName||!v.targetModel?"bg-gray-300 text-gray-500 cursor-not-allowed":"bg-green-600 text-white hover:bg-green-700"}`,children:[(0,t.jsx)(a.PlusCircleIcon,{className:"w-4 h-4 mr-1"}),"Add Alias"]})})]})]}),(0,t.jsx)(o.Text,{className:"text-sm font-medium text-gray-700 mb-2",children:"Manage Existing Aliases"}),(0,t.jsx)("div",{className:"rounded-lg custom-border relative mb-6",children:(0,t.jsx)("div",{className:"overflow-x-auto",children:(0,t.jsxs)(d.Table,{className:"[&_td]:py-0.5 [&_th]:py-1",children:[(0,t.jsx)(c.TableHead,{children:(0,t.jsxs)(p.TableRow,{children:[(0,t.jsx)(u.TableHeaderCell,{className:"py-1 h-8",children:"Alias Name"}),(0,t.jsx)(u.TableHeaderCell,{className:"py-1 h-8",children:"Target Model"}),(0,t.jsx)(u.TableHeaderCell,{className:"py-1 h-8",children:"Actions"})]})}),(0,t.jsxs)(m.TableBody,{children:[b.map(s=>(0,t.jsx)(p.TableRow,{className:"h-8",children:N&&N.id===s.id?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(g.TableCell,{className:"py-0.5",children:(0,t.jsx)("input",{type:"text",value:N.aliasName,onChange:e=>k({...N,aliasName:e.target.value}),className:"w-full px-2 py-1 border border-gray-300 rounded-md text-sm"})}),(0,t.jsx)(g.TableCell,{className:"py-0.5",children:(0,t.jsx)(h.default,{accessToken:e,value:N.targetModel,onChange:e=>k({...N,targetModel:e}),showLabel:!1,style:{height:"32px"}})}),(0,t.jsx)(g.TableCell,{className:"py-0.5 whitespace-nowrap",children:(0,t.jsxs)("div",{className:"flex space-x-2",children:[(0,t.jsx)("button",{onClick:S,className:"text-xs bg-blue-50 text-blue-600 px-2 py-1 rounded hover:bg-blue-100",children:"Save"}),(0,t.jsx)("button",{onClick:C,className:"text-xs bg-gray-50 text-gray-600 px-2 py-1 rounded hover:bg-gray-100",children:"Cancel"})]})})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(g.TableCell,{className:"py-0.5 text-sm text-gray-900",children:s.aliasName}),(0,t.jsx)(g.TableCell,{className:"py-0.5 text-sm text-gray-500",children:s.targetModel}),(0,t.jsx)(g.TableCell,{className:"py-0.5 whitespace-nowrap",children:(0,t.jsxs)("div",{className:"flex space-x-2",children:[(0,t.jsx)("button",{onClick:()=>{k({...s})},className:"text-xs bg-blue-50 text-blue-600 px-2 py-1 rounded hover:bg-blue-100",children:(0,t.jsx)(l.PencilIcon,{className:"w-3 h-3"})}),(0,t.jsx)("button",{onClick:()=>{var e;let t,a;return e=s.id,j(t=b.filter(t=>t.id!==e)),a={},void(t.forEach(e=>{a[e.aliasName]=e.targetModel}),_&&_(a),x.default.success("Alias deleted successfully"))},className:"text-xs bg-red-50 text-red-600 px-2 py-1 rounded hover:bg-red-100",children:(0,t.jsx)(r.TrashIcon,{className:"w-3 h-3"})})]})})]})},s.id)),0===b.length&&(0,t.jsx)(p.TableRow,{children:(0,t.jsx)(g.TableCell,{colSpan:3,className:"py-0.5 text-sm text-gray-500 text-center",children:"No aliases added yet. Add a new alias above."})})]})]})})}),f&&(0,t.jsxs)(i.Card,{children:[(0,t.jsx)(n.Title,{className:"mb-4",children:"Configuration Example"}),(0,t.jsx)(o.Text,{className:"text-gray-600 mb-4",children:"Here's how your current aliases would look in the config:"}),(0,t.jsx)("div",{className:"bg-gray-100 rounded-lg p-4 font-mono text-sm",children:(0,t.jsxs)("div",{className:"text-gray-700",children:["model_aliases:",0===Object.keys(T).length?(0,t.jsxs)("span",{className:"text-gray-500",children:[(0,t.jsx)("br",{}),"  # No aliases configured yet"]}):Object.entries(T).map(([e,s])=>(0,t.jsxs)("span",{children:[(0,t.jsx)("br",{}),'  "',e,'": "',s,'"']},e))]})})]})]})}])},266484,e=>{"use strict";var t=e.i(843476),s=e.i(199133),a=e.i(592968),l=e.i(312361),r=e.i(827252),i=e.i(994388),n=e.i(304967),o=e.i(779241),d=e.i(988297),c=e.i(68155),u=e.i(810757),m=e.i(477386),p=e.i(557662),g=e.i(555987),h=e.i(435451);let{Option:x}=s.Select;e.s(["default",0,({value:e=[],onChange:y,disabledCallbacks:_=[],onDisabledCallbacksChange:f})=>{let b=Object.entries(p.callbackInfo).filter(([e,t])=>t.supports_key_team_logging).map(([e,t])=>e),j=Object.keys(p.callbackInfo),v=e=>{y?.(e)},w=(t,s,a)=>{let l=[...e];if("callback_name"===s){let e=p.callback_map[a]||a;l[t]={...l[t],[s]:e,callback_vars:{}}}else l[t]={...l[t],[s]:a};v(l)},N=(t,s,a)=>{let l=[...e];l[t]={...l[t],callback_vars:{...l[t].callback_vars,[s]:a}},v(l)};return(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,t.jsx)(m.BanIcon,{className:"w-5 h-5 text-red-500"}),(0,t.jsx)("span",{className:"text-base font-semibold text-gray-800",children:"Disabled Callbacks"}),(0,t.jsx)(a.Tooltip,{title:"Select callbacks to disable for this key. Disabled callbacks will not receive any logging data.",children:(0,t.jsx)(r.InfoCircleOutlined,{className:"text-gray-400 cursor-help"})})]}),(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)("label",{className:"text-sm font-medium text-gray-700",children:"Disabled Callbacks"}),(0,t.jsx)(s.Select,{mode:"multiple",placeholder:"Select callbacks to disable",value:_,onChange:e=>{let t=(0,p.mapDisplayToInternalNames)(e);f?.(t)},style:{width:"100%"},optionLabelProp:"label",children:j.map(e=>{let s=(0,g.resolveLogoSrc)(p.callbackInfo[e]?.logo),l=p.callbackInfo[e]?.description;return(0,t.jsx)(x,{value:e,label:e,children:(0,t.jsx)(a.Tooltip,{title:l,placement:"right",children:(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[s&&(0,t.jsx)("img",{src:s,alt:e,className:"w-4 h-4 object-contain",onError:t=>{let s=t.target,a=s.parentElement;if(a){let t=document.createElement("div");t.className="w-4 h-4 rounded-full bg-gray-200 flex items-center justify-center text-xs",t.textContent=e.charAt(0),a.replaceChild(t,s)}}}),(0,t.jsx)("span",{children:e})]})})},e)})}),(0,t.jsx)("div",{className:"text-xs text-gray-500",children:"Select callbacks that should be disabled for this key. These callbacks will not receive any logging data."})]})]}),(0,t.jsx)(l.Divider,{}),(0,t.jsxs)("div",{className:"flex justify-between items-center",children:[(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,t.jsx)(u.CogIcon,{className:"w-5 h-5 text-blue-500"}),(0,t.jsx)("span",{className:"text-base font-semibold text-gray-800",children:"Logging Integrations"}),(0,t.jsx)(a.Tooltip,{title:"Configure callback logging integrations for this team.",children:(0,t.jsx)(r.InfoCircleOutlined,{className:"text-gray-400 cursor-help"})})]}),(0,t.jsx)(i.Button,{variant:"secondary",onClick:()=>{v([...e,{callback_name:"",callback_type:"success",callback_vars:{}}])},icon:d.PlusIcon,size:"sm",className:"hover:border-blue-400 hover:text-blue-500",type:"button",children:"Add Integration"})]}),(0,t.jsx)("div",{className:"space-y-4",children:e.map((l,d)=>{let u=l.callback_name?Object.entries(p.callback_map).find(([e,t])=>t===l.callback_name)?.[0]:void 0,m=u?(0,g.resolveLogoSrc)(p.callbackInfo[u]?.logo):null;return(0,t.jsxs)(n.Card,{className:"border border-gray-200 shadow-sm hover:shadow-md transition-shadow duration-200",decoration:"top",decorationColor:"blue",children:[(0,t.jsxs)("div",{className:"flex justify-between items-start mb-4",children:[(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[m&&(0,t.jsx)("img",{src:m,alt:u,className:"w-5 h-5 object-contain"}),(0,t.jsxs)("span",{className:"text-sm font-medium",children:[u||"New Integration"," Configuration"]})]}),(0,t.jsx)(i.Button,{variant:"light",onClick:()=>{v(e.filter((e,t)=>t!==d))},icon:c.TrashIcon,size:"xs",color:"red",className:"hover:bg-red-50",type:"button",children:"Remove"})]}),(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)("label",{className:"text-sm font-medium text-gray-700",children:"Integration Type"}),(0,t.jsx)(s.Select,{value:u,placeholder:"Select integration",onChange:e=>w(d,"callback_name",e),className:"w-full",optionLabelProp:"label",children:b.map(e=>{let s=(0,g.resolveLogoSrc)(p.callbackInfo[e]?.logo),l=p.callbackInfo[e]?.description;return(0,t.jsx)(x,{value:e,label:e,children:(0,t.jsx)(a.Tooltip,{title:l,placement:"right",children:(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[s&&(0,t.jsx)("img",{src:s,alt:e,className:"w-4 h-4 object-contain",onError:t=>{let s=t.target,a=s.parentElement;if(a){let t=document.createElement("div");t.className="w-4 h-4 rounded-full bg-gray-200 flex items-center justify-center text-xs",t.textContent=e.charAt(0),a.replaceChild(t,s)}}}),(0,t.jsx)("span",{children:e})]})})},e)})})]}),(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)("label",{className:"text-sm font-medium text-gray-700",children:"Event Type"}),(0,t.jsxs)(s.Select,{value:l.callback_type,onChange:e=>w(d,"callback_type",e),className:"w-full",children:[(0,t.jsx)(x,{value:"success",children:(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,t.jsx)("div",{className:"w-2 h-2 bg-green-500 rounded-full"}),(0,t.jsx)("span",{children:"Success Only"})]})}),(0,t.jsx)(x,{value:"failure",children:(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,t.jsx)("div",{className:"w-2 h-2 bg-red-500 rounded-full"}),(0,t.jsx)("span",{children:"Failure Only"})]})}),(0,t.jsx)(x,{value:"success_and_failure",children:(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,t.jsx)("div",{className:"w-2 h-2 bg-blue-500 rounded-full"}),(0,t.jsx)("span",{children:"Success & Failure"})]})})]})]})]}),((e,s)=>{if(!e.callback_name)return null;let l=Object.entries(p.callback_map).find(([t,s])=>s===e.callback_name)?.[0];if(!l)return null;let i=p.callbackInfo[l]?.dynamic_params||{};return 0===Object.keys(i).length?null:(0,t.jsxs)("div",{className:"mt-6 pt-4 border-t border-gray-100",children:[(0,t.jsxs)("div",{className:"flex items-center space-x-2 mb-4",children:[(0,t.jsx)("div",{className:"w-3 h-3 bg-blue-100 rounded-full flex items-center justify-center",children:(0,t.jsx)("div",{className:"w-1.5 h-1.5 bg-blue-500 rounded-full"})}),(0,t.jsx)("span",{className:"text-sm font-medium text-gray-700",children:"Integration Parameters"})]}),(0,t.jsx)("div",{className:"grid grid-cols-1 gap-4",children:Object.entries(i).map(([l,i])=>(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsxs)("label",{className:"text-sm font-medium text-gray-700 capitalize flex items-center space-x-1",children:[(0,t.jsx)("span",{children:l.replace(/_/g," ")}),(0,t.jsx)(a.Tooltip,{title:`Environment variable reference recommended: os.environ/${l.toUpperCase()}`,children:(0,t.jsx)(r.InfoCircleOutlined,{className:"text-gray-400 cursor-help text-xs"})}),"password"===i&&(0,t.jsx)("span",{className:"inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-yellow-100 text-yellow-800",children:"Sensitive"}),"number"===i&&(0,t.jsx)("span",{className:"inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-yellow-100 text-yellow-800",children:"Number"})]}),"number"===i&&(0,t.jsx)("span",{className:"text-xs text-gray-500",children:"Value must be between 0 and 1"}),"number"===i?(0,t.jsx)(h.default,{step:.01,width:400,placeholder:`os.environ/${l.toUpperCase()}`,value:e.callback_vars[l]||"",onChange:e=>N(s,l,e.target.value)}):(0,t.jsx)(o.TextInput,{type:"password"===i?"password":"text",placeholder:`os.environ/${l.toUpperCase()}`,value:e.callback_vars[l]||"",onChange:e=>N(s,l,e.target.value)})]},l))})]})})(l,d)]})]},d)})}),0===e.length&&(0,t.jsxs)("div",{className:"text-center py-12 text-gray-500 border-2 border-dashed border-gray-200 rounded-lg bg-gray-50/50",children:[(0,t.jsx)(u.CogIcon,{className:"w-12 h-12 text-gray-300 mb-3 mx-auto"}),(0,t.jsx)("div",{className:"text-base font-medium mb-1",children:"No logging integrations configured"}),(0,t.jsx)("div",{className:"text-sm text-gray-400",children:'Click "Add Integration" to configure logging for this team'})]})]})}])},651904,e=>{"use strict";var t=e.i(843476),s=e.i(599724),a=e.i(266484);e.s(["default",0,function({value:e,onChange:l,premiumUser:r=!1,disabledCallbacks:i=[],onDisabledCallbacksChange:n}){return r?(0,t.jsx)(a.default,{value:e,onChange:l,disabledCallbacks:i,onDisabledCallbacksChange:n}):(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"flex flex-wrap gap-2 mb-3",children:[(0,t.jsx)("div",{className:"inline-flex items-center px-3 py-1.5 rounded-lg bg-green-50 border border-green-200 text-green-800 text-sm font-medium opacity-50",children:"✨ langfuse-logging"}),(0,t.jsx)("div",{className:"inline-flex items-center px-3 py-1.5 rounded-lg bg-green-50 border border-green-200 text-green-800 text-sm font-medium opacity-50",children:"✨ datadog-logging"})]}),(0,t.jsx)("div",{className:"p-3 bg-yellow-50 border border-yellow-200 rounded-lg",children:(0,t.jsxs)(s.Text,{className:"text-sm text-yellow-800",children:["Setting Key/Team logging settings is a LiteLLM Enterprise feature. Global Logging Settings are available for all free users. Get a trial key"," ",(0,t.jsx)("a",{href:"https://www.litellm.ai/#pricing",target:"_blank",rel:"noopener noreferrer",className:"underline",children:"here"}),"."]})})]})}])},460285,e=>{"use strict";var t=e.i(843476),s=e.i(271645),a=e.i(404206),l=e.i(723731),r=e.i(653824),i=e.i(881073),n=e.i(197647),o=e.i(602869),d=e.i(158392),c=e.i(419470),u=e.i(695411);let m=(0,s.forwardRef)(({accessToken:e,value:m,onChange:p,modelData:g},h)=>{let[x,y]=(0,s.useState)({routerSettings:{},selectedStrategy:null,enableTagFiltering:!1}),[_,f]=(0,s.useState)([]),[b,j]=(0,s.useState)([]),[v,w]=(0,s.useState)([]),[N,k]=(0,s.useState)([]),[S,C]=(0,s.useState)({}),[T,I]=(0,s.useState)({}),A=(0,s.useRef)(!1),L=(0,s.useRef)(null);(0,s.useEffect)(()=>{let e=m?.router_settings?JSON.stringify({routing_strategy:m.router_settings.routing_strategy,fallbacks:m.router_settings.fallbacks,enable_tag_filtering:m.router_settings.enable_tag_filtering}):null;if(A.current&&e===L.current){A.current=!1;return}if(A.current&&e!==L.current&&(A.current=!1),e!==L.current)if(L.current=e,m?.router_settings){let e=m.router_settings,{fallbacks:t,...s}=e;y({routerSettings:s,selectedStrategy:e.routing_strategy||null,enableTagFiltering:e.enable_tag_filtering??!1});let a=e.fallbacks||[];f(a),j(a&&0!==a.length?a.map((e,t)=>{let[s,a]=Object.entries(e)[0];return{id:(t+1).toString(),primaryModel:s||null,fallbackModels:a||[]}}):[{id:"1",primaryModel:null,fallbackModels:[]}])}else y({routerSettings:{},selectedStrategy:null,enableTagFiltering:!1}),f([]),j([{id:"1",primaryModel:null,fallbackModels:[]}])},[m]),(0,s.useEffect)(()=>{e&&(0,o.getRouterSettingsCall)(e).then(e=>{if(e.fields){let t={};e.fields.forEach(e=>{t[e.field_name]={ui_field_name:e.ui_field_name,field_description:e.field_description,options:e.options,link:e.link}}),C(t);let s=e.fields.find(e=>"routing_strategy"===e.field_name);s?.options&&k(s.options),e.routing_strategy_descriptions&&I(e.routing_strategy_descriptions)}})},[e]),(0,s.useEffect)(()=>{e&&(async()=>{try{let t=await (0,u.fetchAvailableModels)(e);w(t)}catch(e){console.error("Error fetching model info for fallbacks:",e)}})()},[e]);let F=()=>{let e=new Set(["allowed_fails","cooldown_time","num_retries","timeout","retry_after"]),t=new Set(["model_group_alias","retry_policy"]),s=Object.fromEntries(Object.entries({...x.routerSettings,enable_tag_filtering:x.enableTagFiltering,routing_strategy:x.selectedStrategy,fallbacks:_.length>0?_:null}).map(([s,a])=>{if("routing_strategy_args"!==s&&"routing_strategy"!==s&&"enable_tag_filtering"!==s&&"fallbacks"!==s){let l=document.querySelector(`input[name="${s}"]`);if(l){if(void 0!==l.value&&""!==l.value){let r=((s,a,l)=>{if(null==a)return l;let r=String(a).trim();if(""===r||"null"===r.toLowerCase())return null;if(e.has(s)){let e=Number(r);return Number.isNaN(e)?l:e}if(t.has(s)){if(""===r)return null;try{return JSON.parse(r)}catch{return l}}return"true"===r.toLowerCase()||"false"!==r.toLowerCase()&&r})(s,l.value,a);return[s,r]}return[s,null]}}else if("routing_strategy"===s)return[s,x.selectedStrategy];else if("enable_tag_filtering"===s)return[s,x.enableTagFiltering];else if("fallbacks"===s)return[s,_.length>0?_:null];else if("routing_strategy_args"===s&&"latency-based-routing"===x.selectedStrategy){let e=document.querySelector('input[name="lowest_latency_buffer"]'),t=document.querySelector('input[name="ttl"]'),s={};return e?.value&&(s.lowest_latency_buffer=Number(e.value)),t?.value&&(s.ttl=Number(t.value)),["routing_strategy_args",Object.keys(s).length>0?s:null]}return[s,a]}).filter(e=>null!=e)),a=(e,t=!1)=>null==e||"object"==typeof e&&!Array.isArray(e)&&0===Object.keys(e).length||t&&("number"!=typeof e||Number.isNaN(e))?null:e;return{routing_strategy:a(s.routing_strategy),allowed_fails:a(s.allowed_fails,!0),cooldown_time:a(s.cooldown_time,!0),num_retries:a(s.num_retries,!0),timeout:a(s.timeout,!0),retry_after:a(s.retry_after,!0),fallbacks:_.length>0?_:null,context_window_fallbacks:a(s.context_window_fallbacks),retry_policy:a(s.retry_policy),model_group_alias:a(s.model_group_alias),enable_tag_filtering:x.enableTagFiltering,routing_strategy_args:a(s.routing_strategy_args)}};(0,s.useEffect)(()=>{if(!p)return;let e=setTimeout(()=>{A.current=!0,p({router_settings:F()})},100);return()=>clearTimeout(e)},[x,_]);let O=Array.from(new Set(v.map(e=>e.model_group))).sort();return((0,s.useImperativeHandle)(h,()=>({getValue:()=>({router_settings:F()})})),e)?(0,t.jsx)("div",{className:"w-full",children:(0,t.jsxs)(r.TabGroup,{className:"w-full",children:[(0,t.jsxs)(i.TabList,{variant:"line",defaultValue:"1",className:"px-8 pt-4",children:[(0,t.jsx)(n.Tab,{value:"1",children:"Loadbalancing"}),(0,t.jsx)(n.Tab,{value:"2",children:"Fallbacks"})]}),(0,t.jsxs)(l.TabPanels,{className:"px-8 py-6",children:[(0,t.jsx)(a.TabPanel,{children:(0,t.jsx)(d.default,{value:x,onChange:y,routerFieldsMetadata:S,availableRoutingStrategies:N,routingStrategyDescriptions:T})}),(0,t.jsx)(a.TabPanel,{children:(0,t.jsx)(c.FallbackSelectionForm,{groups:b,onGroupsChange:e=>{j(e),f(e.filter(e=>e.primaryModel&&e.fallbackModels.length>0).map(e=>({[e.primaryModel]:e.fallbackModels})))},availableModels:O,maxGroups:5})})]})]})}):null});m.displayName="RouterSettingsAccordion",e.s(["default",0,m])},575260,e=>{"use strict";var t=e.i(843476),s=e.i(199133),a=e.i(482725),l=e.i(56456);e.s(["default",0,({projects:e,value:r,onChange:i,disabled:n,loading:o,teamId:d})=>{let c=d?e?.filter(e=>e.team_id===d):e;return(0,t.jsx)(s.Select,{showSearch:!0,placeholder:"Search or select a project",value:r,onChange:i,disabled:n,loading:o,allowClear:!0,notFoundContent:o?(0,t.jsx)(a.Spin,{indicator:(0,t.jsx)(l.LoadingOutlined,{spin:!0}),size:"small"}):void 0,filterOption:(e,t)=>{if(!t)return!1;let s=c?.find(e=>e.project_id===t.key);if(!s)return!1;let a=e.toLowerCase().trim(),l=(s.project_alias||"").toLowerCase(),r=(s.project_id||"").toLowerCase();return l.includes(a)||r.includes(a)},optionFilterProp:"children",children:!o&&c?.map(e=>(0,t.jsxs)(s.Select.Option,{value:e.project_id,children:[(0,t.jsx)("span",{className:"font-medium",children:e.project_alias||e.project_id})," ",(0,t.jsxs)("span",{className:"text-gray-500",children:["(",e.project_id,")"]})]},e.project_id))})}])},702597,e=>{"use strict";var t=e.i(843476),s=e.i(207082),a=e.i(109799),l=e.i(510674),r=e.i(109034),i=e.i(292639),n=e.i(135214),o=e.i(500330),d=e.i(827252),c=e.i(912598),u=e.i(677667),m=e.i(130643),p=e.i(898667),g=e.i(994388),h=e.i(309426),x=e.i(350967),y=e.i(599724),_=e.i(779241),f=e.i(629569),b=e.i(464571),j=e.i(808613),v=e.i(311451),w=e.i(212931),N=e.i(91739),k=e.i(199133),S=e.i(790848),C=e.i(262218),T=e.i(592968),I=e.i(898586),A=e.i(374009),L=e.i(271645),F=e.i(708347),O=e.i(552130),E=e.i(557662),M=e.i(9314),P=e.i(860585),R=e.i(82946),$=e.i(392110),B=e.i(533882),V=e.i(844565),D=e.i(651904),U=e.i(939510),z=e.i(460285),G=e.i(663435),K=e.i(363256),q=e.i(575260),H=e.i(371455),W=e.i(319312),Q=e.i(355619),J=e.i(75921),Y=e.i(234713),X=e.i(390605),Z=e.i(727749),ee=e.i(602869),et=e.i(364769),es=e.i(435451),ea=e.i(916940);let{Option:el}=k.Select,er=async(e,t,s,a)=>{try{if(null===e||null===t)return[];if(null!==s){let l=(await (0,ee.modelAvailableCall)(s,e,t,!0,a,!0)).data.map(e=>e.id);return console.log("available_model_names:",l),l}return[]}catch(e){return console.error("Error fetching user models:",e),[]}},ei=async(e,t,s,a)=>{try{if(null===e||null===t)return;if(null!==s){let l=(await (0,ee.modelAvailableCall)(s,e,t)).data.map(e=>e.id);console.log("available_model_names:",l),a(l)}}catch(e){console.error("Error fetching user models:",e)}};e.s(["default",0,({team:e,teams:en,data:eo,addKey:ed,autoOpenCreate:ec,prefillData:eu})=>{let{accessToken:em,userId:ep,userRole:eg,premiumUser:eh}=(0,n.default)(),ex=eh||null!=eg&&F.rolesWithWriteAccess.includes(eg),{data:ey,isLoading:e_}=(0,a.useOrganizations)(),{data:ef,isLoading:eb}=(0,l.useProjects)(),{data:ej}=(0,i.useUISettings)(),{data:ev}=(0,r.useTags)(),ew=!!ej?.values?.enable_projects_ui,eN=!!ej?.values?.disable_custom_api_keys,ek=ev?Object.values(ev).map(e=>({value:e.name,label:e.name})):[],eS=(0,c.useQueryClient)(),[eC]=j.Form.useForm(),[eT,eI]=(0,L.useState)(!1),[eA,eL]=(0,L.useState)(null),[eF,eO]=(0,L.useState)(null),[eE,eM]=(0,L.useState)([]),[eP,eR]=(0,L.useState)([]),[e$,eB]=(0,L.useState)("you"),[eV,eD]=(0,L.useState)(!1),[eU,ez]=(0,L.useState)(null),[eG,eK]=(0,L.useState)([]),[eq,eH]=(0,L.useState)([]),[eW,eQ]=(0,L.useState)([]),[eJ,eY]=(0,L.useState)([]),[eX,eZ]=(0,L.useState)(e),[e0,e1]=(0,L.useState)(null),[e4,e2]=(0,L.useState)(null),[e5,e3]=(0,L.useState)(!1),[e6,e7]=(0,L.useState)(null),[e9,e8]=(0,L.useState)({}),[te,tt]=(0,L.useState)([]),[ts,ta]=(0,L.useState)(!1),[tl,tr]=(0,L.useState)([]),[ti,tn]=(0,L.useState)([]),[to,td]=(0,L.useState)("llm_api"),[tc,tu]=(0,L.useState)({}),[tm,tp]=(0,L.useState)(!1),[tg,th]=(0,L.useState)("30d"),[tx,ty]=(0,L.useState)(null),[t_,tf]=(0,L.useState)([]),[tb,tj]=(0,L.useState)(0),[tv,tw]=(0,L.useState)([]),[tN,tk]=(0,L.useState)(null),tS=()=>{eI(!1),eC.resetFields(),eY([]),tn([]),td("llm_api"),tu({}),tp(!1),th("30d"),ty(null),tj(e=>e+1),tk(null),e1(null),e2(null),tf([])},tC=()=>{eI(!1),eL(null),eZ(null),eC.resetFields(),eY([]),tn([]),td("llm_api"),tu({}),tp(!1),th("30d"),ty(null),tj(e=>e+1),tk(null),e1(null),e2(null),tf([])};(0,L.useEffect)(()=>{ep&&eg&&em&&ei(ep,eg,em,eM)},[em,ep,eg]),(0,L.useEffect)(()=>{em&&(0,ee.getAgentsList)(em).then(e=>tw(e?.agents||[])).catch(()=>tw([]))},[em]),(0,L.useEffect)(()=>{let e=async()=>{try{let e=(await (0,ee.getPoliciesList)(em)).policies.map(e=>e.policy_name);eH(e)}catch(e){console.error("Failed to fetch policies:",e)}},t=async()=>{try{let e=await (0,ee.getPromptsList)(em);eQ(e.prompts.map(e=>e.prompt_id))}catch(e){console.error("Failed to fetch prompts:",e)}};(async()=>{try{let e=(await (0,ee.getGuardrailsList)(em)).guardrails.map(e=>e.guardrail_name);eK(e)}catch(e){console.error("Failed to fetch guardrails:",e)}})(),e(),t()},[em]),(0,L.useEffect)(()=>{(async()=>{try{if(em){let e=sessionStorage.getItem("possibleUserRoles");if(e)e8(JSON.parse(e));else{let e=await (0,ee.getPossibleUserRoles)(em);sessionStorage.setItem("possibleUserRoles",JSON.stringify(e)),e8(e)}}}catch(e){console.error("Error fetching possible user roles:",e)}})()},[em]),(0,L.useEffect)(()=>{if(ec&&!eV&&en&&eg&&F.rolesWithWriteAccess.includes(eg)&&(eI(!0),eD(!0),eu)){if(eu.owned_by&&("another_user"===eu.owned_by&&"Admin"!==eg?eB("you"):eB(eu.owned_by)),eu.team_id){let e=en?.find(e=>e.team_id===eu.team_id)||null;e&&(eZ(e),eC.setFieldsValue({team_id:eu.team_id}))}eu.key_alias&&eC.setFieldsValue({key_alias:eu.key_alias}),eu.models&&eu.models.length>0&&ez(eu.models),eu.key_type&&(td(eu.key_type),eC.setFieldsValue({key_type:eu.key_type}))}},[ec,eu,en,eV,eC,eg]);let tT=eP.includes("no-default-models")&&!eX,tI=async e=>{try{let t,a=e?.key_alias??"",l=e?.team_id??null;if((eo?.filter(e=>e.team_id===l).map(e=>e.key_alias)??[]).includes(a))throw Error(`Key alias ${a} already exists for team with ID ${l}, please provide another key alias`);if(Z.default.info("Making API Call"),eI(!0),"you"===e$)e.user_id=ep;else if("agent"===e$){if(!tN)return void Z.default.fromBackend("Please select an agent");e.agent_id=tN}let r={};try{r=JSON.parse(e.metadata||"{}")}catch(e){console.error("Error parsing metadata:",e)}if("service_account"===e$&&(r.service_account_id=e.key_alias),eJ.length>0&&(r={...r,logging:eJ.filter(e=>e.callback_name)}),ti.length>0){let e=(0,E.mapDisplayToInternalNames)(ti);r={...r,litellm_disabled_callbacks:e}}if(tm&&(e.auto_rotate=!0,e.rotation_interval=tg),e.duration&&""!==e.duration.trim()||(e.duration=null),e.metadata=JSON.stringify(r),e.disable_global_guardrails||delete e.disable_global_guardrails,e.allowed_vector_store_ids&&e.allowed_vector_store_ids.length>0&&(e.object_permission={vector_stores:e.allowed_vector_store_ids},delete e.allowed_vector_store_ids),e.allowed_mcp_servers_and_groups&&(e.allowed_mcp_servers_and_groups.servers?.length>0||e.allowed_mcp_servers_and_groups.accessGroups?.length>0)){e.object_permission||(e.object_permission={});let{servers:t,accessGroups:s}=e.allowed_mcp_servers_and_groups;t&&t.length>0&&(e.object_permission.mcp_servers=t),s&&s.length>0&&(e.object_permission.mcp_access_groups=s),delete e.allowed_mcp_servers_and_groups}let i=e.mcp_tool_permissions||{};if(Object.keys(i).length>0&&(e.object_permission||(e.object_permission={}),e.object_permission.mcp_tool_permissions=i),delete e.mcp_tool_permissions,e.allowed_mcp_access_groups&&e.allowed_mcp_access_groups.length>0&&(e.object_permission||(e.object_permission={}),e.object_permission.mcp_access_groups=e.allowed_mcp_access_groups,delete e.allowed_mcp_access_groups),e.allowed_agents_and_groups&&(e.allowed_agents_and_groups.agents?.length>0||e.allowed_agents_and_groups.accessGroups?.length>0)){e.object_permission||(e.object_permission={});let{agents:t,accessGroups:s}=e.allowed_agents_and_groups;t&&t.length>0&&(e.object_permission.agents=t),s&&s.length>0&&(e.object_permission.agent_access_groups=s),delete e.allowed_agents_and_groups}Object.keys(tc).length>0&&(e.aliases=JSON.stringify(tc)),tx?.router_settings&&Object.values(tx.router_settings).some(e=>null!=e&&""!==e)&&(e.router_settings=tx.router_settings);let n=t_.filter(e=>e.budget_duration&&null!==e.max_budget&&void 0!==e.max_budget);n.length>0&&(e.budget_limits=n),t="service_account"===e$?await (0,ee.keyCreateServiceAccountCall)(em,e):await (0,ee.keyCreateCall)(em,ep,e),console.log("key create Response:",t),ed(t),eS.invalidateQueries({queryKey:s.keyKeys.lists()}),eL(t.key),eO(t.soft_budget),Z.default.success("Virtual Key Created"),eC.resetFields(),tf([]),localStorage.removeItem("userData"+ep)}catch(t){console.log("error in create key:",t);let e=(e=>{let t;if(!(t=!e||"object"!=typeof e||e instanceof Error?String(e):JSON.stringify(e)).includes("/key/generate")&&!t.includes("KeyManagementRoutes.KEY_GENERATE"))return`Error creating the key: ${e}`;let s=t;try{if(!e||"object"!=typeof e||e instanceof Error){let e=t.match(/\{[\s\S]*\}/);if(e){let t=JSON.parse(e[0]),a=t?.error||t;a?.message&&(s=a.message)}}else{let t=e?.error||e;t?.message&&(s=t.message)}}catch(e){}return t.includes("team_member_permission_error")||s.includes("Team member does not have permissions")?"Team member does not have permission to generate key for this team. Ask your proxy admin to configure the team member permission settings.":`Error creating the key: ${e}`})(t);Z.default.fromBackend(e)}};(0,L.useEffect)(()=>{if(e4){let e=ef?.find(e=>e.project_id===e4);eR(e?.models??[]),eC.setFieldValue("models",[]);return}ep&&eg&&em&&er(ep,eg,em,eX?.team_id??null).then(e=>{eR(Array.from(new Set([...eX?.models??[],...e])))}),eU||eC.setFieldValue("models",[]),eC.setFieldValue("allowed_mcp_servers_and_groups",{servers:[],accessGroups:[]})},[eX,e4,em,ep,eg,eC]),(0,L.useEffect)(()=>{if(!eU||0===eU.length||!eP||0===eP.length)return;let e=eU.filter(e=>eP.includes(e));e.length>0&&eC.setFieldsValue({models:e}),ez(null)},[eU,eP,eC]),(0,L.useEffect)(()=>{if(!e4||!en)return;let e=ef?.find(e=>e.project_id===e4);if(!e?.team_id||eX?.team_id===e.team_id)return;let t=en.find(t=>t.team_id===e.team_id)||null;t&&(eZ(t),eC.setFieldValue("team_id",t.team_id))},[en,e4,ef]);let tA=async e=>{if(!e)return void tt([]);ta(!0);try{let t=new URLSearchParams;if(t.append("user_email",e),null==em)return;let s=(await (0,ee.userFilterUICall)(em,t)).map(e=>({label:`${e.user_email} (${e.user_id})`,value:e.user_id,user:e}));tt(s)}catch(e){console.error("Error fetching users:",e),Z.default.fromBackend("Failed to search for users")}finally{ta(!1)}},tL=(0,L.useCallback)((0,A.default)(e=>tA(e),300),[em]);return(0,t.jsxs)("div",{children:[eg&&F.rolesWithWriteAccess.includes(eg)&&(0,t.jsx)(g.Button,{className:"mx-auto",onClick:()=>eI(!0),"data-testid":"create-key-button",children:"+ Create New Key"}),(0,t.jsx)(w.Modal,{open:eT,width:1e3,footer:null,onOk:tS,onCancel:tC,children:(0,t.jsxs)(j.Form,{form:eC,onFinish:tI,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,t.jsxs)("div",{className:"mb-8",children:[(0,t.jsx)(f.Title,{className:"mb-4",children:"Key Ownership"}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Owned By"," ",(0,t.jsx)(T.Tooltip,{title:"Select who will own this Virtual Key",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),className:"mb-4",children:(0,t.jsxs)(N.Radio.Group,{onChange:e=>eB(e.target.value),value:e$,children:[(0,t.jsx)(N.Radio,{value:"you",children:"You"}),(0,t.jsx)(N.Radio,{value:"service_account",children:"Service Account"}),"Admin"===eg&&(0,t.jsx)(N.Radio,{value:"another_user",children:"Another User"}),(0,t.jsxs)(N.Radio,{value:"agent",children:["Agent ",(0,t.jsx)(C.Tag,{color:"purple",children:"New"})]})]})}),"another_user"===e$&&(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["User ID"," ",(0,t.jsx)(T.Tooltip,{title:"The user who will own this key and be responsible for its usage",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"user_id",className:"mt-4",rules:[{required:"another_user"===e$,message:"Please input the user ID of the user you are assigning the key to"}],children:(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{style:{display:"flex",marginBottom:"8px"},children:[(0,t.jsx)(k.Select,{showSearch:!0,placeholder:"Type email to search for users",filterOption:!1,onSearch:e=>{tL(e)},onSelect:(e,t)=>{let s;return s=t.user,void eC.setFieldsValue({user_id:s.user_id})},options:te,loading:ts,allowClear:!0,style:{width:"100%"},notFoundContent:ts?"Searching...":"No users found"}),(0,t.jsx)(b.Button,{onClick:()=>e3(!0),style:{marginLeft:"8px"},children:"Create User"})]}),(0,t.jsx)("div",{className:"text-xs text-gray-500",children:"Search by email to find users"})]})}),"agent"===e$&&(0,t.jsxs)("div",{className:"mt-4 p-4 bg-purple-50 border border-purple-200 rounded-md",children:[(0,t.jsx)("div",{className:"mb-3",children:(0,t.jsxs)("span",{className:"text-sm font-medium text-gray-700",children:["Select Agent ",(0,t.jsx)("span",{className:"text-red-500",children:"*"})]})}),(0,t.jsx)(k.Select,{showSearch:!0,placeholder:"Select an agent",style:{width:"100%"},value:tN,onChange:e=>tk(e),filterOption:(e,t)=>t?.label?.toLowerCase().includes(e.toLowerCase()),options:tv.map(e=>({label:e.agent_name||e.agent_id,value:e.agent_id}))}),(0,t.jsx)("div",{className:"text-xs text-gray-500 mt-2",children:"This key will be used by the selected agent to make requests to LiteLLM"})]}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Organization"," ",(0,t.jsx)(T.Tooltip,{title:"The organization this key belongs to. Selecting an organization filters the available teams.",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"organization_id",className:"mt-4",children:(0,t.jsx)(K.default,{organizations:ey,loading:e_,disabled:"Admin"!==eg,onChange:e=>{e1(e||null),eZ(null),e2(null),eC.setFieldValue("team_id",void 0),eC.setFieldValue("project_id",void 0)}})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Team"," ",(0,t.jsx)(T.Tooltip,{title:"The team this key belongs to, which determines available models and budget limits",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"team_id",initialValue:e?e.team_id:null,className:"mt-4",rules:[{required:"service_account"===e$,message:"Please select a team for the service account"}],help:"service_account"===e$?"required":"",children:(0,t.jsx)(G.default,{disabled:null!==e4,organizationId:e0,onTeamSelect:e=>{eZ(e),e2(null),eC.setFieldValue("project_id",void 0),e?.organization_id?(e1(e.organization_id),eC.setFieldValue("organization_id",e.organization_id)):e||(e1(null),eC.setFieldValue("organization_id",void 0))}})}),ew&&(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Project"," ",(0,t.jsx)(T.Tooltip,{title:"Assign this key to a project. Selecting a project will lock the team to the project's team.",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"project_id",className:"mt-4",children:(0,t.jsx)(q.default,{projects:ef,teamId:eX?.team_id,loading:eb||!en,onChange:e=>{if(!e){e2(null),eZ(null),eC.setFieldValue("team_id",void 0);return}e2(e)}})})]}),tT&&(0,t.jsx)("div",{className:"mb-8 p-4 bg-blue-50 border border-blue-200 rounded-md",children:(0,t.jsx)(y.Text,{className:"text-blue-800 text-sm",children:"Please select a team to continue configuring your Virtual Key. If you do not see any teams, please contact your Proxy Admin to either provide you with access to models or to add you to a team."})}),!tT&&(0,t.jsxs)("div",{className:"mb-8",children:[(0,t.jsx)(f.Title,{className:"mb-4",children:"Key Details"}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["you"===e$||"another_user"===e$?"Key Name":"Service Account ID"," ",(0,t.jsx)(T.Tooltip,{title:"you"===e$||"another_user"===e$?"A descriptive name to identify this key":"Unique identifier for this service account",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"key_alias",rules:[{required:!0,message:`Please input a ${"you"===e$?"key name":"service account ID"}`}],help:"required",children:(0,t.jsx)(_.TextInput,{placeholder:""})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Models"," ",(0,t.jsx)(T.Tooltip,{title:"Select which models this key can access. Choose 'All Team Models' to grant access to all models available to the team. Leave empty to allow access to all models.",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"models",rules:[],help:"management"===to||"read_only"===to?"Models field is disabled for this key type":"optional - leave empty to allow access to all models",className:"mt-4",children:(0,t.jsxs)(k.Select,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},disabled:"management"===to||"read_only"===to,onChange:e=>{e.includes("all-team-models")&&eC.setFieldsValue({models:["all-team-models"]})},children:[!e4&&(0,t.jsx)(el,{value:"all-team-models",children:"All Team Models"},"all-team-models"),eP.map(e=>(0,t.jsx)(el,{value:e,children:(0,Q.getModelDisplayName)(e)},e))]})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Key Type"," ",(0,t.jsx)(T.Tooltip,{title:"Select the type of key to determine what routes and operations this key can access",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"key_type",initialValue:"llm_api",className:"mt-4",children:(0,t.jsxs)(k.Select,{defaultValue:"llm_api",placeholder:"Select key type",style:{width:"100%"},optionLabelProp:"label",onChange:e=>{td(e),("management"===e||"read_only"===e)&&eC.setFieldsValue({models:[]})},children:[(0,t.jsx)(el,{value:"llm_api",label:"AI APIs",children:(0,t.jsxs)("div",{style:{padding:"4px 0"},children:[(0,t.jsx)(I.Typography.Text,{strong:!0,children:"AI APIs"}),(0,t.jsx)(I.Typography.Paragraph,{type:"secondary",style:{fontSize:11,margin:"2px 0 0"},children:"Can call only AI API routes (chat/completions, embeddings, etc.)"})]})}),(0,t.jsx)(el,{value:"management",label:"Management",children:(0,t.jsxs)("div",{style:{padding:"4px 0"},children:[(0,t.jsx)(I.Typography.Text,{strong:!0,children:"Management"}),(0,t.jsx)(I.Typography.Paragraph,{type:"secondary",style:{fontSize:11,margin:"2px 0 0"},children:"Can call only management routes (user/team/key management)"})]})}),(0,t.jsx)(el,{value:"default",label:"Full Access",children:(0,t.jsxs)("div",{style:{padding:"4px 0"},children:[(0,t.jsx)(I.Typography.Text,{strong:!0,children:"Full Access"}),(0,t.jsx)(I.Typography.Paragraph,{type:"secondary",style:{fontSize:11,margin:"2px 0 0"},children:"Can call all routes (AI APIs, Management, and read-only)"})]})})]})})]}),!tT&&(0,t.jsx)("div",{className:"mb-8",children:(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)(f.Title,{className:"m-0",children:"Optional Settings"})}),(0,t.jsxs)(m.AccordionBody,{children:[(0,t.jsx)(j.Form.Item,{className:"mt-4",label:(0,t.jsxs)("span",{children:["Max Budget (USD)"," ",(0,t.jsx)(T.Tooltip,{title:"Maximum amount in USD this key can spend. When reached, the key will be blocked from making further requests",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"max_budget",help:`Budget cannot exceed team max budget: $${e?.max_budget!==null&&e?.max_budget!==void 0?e?.max_budget:"unlimited"}`,rules:[{validator:async(t,s)=>{if(s&&e&&null!==e.max_budget&&s>e.max_budget)throw Error(`Budget cannot exceed team max budget: $${(0,o.formatNumberWithCommas)(e.max_budget,4)}`)}}],children:(0,t.jsx)(es.default,{step:.01,precision:2,width:200})}),(0,t.jsx)(j.Form.Item,{className:"mt-4",label:(0,t.jsxs)("span",{children:["Reset Budget"," ",(0,t.jsx)(T.Tooltip,{title:"How often the budget should reset. For example, setting 'daily' will reset the budget every 24 hours",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"budget_duration",help:`Team Reset Budget: ${e?.budget_duration!==null&&e?.budget_duration!==void 0?e?.budget_duration:"None"}`,children:(0,t.jsx)(P.default,{onChange:e=>eC.setFieldValue("budget_duration",e)})}),(0,t.jsx)(j.Form.Item,{className:"mt-4",label:(0,t.jsxs)("span",{children:["Budget Windows"," ",(0,t.jsx)(T.Tooltip,{title:"Set multiple independent budget windows (e.g., hourly $10 AND monthly $200). Each window tracks spend separately and resets on its own schedule.",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),children:(0,t.jsx)(W.BudgetWindowsEditor,{value:t_,onChange:tf})}),(0,t.jsx)(j.Form.Item,{className:"mt-4",label:(0,t.jsxs)("span",{children:["Tokens per minute Limit (TPM)"," ",(0,t.jsx)(T.Tooltip,{title:"Maximum number of tokens this key can process per minute. Helps control usage and costs",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"tpm_limit",help:`TPM cannot exceed team TPM limit: ${e?.tpm_limit!==null&&e?.tpm_limit!==void 0?e?.tpm_limit:"unlimited"}`,rules:[{validator:async(t,s)=>{if(s&&e&&null!==e.tpm_limit&&s>e.tpm_limit)throw Error(`TPM limit cannot exceed team TPM limit: ${e.tpm_limit}`)}}],children:(0,t.jsx)(es.default,{step:1,width:400})}),(0,t.jsx)(U.default,{type:"tpm",name:"tpm_limit_type",className:"mt-4",initialValue:null,form:eC,showDetailedDescriptions:!0}),(0,t.jsx)(j.Form.Item,{className:"mt-4",label:(0,t.jsxs)("span",{children:["Requests per minute Limit (RPM)"," ",(0,t.jsx)(T.Tooltip,{title:"Maximum number of API requests this key can make per minute. Helps prevent abuse and manage load",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"rpm_limit",help:`RPM cannot exceed team RPM limit: ${e?.rpm_limit!==null&&e?.rpm_limit!==void 0?e?.rpm_limit:"unlimited"}`,rules:[{validator:async(t,s)=>{if(s&&e&&null!==e.rpm_limit&&s>e.rpm_limit)throw Error(`RPM limit cannot exceed team RPM limit: ${e.rpm_limit}`)}}],children:(0,t.jsx)(es.default,{step:1,width:400})}),(0,t.jsx)(U.default,{type:"rpm",name:"rpm_limit_type",className:"mt-4",initialValue:null,form:eC,showDetailedDescriptions:!0}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Guardrails"," ",(0,t.jsx)(T.Tooltip,{title:"Apply safety guardrails to this key to filter content or enforce policies",children:(0,t.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/guardrails/quick_start",target:"_blank",rel:"noopener noreferrer",onClick:e=>e.stopPropagation(),children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})})]}),name:"guardrails",className:"mt-4",help:ex?"Select existing guardrails or enter new ones":"Premium feature - Upgrade to set guardrails by key",children:(0,t.jsx)(k.Select,{mode:"tags",style:{width:"100%"},disabled:!ex,placeholder:ex?"Select or enter guardrails":"Premium feature - Upgrade to set guardrails by key",options:eG.map(e=>({value:e,label:e}))})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Disable Global Guardrails"," ",(0,t.jsx)(T.Tooltip,{title:"When enabled, this key will bypass any guardrails configured to run on every request (global guardrails)",children:(0,t.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/guardrails/quick_start",target:"_blank",rel:"noopener noreferrer",onClick:e=>e.stopPropagation(),children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})})]}),name:"disable_global_guardrails",className:"mt-4",valuePropName:"checked",help:ex?"Bypass global guardrails for this key":"Premium feature - Upgrade to disable global guardrails by key",children:(0,t.jsx)(S.Switch,{disabled:!ex,checkedChildren:"Yes",unCheckedChildren:"No"})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Policies"," ",(0,t.jsx)(T.Tooltip,{title:"Apply policies to this key to control guardrails and other settings",children:(0,t.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/guardrails/guardrail_policies",target:"_blank",rel:"noopener noreferrer",onClick:e=>e.stopPropagation(),children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})})]}),name:"policies",className:"mt-4",help:eh?"Select existing policies or enter new ones":"Premium feature - Upgrade to set policies by key",children:(0,t.jsx)(k.Select,{mode:"tags",style:{width:"100%"},disabled:!eh,placeholder:eh?"Select or enter policies":"Premium feature - Upgrade to set policies by key",options:eq.map(e=>({value:e,label:e}))})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Prompts"," ",(0,t.jsx)(T.Tooltip,{title:"Allow this key to use specific prompt templates",children:(0,t.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/prompt_management",target:"_blank",rel:"noopener noreferrer",onClick:e=>e.stopPropagation(),children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})})]}),name:"prompts",className:"mt-4",help:eh?"Select existing prompts or enter new ones":"Premium feature - Upgrade to set prompts by key",children:(0,t.jsx)(k.Select,{mode:"tags",style:{width:"100%"},disabled:!eh,placeholder:eh?"Select or enter prompts":"Premium feature - Upgrade to set prompts by key",options:eW.map(e=>({value:e,label:e}))})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Access Groups"," ",(0,t.jsx)(T.Tooltip,{title:"Assign access groups to this key. Access groups control which models, MCP servers, and agents this key can use",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"access_group_ids",className:"mt-4",help:"Select access groups to assign to this key",children:(0,t.jsx)(M.default,{placeholder:"Select access groups (optional)"})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Allowed Pass Through Routes"," ",(0,t.jsx)(T.Tooltip,{title:"Allow this key to use specific pass through routes",children:(0,t.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/pass_through",target:"_blank",rel:"noopener noreferrer",onClick:e=>e.stopPropagation(),children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})})]}),name:"allowed_passthrough_routes",className:"mt-4",help:eh?"Select existing pass through routes or enter new ones":"Premium feature - Upgrade to set pass through routes by key",children:(0,t.jsx)(V.default,{onChange:e=>eC.setFieldValue("allowed_passthrough_routes",e),value:eC.getFieldValue("allowed_passthrough_routes"),accessToken:em,placeholder:eh?"Select or enter pass through routes":"Premium feature - Upgrade to set pass through routes by key",disabled:!eh,teamId:eX?eX.team_id:null})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Allowed Vector Stores"," ",(0,t.jsx)(T.Tooltip,{title:"Select which vector stores this key can access. If none selected, the key will have access to all available vector stores",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"allowed_vector_store_ids",className:"mt-4",help:"Select vector stores this key can access. Leave empty for access to all vector stores",children:(0,t.jsx)(ea.default,{onChange:e=>eC.setFieldValue("allowed_vector_store_ids",e),value:eC.getFieldValue("allowed_vector_store_ids"),accessToken:em,placeholder:"Select vector stores (optional)"})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Metadata"," ",(0,t.jsx)(T.Tooltip,{title:"JSON object with additional information about this key. Used for tracking or custom logic",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"metadata",className:"mt-4",children:(0,t.jsx)(v.Input.TextArea,{rows:4,placeholder:"Enter metadata as JSON"})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Tags"," ",(0,t.jsx)(T.Tooltip,{title:"Tags for tracking spend and/or doing tag-based routing. Used for analytics and filtering",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"tags",className:"mt-4",help:"Tags for tracking spend and/or doing tag-based routing.",children:(0,t.jsx)(k.Select,{mode:"tags",style:{width:"100%"},placeholder:"Select or enter tags",tokenSeparators:[","],options:ek})}),(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)("b",{children:"MCP Settings"})}),(0,t.jsxs)(m.AccordionBody,{children:[(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Allowed MCP Servers"," ",(0,t.jsx)(T.Tooltip,{title:"Select which MCP servers or access groups this key can access",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"allowed_mcp_servers_and_groups",help:"Select MCP servers or access groups this key can access",children:(0,t.jsx)(J.default,{onChange:e=>eC.setFieldValue("allowed_mcp_servers_and_groups",e),value:eC.getFieldValue("allowed_mcp_servers_and_groups"),accessToken:em,teamId:eX?.team_id??null,placeholder:"Select MCP servers or access groups (optional)",allowNoMcpServers:!0})}),(0,t.jsx)(j.Form.Item,{name:"mcp_tool_permissions",initialValue:{},hidden:!0,children:(0,t.jsx)(v.Input,{type:"hidden"})}),(0,t.jsx)(j.Form.Item,{noStyle:!0,shouldUpdate:(e,t)=>e.allowed_mcp_servers_and_groups!==t.allowed_mcp_servers_and_groups||e.mcp_tool_permissions!==t.mcp_tool_permissions,children:()=>(0,t.jsx)("div",{className:"mt-6",children:(0,t.jsx)(X.default,{accessToken:em,selectedServers:(eC.getFieldValue("allowed_mcp_servers_and_groups")?.servers||[]).filter(e=>e!==Y.NO_MCP_SERVERS_SENTINEL),toolPermissions:eC.getFieldValue("mcp_tool_permissions")||{},onChange:e=>eC.setFieldsValue({mcp_tool_permissions:e})})})})]})]}),(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)("b",{children:"Agent Settings"})}),(0,t.jsx)(m.AccordionBody,{children:(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Allowed Agents"," ",(0,t.jsx)(T.Tooltip,{title:"Select which agents or access groups this key can access",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"allowed_agents_and_groups",help:"Select agents or access groups this key can access",children:(0,t.jsx)(O.default,{onChange:e=>eC.setFieldValue("allowed_agents_and_groups",e),value:eC.getFieldValue("allowed_agents_and_groups"),accessToken:em,placeholder:"Select agents or access groups (optional)"})})})]}),eh?(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)("b",{children:"Logging Settings"})}),(0,t.jsx)(m.AccordionBody,{children:(0,t.jsx)("div",{className:"mt-4",children:(0,t.jsx)(D.default,{value:eJ,onChange:eY,premiumUser:!0,disabledCallbacks:ti,onDisabledCallbacksChange:tn})})})]}):(0,t.jsx)(T.Tooltip,{title:(0,t.jsxs)("span",{children:["Key-level logging settings is an enterprise feature, get in touch -",(0,t.jsx)("a",{href:"https://www.litellm.ai/enterprise",target:"_blank",children:"https://www.litellm.ai/enterprise"})]}),placement:"top",children:(0,t.jsxs)("div",{style:{position:"relative"},children:[(0,t.jsx)("div",{style:{opacity:.5},children:(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)("b",{children:"Logging Settings"})}),(0,t.jsx)(m.AccordionBody,{children:(0,t.jsx)("div",{className:"mt-4",children:(0,t.jsx)(D.default,{value:eJ,onChange:eY,premiumUser:!1,disabledCallbacks:ti,onDisabledCallbacksChange:tn})})})]})}),(0,t.jsx)("div",{style:{position:"absolute",inset:0,cursor:"not-allowed"}})]})}),(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)("b",{children:"Router Settings"})}),(0,t.jsx)(m.AccordionBody,{children:(0,t.jsx)("div",{className:"mt-4 w-full",children:(0,t.jsx)(z.default,{accessToken:em||"",value:tx||void 0,onChange:ty,modelData:eE.length>0?{data:eE.map(e=>({model_name:e}))}:void 0},tb)})})]},`router-settings-accordion-${tb}`),(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)("b",{children:"Model Aliases"})}),(0,t.jsx)(m.AccordionBody,{children:(0,t.jsxs)("div",{className:"mt-4",children:[(0,t.jsx)(y.Text,{className:"text-sm text-gray-600 mb-4",children:"Create custom aliases for models that can be used in API calls. This allows you to create shortcuts for specific models."}),(0,t.jsx)(B.default,{accessToken:em,initialModelAliases:tc,onAliasUpdate:tu,showExampleConfig:!1})]})})]}),(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)("b",{children:"Key Lifecycle"})}),(0,t.jsx)(m.AccordionBody,{children:(0,t.jsx)("div",{className:"mt-4",children:(0,t.jsx)($.default,{form:eC,autoRotationEnabled:tm,onAutoRotationChange:tp,rotationInterval:tg,onRotationIntervalChange:th,isCreateMode:!0})})}),(0,t.jsx)(j.Form.Item,{name:"duration",hidden:!0,initialValue:null,children:(0,t.jsx)(v.Input,{})})]}),(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("b",{children:"Advanced Settings"}),(0,t.jsx)(T.Tooltip,{title:(0,t.jsxs)("span",{children:["Learn more about advanced settings in our"," ",(0,t.jsx)("a",{href:ee.proxyBaseUrl?`${ee.proxyBaseUrl}/#/key%20management/generate_key_fn_key_generate_post`:"/#/key%20management/generate_key_fn_key_generate_post",target:"_blank",rel:"noopener noreferrer",className:"text-blue-400 hover:text-blue-300",children:"documentation"})]}),children:(0,t.jsx)(d.InfoCircleOutlined,{className:"text-gray-400 hover:text-gray-300 cursor-help"})})]})}),(0,t.jsx)(m.AccordionBody,{children:(0,t.jsx)(R.default,{schemaComponent:"GenerateKeyRequest",form:eC,excludedFields:["key_alias","team_id","organization_id","models","duration","metadata","tags","guardrails","max_budget","budget_duration","tpm_limit","rpm_limit",...eN?["key"]:[]]})})]})]})]})}),(0,t.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,t.jsx)(b.Button,{htmlType:"submit",disabled:tT,style:{opacity:tT?.5:1},children:"Create Key"})})]})}),e5&&(0,t.jsx)(w.Modal,{title:"Create New User",open:e5,onCancel:()=>e3(!1),footer:null,width:800,children:(0,t.jsx)(H.CreateUserButton,{userID:ep,accessToken:em,teams:en,possibleUIRoles:e9,onUserCreated:e=>{e7(e),eC.setFieldsValue({user_id:e}),e3(!1)},isEmbedded:!0})}),eA&&(0,t.jsx)(w.Modal,{open:eT,onOk:tS,onCancel:tC,footer:null,children:(0,t.jsxs)(x.Grid,{numItems:1,className:"gap-2 w-full",children:[(0,t.jsx)(f.Title,{children:"Save your Key"}),(0,t.jsx)(h.Col,{numColSpan:1,children:null!=eA?(0,t.jsx)(et.default,{apiKey:eA}):(0,t.jsx)(y.Text,{children:"Key being created, this might take 30s"})})]})})]})},"fetchTeamModels",0,er,"fetchUserModels",0,ei],702597)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/10jlu0mdcmzoi.js b/litellm/proxy/_experimental/out/_next/static/chunks/10jlu0mdcmzoi.js new file mode 100644 index 00000000000..7c18248fd5e --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/10jlu0mdcmzoi.js @@ -0,0 +1 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,525720,e=>{"use strict";e.i(247167);var t=e.i(271645),r=e.i(343794),a=e.i(529681),s=e.i(908286),l=e.i(242064),n=e.i(246422),i=e.i(838378);let o=["wrap","nowrap","wrap-reverse"],c=["flex-start","flex-end","start","end","center","space-between","space-around","space-evenly","stretch","normal","left","right"],d=["center","start","end","flex-start","flex-end","self-start","self-end","baseline","normal","stretch"],u=function(e,t){let a,s,l;return(0,r.default)(Object.assign(Object.assign(Object.assign({},(a=!0===t.wrap?"wrap":t.wrap,{[`${e}-wrap-${a}`]:a&&o.includes(a)})),(s={},d.forEach(r=>{s[`${e}-align-${r}`]=t.align===r}),s[`${e}-align-stretch`]=!t.align&&!!t.vertical,s)),(l={},c.forEach(r=>{l[`${e}-justify-${r}`]=t.justify===r}),l)))},m=(0,n.genStyleHooks)("Flex",e=>{let{paddingXS:t,padding:r,paddingLG:a}=e,s=(0,i.mergeToken)(e,{flexGapSM:t,flexGap:r,flexGapLG:a});return[(e=>{let{componentCls:t}=e;return{[t]:{display:"flex",margin:0,padding:0,"&-vertical":{flexDirection:"column"},"&-rtl":{direction:"rtl"},"&:empty":{display:"none"}}}})(s),(e=>{let{componentCls:t}=e;return{[t]:{"&-gap-small":{gap:e.flexGapSM},"&-gap-middle":{gap:e.flexGap},"&-gap-large":{gap:e.flexGapLG}}}})(s),(e=>{let{componentCls:t}=e,r={};return o.forEach(e=>{r[`${t}-wrap-${e}`]={flexWrap:e}}),r})(s),(e=>{let{componentCls:t}=e,r={};return d.forEach(e=>{r[`${t}-align-${e}`]={alignItems:e}}),r})(s),(e=>{let{componentCls:t}=e,r={};return c.forEach(e=>{r[`${t}-justify-${e}`]={justifyContent:e}}),r})(s)]},()=>({}),{resetStyle:!1});var p=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&0>t.indexOf(a)&&(r[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var s=0,a=Object.getOwnPropertySymbols(e);st.indexOf(a[s])&&Object.prototype.propertyIsEnumerable.call(e,a[s])&&(r[a[s]]=e[a[s]]);return r};let f=t.default.forwardRef((e,n)=>{let{prefixCls:i,rootClassName:o,className:c,style:d,flex:f,gap:g,vertical:x=!1,component:h="div",children:v}=e,b=p(e,["prefixCls","rootClassName","className","style","flex","gap","vertical","component","children"]),{flex:w,direction:y,getPrefixCls:j}=t.default.useContext(l.ConfigContext),N=j("flex",i),[k,C,_]=m(N),E=null!=x?x:null==w?void 0:w.vertical,T=(0,r.default)(c,o,null==w?void 0:w.className,N,C,_,u(N,e),{[`${N}-rtl`]:"rtl"===y,[`${N}-gap-${g}`]:(0,s.isPresetSize)(g),[`${N}-vertical`]:E}),S=Object.assign(Object.assign({},null==w?void 0:w.style),d);return f&&(S.flex=f),g&&!(0,s.isPresetSize)(g)&&(S.gap=g),k(t.default.createElement(h,Object.assign({ref:n,className:T,style:S},(0,a.default)(b,["justify","wrap","align"])),v))});e.s(["Flex",0,f],525720)},263147,e=>{"use strict";var t=e.i(266027),r=e.i(243652),a=e.i(602869),s=e.i(431703),l=e.i(708347),n=e.i(135214);let i=(0,r.createQueryKeys)("accessGroups"),o=async e=>{let t=(0,a.getProxyBaseUrl)(),r=`${t}/v1/access_group`,l=await fetch(r,{method:"GET",headers:{[(0,a.getGlobalLitellmHeaderName)()]:`Bearer ${e}`,"Content-Type":"application/json"}});if(!l.ok){let e=await l.json(),t=(0,s.deriveErrorMessage)(e);throw(0,a.handleError)(t),Error(t)}return l.json()};e.s(["accessGroupKeys",0,i,"useAccessGroups",0,()=>{let{accessToken:e,userRole:r}=(0,n.default)();return(0,t.useQuery)({queryKey:i.list({}),queryFn:async()=>o(e),enabled:!!e&&l.all_admin_roles.includes(r||"")})}])},304911,e=>{"use strict";var t=e.i(843476),r=e.i(262218);let{Text:a}=e.i(898586).Typography;e.s(["default",0,function({userId:e}){return"default_user_id"===e?(0,t.jsx)(r.Tag,{color:"blue",children:"Default Proxy Admin"}):(0,t.jsx)(a,{children:e})}])},871943,e=>{"use strict";var t=e.i(271645);let r=t.forwardRef(function(e,r){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:r},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 9l-7 7-7-7"}))});e.s(["ChevronDownIcon",0,r],871943)},360820,e=>{"use strict";var t=e.i(271645);let r=t.forwardRef(function(e,r){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:r},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M5 15l7-7 7 7"}))});e.s(["ChevronUpIcon",0,r],360820)},269200,e=>{"use strict";var t=e.i(290571),r=e.i(271645),a=e.i(444755);let s=(0,e.i(673706).makeClassName)("Table"),l=r.default.forwardRef((e,l)=>{let{children:n,className:i}=e,o=(0,t.__rest)(e,["children","className"]);return r.default.createElement("div",{className:(0,a.tremorTwMerge)(s("root"),"overflow-auto",i)},r.default.createElement("table",Object.assign({ref:l,className:(0,a.tremorTwMerge)(s("table"),"w-full text-tremor-default","text-tremor-content","dark:text-dark-tremor-content")},o),n))});l.displayName="Table",e.s(["Table",0,l],269200)},942232,e=>{"use strict";var t=e.i(290571),r=e.i(271645),a=e.i(444755);let s=(0,e.i(673706).makeClassName)("TableBody"),l=r.default.forwardRef((e,l)=>{let{children:n,className:i}=e,o=(0,t.__rest)(e,["children","className"]);return r.default.createElement(r.default.Fragment,null,r.default.createElement("tbody",Object.assign({ref:l,className:(0,a.tremorTwMerge)(s("root"),"align-top divide-y","divide-tremor-border","dark:divide-dark-tremor-border",i)},o),n))});l.displayName="TableBody",e.s(["TableBody",0,l],942232)},977572,e=>{"use strict";var t=e.i(290571),r=e.i(271645),a=e.i(444755);let s=(0,e.i(673706).makeClassName)("TableCell"),l=r.default.forwardRef((e,l)=>{let{children:n,className:i}=e,o=(0,t.__rest)(e,["children","className"]);return r.default.createElement(r.default.Fragment,null,r.default.createElement("td",Object.assign({ref:l,className:(0,a.tremorTwMerge)(s("root"),"align-middle whitespace-nowrap text-left p-4",i)},o),n))});l.displayName="TableCell",e.s(["TableCell",0,l],977572)},427612,e=>{"use strict";var t=e.i(290571),r=e.i(271645),a=e.i(444755);let s=(0,e.i(673706).makeClassName)("TableHead"),l=r.default.forwardRef((e,l)=>{let{children:n,className:i}=e,o=(0,t.__rest)(e,["children","className"]);return r.default.createElement(r.default.Fragment,null,r.default.createElement("thead",Object.assign({ref:l,className:(0,a.tremorTwMerge)(s("root"),"text-left","text-tremor-content","dark:text-dark-tremor-content",i)},o),n))});l.displayName="TableHead",e.s(["TableHead",0,l],427612)},64848,e=>{"use strict";var t=e.i(290571),r=e.i(271645),a=e.i(444755);let s=(0,e.i(673706).makeClassName)("TableHeaderCell"),l=r.default.forwardRef((e,l)=>{let{children:n,className:i}=e,o=(0,t.__rest)(e,["children","className"]);return r.default.createElement(r.default.Fragment,null,r.default.createElement("th",Object.assign({ref:l,className:(0,a.tremorTwMerge)(s("root"),"whitespace-nowrap text-left font-semibold top-0 px-4 py-3.5","text-tremor-content-strong","dark:text-dark-tremor-content-strong",i)},o),n))});l.displayName="TableHeaderCell",e.s(["TableHeaderCell",0,l],64848)},496020,e=>{"use strict";var t=e.i(290571),r=e.i(271645),a=e.i(444755);let s=(0,e.i(673706).makeClassName)("TableRow"),l=r.default.forwardRef((e,l)=>{let{children:n,className:i}=e,o=(0,t.__rest)(e,["children","className"]);return r.default.createElement(r.default.Fragment,null,r.default.createElement("tr",Object.assign({ref:l,className:(0,a.tremorTwMerge)(s("row"),i)},o),n))});l.displayName="TableRow",e.s(["TableRow",0,l],496020)},68155,e=>{"use strict";var t=e.i(271645);let r=t.forwardRef(function(e,r){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:r},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"}))});e.s(["TrashIcon",0,r],68155)},278587,e=>{"use strict";var t=e.i(271645);let r=t.forwardRef(function(e,r){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:r},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"}))});e.s(["RefreshIcon",0,r],278587)},502547,e=>{"use strict";var t=e.i(271645);let r=t.forwardRef(function(e,r){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:r},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9 5l7 7-7 7"}))});e.s(["ChevronRightIcon",0,r],502547)},384767,e=>{"use strict";var t=e.i(843476),r=e.i(599724),a=e.i(271645),s=e.i(389083);let l=a.forwardRef(function(e,t){return a.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:t},e),a.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4m0 5c0 2.21-3.582 4-8 4s-8-1.79-8-4"}))});var n=e.i(602869);let i=function({vectorStores:e,accessToken:i}){let[o,c]=(0,a.useState)([]);return(0,a.useEffect)(()=>{(async()=>{if(i&&0!==e.length)try{let e=await (0,n.vectorStoreListCall)(i);e.data&&c(e.data.map(e=>({vector_store_id:e.vector_store_id,vector_store_name:e.vector_store_name})))}catch(e){console.error("Error fetching vector stores:",e)}})()},[i,e.length]),(0,t.jsxs)("div",{className:"space-y-3",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(l,{className:"h-4 w-4 text-blue-600"}),(0,t.jsx)(r.Text,{className:"font-semibold text-gray-900",children:"Vector Stores"}),(0,t.jsx)(s.Badge,{color:"blue",size:"xs",children:e.length})]}),e.length>0?(0,t.jsx)("div",{className:"flex flex-wrap gap-2",children:e.map((e,r)=>{let a;return(0,t.jsx)("div",{className:"inline-flex items-center px-3 py-1.5 rounded-lg bg-blue-50 border border-blue-200 text-blue-800 text-sm font-medium",children:(a=o.find(t=>t.vector_store_id===e))?`${a.vector_store_name||a.vector_store_id} (${a.vector_store_id})`:e},r)})}):(0,t.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 rounded-lg bg-gray-50 border border-gray-200",children:[(0,t.jsx)(l,{className:"h-4 w-4 text-gray-400"}),(0,t.jsx)(r.Text,{className:"text-gray-500 text-sm",children:"No vector stores configured"})]})]})},o=a.forwardRef(function(e,t){return a.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:t},e),a.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M5 12h14M5 12a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v4a2 2 0 01-2 2M5 12a2 2 0 00-2 2v4a2 2 0 002 2h14a2 2 0 002-2v-4a2 2 0 00-2-2m-2-4h.01M17 16h.01"}))});var c=e.i(871943),d=e.i(502547),u=e.i(592968),m=e.i(234713);let p=function({mcpServers:e,mcpAccessGroups:l=[],mcpToolPermissions:i={},mcpToolsets:p=[],accessToken:f}){let[g,x]=(0,a.useState)([]),[h,v]=(0,a.useState)([]),[b,w]=(0,a.useState)(new Set),[y,j]=(0,a.useState)(new Set);(0,a.useEffect)(()=>{(async()=>{if(f&&e.length>0)try{let e=await (0,n.fetchMCPServers)(f);e&&Array.isArray(e)?x(e):e.data&&Array.isArray(e.data)&&x(e.data)}catch(e){console.error("Error fetching MCP servers:",e)}})()},[f,e.length]),(0,a.useEffect)(()=>{(async()=>{if(f&&p.length>0)try{let e=await (0,n.fetchMCPToolsets)(f),t=Array.isArray(e)?e.filter(e=>p.includes(e.toolset_id)):[];v(t)}catch(e){console.error("Error fetching toolsets:",e)}})()},[f,p.length]);let N=e.includes(m.NO_MCP_SERVERS_SENTINEL),k=[...e.filter(e=>e!==m.NO_MCP_SERVERS_SENTINEL).map(e=>({type:"server",value:e})),...l.map(e=>({type:"accessGroup",value:e}))],C=k.length+p.length;return(0,t.jsxs)("div",{className:"space-y-3",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(o,{className:"h-4 w-4 text-blue-600"}),(0,t.jsx)(r.Text,{className:"font-semibold text-gray-900",children:"MCP Servers"}),(0,t.jsx)(s.Badge,{color:N?"red":"blue",size:"xs",children:N?"Blocked":C})]}),N?(0,t.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 rounded-lg bg-red-50 border border-red-200",children:[(0,t.jsx)(o,{className:"h-4 w-4 text-red-400"}),(0,t.jsx)(r.Text,{className:"text-red-700 text-sm",children:"No MCP servers — this key is blocked from all MCP servers, including its team's servers"})]}):C>0?(0,t.jsxs)("div",{className:"max-h-[400px] overflow-y-auto space-y-2 pr-1",children:[k.map((e,r)=>{let a="server"===e.type?i[e.value]:void 0,s=a&&a.length>0,l=b.has(e.value);return(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsxs)("div",{onClick:()=>{var t;return s&&(t=e.value,void w(e=>{let r=new Set(e);return r.has(t)?r.delete(t):r.add(t),r}))},className:`flex items-center gap-3 py-2 px-3 rounded-lg border border-gray-200 transition-all ${s?"cursor-pointer hover:bg-gray-50 hover:border-gray-300":"bg-white"}`,children:[(0,t.jsx)("div",{className:"flex items-center gap-2 flex-1 min-w-0",children:"server"===e.type?(0,t.jsx)(u.Tooltip,{title:`Full ID: ${e.value}`,placement:"top",children:(0,t.jsxs)("div",{className:"inline-flex items-center gap-2 min-w-0",children:[(0,t.jsx)("span",{className:"inline-block w-1.5 h-1.5 bg-blue-500 rounded-full flex-shrink-0"}),(0,t.jsx)("span",{className:"text-sm font-medium text-gray-900 truncate",children:(e=>{let t=g.find(t=>t.server_id===e);if(t){let r=e.length>7?`${e.slice(0,3)}...${e.slice(-4)}`:e;return`${t.alias} (${r})`}return e})(e.value)})]})}):(0,t.jsxs)("div",{className:"inline-flex items-center gap-2 min-w-0",children:[(0,t.jsx)("span",{className:"inline-block w-1.5 h-1.5 bg-green-500 rounded-full flex-shrink-0"}),(0,t.jsx)("span",{className:"text-sm font-medium text-gray-900 truncate",children:e.value}),(0,t.jsx)("span",{className:"ml-1 px-1.5 py-0.5 text-[9px] font-semibold text-green-600 bg-green-50 border border-green-200 rounded uppercase tracking-wide flex-shrink-0",children:"Group"})]})}),s&&(0,t.jsxs)("div",{className:"flex items-center gap-1 flex-shrink-0 whitespace-nowrap",children:[(0,t.jsx)("span",{className:"text-xs font-medium text-gray-600",children:a.length}),(0,t.jsx)("span",{className:"text-xs text-gray-500",children:1===a.length?"tool":"tools"}),l?(0,t.jsx)(c.ChevronDownIcon,{className:"h-3.5 w-3.5 text-gray-400 ml-0.5"}):(0,t.jsx)(d.ChevronRightIcon,{className:"h-3.5 w-3.5 text-gray-400 ml-0.5"})]})]}),s&&l&&(0,t.jsx)("div",{className:"ml-4 pl-4 border-l-2 border-blue-200 pb-1",children:(0,t.jsx)("div",{className:"flex flex-wrap gap-1.5",children:a.map((e,r)=>(0,t.jsx)("span",{className:"inline-flex items-center px-2.5 py-1 rounded-lg bg-blue-50 border border-blue-200 text-blue-800 text-xs font-medium",children:e},r))})})]},r)}),p.length>0&&p.map((e,r)=>{let a=h.find(t=>t.toolset_id===e),s=y.has(e),l=a?.tools.length??0;return(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsxs)("div",{onClick:()=>l>0&&void j(t=>{let r=new Set(t);return r.has(e)?r.delete(e):r.add(e),r}),className:`flex items-center gap-3 py-2 px-3 rounded-lg border border-purple-200 transition-all ${l>0?"cursor-pointer hover:bg-purple-50 hover:border-purple-300":"bg-white"}`,children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 flex-1 min-w-0",children:[(0,t.jsx)("span",{className:"inline-block w-1.5 h-1.5 bg-purple-500 rounded-full flex-shrink-0"}),(0,t.jsx)("span",{className:"text-sm font-medium text-gray-900 truncate",children:a?.toolset_name??e}),(0,t.jsx)("span",{className:"ml-1 px-1.5 py-0.5 text-[9px] font-semibold text-purple-600 bg-purple-50 border border-purple-200 rounded uppercase tracking-wide flex-shrink-0",children:"Toolset"})]}),l>0&&(0,t.jsxs)("div",{className:"flex items-center gap-1 flex-shrink-0 whitespace-nowrap",children:[(0,t.jsx)("span",{className:"text-xs font-medium text-gray-600",children:l}),(0,t.jsx)("span",{className:"text-xs text-gray-500",children:1===l?"tool":"tools"}),s?(0,t.jsx)(c.ChevronDownIcon,{className:"h-3.5 w-3.5 text-gray-400 ml-0.5"}):(0,t.jsx)(d.ChevronRightIcon,{className:"h-3.5 w-3.5 text-gray-400 ml-0.5"})]})]}),l>0&&s&&a&&(0,t.jsx)("div",{className:"ml-4 pl-4 border-l-2 border-purple-200 pb-1",children:(0,t.jsx)("div",{className:"flex flex-wrap gap-1.5",children:a.tools.map((e,r)=>(0,t.jsxs)("span",{className:"inline-flex items-center px-2.5 py-1 rounded-lg bg-purple-50 border border-purple-200 text-purple-800 text-xs font-medium",children:[(0,t.jsxs)("span",{className:"text-purple-400 mr-1 text-[10px]",children:[e.server_id.slice(0,6),"…"]}),e.tool_name]},r))})})]},`toolset-${r}`)})]}):(0,t.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 rounded-lg bg-gray-50 border border-gray-200",children:[(0,t.jsx)(o,{className:"h-4 w-4 text-gray-400"}),(0,t.jsx)(r.Text,{className:"text-gray-500 text-sm",children:"No MCP servers, access groups, or toolsets configured"})]})]})},f=a.forwardRef(function(e,t){return a.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:t},e),a.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z"}))}),g=function({agents:e,agentAccessGroups:l=[],accessToken:i}){let[o,c]=(0,a.useState)([]);(0,a.useEffect)(()=>{(async()=>{if(i&&e.length>0)try{let e=await (0,n.getAgentsList)(i);e&&e.agents&&Array.isArray(e.agents)&&c(e.agents)}catch(e){console.error("Error fetching agents:",e)}})()},[i,e.length]);let d=[...e.map(e=>({type:"agent",value:e})),...l.map(e=>({type:"accessGroup",value:e}))],m=d.length;return(0,t.jsxs)("div",{className:"space-y-3",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(f,{className:"h-4 w-4 text-purple-600"}),(0,t.jsx)(r.Text,{className:"font-semibold text-gray-900",children:"Agents"}),(0,t.jsx)(s.Badge,{color:"purple",size:"xs",children:m})]}),m>0?(0,t.jsx)("div",{className:"max-h-[400px] overflow-y-auto space-y-2 pr-1",children:d.map((e,r)=>(0,t.jsx)("div",{className:"space-y-2",children:(0,t.jsx)("div",{className:"flex items-center gap-3 py-2 px-3 rounded-lg border border-gray-200 bg-white",children:(0,t.jsx)("div",{className:"flex items-center gap-2 flex-1 min-w-0",children:"agent"===e.type?(0,t.jsx)(u.Tooltip,{title:`Full ID: ${e.value}`,placement:"top",children:(0,t.jsxs)("div",{className:"inline-flex items-center gap-2 min-w-0",children:[(0,t.jsx)("span",{className:"inline-block w-1.5 h-1.5 bg-purple-500 rounded-full flex-shrink-0"}),(0,t.jsx)("span",{className:"text-sm font-medium text-gray-900 truncate",children:(e=>{let t=o.find(t=>t.agent_id===e);if(t){let r=e.length>7?`${e.slice(0,3)}...${e.slice(-4)}`:e;return`${t.agent_name} (${r})`}return e})(e.value)})]})}):(0,t.jsxs)("div",{className:"inline-flex items-center gap-2 min-w-0",children:[(0,t.jsx)("span",{className:"inline-block w-1.5 h-1.5 bg-green-500 rounded-full flex-shrink-0"}),(0,t.jsx)("span",{className:"text-sm font-medium text-gray-900 truncate",children:e.value}),(0,t.jsx)("span",{className:"ml-1 px-1.5 py-0.5 text-[9px] font-semibold text-green-600 bg-green-50 border border-green-200 rounded uppercase tracking-wide flex-shrink-0",children:"Group"})]})})})},r))}):(0,t.jsxs)("div",{className:"flex items-center gap-2 px-3 py-2 rounded-lg bg-gray-50 border border-gray-200",children:[(0,t.jsx)(f,{className:"h-4 w-4 text-gray-400"}),(0,t.jsx)(r.Text,{className:"text-gray-500 text-sm",children:"No agents or access groups configured"})]})]})};e.s(["default",0,function({objectPermission:e,variant:a="card",className:s="",accessToken:l}){let n=e?.vector_stores||[],o=e?.mcp_servers||[],c=e?.mcp_access_groups||[],d=e?.mcp_tool_permissions||{},u=e?.mcp_toolsets||[],m=e?.agents||[],f=e?.agent_access_groups||[],x=e?.search_tools||[],h=(0,t.jsxs)("div",{className:"card"===a?"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6":"space-y-4",children:[(0,t.jsx)(i,{vectorStores:n,accessToken:l}),(0,t.jsx)(p,{mcpServers:o,mcpAccessGroups:c,mcpToolPermissions:d,mcpToolsets:u,accessToken:l}),(0,t.jsx)(g,{agents:m,agentAccessGroups:f,accessToken:l}),(0,t.jsxs)("div",{className:"rounded-md border border-gray-100 p-4",children:[(0,t.jsx)(r.Text,{className:"text-sm font-medium text-gray-800",children:"Search tools"}),0===x.length?(0,t.jsx)(r.Text,{className:"mt-1 block text-xs text-gray-500",children:"No restriction — all configured search tools are allowed for this team."}):(0,t.jsx)(r.Text,{className:"mt-1 block text-xs text-gray-700",children:x.join(", ")})]})]});return"card"===a?(0,t.jsxs)("div",{className:`bg-white border border-gray-200 rounded-lg p-6 ${s}`,children:[(0,t.jsx)("div",{className:"flex items-center gap-2 mb-6",children:(0,t.jsxs)("div",{children:[(0,t.jsx)(r.Text,{className:"font-semibold text-gray-900",children:"Object Permissions"}),(0,t.jsx)(r.Text,{className:"text-xs text-gray-500",children:"Access control for Vector Stores and MCP Servers"})]})}),h]}):(0,t.jsxs)("div",{className:`${s}`,children:[(0,t.jsx)(r.Text,{className:"font-medium text-gray-900 mb-3",children:"Object Permissions"}),h]})}],384767)},695411,e=>{"use strict";var t=e.i(602869);let r=async e=>{try{let r=await (0,t.modelHubCall)(e);if(console.log("model_info:",r),r?.data.length>0){let e=r.data.map(e=>({model_group:e.model_group,mode:e?.mode}));return e.sort((e,t)=>e.model_group.localeCompare(t.model_group)),e}return[]}catch(e){throw console.error("Error fetching model info:",e),e}};e.s(["fetchAvailableModels",0,r])},737434,e=>{"use strict";var t=e.i(184163);e.s(["DownloadOutlined",()=>t.default])},482725,e=>{"use strict";var t=e.i(244451);e.s(["Spin",()=>t.default])},555987,e=>{"use strict";var t=e.i(221688),r=e.i(950643);let a=/^(https?:|data:|blob:|\/\/)/i;e.s(["resolveLogoSrc",0,(e,s=t.serverRootPath)=>{if(e){let t;return a.test(e)?e:(t=(0,r.normalizeRootPath)(s),`${t}${e.startsWith("/")?e:`/${e}`}`)}}])},500330,e=>{"use strict";var t=e.i(727749);let r=(e,t=0,r=!1,a=!0)=>{if(null==e||!Number.isFinite(e)||0===e&&!a)return"-";let s={minimumFractionDigits:t,maximumFractionDigits:t};if(!r)return e.toLocaleString("en-US",s);let l=e<0?"-":"",n=Math.abs(e),i=n,o="";return n>=1e6?(i=n/1e6,o="M"):n>=1e3&&(i=n/1e3,o="K"),`${l}${i.toLocaleString("en-US",s)}${o}`},a=async(e,r="Copied to clipboard")=>{if(!e)return!1;if(!navigator||!navigator.clipboard||!navigator.clipboard.writeText)return s(e,r);try{return await navigator.clipboard.writeText(e),t.default.success(r),!0}catch(t){return console.error("Clipboard API failed: ",t),s(e,r)}},s=(e,r)=>{try{let a=document.createElement("textarea");a.value=e,a.style.position="fixed",a.style.left="-999999px",a.style.top="-999999px",a.setAttribute("readonly",""),document.body.appendChild(a),a.focus(),a.select();let s=document.execCommand("copy");if(document.body.removeChild(a),s)return t.default.success(r),!0;throw Error("execCommand failed")}catch(e){return t.default.fromBackend("Failed to copy to clipboard"),console.error("Failed to copy: ",e),!1}};e.s(["copyToClipboard",0,a,"formatNumberWithCommas",0,r,"getSpendString",0,(e,t=6)=>{if(null==e||!Number.isFinite(e)||0===e)return"-";let a=r(e,t,!1,!1);if(0===Number(a.replace(/,/g,""))){let e=(1/10**t).toFixed(t);return`< $${e}`}return`$${a}`},"updateExistingKeys",0,function(e,t){let r=structuredClone(e);for(let[e,a]of Object.entries(t))e in r&&(r[e]=a);return r}])},91739,e=>{"use strict";var t=e.i(544195);e.s(["Radio",()=>t.default])},211576,e=>{"use strict";var t=e.i(131757);e.s(["Col",()=>t.default])},178654,e=>{"use strict";let t=e.i(211576).Col;e.s(["Col",0,t],178654)},621192,e=>{"use strict";let t=e.i(264042).Row;e.s(["Row",0,t],621192)},166406,e=>{"use strict";var t=e.i(190144);e.s(["CopyOutlined",()=>t.default])},447566,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M872 474H286.9l350.2-304c5.6-4.9 2.2-14-5.2-14h-88.5c-3.9 0-7.6 1.4-10.5 3.9L155 487.8a31.96 31.96 0 000 48.3L535.1 866c1.5 1.3 3.3 2 5.2 2h91.5c7.4 0 10.8-9.2 5.2-14L286.9 550H872c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8z"}}]},name:"arrow-left",theme:"outlined"};var s=e.i(9583),l=r.forwardRef(function(e,l){return r.createElement(s.default,(0,t.default)({},e,{ref:l,icon:a}))});e.s(["ArrowLeftOutlined",0,l],447566)},637235,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M686.7 638.6L544.1 535.5V288c0-4.4-3.6-8-8-8H488c-4.4 0-8 3.6-8 8v275.4c0 2.6 1.2 5 3.3 6.5l165.4 120.6c3.6 2.6 8.6 1.8 11.2-1.7l28.6-39c2.6-3.7 1.8-8.7-1.8-11.2z"}}]},name:"clock-circle",theme:"outlined"};var s=e.i(9583),l=r.forwardRef(function(e,l){return r.createElement(s.default,(0,t.default)({},e,{ref:l,icon:a}))});e.s(["ClockCircleOutlined",0,l],637235)},72713,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M880 184H712v-64c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v64H384v-64c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v64H144c-17.7 0-32 14.3-32 32v664c0 17.7 14.3 32 32 32h736c17.7 0 32-14.3 32-32V216c0-17.7-14.3-32-32-32zm-40 656H184V460h656v380zM184 392V256h128v48c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8v-48h256v48c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8v-48h128v136H184z"}}]},name:"calendar",theme:"outlined"};var s=e.i(9583),l=r.forwardRef(function(e,l){return r.createElement(s.default,(0,t.default)({},e,{ref:l,icon:a}))});e.s(["CalendarOutlined",0,l],72713)},891547,e=>{"use strict";var t=e.i(843476),r=e.i(271645),a=e.i(199133),s=e.i(602869);e.s(["default",0,({onChange:e,value:l,className:n,accessToken:i,disabled:o})=>{let[c,d]=(0,r.useState)([]),[u,m]=(0,r.useState)(!1);return(0,r.useEffect)(()=>{(async()=>{if(i){m(!0);try{let e=await (0,s.getGuardrailsList)(i);console.log("Guardrails response:",e),e.guardrails&&(console.log("Guardrails data:",e.guardrails),d(e.guardrails))}catch(e){console.error("Error fetching guardrails:",e)}finally{m(!1)}}})()},[i]),(0,t.jsx)("div",{children:(0,t.jsx)(a.Select,{mode:"multiple",disabled:o,placeholder:o?"Setting guardrails is a premium feature.":"Select guardrails",onChange:t=>{console.log("Selected guardrails:",t),e(t)},value:l,loading:u,className:n,allowClear:!0,options:c.map(e=>(console.log("Mapping guardrail:",e),{label:`${e.guardrail_name}`,value:e.guardrail_name})),optionFilterProp:"label",showSearch:!0,style:{width:"100%"}})})}])},921511,e=>{"use strict";var t=e.i(843476),r=e.i(271645),a=e.i(199133),s=e.i(602869);function l(e){return e.filter(e=>(e.version_status??"draft")!=="draft").map(e=>{var t;let r=e.version_number??1,a=e.version_status??"draft";return{label:`${e.policy_name} — v${r} (${a})${e.description?` — ${e.description}`:""}`,value:"production"===a?e.policy_name:e.policy_id?(t=e.policy_id,`policy_${t}`):e.policy_name}})}e.s(["default",0,({onChange:e,value:n,className:i,accessToken:o,disabled:c,onPoliciesLoaded:d})=>{let[u,m]=(0,r.useState)([]),[p,f]=(0,r.useState)(!1);return(0,r.useEffect)(()=>{(async()=>{if(o){f(!0);try{let e=await (0,s.getPoliciesList)(o);e.policies&&(m(e.policies),d?.(e.policies))}catch(e){console.error("Error fetching policies:",e)}finally{f(!1)}}})()},[o,d]),(0,t.jsx)("div",{children:(0,t.jsx)(a.Select,{mode:"multiple",disabled:c,placeholder:c?"Setting policies is a premium feature.":"Select policies (production or published versions)",onChange:t=>{e(t)},value:n,loading:p,className:i,allowClear:!0,options:l(u),optionFilterProp:"label",showSearch:!0,style:{width:"100%"}})})},"getPolicyOptionEntries",0,l])},530212,e=>{"use strict";var t=e.i(271645);let r=t.forwardRef(function(e,r){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:r},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M10 19l-7-7m0 0l7-7m-7 7h18"}))});e.s(["ArrowLeftIcon",0,r],530212)},962944,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M848 359.3H627.7L825.8 109c4.1-5.3.4-13-6.3-13H436c-2.8 0-5.5 1.5-6.9 4L170 547.5c-3.1 5.3.7 12 6.9 12h174.4l-89.4 357.6c-1.9 7.8 7.5 13.3 13.3 7.7L853.5 373c5.2-4.9 1.7-13.7-5.5-13.7zM378.2 732.5l60.3-241H281.1l189.6-327.4h224.6L487 427.4h211L378.2 732.5z"}}]},name:"thunderbolt",theme:"outlined"};var s=e.i(9583),l=r.forwardRef(function(e,l){return r.createElement(s.default,(0,t.default)({},e,{ref:l,icon:a}))});e.s(["ThunderboltOutlined",0,l],962944)},439189,435684,96226,497245,e=>{"use strict";function t(e){let t=Object.prototype.toString.call(e);return e instanceof Date||"object"==typeof e&&"[object Date]"===t?new e.constructor(+e):new Date("number"==typeof e||"[object Number]"===t||"string"==typeof e||"[object String]"===t?e:NaN)}function r(e,t){return e instanceof Date?new e.constructor(t):new Date(t)}e.s(["toDate",0,t],435684),e.s(["constructFrom",0,r],96226),e.s(["addDays",0,function(e,a){let s=t(e);return isNaN(a)?r(e,NaN):(a&&s.setDate(s.getDate()+a),s)}],439189),e.s(["addMonths",0,function(e,a){let s=t(e);if(isNaN(a))return r(e,NaN);if(!a)return s;let l=s.getDate(),n=r(e,s.getTime());return(n.setMonth(s.getMonth()+a+1,0),l>=n.getDate())?n:(s.setFullYear(n.getFullYear(),n.getMonth(),l),s)}],497245)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/10sdqywhhhn7i.js b/litellm/proxy/_experimental/out/_next/static/chunks/10sdqywhhhn7i.js new file mode 100644 index 00000000000..8fb83c67f90 --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/10sdqywhhhn7i.js @@ -0,0 +1 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,298805,e=>{"use strict";var t=e.i(843476),s=e.i(271645),a=e.i(994388),l=e.i(304967),i=e.i(269200),r=e.i(942232),n=e.i(977572),o=e.i(427612),c=e.i(64848),d=e.i(496020),m=e.i(389083),p=e.i(599724),u=e.i(212931),x=e.i(560445),h=e.i(592968),g=e.i(981339),_=e.i(790848),j=e.i(245704),y=e.i(602869),b=e.i(808613),f=e.i(199133),v=e.i(311451),k=e.i(280898),N=e.i(91739),w=e.i(262218),C=e.i(312361),S=e.i(28651),I=e.i(888259),T=e.i(555987),A=e.i(826910),F=e.i(438957),D=e.i(983561),L=e.i(477189),M=e.i(827252),P=e.i(364769),R=e.i(135214),U=e.i(355619),O=e.i(663435),E=e.i(362024),q=e.i(770914),B=e.i(464571),V=e.i(646563),$=e.i(564897);let H={basic:{key:"basic",title:"Basic Information",defaultExpanded:!0,fields:[{name:"name",label:"Display Name",type:"text",required:!0,placeholder:"e.g., Customer Support Agent"},{name:"description",label:"Description",type:"textarea",required:!0,placeholder:"Describe what this agent does...",rows:3},{name:"url",label:"URL",type:"url",required:!1,placeholder:"http://localhost:9999/",tooltip:"Base URL where the agent is hosted (optional)"},{name:"version",label:"Version",type:"text",placeholder:"1.0.0",defaultValue:"1.0.0"},{name:"protocolVersion",label:"Protocol Version",type:"text",placeholder:"1.0",defaultValue:"1.0"}]},skills:{key:"skills",title:"Skills",fields:[{name:"skills",label:"Skills",type:"list",defaultValue:[]}]},capabilities:{key:"capabilities",title:"Capabilities",fields:[{name:"streaming",label:"Streaming",type:"switch",defaultValue:!1},{name:"pushNotifications",label:"Push Notifications",type:"switch"},{name:"stateTransitionHistory",label:"State Transition History",type:"switch"}]},optional:{key:"optional",title:"Optional Settings",fields:[{name:"iconUrl",label:"Icon URL",type:"url",placeholder:"https://example.com/icon.png"},{name:"documentationUrl",label:"Documentation URL",type:"url",placeholder:"https://docs.example.com"},{name:"supportsAuthenticatedExtendedCard",label:"Supports Authenticated Extended Card",type:"switch"}]},litellm:{key:"litellm",title:"LiteLLM Parameters",fields:[{name:"model",label:"Model (Optional)",type:"text"},{name:"make_public",label:"Make Public",type:"switch"}]},cost:{key:"cost",title:"Cost Configuration",fields:[{name:"cost_per_query",label:"Cost Per Query ($)",type:"text",placeholder:"0.0",tooltip:"Fixed cost per query"},{name:"input_cost_per_token",label:"Input Cost Per Token ($)",type:"text",placeholder:"0.000001",tooltip:"Cost per input token"},{name:"output_cost_per_token",label:"Output Cost Per Token ($)",type:"text",placeholder:"0.000002",tooltip:"Cost per output token"}]},tracing:{key:"tracing",title:"Tracing",fields:[{name:"enable_tracing",label:"Enable Tracing",type:"switch",defaultValue:!1,tooltip:"Enable request tracing for this agent"}]}},z="Skill ID",G=!0,K="e.g., hello_world",W="Skill Name",Y=!0,J="e.g., Returns hello world",Q="Description",X=!0,Z="What this skill does",ee=2,et="Tags",es=!0,ea="Type a tag and press Enter",el="Examples",ei="Type an example and press Enter",er=(e,t)=>{let s={agent_name:e.agent_name,agent_card_params:{protocolVersion:e.protocolVersion||"1.0",name:e.name||e.agent_name,description:e.description||"",url:e.url||"",version:e.version||"1.0.0",defaultInputModes:t?.agent_card_params?.defaultInputModes||["text"],defaultOutputModes:t?.agent_card_params?.defaultOutputModes||["text"],capabilities:{streaming:!0===e.streaming,...void 0!==e.pushNotifications&&{pushNotifications:e.pushNotifications},...void 0!==e.stateTransitionHistory&&{stateTransitionHistory:e.stateTransitionHistory}},skills:e.skills||[],...e.iconUrl&&{iconUrl:e.iconUrl},...e.documentationUrl&&{documentationUrl:e.documentationUrl},...void 0!==e.supportsAuthenticatedExtendedCard&&{supportsAuthenticatedExtendedCard:e.supportsAuthenticatedExtendedCard}}},a={};if(e.model&&(a.model=e.model),void 0!==e.make_public&&(a.make_public=e.make_public),e.cost_per_query&&(a.cost_per_query=parseFloat(e.cost_per_query)),e.input_cost_per_token&&(a.input_cost_per_token=parseFloat(e.input_cost_per_token)),e.output_cost_per_token&&(a.output_cost_per_token=parseFloat(e.output_cost_per_token)),Object.keys(a).length>0&&(s.litellm_params=a),null!=e.tpm_limit&&(s.tpm_limit=e.tpm_limit),null!=e.rpm_limit&&(s.rpm_limit=e.rpm_limit),null!=e.session_tpm_limit&&(s.session_tpm_limit=e.session_tpm_limit),null!=e.session_rpm_limit&&(s.session_rpm_limit=e.session_rpm_limit),Array.isArray(e.static_headers)&&e.static_headers.length>0){let t={};e.static_headers.forEach(e=>{let s=e?.header?.trim();s&&(t[s]=e?.value??"")}),Object.keys(t).length>0&&(s.static_headers=t)}return Array.isArray(e.extra_headers)&&e.extra_headers.length>0&&(s.extra_headers=e.extra_headers),s},en=e=>{let t=e.agent_card_params?.skills?.map(e=>({...e,tags:e.tags,examples:e.examples||[]}))||[];return{agent_name:e.agent_name,name:e.agent_card_params?.name,description:e.agent_card_params?.description,url:e.agent_card_params?.url,version:e.agent_card_params?.version,protocolVersion:e.agent_card_params?.protocolVersion,streaming:e.agent_card_params?.capabilities?.streaming,pushNotifications:e.agent_card_params?.capabilities?.pushNotifications,stateTransitionHistory:e.agent_card_params?.capabilities?.stateTransitionHistory,skills:t,iconUrl:e.agent_card_params?.iconUrl,documentationUrl:e.agent_card_params?.documentationUrl,supportsAuthenticatedExtendedCard:e.agent_card_params?.supportsAuthenticatedExtendedCard,model:e.litellm_params?.model,make_public:e.litellm_params?.make_public,cost_per_query:e.litellm_params?.cost_per_query,input_cost_per_token:e.litellm_params?.input_cost_per_token,output_cost_per_token:e.litellm_params?.output_cost_per_token,tpm_limit:e.tpm_limit,rpm_limit:e.rpm_limit,session_tpm_limit:e.session_tpm_limit,session_rpm_limit:e.session_rpm_limit,static_headers:e.static_headers?Object.entries(e.static_headers).map(([e,t])=>({header:e,value:t})):[],extra_headers:e.extra_headers??[]}},eo=()=>(0,t.jsx)(t.Fragment,{children:H.cost.fields.map(e=>(0,t.jsx)(b.Form.Item,{label:e.label,name:e.name,tooltip:e.tooltip,children:(0,t.jsx)(v.Input,{placeholder:e.placeholder,type:"number",step:"0.000001"})},e.name))}),{Panel:ec}=E.Collapse,ed=({showAgentName:e=!0,visiblePanels:s})=>{let a=e=>!s||s.includes(e);return(0,t.jsxs)(t.Fragment,{children:[e&&(0,t.jsx)(b.Form.Item,{label:"Agent Name",name:"agent_name",rules:[{required:!0,message:"Please enter a unique agent name"}],tooltip:"Unique identifier for the agent",children:(0,t.jsx)(v.Input,{placeholder:"e.g., customer-support-agent"})}),(0,t.jsxs)(E.Collapse,{defaultActiveKey:["basic"],style:{marginBottom:16},children:[a(H.basic.key)&&(0,t.jsx)(ec,{header:`${H.basic.title} (Required)`,children:H.basic.fields.map(e=>(0,t.jsx)(b.Form.Item,{label:e.label,name:e.name,rules:e.required?[{required:!0,message:`Please enter ${e.label.toLowerCase()}`}]:void 0,tooltip:e.tooltip,children:"textarea"===e.type?(0,t.jsx)(v.Input.TextArea,{rows:e.rows,placeholder:e.placeholder}):(0,t.jsx)(v.Input,{placeholder:e.placeholder})},e.name))},H.basic.key),a(H.skills.key)&&(0,t.jsx)(ec,{header:`${H.skills.title}`,children:(0,t.jsx)(b.Form.List,{name:"skills",children:(e,{add:s,remove:a})=>(0,t.jsxs)(t.Fragment,{children:[e.map(e=>(0,t.jsxs)("div",{style:{marginBottom:16,padding:16,border:"1px solid #d9d9d9",borderRadius:4},children:[(0,t.jsx)(b.Form.Item,{...e,label:z,name:[e.name,"id"],rules:[{required:G,message:"Required"}],children:(0,t.jsx)(v.Input,{placeholder:K})}),(0,t.jsx)(b.Form.Item,{...e,label:W,name:[e.name,"name"],rules:[{required:Y,message:"Required"}],children:(0,t.jsx)(v.Input,{placeholder:J})}),(0,t.jsx)(b.Form.Item,{...e,label:Q,name:[e.name,"description"],rules:[{required:X,message:"Required"}],children:(0,t.jsx)(v.Input.TextArea,{rows:ee,placeholder:Z})}),(0,t.jsx)(b.Form.Item,{...e,label:et,name:[e.name,"tags"],rules:[{required:es,message:"Required"}],children:(0,t.jsx)(f.Select,{mode:"tags",style:{width:"100%"},tokenSeparators:[","],placeholder:ea})}),(0,t.jsx)(b.Form.Item,{...e,label:el,name:[e.name,"examples"],children:(0,t.jsx)(f.Select,{mode:"tags",style:{width:"100%"},tokenSeparators:[","],placeholder:ei})}),(0,t.jsx)(B.Button,{type:"link",danger:!0,onClick:()=>a(e.name),icon:(0,t.jsx)($.MinusCircleOutlined,{}),children:"Remove Skill"})]},e.key)),(0,t.jsx)(B.Button,{type:"dashed",onClick:()=>s(),icon:(0,t.jsx)(V.PlusOutlined,{}),style:{width:"100%"},children:"Add Skill"})]})})},H.skills.key),a(H.capabilities.key)&&(0,t.jsx)(ec,{header:H.capabilities.title,children:H.capabilities.fields.map(e=>(0,t.jsx)(b.Form.Item,{label:e.label,name:e.name,valuePropName:"checked",children:(0,t.jsx)(_.Switch,{})},e.name))},H.capabilities.key),a(H.optional.key)&&(0,t.jsx)(ec,{header:H.optional.title,children:H.optional.fields.map(e=>(0,t.jsx)(b.Form.Item,{label:e.label,name:e.name,valuePropName:"switch"===e.type?"checked":void 0,children:"switch"===e.type?(0,t.jsx)(_.Switch,{}):(0,t.jsx)(v.Input,{placeholder:e.placeholder})},e.name))},H.optional.key),a(H.cost.key)&&(0,t.jsx)(ec,{header:H.cost.title,children:(0,t.jsx)(eo,{})},H.cost.key),a(H.litellm.key)&&(0,t.jsx)(ec,{header:H.litellm.title,children:H.litellm.fields.map(e=>(0,t.jsx)(b.Form.Item,{label:e.label,name:e.name,valuePropName:"switch"===e.type?"checked":void 0,children:"switch"===e.type?(0,t.jsx)(_.Switch,{}):(0,t.jsx)(v.Input,{placeholder:e.placeholder})},e.name))},H.litellm.key),a("auth_headers")&&(0,t.jsxs)(ec,{header:"Authentication Headers",children:[(0,t.jsx)(b.Form.Item,{label:(0,t.jsxs)("span",{children:["Static Headers"," ",(0,t.jsx)(h.Tooltip,{title:"Headers always sent to the backend agent, regardless of the client request. Admin-configured, static wins on conflict.",children:(0,t.jsx)(M.InfoCircleOutlined,{style:{color:"#8c8c8c"}})})]}),children:(0,t.jsx)(b.Form.List,{name:"static_headers",children:(e,{add:s,remove:a})=>(0,t.jsxs)(t.Fragment,{children:[e.map(({key:e,name:s,...l})=>(0,t.jsxs)(q.Space,{style:{display:"flex",marginBottom:8},align:"baseline",children:[(0,t.jsx)(b.Form.Item,{...l,name:[s,"header"],rules:[{required:!0,message:"Header name required"}],children:(0,t.jsx)(v.Input,{placeholder:"Header name (e.g. Authorization)",style:{width:220}})}),(0,t.jsx)(b.Form.Item,{...l,name:[s,"value"],rules:[{required:!0,message:"Value required"}],children:(0,t.jsx)(v.Input,{placeholder:"Value (e.g. Bearer token123)",style:{width:260}})}),(0,t.jsx)($.MinusCircleOutlined,{onClick:()=>a(s),style:{color:"#ff4d4f"}})]},e)),(0,t.jsx)(B.Button,{type:"dashed",onClick:()=>s(),icon:(0,t.jsx)(V.PlusOutlined,{}),style:{width:"100%"},children:"Add Static Header"})]})})}),(0,t.jsx)(b.Form.Item,{label:(0,t.jsxs)("span",{children:["Forward Client Headers"," ",(0,t.jsx)(h.Tooltip,{title:"Header names to extract from the client's request and forward to the agent. Type a name and press Enter.",children:(0,t.jsx)(M.InfoCircleOutlined,{style:{color:"#8c8c8c"}})})]}),name:"extra_headers",children:(0,t.jsx)(f.Select,{mode:"tags",style:{width:"100%"},placeholder:"e.g. x-api-key, Authorization",tokenSeparators:[","]})})]},"auth_headers")]})]})};var em=e.i(536916),ep=e.i(21548),eu=e.i(482725),ex=e.i(898586);e.i(247167);var eh=e.i(931067);let eg={icon:function(e,t){return{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z",fill:e}},{tag:"path",attrs:{d:"M512 140c-205.4 0-372 166.6-372 372s166.6 372 372 372 372-166.6 372-372-166.6-372-372-372zm193.4 225.7l-210.6 292a31.8 31.8 0 01-51.7 0L318.5 484.9c-3.8-5.3 0-12.7 6.5-12.7h46.9c10.3 0 19.9 5 25.9 13.3l71.2 98.8 157.2-218c6-8.4 15.7-13.3 25.9-13.3H699c6.5 0 10.3 7.4 6.4 12.7z",fill:t}},{tag:"path",attrs:{d:"M699 353h-46.9c-10.2 0-19.9 4.9-25.9 13.3L469 584.3l-71.2-98.8c-6-8.3-15.6-13.3-25.9-13.3H325c-6.5 0-10.3 7.4-6.5 12.7l124.6 172.8a31.8 31.8 0 0051.7 0l210.6-292c3.9-5.3.1-12.7-6.4-12.7z",fill:e}}]}},name:"check-circle",theme:"twotone"};var e_=e.i(9583),ej=s.forwardRef(function(e,t){return s.createElement(e_.default,(0,eh.default)({},e,{ref:t,icon:eg}))}),ey=e.i(596239),eb=e.i(91979),ef=e.i(928685);let ev=(e,t)=>e?.id??e?.name??`skill-${t}`,ek=["streaming"],eN=e=>e?ek.reduce((t,s)=>(s in e&&(t[s]=!!e[s]),t),{}):{},ew=(e,t)=>t?{...e,agent_card_params:{...e.agent_card_params,name:t.name??e.agent_card_params?.name,description:t.description??e.agent_card_params?.description,...Array.isArray(t.skills)&&{skills:t.skills},...t.capabilities&&{capabilities:t.capabilities},...Array.isArray(t.defaultInputModes)&&t.defaultInputModes.length>0&&{defaultInputModes:t.defaultInputModes},...Array.isArray(t.defaultOutputModes)&&t.defaultOutputModes.length>0&&{defaultOutputModes:t.defaultOutputModes},...t.provider&&{provider:t.provider},...t.iconUrl&&{iconUrl:t.iconUrl},...t.documentationUrl&&{documentationUrl:t.documentationUrl}}}:e,eC=(e,t,s)=>{let a=e=>(e??"").toString().trim();if("langgraph"===e){let e=a(t.api_base).replace(/\/+$/,""),s=a(t.assistant_id);if(!e||!s)return;let l=`?assistant_id=${encodeURIComponent(s)}`;return{url:e,discovery_mode:"langgraph_platform",params:{assistant_id:s},display_url:`${e}/.well-known/agent-card.json${l}`}}if("a2a"===e||s?.use_a2a_form_fields){let e=a(t.url).replace(/\/+$/,"");if(!e)return;return{url:e,discovery_mode:"well_known_fallback",display_url:`${e}/.well-known/agent-card.json`}}},{Text:eS,Paragraph:eI}=ex.Typography,{Panel:eT}=E.Collapse,eA=({accessToken:e,onApply:a,discoveryRequest:l,savedAgentCard:i})=>{let[r,n]=(0,s.useState)(""),[o,c]=(0,s.useState)(!1),[d,m]=(0,s.useState)(null),[p,u]=(0,s.useState)(null),g=void 0!==l,j=g?l.url:r,[b,f]=(0,s.useState)(""),[k,N]=(0,s.useState)(""),[C,S]=(0,s.useState)(new Set),[I,T]=(0,s.useState)({}),A=(0,s.useRef)(a);A.current=a;let F=(0,s.useRef)(0),D=(0,s.useRef)(null),L=(0,s.useRef)(l);L.current=l;let P=(0,s.useRef)(i);P.current=i;let R=l?.discovery_mode,U=(0,s.useMemo)(()=>JSON.stringify(l?.params??null),[l?.params]),O=(0,s.useCallback)(async()=>{if(!e){m("No access token available"),A.current(null);return}let t=j.trim();if(!t){m(g?"Fill in the agent's connection details above first":"Enter the agent's base URL first"),u(null),A.current(null);return}let s=L.current,a=++F.current;c(!0),m(null);try{var l;let i,r,n,o=await (0,y.discoverAgentCardCall)(e,t,g&&s?{discovery_mode:s.discovery_mode,params:s.params}:void 0);if(a!==F.current)return;D.current=null,u(o.agent_card),l=o.agent_card,n=(i=P.current)?((e,t)=>{let s=e.skills??[],a=t?.skills??[],l=new Set(a.map(e=>e?.id).filter(Boolean)),i=new Set(a.map(e=>e?.name).filter(Boolean)),r=new Set;s.forEach((e,t)=>{let s=ev(e,t),a=e.id&&l.has(e.id),n=e.name&&i.has(e.name);(a||n)&&r.add(s)});let n=eN(e.capabilities);if(t?.capabilities)for(let e of ek)e in t.capabilities&&(n[e]=!!t.capabilities[e]);return{editedName:t?.name??e.name??"",editedDescription:t?.description??e.description??"",selectedSkillIds:r,selectedCapabilities:n}})(l,i):(r=l.skills??[],{editedName:l.name??"",editedDescription:l.description??"",selectedSkillIds:new Set(r.map((e,t)=>ev(e,t))),selectedCapabilities:eN(l.capabilities)}),f(n.editedName),N(n.editedDescription),S(n.selectedSkillIds),T(n.selectedCapabilities)}catch(e){if(a!==F.current)return;m(e?.message?String(e.message):"Failed to discover agent card"),u(null),D.current=null,A.current(null)}finally{a===F.current&&c(!1)}},[e,j,g,R,U]);(0,s.useEffect)(()=>{if(!e)return;if(!j.trim()){u(null),m(null),D.current=null,A.current(null);return}let t=window.setTimeout(()=>{O()},400);return()=>window.clearTimeout(t)},[e,j,O]);let V=(0,s.useCallback)(()=>{if(!p)return null;let e=(p.skills??[]).filter((e,t)=>C.has(ev(e,t))),t={...p,name:b,description:k,skills:e,capabilities:{...I}};return{raw_card:p,selected_card:t,upstream_url:j.trim()}},[p,k,b,j,I,C]);(0,s.useEffect)(()=>{if(!p)return;let e=V(),t=JSON.stringify(e);D.current!==t&&(D.current=t,A.current(e))},[V,p]);let $=p?.skills?.length??0,H=C.size;return(0,t.jsxs)("div",{className:"border border-gray-200 rounded-lg p-4 bg-gray-50 mb-4",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 mb-2",children:[(0,t.jsx)(ey.LinkOutlined,{className:"text-indigo-600"}),(0,t.jsx)(eS,{strong:!0,children:"Discover from agent URL"}),(0,t.jsx)(h.Tooltip,{title:"LiteLLM will fetch /.well-known/agent-card.json from this URL and let you pick which skills and capabilities to expose through the proxy.",children:(0,t.jsx)(M.InfoCircleOutlined,{className:"text-gray-400"})})]}),g?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(eI,{className:"text-xs text-gray-500 mb-2",children:"Using the connection details you entered above. We'll fetch:"}),(0,t.jsx)("div",{className:"bg-white border border-gray-200 rounded px-3 py-2 mb-3 font-mono text-xs text-gray-700 break-all",children:l.display_url||j||(0,t.jsx)("span",{className:"text-gray-400 italic",children:"Fill in the fields above first"})}),(0,t.jsx)("div",{className:"flex justify-end",children:(0,t.jsx)(B.Button,{type:"primary",icon:p?(0,t.jsx)(eb.ReloadOutlined,{}):(0,t.jsx)(ef.SearchOutlined,{}),loading:o,onClick:O,disabled:!j.trim(),children:p?"Re-discover":"Discover"})})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)(eI,{className:"text-xs text-gray-500 mb-3",children:["Paste the upstream agent's base URL. We'll try ",(0,t.jsx)("code",{children:"/.well-known/agent-card.json"}),","," ",(0,t.jsx)("code",{children:"/.well-known/agent.json"}),", and ",(0,t.jsx)("code",{children:"/agent.json"})," in order."]}),(0,t.jsxs)(q.Space.Compact,{style:{width:"100%"},children:[(0,t.jsx)(v.Input,{placeholder:"https://upstream-agent.example.com",value:r,onChange:e=>n(e.target.value),onPressEnter:O,allowClear:!0,disabled:o}),(0,t.jsx)(B.Button,{type:"primary",icon:p?(0,t.jsx)(eb.ReloadOutlined,{}):(0,t.jsx)(ef.SearchOutlined,{}),loading:o,onClick:O,children:p?"Re-discover":"Discover"})]})]}),d&&(0,t.jsx)(x.Alert,{className:"mt-3",type:"error",message:"Discovery failed",description:d,showIcon:!0,closable:!0,onClose:()=>m(null)}),o&&!p&&(0,t.jsx)("div",{className:"flex items-center justify-center py-8",children:(0,t.jsx)(eu.Spin,{})}),p&&(0,t.jsxs)("div",{className:"mt-4 bg-white border border-gray-200 rounded-lg p-4",children:[(0,t.jsx)("div",{className:"flex items-center justify-between mb-3",children:(0,t.jsxs)(q.Space,{children:[(0,t.jsx)(ej,{twoToneColor:"#52c41a"}),(0,t.jsx)(eS,{strong:!0,children:"Upstream card loaded"}),p.version&&(0,t.jsxs)(w.Tag,{color:"blue",children:["v",p.version]}),p.provider?.organization&&(0,t.jsx)(w.Tag,{color:"purple",children:p.provider.organization})]})}),(0,t.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-3 mb-4",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"text-xs font-medium text-gray-600 block mb-1",children:"Name (shown to API clients)"}),(0,t.jsx)(v.Input,{value:b,onChange:e=>f(e.target.value),placeholder:"Agent name"})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"text-xs font-medium text-gray-600 block mb-1",children:"Description"}),(0,t.jsx)(v.Input.TextArea,{value:k,onChange:e=>N(e.target.value),rows:2,placeholder:"What this agent does"})]})]}),(0,t.jsxs)(E.Collapse,{defaultActiveKey:["skills","capabilities"],ghost:!0,className:"bg-transparent",children:[(0,t.jsx)(eT,{header:(0,t.jsxs)(q.Space,{children:[(0,t.jsx)(eS,{strong:!0,children:"Skills"}),(0,t.jsxs)(w.Tag,{children:[H," / ",$," selected"]})]}),children:0===$?(0,t.jsx)(ep.Empty,{image:ep.Empty.PRESENTED_IMAGE_SIMPLE,description:"Upstream card has no skills"}):(0,t.jsx)("div",{className:"space-y-2",children:(p.skills??[]).map((e,s)=>{let a=ev(e,s),l=C.has(a);return(0,t.jsxs)("label",{className:`flex items-start gap-3 p-3 border rounded cursor-pointer transition-colors ${l?"border-indigo-300 bg-indigo-50":"border-gray-200 bg-white hover:border-gray-300"}`,children:[(0,t.jsx)(em.Checkbox,{checked:l,onChange:e=>{var t;return t=e.target.checked,void S(e=>{let s=new Set(e);return t?s.add(a):s.delete(a),s})}}),(0,t.jsxs)("div",{className:"flex-1",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 flex-wrap",children:[(0,t.jsx)(eS,{strong:!0,children:e.name||a}),e.id&&(0,t.jsx)(w.Tag,{style:{marginLeft:0},children:e.id}),(e.tags??[]).map(e=>(0,t.jsx)(w.Tag,{color:"geekblue",children:e},e))]}),e.description&&(0,t.jsx)(eI,{className:"text-xs text-gray-500 mt-1 mb-0",ellipsis:{rows:2,expandable:!0,symbol:"more"},children:e.description})]})]},a)})})},"skills"),(0,t.jsx)(eT,{header:(0,t.jsxs)(q.Space,{children:[(0,t.jsx)(eS,{strong:!0,children:"Capabilities"}),(0,t.jsx)(h.Tooltip,{title:"Only capabilities LiteLLM can faithfully proxy today are listed. Others (push notifications, extensions) are coming soon.",children:(0,t.jsx)(M.InfoCircleOutlined,{className:"text-gray-400"})})]}),children:(0,t.jsx)("div",{className:"space-y-2",children:ek.map(e=>{let s=!!p.capabilities?.[e];return(0,t.jsxs)("div",{className:"flex items-center justify-between p-2 border border-gray-200 rounded bg-white",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)(eS,{strong:!0,className:"capitalize",children:e}),!s&&(0,t.jsx)(w.Tag,{className:"ml-2",color:"default",children:"not advertised upstream"})]}),(0,t.jsx)(_.Switch,{checked:!!I[e],onChange:t=>T(s=>({...s,[e]:t}))})]},e)})})},"capabilities")]})]})]})},{Panel:eF}=E.Collapse,eD=(e,t)=>{let s={...t.litellm_params_template||{}};for(let a of t.credential_fields){let t=e[a.key];t&&!1!==a.include_in_litellm_params&&(s[a.key]=t)}if(e.cost_per_query&&(s.cost_per_query=parseFloat(e.cost_per_query)),e.input_cost_per_token&&(s.input_cost_per_token=parseFloat(e.input_cost_per_token)),e.output_cost_per_token&&(s.output_cost_per_token=parseFloat(e.output_cost_per_token)),t.model_template){let a=t.model_template;for(let s of t.credential_fields){let t=`{${s.key}}`;a.includes(t)&&e[s.key]&&(a=a.replace(t,e[s.key]))}s.model=a}let a={agent_name:e.agent_name,agent_card_params:{protocolVersion:"1.0",name:e.display_name||e.agent_name,description:e.description||`${t.agent_type_display_name} agent`,url:e.api_base||"",version:"1.0.0",defaultInputModes:["text"],defaultOutputModes:["text"],capabilities:{streaming:!0},skills:[{id:"chat",name:"Chat",description:"General chat capability",tags:["chat","conversation"]}]},litellm_params:s};return null!=e.tpm_limit&&(a.tpm_limit=e.tpm_limit),null!=e.rpm_limit&&(a.rpm_limit=e.rpm_limit),null!=e.session_tpm_limit&&(a.session_tpm_limit=e.session_tpm_limit),null!=e.session_rpm_limit&&(a.session_rpm_limit=e.session_rpm_limit),a},eL=({agentTypeInfo:e})=>(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(b.Form.Item,{label:"Agent Name",name:"agent_name",rules:[{required:!0,message:"Please enter a unique agent name"}],tooltip:"Unique identifier for the agent",children:(0,t.jsx)(v.Input,{placeholder:"e.g., my-langgraph-agent"})}),(0,t.jsx)(b.Form.Item,{label:"Description",name:"description",tooltip:"Brief description of what this agent does",children:(0,t.jsx)(v.Input.TextArea,{rows:2,placeholder:"Describe what this agent does..."})}),e.credential_fields.map(e=>(0,t.jsx)(b.Form.Item,{label:e.label,name:e.key,rules:e.required?[{required:!0,message:`Please enter ${e.label}`}]:void 0,tooltip:e.tooltip,initialValue:e.default_value,children:"password"===e.field_type?(0,t.jsx)(v.Input.Password,{placeholder:e.placeholder||""}):"textarea"===e.field_type?(0,t.jsx)(v.Input.TextArea,{rows:3,placeholder:e.placeholder||""}):"select"===e.field_type&&e.options?(0,t.jsx)(f.Select,{placeholder:e.placeholder||"",children:e.options.map(e=>(0,t.jsx)(f.Select.Option,{value:e,children:e},e))}):(0,t.jsx)(v.Input,{placeholder:e.placeholder||""})},e.key)),(0,t.jsx)(E.Collapse,{style:{marginBottom:16},children:(0,t.jsx)(eF,{header:H.cost.title,children:(0,t.jsx)(eo,{})},H.cost.key)})]});var eM=e.i(75921),eP=e.i(390605),eR=e.i(891547);let{Step:eU}=k.Steps,eO="custom",eE=({visible:e,onClose:l,accessToken:i,onSuccess:r,teams:n})=>{let o,c,{userId:d,userRole:m}=(0,R.default)(),[p]=b.Form.useForm(),[x,h]=(0,s.useState)(0),[g,j]=(0,s.useState)(!1),[E,q]=(0,s.useState)("a2a"),[B,V]=(0,s.useState)([]),[$,z]=(0,s.useState)(!1),[G,K]=(0,s.useState)("create_new"),[W,Y]=(0,s.useState)(""),[J,Q]=(0,s.useState)([]),[X,Z]=(0,s.useState)([]),[ee,et]=(0,s.useState)(null),[es,ea]=(0,s.useState)(!1),[el,ei]=(0,s.useState)([]),[en,eo]=(0,s.useState)(!1),[ec,em]=(0,s.useState)([]),[ep,eu]=(0,s.useState)(!1),[ex,eh]=(0,s.useState)(""),[eg,e_]=(0,s.useState)(null),[ej,ey]=(0,s.useState)(null),[eb,ef]=(0,s.useState)(!1),[ev,ek]=(0,s.useState)(!1),[eN,eS]=(0,s.useState)(null),[eI,eT]=(0,s.useState)(null),[eF,eE]=(0,s.useState)(null);(0,s.useEffect)(()=>{(async()=>{z(!0);try{let e=await (0,y.getAgentCreateMetadata)();V(e)}catch(e){console.error("Error fetching agent metadata:",e)}finally{z(!1)}})()},[]),(0,s.useEffect)(()=>{3===x&&i&&0===X.length&&(async()=>{ea(!0);try{let e=await (0,y.keyListCall)(i,null,null,null,null,null,1,100);Z(e?.keys||[])}catch(e){console.error("Error fetching keys:",e)}finally{ea(!1)}})()},[x,i]),(0,s.useEffect)(()=>{if(1!==x&&3!==x||!i||!d||!m)return;let e=!1;return eo(!0),(0,y.modelAvailableCall)(i,d,m).then(t=>{e||ei((t?.data??(Array.isArray(t)?t:[])).map(e=>e.id??e.model_name).filter(Boolean))}).catch(t=>{e||console.error("Error fetching models:",t)}).finally(()=>{e||eo(!1)}),()=>{e=!0}},[x,i,d,m]),(0,s.useEffect)(()=>{if(1!==x||!i)return;let e=!1;return eu(!0),(0,y.getAgentsList)(i).then(t=>{e||em((t?.agents??[]).map(e=>({agent_id:e.agent_id,agent_name:e.agent_name})))}).catch(t=>{e||console.error("Error fetching agents:",t)}).finally(()=>{e||eu(!1)}),()=>{e=!0}},[x,i]);let eq=B.find(e=>e.agent_type===E),eB=b.Form.useWatch([],p),eV=s.default.useMemo(()=>eC(E,eB||{},eq),[eB,eq,E]),e$=async()=>{try{if(0===x){await p.validateFields();let e=p.getFieldValue("agent_name");e&&!W&&Y(`${e}-key`)}h(e=>e+1)}catch{}},eH=async()=>{if(!i)return void I.default.error("No access token available");j(!0);try{await p.validateFields();let e={...p.getFieldsValue(!0)},t=(e=>{let t;if(E===eO)return{agent_name:e.agent_name,agent_card_params:{protocolVersion:"1.0",name:e.agent_name,description:e.description||"",url:"",version:"1.0.0",defaultInputModes:["text"],defaultOutputModes:["text"],capabilities:{streaming:!1},skills:[]}};if("a2a"===E)t=er(e);else if(eq?.use_a2a_form_fields)for(let s of(t=er(e),eq.litellm_params_template&&(t.litellm_params={...t.litellm_params,...eq.litellm_params_template}),eq.credential_fields)){let a=e[s.key];a&&!1!==s.include_in_litellm_params&&(t.litellm_params[s.key]=a)}else{if(!eq)return null;t=eD(e,eq)}return ew(t,eF?.selected_card)})(e);if(!t){I.default.error("Failed to build agent data"),j(!1);return}let s=e.allowed_mcp_servers_and_groups,a=e.mcp_tool_permissions||{},l=e.entitlement_models||[],n=e.entitlement_agents||[];(s?.servers?.length>0||s?.accessGroups?.length>0||Object.keys(a).length>0||l.length>0||n.length>0)&&(t.object_permission={},s?.servers?.length>0&&(t.object_permission.mcp_servers=s.servers),s?.accessGroups?.length>0&&(t.object_permission.mcp_access_groups=s.accessGroups),Object.keys(a).length>0&&(t.object_permission.mcp_tool_permissions=a),l.length>0&&(t.object_permission.models=l),n.length>0&&(t.object_permission.agents=n)),(eb||ev)&&(t.litellm_params||(t.litellm_params={}),eb&&(t.litellm_params.require_trace_id_on_calls_to_agent=!0),ev&&(t.litellm_params.require_trace_id_on_calls_by_agent=!0,eN&&(t.litellm_params.max_iterations=eN),eI&&(t.litellm_params.max_budget_per_session=eI)));let o=e.guardrails||[];o.length>0&&(t.litellm_params||(t.litellm_params={}),t.litellm_params.guardrails=o);let c=e.team_id||null;c&&(t.team_id=c);let d=await (0,y.createAgentCall)(i,t),m=d.agent_id,u=d.agent_name||e.agent_name||m;if(eh(u),"create_new"===G&&W){let e=await (0,y.keyCreateForAgentCall)(i,m,W,J,void 0,c);e_(e.key||null)}else if("existing_key"===G){if(!ee){I.default.error("Please select an existing key to assign"),j(!1);return}await (0,y.keyUpdateCall)(i,{key:ee,agent_id:m});let e=X.find(e=>e.token===ee);ey(e?.key_alias||ee.slice(0,12)+"…")}h(4),r()}catch(t){console.error("Error creating agent:",t);let e=t instanceof Error?t.message:String(t);I.default.error(e?`Failed to create agent: ${e}`:"Failed to create agent")}finally{j(!1)}},ez=()=>{p.resetFields(),q("a2a"),h(0),K("create_new"),Y(""),Q([]),et(null),eh(""),e_(null),ey(null),ef(!1),ek(!1),eS(null),eT(null),eE(null),l()},eG=e=>{q(e),p.resetFields(),eE(null)},eK=E===eO?null:eq?.logo_url||B.find(e=>"a2a"===e.agent_type)?.logo_url;return(0,t.jsx)(u.Modal,{title:(0,t.jsxs)("div",{className:"flex items-center space-x-3 pb-4 border-b border-gray-100",children:[eK&&x<1&&(0,t.jsx)("img",{src:(0,T.resolveLogoSrc)(eK),alt:"Agent",className:"w-6 h-6 object-contain"}),(0,t.jsx)("h2",{className:"text-xl font-semibold text-gray-900",children:"Add New Agent"})]}),open:e,onCancel:ez,footer:null,width:900,className:"top-8",styles:{body:{padding:"24px"},header:{padding:"24px 24px 0 24px",border:"none"}},children:(0,t.jsxs)("div",{className:"mt-4",children:[(0,t.jsxs)(k.Steps,{current:x,size:"small",className:"mb-8",children:[(0,t.jsx)(eU,{title:"Configure"}),(0,t.jsx)(eU,{title:"Entitlements"}),(0,t.jsx)(eU,{title:"Governance"}),(0,t.jsx)(eU,{title:"Agent Management"}),(0,t.jsx)(eU,{title:"Ready"})]}),(0,t.jsxs)(b.Form,{form:p,layout:"vertical",initialValues:"a2a"===E?{...(o={defaultInputModes:["text"],defaultOutputModes:["text"]},Object.values(H).forEach(e=>{e.fields.forEach(e=>{void 0!==e.defaultValue&&(o[e.name]=e.defaultValue)})}),o),allowed_mcp_servers_and_groups:{servers:[],accessGroups:[]},mcp_tool_permissions:{},entitlement_models:[],entitlement_agents:[],guardrails:[]}:{allowed_mcp_servers_and_groups:{servers:[],accessGroups:[]},mcp_tool_permissions:{},entitlement_models:[],entitlement_agents:[],guardrails:[]},className:"space-y-4",children:[0===x&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(b.Form.Item,{label:(0,t.jsx)("span",{className:"text-sm font-medium text-gray-700",children:"Agent Type"}),required:!0,tooltip:"Select the type of agent you want to create",children:(0,t.jsx)(f.Select,{value:E,onChange:eG,size:"large",style:{width:"100%"},optionLabelProp:"label",dropdownRender:e=>(0,t.jsxs)(t.Fragment,{children:[e,(0,t.jsx)(C.Divider,{style:{margin:"4px 0"}}),(0,t.jsxs)("div",{className:"px-2 py-1",children:[(0,t.jsx)("div",{className:"text-xs text-gray-400 font-medium mb-1 uppercase tracking-wide px-2",children:"Not listed?"}),(0,t.jsxs)("div",{className:`flex items-center gap-3 px-2 py-2 rounded cursor-pointer transition-colors ${E===eO?"bg-amber-50":"hover:bg-amber-50"}`,onClick:()=>eG(eO),children:[(0,t.jsx)(L.AppstoreOutlined,{className:"text-amber-600 text-lg"}),(0,t.jsxs)("div",{className:"flex-1",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("span",{className:"font-medium text-amber-700",children:"Custom / Other"}),(0,t.jsx)(w.Tag,{color:"orange",style:{fontSize:10,padding:"0 4px"},children:"GENERIC"})]}),(0,t.jsx)("div",{className:"text-xs text-amber-600",children:"For agents that don't follow a standard protocol — just needs a virtual key"})]})]})]})]}),children:B.map(e=>(0,t.jsx)(f.Select.Option,{value:e.agent_type,label:(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("img",{src:(0,T.resolveLogoSrc)(e.logo_url)??"",alt:"",className:"w-4 h-4 object-contain"}),(0,t.jsx)("span",{children:e.agent_type_display_name})]}),children:(0,t.jsxs)("div",{className:"flex items-center gap-3 py-1",children:[(0,t.jsx)("img",{src:(0,T.resolveLogoSrc)(e.logo_url)??"",alt:e.agent_type_display_name,className:"w-5 h-5 object-contain"}),(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"font-medium",children:e.agent_type_display_name}),e.description&&(0,t.jsx)("div",{className:"text-xs text-gray-500",children:e.description})]})]})},e.agent_type))})}),(0,t.jsxs)("div",{className:"mt-4",children:[E===eO?(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsx)(b.Form.Item,{label:"Agent Name",name:"agent_name",rules:[{required:!0,message:"Please enter an agent name"}],children:(0,t.jsx)(v.Input,{placeholder:"e.g. my-custom-agent"})}),(0,t.jsx)(b.Form.Item,{label:"Description",name:"description",children:(0,t.jsx)(v.Input.TextArea,{placeholder:"Describe what this agent does…",rows:3})})]}):"a2a"===E?(0,t.jsx)(ed,{showAgentName:!0}):eq?.use_a2a_form_fields?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(ed,{showAgentName:!0}),eq.credential_fields.length>0&&(0,t.jsxs)("div",{className:"mt-4 p-4 border border-gray-200 rounded-lg",children:[(0,t.jsxs)("h4",{className:"text-sm font-medium text-gray-700 mb-3",children:[eq.agent_type_display_name," Settings"]}),eq.credential_fields.map(e=>(0,t.jsx)(b.Form.Item,{label:e.label,name:e.key,rules:e.required?[{required:!0,message:`Please enter ${e.label}`}]:void 0,tooltip:e.tooltip,initialValue:e.default_value,children:"password"===e.field_type?(0,t.jsx)(v.Input.Password,{placeholder:e.placeholder||""}):(0,t.jsx)(v.Input,{placeholder:e.placeholder||""})},e.key))]})]}):eq?(0,t.jsx)(eL,{agentTypeInfo:eq}):null,E!==eO&&(0,t.jsx)("div",{className:"mt-4",children:(0,t.jsx)(eA,{accessToken:i,onApply:e=>{if(eE(e),!e)return;let{selected_card:t,upstream_url:s}=e,a=(t.skills??[]).map(e=>({id:e.id??"",name:e.name??"",description:e.description??"",tags:e.tags??[],examples:e.examples??[]})),l=p.getFieldValue("agent_name")||t.name||t.provider?.organization||"",i={agent_name:l,name:t.name,description:t.description,url:s,version:t.version,protocolVersion:t.protocolVersion??"1.0",streaming:!!t.capabilities?.streaming,skills:a,iconUrl:t.iconUrl,documentationUrl:t.documentationUrl};for(let e of(eq?.credential_fields??[]).map(e=>e.key).filter(e=>/(^|_)(url|api_base|endpoint)$/i.test(e)))i[e]=s;p.setFieldsValue(i),!W&&l&&Y(`${l}-key`)},discoveryRequest:eV})})]})]}),1===x&&(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsx)("p",{className:"text-sm text-gray-600",children:"Configure which models, agents, and MCP tools this agent is allowed to use. Leave fields empty to allow all (subject to key/team permissions)."}),(0,t.jsx)(b.Form.Item,{label:(0,t.jsx)("span",{className:"text-sm font-medium text-gray-700",children:"Allowed Models"}),name:"entitlement_models",tooltip:"Restrict which models this agent can call. Leave empty to allow all.",children:(0,t.jsx)(f.Select,{mode:"tags",style:{width:"100%"},placeholder:en?"Loading models...":"Select models (leave empty for all)",tokenSeparators:[","],loading:en,showSearch:!0,options:el.map(e=>({label:(0,U.getModelDisplayName)(e),value:e}))})}),(0,t.jsx)(b.Form.Item,{label:(0,t.jsx)("span",{className:"text-sm font-medium text-gray-700",children:"Allowed Agents (Sub-Agents)"}),name:"entitlement_agents",tooltip:"Restrict which other agents this agent can invoke as sub-agents. Leave empty to allow all.",children:(0,t.jsx)(f.Select,{mode:"multiple",style:{width:"100%"},placeholder:ep?"Loading agents...":"Select agents (leave empty for all)",loading:ep,showSearch:!0,filterOption:(e,t)=>(t?.label??"").toLowerCase().includes(e.toLowerCase()),options:ec.map(e=>({label:e.agent_name,value:e.agent_id}))})}),(0,t.jsx)(C.Divider,{className:"my-2"}),(0,t.jsx)(b.Form.Item,{label:(0,t.jsxs)("span",{children:["Allowed MCP Servers"," ",(0,t.jsx)(M.InfoCircleOutlined,{title:"Select which MCP servers or access groups this agent can access",style:{marginLeft:"4px"}})]}),name:"allowed_mcp_servers_and_groups",initialValue:{servers:[],accessGroups:[]},children:(0,t.jsx)(eM.default,{onChange:e=>p.setFieldValue("allowed_mcp_servers_and_groups",e),value:p.getFieldValue("allowed_mcp_servers_and_groups")||{servers:[],accessGroups:[]},accessToken:i??"",placeholder:"Select MCP servers or access groups (optional)"})}),(0,t.jsx)(b.Form.Item,{name:"mcp_tool_permissions",initialValue:{},hidden:!0,children:(0,t.jsx)(v.Input,{type:"hidden"})}),(0,t.jsx)(b.Form.Item,{noStyle:!0,shouldUpdate:(e,t)=>e.allowed_mcp_servers_and_groups!==t.allowed_mcp_servers_and_groups||e.mcp_tool_permissions!==t.mcp_tool_permissions,children:()=>(0,t.jsx)("div",{className:"mt-4",children:(0,t.jsx)(eP.default,{accessToken:i??"",selectedServers:p.getFieldValue("allowed_mcp_servers_and_groups")?.servers??[],toolPermissions:p.getFieldValue("mcp_tool_permissions")??{},onChange:e=>p.setFieldsValue({mcp_tool_permissions:e})})})})]}),2===x&&(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h4",{className:"text-sm font-medium text-gray-700 mb-3",children:"Tracing"}),(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"text-sm font-medium text-gray-700",children:"Require x-litellm-trace-id on calls TO this agent"}),(0,t.jsx)("p",{className:"text-xs text-gray-500 mt-1",children:"Only accept this agent being invoked with a trace-id (e.g. when used as a sub-agent)."})]}),(0,t.jsx)(_.Switch,{checked:eb,onChange:ef})]}),(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"text-sm font-medium text-gray-700",children:"Require x-litellm-trace-id on calls BY this agent"}),(0,t.jsx)("p",{className:"text-xs text-gray-500 mt-1",children:"Requires LLM/MCP calls made by this agent to include x-litellm-trace-id for session tracking."})]}),(0,t.jsx)(_.Switch,{checked:ev,onChange:e=>{ek(e),e||(eS(null),eT(null))}})]})]})]}),(0,t.jsx)(C.Divider,{className:"my-0"}),(0,t.jsxs)("div",{children:[(0,t.jsx)("h4",{className:"text-sm font-medium text-gray-700 mb-3",children:"Budgets & Rate Limits"}),(0,t.jsxs)("div",{className:"space-y-4",children:[!ev&&(0,t.jsx)("div",{className:"p-3 bg-yellow-50 border border-yellow-200 rounded-lg text-sm text-yellow-800",children:'Enable "Require x-litellm-trace-id on calls BY this agent" in Tracing to configure budgets and rate limits.'}),(0,t.jsx)("div",{className:"text-sm font-medium text-gray-700",children:"Session Budgets"}),(0,t.jsxs)("div",{className:"grid grid-cols-2 gap-4",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"text-sm text-gray-600 block mb-1",children:"Max Iterations"}),(0,t.jsx)(S.InputNumber,{className:"w-full",min:1,placeholder:"e.g. 25",disabled:!ev,value:eN,onChange:e=>eS(e)}),(0,t.jsx)("p",{className:"text-xs text-gray-400 mt-1",children:"Hard cap on LLM calls per session"})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"text-sm text-gray-600 block mb-1",children:"Max Budget Per Session ($)"}),(0,t.jsx)(S.InputNumber,{className:"w-full",min:.01,step:.5,placeholder:"e.g. 5.00",disabled:!ev,value:eI,onChange:e=>eT(e)}),(0,t.jsx)("p",{className:"text-xs text-gray-400 mt-1",children:"Max spend per trace before returning 429"})]})]}),(0,t.jsx)(C.Divider,{className:"my-2"}),(0,t.jsx)("div",{className:"text-sm font-medium text-gray-700",children:"Agent Rate Limits"}),(0,t.jsx)("p",{className:"text-xs text-gray-500",children:"Global rate limits applied across all callers of this agent."}),(0,t.jsxs)("div",{className:"grid grid-cols-2 gap-4",children:[(0,t.jsx)(b.Form.Item,{label:"TPM Limit",name:"tpm_limit",className:"mb-0",children:(0,t.jsx)(S.InputNumber,{className:"w-full",min:0,placeholder:"e.g. 100000",disabled:!ev})}),(0,t.jsx)(b.Form.Item,{label:"RPM Limit",name:"rpm_limit",className:"mb-0",children:(0,t.jsx)(S.InputNumber,{className:"w-full",min:0,placeholder:"e.g. 100",disabled:!ev})})]}),(0,t.jsx)("div",{className:"text-sm font-medium text-gray-700 mt-4",children:"Per-Session Rate Limits"}),(0,t.jsx)("p",{className:"text-xs text-gray-500",children:"Rate limits per session (x-litellm-trace-id). Each session gets its own counters."}),(0,t.jsxs)("div",{className:"grid grid-cols-2 gap-4",children:[(0,t.jsx)(b.Form.Item,{label:"Session TPM Limit",name:"session_tpm_limit",className:"mb-0",children:(0,t.jsx)(S.InputNumber,{className:"w-full",min:0,placeholder:"e.g. 10000",disabled:!ev})}),(0,t.jsx)(b.Form.Item,{label:"Session RPM Limit",name:"session_rpm_limit",className:"mb-0",children:(0,t.jsx)(S.InputNumber,{className:"w-full",min:0,placeholder:"e.g. 20",disabled:!ev})})]})]})]}),(0,t.jsx)(C.Divider,{className:"my-0"}),(0,t.jsxs)("div",{children:[(0,t.jsx)("h4",{className:"text-sm font-medium text-gray-700 mb-3",children:"Guardrails"}),(0,t.jsx)("p",{className:"text-xs text-gray-500 mb-3",children:"Apply guardrails to this agent. Selected guardrails will run on all calls made by this agent."}),(0,t.jsx)(b.Form.Item,{name:"guardrails",initialValue:[],children:(0,t.jsx)(eR.default,{accessToken:i??"",value:p.getFieldValue("guardrails")??[],onChange:e=>p.setFieldsValue({guardrails:e})})})]})]}),3===x&&(c=p.getFieldValue("agent_name")||"your-agent",(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{className:"flex justify-center mb-6",children:(0,t.jsx)(w.Tag,{icon:(0,t.jsx)(D.RobotOutlined,{}),color:"purple",className:"px-3 py-1 text-sm",children:c})}),(0,t.jsx)(b.Form.Item,{label:(0,t.jsx)("span",{className:"text-sm font-medium text-gray-700",children:"Assign to Team"}),name:"team_id",tooltip:"Optionally assign this agent to a team. The agent and its key will belong to the selected team.",children:(0,t.jsx)(O.default,{})}),(0,t.jsx)(C.Divider,{className:"my-4"}),(0,t.jsxs)("div",{className:"space-y-3",children:[(0,t.jsx)("div",{className:`p-4 border-2 rounded-lg cursor-pointer transition-colors ${"create_new"===G?"border-indigo-600 bg-indigo-50":"border-gray-200 bg-white hover:border-gray-300"}`,onClick:()=>K("create_new"),children:(0,t.jsxs)("div",{className:"flex items-start justify-between",children:[(0,t.jsxs)("div",{className:"flex items-start gap-3 flex-1",children:[(0,t.jsx)(N.Radio,{value:"create_new",checked:"create_new"===G,onChange:()=>K("create_new")}),(0,t.jsxs)("div",{className:"flex-1",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(F.KeyOutlined,{className:"text-indigo-600"}),(0,t.jsx)("span",{className:"font-medium text-gray-900",children:"Create a new key for this agent"})]}),(0,t.jsx)("p",{className:"text-sm text-gray-500 mt-1",children:"A dedicated key scoped to this agent."}),"create_new"===G&&(0,t.jsx)("div",{className:"mt-3 space-y-3",onClick:e=>e.stopPropagation(),children:(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"text-sm text-gray-600 block mb-1",children:"Key Name"}),(0,t.jsx)(v.Input,{value:W,onChange:e=>Y(e.target.value),placeholder:"e.g. my-agent-key"})]})})]})]}),(0,t.jsx)(w.Tag,{color:"green",children:"Recommended"})]})}),(0,t.jsx)("div",{className:`p-4 border-2 rounded-lg cursor-pointer transition-colors ${"existing_key"===G?"border-indigo-600 bg-indigo-50":"border-gray-200 bg-white hover:border-gray-300"}`,onClick:()=>K("existing_key"),children:(0,t.jsxs)("div",{className:"flex items-start gap-3",children:[(0,t.jsx)(N.Radio,{value:"existing_key",checked:"existing_key"===G,onChange:()=>K("existing_key")}),(0,t.jsxs)("div",{className:"flex-1",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(F.KeyOutlined,{className:"text-gray-500"}),(0,t.jsx)("span",{className:"font-medium text-gray-900",children:"Assign an existing key"})]}),(0,t.jsx)("p",{className:"text-sm text-gray-500 mt-1",children:"Re-assign a key you already have to this agent."}),"existing_key"===G&&(0,t.jsx)("div",{className:"mt-3",onClick:e=>e.stopPropagation(),children:(0,t.jsx)(f.Select,{showSearch:!0,style:{width:"100%"},placeholder:"Search by key name…",loading:es,value:ee,onChange:e=>et(e),filterOption:(e,t)=>(t?.label??"").toLowerCase().includes(e.toLowerCase()),options:X.map(e=>({label:e.key_alias||e.token?.slice(0,12)+"…",value:e.token}))})})]})]})})]}),(0,t.jsx)("div",{className:"text-center mt-4",children:(0,t.jsx)("button",{type:"button",className:"text-sm text-gray-500 underline hover:text-gray-700",onClick:()=>K("skip"),children:"Skip for now — I'll assign a key later"})})]})),4===x&&(0,t.jsxs)("div",{className:"text-center py-6",children:[(0,t.jsx)(A.CheckCircleFilled,{className:"text-5xl text-green-500 mb-4",style:{fontSize:48}}),(0,t.jsx)("h3",{className:"text-xl font-semibold text-gray-900 mb-2",children:"Agent Created!"}),(0,t.jsx)("div",{className:"flex justify-center mb-4",children:(0,t.jsx)(w.Tag,{icon:(0,t.jsx)(D.RobotOutlined,{}),color:"purple",className:"px-3 py-1 text-sm",children:ex})}),eg&&(0,t.jsx)("div",{className:"mt-4 text-left max-w-md mx-auto",children:(0,t.jsx)(P.default,{apiKey:eg})}),ej&&(0,t.jsxs)("p",{className:"text-sm text-gray-600 mt-2",children:["Key ",(0,t.jsx)("span",{className:"font-medium",children:ej})," has been assigned to this agent."]}),!eg&&!ej&&"skip"===G&&(0,t.jsx)("p",{className:"text-sm text-gray-500 mt-2",children:"No key assigned. You can create one from the Virtual Keys page."})]})]}),(0,t.jsxs)("div",{className:"flex items-center justify-between pt-6 border-t border-gray-100 mt-6",children:[(0,t.jsx)("div",{children:x>0&&x<4&&(0,t.jsx)("button",{type:"button",onClick:()=>{h(e=>Math.max(0,e-1))},className:"text-sm text-gray-600 border border-gray-300 rounded px-4 py-2 hover:bg-gray-50",children:"← Back"})}),(0,t.jsxs)("div",{className:"flex gap-3",children:[x<4&&(0,t.jsx)(a.Button,{variant:"secondary",onClick:ez,children:"Cancel"}),0===x&&(0,t.jsx)(a.Button,{variant:"primary",onClick:e$,children:"Next →"}),1===x&&(0,t.jsx)(a.Button,{variant:"primary",onClick:e$,children:"Next →"}),2===x&&(0,t.jsx)(a.Button,{variant:"primary",onClick:e$,children:"Next →"}),3===x&&(0,t.jsx)(a.Button,{variant:"primary",loading:g,onClick:eH,children:g?"Creating...":"Create Agent →"}),4===x&&(0,t.jsx)(a.Button,{variant:"primary",onClick:ez,children:"Done"})]})]})]})})};var eq=e.i(708347),eB=e.i(629569),eV=e.i(197647),e$=e.i(653824),eH=e.i(881073),ez=e.i(404206),eG=e.i(723731),eK=e.i(869216),eW=e.i(530212),eY=e.i(207082),eJ=e.i(20147);let{Title:eQ,Text:eX}=ex.Typography,eZ=({keys:e,isLoading:s,onKeyClick:a})=>(0,t.jsxs)("div",{style:{marginTop:24},children:[(0,t.jsx)(eQ,{level:4,children:"Virtual Keys"}),s?(0,t.jsx)(eX,{className:"mt-2 block",children:"Loading keys..."}):0===e.length?(0,t.jsx)(eX,{className:"mt-2 block text-gray-500",children:"No virtual key assigned to this agent."}):(0,t.jsx)("div",{className:"mt-3 flex flex-col gap-2",children:e.map(e=>(0,t.jsxs)("div",{className:"flex items-center gap-3 border border-gray-100 rounded px-3 py-2",children:[(0,t.jsx)(F.KeyOutlined,{className:"text-gray-400"}),(0,t.jsx)("span",{className:"font-medium",children:e.key_alias||"Unnamed key"}),e.key_name&&(0,t.jsx)("span",{className:"font-mono text-xs text-gray-500",children:e.key_name}),(0,t.jsx)(h.Tooltip,{title:e.token,children:(0,t.jsxs)(B.Button,{size:"small",type:"link",className:"font-mono text-blue-500 ml-auto",onClick:()=>a(e),children:[e.token?.slice(0,12),"..."]})})]},e.token))})]}),e0=({agent:e})=>{let s=e.litellm_params;return s?.cost_per_query===void 0&&s?.input_cost_per_token===void 0&&s?.output_cost_per_token===void 0?null:(0,t.jsxs)("div",{style:{marginTop:24},children:[(0,t.jsx)(eB.Title,{children:"Cost Configuration"}),(0,t.jsxs)(eK.Descriptions,{bordered:!0,column:1,style:{marginTop:16},children:[void 0!==s.cost_per_query&&(0,t.jsxs)(eK.Descriptions.Item,{label:"Cost Per Query",children:["$",s.cost_per_query]}),void 0!==s.input_cost_per_token&&(0,t.jsxs)(eK.Descriptions.Item,{label:"Input Cost Per Token",children:["$",s.input_cost_per_token]}),void 0!==s.output_cost_per_token&&(0,t.jsxs)(eK.Descriptions.Item,{label:"Output Cost Per Token",children:["$",s.output_cost_per_token]})]})]})},e1=e=>{let t=e.litellm_params?.model||"",s=e.litellm_params?.custom_llm_provider;return"langflow"===s?"langflow":"langgraph"===s?"langgraph":"azure_ai"===s?"azure_ai_foundry":"bedrock"===s?"bedrock_agentcore":t.startsWith("langflow/")?"langflow":t.startsWith("langgraph/")?"langgraph":t.startsWith("azure_ai/agents/")?"azure_ai_foundry":t.startsWith("bedrock/agentcore/")?"bedrock_agentcore":"a2a"},e2=(e,t)=>{let s={agent_name:e.agent_name,description:e.agent_card_params?.description||""};for(let a of t.credential_fields)if(!1!==a.include_in_litellm_params)s[a.key]=e.litellm_params?.[a.key]||a.default_value||"";else if(t.model_template&&e.litellm_params?.model){let l=e.litellm_params.model,i=t.model_template.split("/"),r=l.split("/");i.forEach((e,t)=>{e===`{${a.key}}`&&r[t]&&(s[a.key]=r[t])})}return s.cost_per_query=e.litellm_params?.cost_per_query,s.input_cost_per_token=e.litellm_params?.input_cost_per_token,s.output_cost_per_token=e.litellm_params?.output_cost_per_token,s},e4=({agentId:e,onClose:i,accessToken:r,isAdmin:n})=>{let[o,c]=(0,s.useState)(null),[d,m]=(0,s.useState)(null),{data:u,isLoading:x,refetch:h}=(0,eY.useKeys)(1,100,{agentID:e}),g=u?.keys??[],[_,j]=(0,s.useState)(!0),[f,k]=(0,s.useState)(!1),[N,w]=(0,s.useState)(!1),[T]=b.Form.useForm(),[A,F]=(0,s.useState)([]),[D,L]=(0,s.useState)("a2a"),[M,P]=(0,s.useState)(null);(0,s.useEffect)(()=>{(async()=>{try{let e=await (0,y.getAgentCreateMetadata)();F(e)}catch(e){console.error("Error fetching agent metadata:",e)}})()},[]),(0,s.useEffect)(()=>{R()},[e,r]);let R=async()=>{if(r){j(!0);try{let t=await (0,y.getAgentInfo)(r,e);c(t);let s=e1(t);if(L(s),"a2a"===s)T.setFieldsValue(en(t));else{let e=A.find(e=>e.agent_type===s);e?T.setFieldsValue(e2(t,e)):T.setFieldsValue(en(t))}}catch(e){console.error("Error fetching agent info:",e),I.default.error("Failed to load agent information")}finally{j(!1)}}};(0,s.useEffect)(()=>{if(o&&A.length>0){let e=e1(o);if("a2a"!==e){let t=A.find(t=>t.agent_type===e);t&&T.setFieldsValue(e2(o,t))}}},[A,o]);let U=A.find(e=>e.agent_type===D),O=b.Form.useWatch([],T),E=(0,s.useMemo)(()=>eC(D,O||{},U),[O,U,D]),q=async t=>{if(r&&o){w(!0);try{let s;"a2a"===D?s=er(t,o):U?(s=eD(t,U)).agent_name=t.agent_name:s=er(t,o),M&&(s=ew(s,M.selected_card)),await (0,y.patchAgentCall)(r,e,s),I.default.success("Agent updated successfully"),k(!1),R()}catch(e){console.error("Error updating agent:",e),I.default.error("Failed to update agent")}finally{w(!1)}}};if(_)return(0,t.jsx)("div",{className:"p-4",children:(0,t.jsx)("div",{className:"flex justify-center items-center h-64",children:(0,t.jsx)(eu.Spin,{size:"large"})})});if(!o)return(0,t.jsxs)("div",{className:"p-4",children:[(0,t.jsx)("div",{className:"text-center",children:"Agent not found"}),(0,t.jsx)(a.Button,{onClick:i,className:"mt-4",children:"Back to Agents List"})]});let V=e=>e?new Date(e).toLocaleString():"-";return d?(0,t.jsx)(eJ.default,{keyId:d.token,keyData:d,onClose:()=>m(null),onDelete:()=>{m(null),h()},teams:null,backButtonText:"Back to Agent"}):(0,t.jsxs)("div",{className:"p-4",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)(a.Button,{icon:eW.ArrowLeftIcon,variant:"light",onClick:i,className:"mb-4",children:"Back to Agents"}),(0,t.jsx)(eB.Title,{children:o.agent_name||"Unnamed Agent"}),(0,t.jsx)(p.Text,{className:"text-gray-500 font-mono",children:o.agent_id})]}),(0,t.jsxs)(e$.TabGroup,{children:[(0,t.jsxs)(eH.TabList,{className:"mb-4",children:[(0,t.jsx)(eV.Tab,{children:"Overview"},"overview"),n?(0,t.jsx)(eV.Tab,{children:"Settings"},"settings"):(0,t.jsx)(t.Fragment,{})]}),(0,t.jsxs)(eG.TabPanels,{children:[(0,t.jsxs)(ez.TabPanel,{children:[(0,t.jsxs)(eK.Descriptions,{bordered:!0,column:1,children:[(0,t.jsx)(eK.Descriptions.Item,{label:"Agent ID",children:o.agent_id}),(0,t.jsx)(eK.Descriptions.Item,{label:"Agent Name",children:o.agent_name}),(0,t.jsx)(eK.Descriptions.Item,{label:"Display Name",children:o.agent_card_params?.name||"-"}),(0,t.jsx)(eK.Descriptions.Item,{label:"Description",children:o.agent_card_params?.description||"-"}),(0,t.jsx)(eK.Descriptions.Item,{label:"URL",children:o.agent_card_params?.url||"-"}),(0,t.jsx)(eK.Descriptions.Item,{label:"Version",children:o.agent_card_params?.version||"-"}),(0,t.jsx)(eK.Descriptions.Item,{label:"Protocol Version",children:o.agent_card_params?.protocolVersion||"-"}),(0,t.jsx)(eK.Descriptions.Item,{label:"Streaming",children:o.agent_card_params?.capabilities?.streaming?"Yes":"No"}),o.agent_card_params?.capabilities?.pushNotifications&&(0,t.jsx)(eK.Descriptions.Item,{label:"Push Notifications",children:"Yes"}),o.agent_card_params?.capabilities?.stateTransitionHistory&&(0,t.jsx)(eK.Descriptions.Item,{label:"State Transition History",children:"Yes"}),(0,t.jsxs)(eK.Descriptions.Item,{label:"Skills",children:[o.agent_card_params?.skills?.length||0," configured"]}),o.litellm_params?.model&&(0,t.jsx)(eK.Descriptions.Item,{label:"Model",children:o.litellm_params.model}),o.litellm_params?.make_public!==void 0&&(0,t.jsx)(eK.Descriptions.Item,{label:"Make Public",children:o.litellm_params.make_public?"Yes":"No"}),o.agent_card_params?.iconUrl&&(0,t.jsx)(eK.Descriptions.Item,{label:"Icon URL",children:o.agent_card_params.iconUrl}),o.agent_card_params?.documentationUrl&&(0,t.jsx)(eK.Descriptions.Item,{label:"Documentation URL",children:o.agent_card_params.documentationUrl}),(0,t.jsx)(eK.Descriptions.Item,{label:"TPM Limit",children:o.tpm_limit??"Unlimited"}),(0,t.jsx)(eK.Descriptions.Item,{label:"RPM Limit",children:o.rpm_limit??"Unlimited"}),(0,t.jsx)(eK.Descriptions.Item,{label:"Session TPM Limit",children:o.session_tpm_limit??"Unlimited"}),(0,t.jsx)(eK.Descriptions.Item,{label:"Session RPM Limit",children:o.session_rpm_limit??"Unlimited"}),(0,t.jsx)(eK.Descriptions.Item,{label:"Created At",children:V(o.created_at)}),(0,t.jsx)(eK.Descriptions.Item,{label:"Updated At",children:V(o.updated_at)})]}),(0,t.jsx)(eZ,{keys:g,isLoading:x,onKeyClick:m}),o.object_permission&&(o.object_permission.mcp_servers?.length||o.object_permission.mcp_access_groups?.length||o.object_permission.mcp_tool_permissions&&Object.keys(o.object_permission.mcp_tool_permissions).length>0)&&(0,t.jsxs)("div",{style:{marginTop:24},children:[(0,t.jsx)(eB.Title,{children:"MCP Tool Permissions"}),(0,t.jsxs)(eK.Descriptions,{bordered:!0,column:1,style:{marginTop:16},children:[o.object_permission.mcp_servers&&o.object_permission.mcp_servers.length>0&&(0,t.jsx)(eK.Descriptions.Item,{label:"MCP Servers",children:o.object_permission.mcp_servers.join(", ")}),o.object_permission.mcp_access_groups&&o.object_permission.mcp_access_groups.length>0&&(0,t.jsx)(eK.Descriptions.Item,{label:"MCP Access Groups",children:o.object_permission.mcp_access_groups.join(", ")}),o.object_permission.mcp_tool_permissions&&Object.keys(o.object_permission.mcp_tool_permissions).length>0&&(0,t.jsx)(eK.Descriptions.Item,{label:"Tool permissions per server",children:(0,t.jsx)("div",{className:"space-y-1",children:Object.entries(o.object_permission.mcp_tool_permissions).map(([e,s])=>(0,t.jsxs)("div",{children:[(0,t.jsxs)("span",{className:"font-medium",children:[e,":"]})," ",Array.isArray(s)?s.join(", "):String(s)]},e))})})]})]}),(0,t.jsx)(e0,{agent:o}),o.agent_card_params?.skills&&o.agent_card_params.skills.length>0&&(0,t.jsxs)("div",{style:{marginTop:24},children:[(0,t.jsx)(eB.Title,{children:"Skills"}),(0,t.jsx)(eK.Descriptions,{bordered:!0,column:1,style:{marginTop:16},children:o.agent_card_params.skills.map((e,s)=>(0,t.jsx)(eK.Descriptions.Item,{label:e.name||`Skill ${s+1}`,children:(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("strong",{children:"ID:"})," ",e.id]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("strong",{children:"Description:"})," ",e.description]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("strong",{children:"Tags:"})," ",Array.isArray(e.tags)?e.tags.join(", "):e.tags]}),e.examples&&e.examples.length>0&&(0,t.jsxs)("div",{children:[(0,t.jsx)("strong",{children:"Examples:"})," ",Array.isArray(e.examples)?e.examples.join(", "):e.examples]})]})},s))})]})]}),n&&(0,t.jsx)(ez.TabPanel,{children:(0,t.jsxs)(l.Card,{children:[(0,t.jsxs)("div",{className:"flex justify-between items-center mb-4",children:[(0,t.jsx)(eB.Title,{children:"Agent Settings"}),!f&&(0,t.jsx)(a.Button,{onClick:()=>{P(null),k(!0)},children:"Edit Settings"})]}),f?(0,t.jsxs)(b.Form,{form:T,layout:"vertical",onFinish:q,children:[(0,t.jsx)(b.Form.Item,{label:"Agent ID",children:(0,t.jsx)(v.Input,{value:o.agent_id,disabled:!0})}),"a2a"===D?(0,t.jsx)(ed,{showAgentName:!0}):U?(0,t.jsx)(eL,{agentTypeInfo:U}):(0,t.jsx)(ed,{showAgentName:!0}),E&&(0,t.jsx)("div",{className:"mt-4",children:(0,t.jsx)(eA,{accessToken:r,onApply:e=>{if(P(e),!e)return;let{selected_card:t}=e,s=(t.skills??[]).map(e=>({id:e.id??"",name:e.name??"",description:e.description??"",tags:e.tags??[],examples:e.examples??[]})),a={name:t.name,description:t.description,url:e.upstream_url,streaming:!!t.capabilities?.streaming,skills:s,iconUrl:t.iconUrl,documentationUrl:t.documentationUrl};for(let t of(U?.credential_fields??[]).map(e=>e.key).filter(e=>/(^|_)(url|api_base|endpoint)$/i.test(e)))a[t]=e.upstream_url;T.setFieldsValue(a)},discoveryRequest:E,savedAgentCard:o.agent_card_params??null})}),(0,t.jsx)(C.Divider,{}),(0,t.jsx)(eB.Title,{className:"mb-4",children:"Rate Limits"}),(0,t.jsxs)("div",{className:"grid grid-cols-2 gap-4",children:[(0,t.jsx)(b.Form.Item,{label:"TPM Limit",name:"tpm_limit",children:(0,t.jsx)(S.InputNumber,{className:"w-full",min:0,placeholder:"Unlimited"})}),(0,t.jsx)(b.Form.Item,{label:"RPM Limit",name:"rpm_limit",children:(0,t.jsx)(S.InputNumber,{className:"w-full",min:0,placeholder:"Unlimited"})})]}),(0,t.jsxs)("div",{className:"grid grid-cols-2 gap-4",children:[(0,t.jsx)(b.Form.Item,{label:"Session TPM Limit",name:"session_tpm_limit",children:(0,t.jsx)(S.InputNumber,{className:"w-full",min:0,placeholder:"Unlimited"})}),(0,t.jsx)(b.Form.Item,{label:"Session RPM Limit",name:"session_rpm_limit",children:(0,t.jsx)(S.InputNumber,{className:"w-full",min:0,placeholder:"Unlimited"})})]}),(0,t.jsxs)("div",{className:"flex justify-end gap-2 mt-6",children:[(0,t.jsx)(B.Button,{onClick:()=>{P(null),k(!1),R()},children:"Cancel"}),(0,t.jsx)(a.Button,{loading:N,children:"Save Changes"})]})]}):(0,t.jsx)(p.Text,{children:'Click "Edit Settings" to modify agent configuration.'})]})})]})]})]})};var e3=e.i(727749),e6=e.i(500330),e5=e.i(902555);let e7=({accessToken:e,userRole:b,teams:f})=>{let[v,k]=(0,s.useState)([]),[N,w]=(0,s.useState)(!1),[C,S]=(0,s.useState)(!1),[I,T]=(0,s.useState)(!1),[A,F]=(0,s.useState)(null),[D,L]=(0,s.useState)(null),[M,P]=(0,s.useState)(!1),R=!!b&&(0,eq.isAdminRole)(b),U=async t=>{if(e){S(!0);try{let s=await (0,y.getAgentsList)(e,t??M);k(s.agents||[])}catch(e){console.error("Error fetching agents:",e)}finally{S(!1)}}};(0,s.useEffect)(()=>{U()},[e]);let O=async()=>{if(A&&e){T(!0);try{await (0,y.deleteAgentCall)(e,A.id),e3.default.success(`Agent "${A.name}" deleted successfully`),U()}catch(e){console.error("Error deleting agent:",e),e3.default.fromBackend("Failed to delete agent")}finally{T(!1),F(null)}}},E=[...v].sort((e,t)=>{let s=e.created_at?new Date(e.created_at).getTime():0;return(t.created_at?new Date(t.created_at).getTime():0)-s}),q=R?7:6;return(0,t.jsxs)("div",{className:"w-full mx-auto flex-auto overflow-y-auto m-8 p-2",children:[(0,t.jsxs)("div",{className:"flex flex-col gap-2 mb-4",children:[(0,t.jsx)("h1",{className:"text-2xl font-bold",children:"Agents"}),(0,t.jsx)("p",{className:"text-sm text-gray-600",children:"List of A2A-spec agents that are available to be used in your organization. Go to AI Hub, to make agents public."}),(0,t.jsx)(x.Alert,{message:"Why do agents need keys?",description:"Keys scope access to an agent and allow it to call MCP tools. Assign a key when creating an agent or from the Virtual Keys page.",type:"info",showIcon:!0,className:"mb-3"}),(0,t.jsxs)("div",{className:"mt-2 flex items-center gap-4",children:[R&&(0,t.jsx)(a.Button,{onClick:()=>{D&&L(null),w(!0)},disabled:!e,children:"+ Add New Agent"}),(0,t.jsx)(h.Tooltip,{title:"When enabled, only agents with reachable URLs are shown",children:(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(j.CheckCircleOutlined,{className:M?"text-green-500":"text-gray-400"}),(0,t.jsx)("span",{className:"text-sm text-gray-600",children:"Health Check"}),(0,t.jsx)(_.Switch,{size:"small",checked:M,onChange:e=>{P(e),U(e)},loading:C&&M})]})})]})]}),D?(0,t.jsx)(e4,{agentId:D,onClose:()=>L(null),accessToken:e,isAdmin:R}):(0,t.jsx)(l.Card,{children:C?(0,t.jsx)(g.Skeleton,{active:!0,paragraph:{rows:3}}):(0,t.jsxs)(i.Table,{children:[(0,t.jsx)(o.TableHead,{children:(0,t.jsxs)(d.TableRow,{children:[(0,t.jsx)(c.TableHeaderCell,{children:"Agent Name"}),(0,t.jsx)(c.TableHeaderCell,{children:"Agent ID"}),(0,t.jsx)(c.TableHeaderCell,{children:"Spend (USD)"}),(0,t.jsx)(c.TableHeaderCell,{children:"Model"}),(0,t.jsx)(c.TableHeaderCell,{children:"Created"}),(0,t.jsx)(c.TableHeaderCell,{children:"Status"}),R&&(0,t.jsx)(c.TableHeaderCell,{children:"Actions"})]})}),(0,t.jsx)(r.TableBody,{children:0===E.length?(0,t.jsx)(d.TableRow,{children:(0,t.jsx)(n.TableCell,{colSpan:q,children:(0,t.jsx)(p.Text,{className:"text-center",children:'No agents found. Click "+ Add New Agent" to create one.'})})}):E.map(e=>(0,t.jsxs)(d.TableRow,{children:[(0,t.jsx)(n.TableCell,{children:(0,t.jsx)(p.Text,{children:e.agent_name})}),(0,t.jsx)(n.TableCell,{children:(0,t.jsx)(h.Tooltip,{title:e.agent_id,children:(0,t.jsxs)(a.Button,{size:"xs",variant:"light",className:"font-mono text-blue-500 bg-blue-50 hover:bg-blue-100 text-xs font-normal px-2 py-0.5 text-left overflow-hidden truncate max-w-[200px]",onClick:()=>L(e.agent_id),children:[e.agent_id.slice(0,7),"..."]})})}),(0,t.jsx)(n.TableCell,{children:(0,t.jsx)(p.Text,{children:(0,e6.formatNumberWithCommas)(e.spend,4)})}),(0,t.jsx)(n.TableCell,{children:(0,t.jsx)(m.Badge,{size:"xs",color:"blue",children:e.litellm_params?.model||"N/A"})}),(0,t.jsx)(n.TableCell,{children:(0,t.jsx)(p.Text,{children:e.created_at?new Date(e.created_at).toLocaleDateString():"N/A"})}),(0,t.jsx)(n.TableCell,{children:(e.keys?.length??0)>0?(0,t.jsx)(m.Badge,{color:"green",children:"Active"}):(0,t.jsx)(m.Badge,{color:"yellow",children:"Needs Setup"})}),R&&(0,t.jsx)(n.TableCell,{children:(0,t.jsx)(e5.default,{variant:"Delete",onClick:()=>{F({id:e.agent_id,name:e.agent_name})}})})]},e.agent_id))})]})}),(0,t.jsx)(eE,{visible:N,onClose:()=>{w(!1)},accessToken:e,onSuccess:()=>{U()},teams:f}),A&&(0,t.jsxs)(u.Modal,{title:"Delete Agent",open:null!==A,onOk:O,onCancel:()=>{F(null)},confirmLoading:I,okText:"Delete",okButtonProps:{danger:!0},children:[(0,t.jsxs)("p",{children:["Are you sure you want to delete agent: ",A.name,"?"]}),(0,t.jsx)("p",{children:"This action cannot be undone."})]})]})};var e9=e.i(785242);e.s(["default",0,function(){let{accessToken:e,userRole:s}=(0,R.default)(),{data:a}=(0,e9.useTeams)();return(0,t.jsx)(e7,{accessToken:e,userRole:s,teams:a??null})}],298805)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/10ybnll3qh-8s.js b/litellm/proxy/_experimental/out/_next/static/chunks/10ybnll3qh-8s.js new file mode 100644 index 00000000000..4998a556595 --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/10ybnll3qh-8s.js @@ -0,0 +1,10 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,270377,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let n={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}},{tag:"path",attrs:{d:"M464 688a48 48 0 1096 0 48 48 0 10-96 0zm24-112h48c4.4 0 8-3.6 8-8V296c0-4.4-3.6-8-8-8h-48c-4.4 0-8 3.6-8 8v272c0 4.4 3.6 8 8 8z"}}]},name:"exclamation-circle",theme:"outlined"};var l=e.i(9583),o=r.forwardRef(function(e,o){return r.createElement(l.default,(0,t.default)({},e,{ref:o,icon:n}))});e.s(["ExclamationCircleOutlined",0,o],270377)},175712,e=>{"use strict";e.i(247167);var t=e.i(271645),r=e.i(343794),n=e.i(529681),l=e.i(242064),o=e.i(517455),i=e.i(185793),a=e.i(721369),s=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&0>t.indexOf(n)&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var l=0,n=Object.getOwnPropertySymbols(e);lt.indexOf(n[l])&&Object.prototype.propertyIsEnumerable.call(e,n[l])&&(r[n[l]]=e[n[l]]);return r};let c=e=>{var{prefixCls:n,className:o,hoverable:i=!0}=e,a=s(e,["prefixCls","className","hoverable"]);let{getPrefixCls:c}=t.useContext(l.ConfigContext),d=c("card",n),u=(0,r.default)(`${d}-grid`,o,{[`${d}-grid-hoverable`]:i});return t.createElement("div",Object.assign({},a,{className:u}))};e.i(296059);var d=e.i(915654),u=e.i(183293),g=e.i(246422),m=e.i(838378);let p=(0,g.genStyleHooks)("Card",e=>{let t=(0,m.mergeToken)(e,{cardShadow:e.boxShadowCard,cardHeadPadding:e.padding,cardPaddingBase:e.paddingLG,cardActionsIconSize:e.fontSize});return[(e=>{let{componentCls:t,cardShadow:r,cardHeadPadding:n,colorBorderSecondary:l,boxShadowTertiary:o,bodyPadding:i,extraColor:a}=e;return{[t]:Object.assign(Object.assign({},(0,u.resetComponent)(e)),{position:"relative",background:e.colorBgContainer,borderRadius:e.borderRadiusLG,[`&:not(${t}-bordered)`]:{boxShadow:o},[`${t}-head`]:(e=>{let{antCls:t,componentCls:r,headerHeight:n,headerPadding:l,tabsMarginBottom:o}=e;return Object.assign(Object.assign({display:"flex",justifyContent:"center",flexDirection:"column",minHeight:n,marginBottom:-1,padding:`0 ${(0,d.unit)(l)}`,color:e.colorTextHeading,fontWeight:e.fontWeightStrong,fontSize:e.headerFontSize,background:e.headerBg,borderBottom:`${(0,d.unit)(e.lineWidth)} ${e.lineType} ${e.colorBorderSecondary}`,borderRadius:`${(0,d.unit)(e.borderRadiusLG)} ${(0,d.unit)(e.borderRadiusLG)} 0 0`},(0,u.clearFix)()),{"&-wrapper":{width:"100%",display:"flex",alignItems:"center"},"&-title":Object.assign(Object.assign({display:"inline-block",flex:1},u.textEllipsis),{[` + > ${r}-typography, + > ${r}-typography-edit-content + `]:{insetInlineStart:0,marginTop:0,marginBottom:0}}),[`${t}-tabs-top`]:{clear:"both",marginBottom:o,color:e.colorText,fontWeight:"normal",fontSize:e.fontSize,"&-bar":{borderBottom:`${(0,d.unit)(e.lineWidth)} ${e.lineType} ${e.colorBorderSecondary}`}}})})(e),[`${t}-extra`]:{marginInlineStart:"auto",color:a,fontWeight:"normal",fontSize:e.fontSize},[`${t}-body`]:{padding:i,borderRadius:`0 0 ${(0,d.unit)(e.borderRadiusLG)} ${(0,d.unit)(e.borderRadiusLG)}`},[`${t}-grid`]:(e=>{let{cardPaddingBase:t,colorBorderSecondary:r,cardShadow:n,lineWidth:l}=e;return{width:"33.33%",padding:t,border:0,borderRadius:0,boxShadow:` + ${(0,d.unit)(l)} 0 0 0 ${r}, + 0 ${(0,d.unit)(l)} 0 0 ${r}, + ${(0,d.unit)(l)} ${(0,d.unit)(l)} 0 0 ${r}, + ${(0,d.unit)(l)} 0 0 0 ${r} inset, + 0 ${(0,d.unit)(l)} 0 0 ${r} inset; + `,transition:`all ${e.motionDurationMid}`,"&-hoverable:hover":{position:"relative",zIndex:1,boxShadow:n}}})(e),[`${t}-cover`]:{"> *":{display:"block",width:"100%",borderRadius:`${(0,d.unit)(e.borderRadiusLG)} ${(0,d.unit)(e.borderRadiusLG)} 0 0`}},[`${t}-actions`]:(e=>{let{componentCls:t,iconCls:r,actionsLiMargin:n,cardActionsIconSize:l,colorBorderSecondary:o,actionsBg:i}=e;return Object.assign(Object.assign({margin:0,padding:0,listStyle:"none",background:i,borderTop:`${(0,d.unit)(e.lineWidth)} ${e.lineType} ${o}`,display:"flex",borderRadius:`0 0 ${(0,d.unit)(e.borderRadiusLG)} ${(0,d.unit)(e.borderRadiusLG)}`},(0,u.clearFix)()),{"& > li":{margin:n,color:e.colorTextDescription,textAlign:"center","> span":{position:"relative",display:"block",minWidth:e.calc(e.cardActionsIconSize).mul(2).equal(),fontSize:e.fontSize,lineHeight:e.lineHeight,cursor:"pointer","&:hover":{color:e.colorPrimary,transition:`color ${e.motionDurationMid}`},[`a:not(${t}-btn), > ${r}`]:{display:"inline-block",width:"100%",color:e.colorIcon,lineHeight:(0,d.unit)(e.fontHeight),transition:`color ${e.motionDurationMid}`,"&:hover":{color:e.colorPrimary}},[`> ${r}`]:{fontSize:l,lineHeight:(0,d.unit)(e.calc(l).mul(e.lineHeight).equal())}},"&:not(:last-child)":{borderInlineEnd:`${(0,d.unit)(e.lineWidth)} ${e.lineType} ${o}`}}})})(e),[`${t}-meta`]:Object.assign(Object.assign({margin:`${(0,d.unit)(e.calc(e.marginXXS).mul(-1).equal())} 0`,display:"flex"},(0,u.clearFix)()),{"&-avatar":{paddingInlineEnd:e.padding},"&-detail":{overflow:"hidden",flex:1,"> div:not(:last-child)":{marginBottom:e.marginXS}},"&-title":Object.assign({color:e.colorTextHeading,fontWeight:e.fontWeightStrong,fontSize:e.fontSizeLG},u.textEllipsis),"&-description":{color:e.colorTextDescription}})}),[`${t}-bordered`]:{border:`${(0,d.unit)(e.lineWidth)} ${e.lineType} ${l}`,[`${t}-cover`]:{marginTop:-1,marginInlineStart:-1,marginInlineEnd:-1}},[`${t}-hoverable`]:{cursor:"pointer",transition:`box-shadow ${e.motionDurationMid}, border-color ${e.motionDurationMid}`,"&:hover":{borderColor:"transparent",boxShadow:r}},[`${t}-contain-grid`]:{borderRadius:`${(0,d.unit)(e.borderRadiusLG)} ${(0,d.unit)(e.borderRadiusLG)} 0 0 `,[`${t}-body`]:{display:"flex",flexWrap:"wrap"},[`&:not(${t}-loading) ${t}-body`]:{marginBlockStart:e.calc(e.lineWidth).mul(-1).equal(),marginInlineStart:e.calc(e.lineWidth).mul(-1).equal(),padding:0}},[`${t}-contain-tabs`]:{[`> div${t}-head`]:{minHeight:0,[`${t}-head-title, ${t}-extra`]:{paddingTop:n}}},[`${t}-type-inner`]:(e=>{let{componentCls:t,colorFillAlter:r,headerPadding:n,bodyPadding:l}=e;return{[`${t}-head`]:{padding:`0 ${(0,d.unit)(n)}`,background:r,"&-title":{fontSize:e.fontSize}},[`${t}-body`]:{padding:`${(0,d.unit)(e.padding)} ${(0,d.unit)(l)}`}}})(e),[`${t}-loading`]:(e=>{let{componentCls:t}=e;return{overflow:"hidden",[`${t}-body`]:{userSelect:"none"}}})(e),[`${t}-rtl`]:{direction:"rtl"}}})(t),(e=>{let{componentCls:t,bodyPaddingSM:r,headerPaddingSM:n,headerHeightSM:l,headerFontSizeSM:o}=e;return{[`${t}-small`]:{[`> ${t}-head`]:{minHeight:l,padding:`0 ${(0,d.unit)(n)}`,fontSize:o,[`> ${t}-head-wrapper`]:{[`> ${t}-extra`]:{fontSize:e.fontSize}}},[`> ${t}-body`]:{padding:r}},[`${t}-small${t}-contain-tabs`]:{[`> ${t}-head`]:{[`${t}-head-title, ${t}-extra`]:{paddingTop:0,display:"flex",alignItems:"center"}}}}})(t)]},e=>{var t,r;return{headerBg:"transparent",headerFontSize:e.fontSizeLG,headerFontSizeSM:e.fontSize,headerHeight:e.fontSizeLG*e.lineHeightLG+2*e.padding,headerHeightSM:e.fontSize*e.lineHeight+2*e.paddingXS,actionsBg:e.colorBgContainer,actionsLiMargin:`${e.paddingSM}px 0`,tabsMarginBottom:-e.padding-e.lineWidth,extraColor:e.colorText,bodyPaddingSM:12,headerPaddingSM:12,bodyPadding:null!=(t=e.bodyPadding)?t:e.paddingLG,headerPadding:null!=(r=e.headerPadding)?r:e.paddingLG}});var f=e.i(792812),b=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&0>t.indexOf(n)&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var l=0,n=Object.getOwnPropertySymbols(e);lt.indexOf(n[l])&&Object.prototype.propertyIsEnumerable.call(e,n[l])&&(r[n[l]]=e[n[l]]);return r};let h=e=>{let{actionClasses:r,actions:n=[],actionStyle:l}=e;return t.createElement("ul",{className:r,style:l},n.map((e,r)=>{let l=`action-${r}`;return t.createElement("li",{style:{width:`${100/n.length}%`},key:l},t.createElement("span",null,e))}))},y=t.forwardRef((e,s)=>{let d,{prefixCls:u,className:g,rootClassName:m,style:y,extra:$,headStyle:v={},bodyStyle:x={},title:S,loading:O,bordered:j,variant:C,size:k,type:w,cover:E,actions:N,tabList:z,children:T,activeTabKey:M,defaultActiveTabKey:P,tabBarExtraContent:B,hoverable:I,tabProps:L={},classNames:R,styles:W}=e,A=b(e,["prefixCls","className","rootClassName","style","extra","headStyle","bodyStyle","title","loading","bordered","variant","size","type","cover","actions","tabList","children","activeTabKey","defaultActiveTabKey","tabBarExtraContent","hoverable","tabProps","classNames","styles"]),{getPrefixCls:H,direction:D,card:G}=t.useContext(l.ConfigContext),[X]=(0,f.default)("card",C,j),F=e=>{var t;return(0,r.default)(null==(t=null==G?void 0:G.classNames)?void 0:t[e],null==R?void 0:R[e])},_=e=>{var t;return Object.assign(Object.assign({},null==(t=null==G?void 0:G.styles)?void 0:t[e]),null==W?void 0:W[e])},q=t.useMemo(()=>{let e=!1;return t.Children.forEach(T,t=>{(null==t?void 0:t.type)===c&&(e=!0)}),e},[T]),K=H("card",u),[V,Q,U]=p(K),Y=t.createElement(i.default,{loading:!0,active:!0,paragraph:{rows:4},title:!1},T),J=void 0!==M,Z=Object.assign(Object.assign({},L),{[J?"activeKey":"defaultActiveKey"]:J?M:P,tabBarExtraContent:B}),ee=(0,o.default)(k),et=ee&&"default"!==ee?ee:"large",er=z?t.createElement(a.default,Object.assign({size:et},Z,{className:`${K}-head-tabs`,onChange:t=>{var r;null==(r=e.onTabChange)||r.call(e,t)},items:z.map(e=>{var{tab:t}=e;return Object.assign({label:t},b(e,["tab"]))})})):null;if(S||$||er){let e=(0,r.default)(`${K}-head`,F("header")),n=(0,r.default)(`${K}-head-title`,F("title")),l=(0,r.default)(`${K}-extra`,F("extra")),o=Object.assign(Object.assign({},v),_("header"));d=t.createElement("div",{className:e,style:o},t.createElement("div",{className:`${K}-head-wrapper`},S&&t.createElement("div",{className:n,style:_("title")},S),$&&t.createElement("div",{className:l,style:_("extra")},$)),er)}let en=(0,r.default)(`${K}-cover`,F("cover")),el=E?t.createElement("div",{className:en,style:_("cover")},E):null,eo=(0,r.default)(`${K}-body`,F("body")),ei=Object.assign(Object.assign({},x),_("body")),ea=t.createElement("div",{className:eo,style:ei},O?Y:T),es=(0,r.default)(`${K}-actions`,F("actions")),ec=(null==N?void 0:N.length)?t.createElement(h,{actionClasses:es,actionStyle:_("actions"),actions:N}):null,ed=(0,n.default)(A,["onTabChange"]),eu=(0,r.default)(K,null==G?void 0:G.className,{[`${K}-loading`]:O,[`${K}-bordered`]:"borderless"!==X,[`${K}-hoverable`]:I,[`${K}-contain-grid`]:q,[`${K}-contain-tabs`]:null==z?void 0:z.length,[`${K}-${ee}`]:ee,[`${K}-type-${w}`]:!!w,[`${K}-rtl`]:"rtl"===D},g,m,Q,U),eg=Object.assign(Object.assign({},null==G?void 0:G.style),y);return V(t.createElement("div",Object.assign({ref:s},ed,{className:eu,style:eg}),d,el,ea,ec))});var $=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&0>t.indexOf(n)&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var l=0,n=Object.getOwnPropertySymbols(e);lt.indexOf(n[l])&&Object.prototype.propertyIsEnumerable.call(e,n[l])&&(r[n[l]]=e[n[l]]);return r};y.Grid=c,y.Meta=e=>{let{prefixCls:n,className:o,avatar:i,title:a,description:s}=e,c=$(e,["prefixCls","className","avatar","title","description"]),{getPrefixCls:d}=t.useContext(l.ConfigContext),u=d("card",n),g=(0,r.default)(`${u}-meta`,o),m=i?t.createElement("div",{className:`${u}-meta-avatar`},i):null,p=a?t.createElement("div",{className:`${u}-meta-title`},a):null,f=s?t.createElement("div",{className:`${u}-meta-description`},s):null,b=p||f?t.createElement("div",{className:`${u}-meta-detail`},p,f):null;return t.createElement("div",Object.assign({},c,{className:g}),m,b)},e.s(["Card",0,y],175712)},869216,e=>{"use strict";e.i(247167);var t=e.i(271645),r=e.i(343794),n=e.i(908206),l=e.i(242064),o=e.i(517455),i=e.i(150073);let a={xxl:3,xl:3,lg:3,md:3,sm:2,xs:1},s=t.default.createContext({});var c=e.i(876556),d=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&0>t.indexOf(n)&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var l=0,n=Object.getOwnPropertySymbols(e);lt.indexOf(n[l])&&Object.prototype.propertyIsEnumerable.call(e,n[l])&&(r[n[l]]=e[n[l]]);return r},u=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&0>t.indexOf(n)&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var l=0,n=Object.getOwnPropertySymbols(e);lt.indexOf(n[l])&&Object.prototype.propertyIsEnumerable.call(e,n[l])&&(r[n[l]]=e[n[l]]);return r};let g=e=>{let{itemPrefixCls:n,component:l,span:o,className:i,style:a,labelStyle:c,contentStyle:d,bordered:u,label:g,content:m,colon:p,type:f,styles:b}=e,{classNames:h}=t.useContext(s),y=Object.assign(Object.assign({},c),null==b?void 0:b.label),$=Object.assign(Object.assign({},d),null==b?void 0:b.content);if(u)return t.createElement(l,{colSpan:o,style:a,className:(0,r.default)(i,{[`${n}-item-${f}`]:"label"===f||"content"===f,[null==h?void 0:h.label]:(null==h?void 0:h.label)&&"label"===f,[null==h?void 0:h.content]:(null==h?void 0:h.content)&&"content"===f})},null!=g&&t.createElement("span",{style:y},g),null!=m&&t.createElement("span",{style:$},m));return t.createElement(l,{colSpan:o,style:a,className:(0,r.default)(`${n}-item`,i)},t.createElement("div",{className:`${n}-item-container`},null!=g&&t.createElement("span",{style:y,className:(0,r.default)(`${n}-item-label`,null==h?void 0:h.label,{[`${n}-item-no-colon`]:!p})},g),null!=m&&t.createElement("span",{style:$,className:(0,r.default)(`${n}-item-content`,null==h?void 0:h.content)},m)))};function m(e,{colon:r,prefixCls:n,bordered:l},{component:o,type:i,showLabel:a,showContent:s,labelStyle:c,contentStyle:d,styles:u}){return e.map(({label:e,children:m,prefixCls:p=n,className:f,style:b,labelStyle:h,contentStyle:y,span:$=1,key:v,styles:x},S)=>"string"==typeof o?t.createElement(g,{key:`${i}-${v||S}`,className:f,style:b,styles:{label:Object.assign(Object.assign(Object.assign(Object.assign({},c),null==u?void 0:u.label),h),null==x?void 0:x.label),content:Object.assign(Object.assign(Object.assign(Object.assign({},d),null==u?void 0:u.content),y),null==x?void 0:x.content)},span:$,colon:r,component:o,itemPrefixCls:p,bordered:l,label:a?e:null,content:s?m:null,type:i}):[t.createElement(g,{key:`label-${v||S}`,className:f,style:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},c),null==u?void 0:u.label),b),h),null==x?void 0:x.label),span:1,colon:r,component:o[0],itemPrefixCls:p,bordered:l,label:e,type:"label"}),t.createElement(g,{key:`content-${v||S}`,className:f,style:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},d),null==u?void 0:u.content),b),y),null==x?void 0:x.content),span:2*$-1,component:o[1],itemPrefixCls:p,bordered:l,content:m,type:"content"})])}let p=e=>{let r=t.useContext(s),{prefixCls:n,vertical:l,row:o,index:i,bordered:a}=e;return l?t.createElement(t.Fragment,null,t.createElement("tr",{key:`label-${i}`,className:`${n}-row`},m(o,e,Object.assign({component:"th",type:"label",showLabel:!0},r))),t.createElement("tr",{key:`content-${i}`,className:`${n}-row`},m(o,e,Object.assign({component:"td",type:"content",showContent:!0},r)))):t.createElement("tr",{key:i,className:`${n}-row`},m(o,e,Object.assign({component:a?["th","td"]:"td",type:"item",showLabel:!0,showContent:!0},r)))};e.i(296059);var f=e.i(915654),b=e.i(183293),h=e.i(246422),y=e.i(838378);let $=(0,h.genStyleHooks)("Descriptions",e=>(e=>{let{componentCls:t,extraColor:r,itemPaddingBottom:n,itemPaddingEnd:l,colonMarginRight:o,colonMarginLeft:i,titleMarginBottom:a}=e;return{[t]:Object.assign(Object.assign(Object.assign({},(0,b.resetComponent)(e)),(e=>{let{componentCls:t,labelBg:r}=e;return{[`&${t}-bordered`]:{[`> ${t}-view`]:{border:`${(0,f.unit)(e.lineWidth)} ${e.lineType} ${e.colorSplit}`,"> table":{tableLayout:"auto"},[`${t}-row`]:{borderBottom:`${(0,f.unit)(e.lineWidth)} ${e.lineType} ${e.colorSplit}`,"&:first-child":{"> th:first-child, > td:first-child":{borderStartStartRadius:e.borderRadiusLG}},"&:last-child":{borderBottom:"none","> th:first-child, > td:first-child":{borderEndStartRadius:e.borderRadiusLG}},[`> ${t}-item-label, > ${t}-item-content`]:{padding:`${(0,f.unit)(e.padding)} ${(0,f.unit)(e.paddingLG)}`,borderInlineEnd:`${(0,f.unit)(e.lineWidth)} ${e.lineType} ${e.colorSplit}`,"&:last-child":{borderInlineEnd:"none"}},[`> ${t}-item-label`]:{color:e.colorTextSecondary,backgroundColor:r,"&::after":{display:"none"}}}},[`&${t}-middle`]:{[`${t}-row`]:{[`> ${t}-item-label, > ${t}-item-content`]:{padding:`${(0,f.unit)(e.paddingSM)} ${(0,f.unit)(e.paddingLG)}`}}},[`&${t}-small`]:{[`${t}-row`]:{[`> ${t}-item-label, > ${t}-item-content`]:{padding:`${(0,f.unit)(e.paddingXS)} ${(0,f.unit)(e.padding)}`}}}}}})(e)),{"&-rtl":{direction:"rtl"},[`${t}-header`]:{display:"flex",alignItems:"center",marginBottom:a},[`${t}-title`]:Object.assign(Object.assign({},b.textEllipsis),{flex:"auto",color:e.titleColor,fontWeight:e.fontWeightStrong,fontSize:e.fontSizeLG,lineHeight:e.lineHeightLG}),[`${t}-extra`]:{marginInlineStart:"auto",color:r,fontSize:e.fontSize},[`${t}-view`]:{width:"100%",borderRadius:e.borderRadiusLG,table:{width:"100%",tableLayout:"fixed",borderCollapse:"collapse"}},[`${t}-row`]:{"> th, > td":{paddingBottom:n,paddingInlineEnd:l},"> th:last-child, > td:last-child":{paddingInlineEnd:0},"&:last-child":{borderBottom:"none","> th, > td":{paddingBottom:0}}},[`${t}-item-label`]:{color:e.labelColor,fontWeight:"normal",fontSize:e.fontSize,lineHeight:e.lineHeight,textAlign:"start","&::after":{content:'":"',position:"relative",top:-.5,marginInline:`${(0,f.unit)(i)} ${(0,f.unit)(o)}`},[`&${t}-item-no-colon::after`]:{content:'""'}},[`${t}-item-no-label`]:{"&::after":{margin:0,content:'""'}},[`${t}-item-content`]:{display:"table-cell",flex:1,color:e.contentColor,fontSize:e.fontSize,lineHeight:e.lineHeight,wordBreak:"break-word",overflowWrap:"break-word"},[`${t}-item`]:{paddingBottom:0,verticalAlign:"top","&-container":{display:"flex",[`${t}-item-label`]:{display:"inline-flex",alignItems:"baseline"},[`${t}-item-content`]:{display:"inline-flex",alignItems:"baseline",minWidth:"1em"}}},"&-middle":{[`${t}-row`]:{"> th, > td":{paddingBottom:e.paddingSM}}},"&-small":{[`${t}-row`]:{"> th, > td":{paddingBottom:e.paddingXS}}}})}})((0,y.mergeToken)(e,{})),e=>({labelBg:e.colorFillAlter,labelColor:e.colorTextTertiary,titleColor:e.colorText,titleMarginBottom:e.fontSizeSM*e.lineHeightSM,itemPaddingBottom:e.padding,itemPaddingEnd:e.padding,colonMarginRight:e.marginXS,colonMarginLeft:e.marginXXS/2,contentColor:e.colorText,extraColor:e.colorText}));var v=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&0>t.indexOf(n)&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var l=0,n=Object.getOwnPropertySymbols(e);lt.indexOf(n[l])&&Object.prototype.propertyIsEnumerable.call(e,n[l])&&(r[n[l]]=e[n[l]]);return r};let x=e=>{let g,{prefixCls:m,title:f,extra:b,column:h,colon:y=!0,bordered:x,layout:S,children:O,className:j,rootClassName:C,style:k,size:w,labelStyle:E,contentStyle:N,styles:z,items:T,classNames:M}=e,P=v(e,["prefixCls","title","extra","column","colon","bordered","layout","children","className","rootClassName","style","size","labelStyle","contentStyle","styles","items","classNames"]),{getPrefixCls:B,direction:I,className:L,style:R,classNames:W,styles:A}=(0,l.useComponentConfig)("descriptions"),H=B("descriptions",m),D=(0,i.default)(),G=t.useMemo(()=>{var e;return"number"==typeof h?h:null!=(e=(0,n.matchScreen)(D,Object.assign(Object.assign({},a),h)))?e:3},[D,h]),X=(g=t.useMemo(()=>T||(0,c.default)(O).map(e=>Object.assign(Object.assign({},null==e?void 0:e.props),{key:e.key})),[T,O]),t.useMemo(()=>g.map(e=>{var{span:t}=e,r=d(e,["span"]);return"filled"===t?Object.assign(Object.assign({},r),{filled:!0}):Object.assign(Object.assign({},r),{span:"number"==typeof t?t:(0,n.matchScreen)(D,t)})}),[g,D])),F=(0,o.default)(w),_=((e,r)=>{let[n,l]=(0,t.useMemo)(()=>{let t,n,l,o;return t=[],n=[],l=!1,o=0,r.filter(e=>e).forEach(r=>{let{filled:i}=r,a=u(r,["filled"]);if(i){n.push(a),t.push(n),n=[],o=0;return}let s=e-o;(o+=r.span||1)>=e?(o>e?(l=!0,n.push(Object.assign(Object.assign({},a),{span:s}))):n.push(a),t.push(n),n=[],o=0):n.push(a)}),n.length>0&&t.push(n),[t=t.map(t=>{let r=t.reduce((e,t)=>e+(t.span||1),0);if(r({labelStyle:E,contentStyle:N,styles:{content:Object.assign(Object.assign({},A.content),null==z?void 0:z.content),label:Object.assign(Object.assign({},A.label),null==z?void 0:z.label)},classNames:{label:(0,r.default)(W.label,null==M?void 0:M.label),content:(0,r.default)(W.content,null==M?void 0:M.content)}}),[E,N,z,M,W,A]);return q(t.createElement(s.Provider,{value:Q},t.createElement("div",Object.assign({className:(0,r.default)(H,L,W.root,null==M?void 0:M.root,{[`${H}-${F}`]:F&&"default"!==F,[`${H}-bordered`]:!!x,[`${H}-rtl`]:"rtl"===I},j,C,K,V),style:Object.assign(Object.assign(Object.assign(Object.assign({},R),A.root),null==z?void 0:z.root),k)},P),(f||b)&&t.createElement("div",{className:(0,r.default)(`${H}-header`,W.header,null==M?void 0:M.header),style:Object.assign(Object.assign({},A.header),null==z?void 0:z.header)},f&&t.createElement("div",{className:(0,r.default)(`${H}-title`,W.title,null==M?void 0:M.title),style:Object.assign(Object.assign({},A.title),null==z?void 0:z.title)},f),b&&t.createElement("div",{className:(0,r.default)(`${H}-extra`,W.extra,null==M?void 0:M.extra),style:Object.assign(Object.assign({},A.extra),null==z?void 0:z.extra)},b)),t.createElement("div",{className:`${H}-view`},t.createElement("table",null,t.createElement("tbody",null,_.map((e,r)=>t.createElement(p,{key:r,index:r,colon:y,prefixCls:H,vertical:"vertical"===S,bordered:x,row:e}))))))))};x.Item=({children:e})=>e,e.s(["Descriptions",0,x],869216)},368869,e=>{"use strict";e.i(296059);var t=e.i(868297),r=e.i(732961),n=e.i(289882),l=e.i(170517),o=e.i(628882),i=e.i(320890),a=e.i(104458),s=e.i(722319),c=e.i(8398),d=e.i(279728);e.i(765846);var u=e.i(602716),g=e.i(328052),m=e.i(135551);let p=(e,t)=>new m.FastColor(e).setA(t).toRgbString(),f=(e,t)=>new m.FastColor(e).lighten(t).toHexString(),b=e=>{let t=(0,u.generate)(e,{theme:"dark"});return{1:t[0],2:t[1],3:t[2],4:t[3],5:t[6],6:t[5],7:t[4],8:t[6],9:t[5],10:t[4]}},h=(e,t)=>{let r=e||"#000",n=t||"#fff";return{colorBgBase:r,colorTextBase:n,colorText:p(n,.85),colorTextSecondary:p(n,.65),colorTextTertiary:p(n,.45),colorTextQuaternary:p(n,.25),colorFill:p(n,.18),colorFillSecondary:p(n,.12),colorFillTertiary:p(n,.08),colorFillQuaternary:p(n,.04),colorBgSolid:p(n,.95),colorBgSolidHover:p(n,1),colorBgSolidActive:p(n,.9),colorBgElevated:f(r,12),colorBgContainer:f(r,8),colorBgLayout:f(r,0),colorBgSpotlight:f(r,26),colorBgBlur:p(n,.04),colorBorder:f(r,26),colorBorderSecondary:f(r,19)}},y={defaultSeed:i.defaultConfig.token,useToken:function(){let[e,t,r]=(0,a.useToken)();return{theme:e,token:t,hashId:r}},defaultAlgorithm:s.default,darkAlgorithm:(e,t)=>{let r=Object.keys(l.defaultPresetColors).map(t=>{let r=(0,u.generate)(e[t],{theme:"dark"});return Array.from({length:10},()=>1).reduce((e,n,l)=>(e[`${t}-${l+1}`]=r[l],e[`${t}${l+1}`]=r[l],e),{})}).reduce((e,t)=>e=Object.assign(Object.assign({},e),t),{}),n=null!=t?t:(0,s.default)(e),o=(0,g.default)(e,{generateColorPalettes:b,generateNeutralColorPalettes:h});return Object.assign(Object.assign(Object.assign(Object.assign({},n),r),o),{colorPrimaryBg:o.colorPrimaryBorder,colorPrimaryBgHover:o.colorPrimaryBorderHover})},compactAlgorithm:(e,t)=>{let r=null!=t?t:(0,s.default)(e),n=r.fontSizeSM,l=r.controlHeight-4;return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},r),function(e){let{sizeUnit:t,sizeStep:r}=e,n=r-2;return{sizeXXL:t*(n+10),sizeXL:t*(n+6),sizeLG:t*(n+2),sizeMD:t*(n+2),sizeMS:t*(n+1),size:t*n,sizeSM:t*n,sizeXS:t*(n-1),sizeXXS:t*(n-1)}}(null!=t?t:e)),(0,d.default)(n)),{controlHeight:l}),(0,c.default)(Object.assign(Object.assign({},r),{controlHeight:l})))},getDesignToken:e=>{let i=(null==e?void 0:e.algorithm)?(0,t.createTheme)(e.algorithm):n.default,a=Object.assign(Object.assign({},l.default),null==e?void 0:e.token);return(0,r.getComputedToken)(a,{override:null==e?void 0:e.token},i,o.default)},defaultConfig:i.defaultConfig,_internalContext:i.DesignTokenContext};e.s(["theme",0,y],368869)},127952,e=>{"use strict";var t=e.i(843476),r=e.i(560445),n=e.i(175712),l=e.i(869216),o=e.i(311451),i=e.i(212931),a=e.i(898586),s=e.i(368869),c=e.i(270377),d=e.i(271645);e.s(["default",0,function({isOpen:e,title:u,alertMessage:g,message:m,resourceInformationTitle:p,resourceInformation:f,onCancel:b,onOk:h,confirmLoading:y,requiredConfirmation:$}){let{Title:v,Text:x}=a.Typography,{token:S}=s.theme.useToken(),[O,j]=(0,d.useState)("");return(0,d.useEffect)(()=>{e&&j("")},[e]),(0,t.jsx)(i.Modal,{title:u,open:e,onOk:h,onCancel:b,confirmLoading:y,okText:y?"Deleting...":"Delete",cancelText:"Cancel",okButtonProps:{danger:!0,disabled:!!$&&O!==$||y},cancelButtonProps:{disabled:y},children:(0,t.jsxs)("div",{className:"space-y-4",children:[g&&(0,t.jsx)(r.Alert,{message:g,type:"warning"}),(0,t.jsx)(n.Card,{title:p,className:"mt-4",styles:{body:{padding:"16px"},header:{backgroundColor:S.colorErrorBg,borderColor:S.colorErrorBorder}},style:{backgroundColor:S.colorErrorBg,borderColor:S.colorErrorBorder},children:(0,t.jsx)(l.Descriptions,{column:1,size:"small",children:f&&f.map(({label:e,value:r,...n})=>(0,t.jsx)(l.Descriptions.Item,{label:(0,t.jsx)("span",{className:"font-semibold",children:e}),children:(0,t.jsx)(x,{...n,children:r??"-"})},e))})}),(0,t.jsx)("div",{children:(0,t.jsx)(x,{children:m})}),$&&(0,t.jsxs)("div",{className:"mb-6 mt-4 pt-4 border-t border-gray-200 dark:border-gray-700",children:[(0,t.jsxs)(x,{className:"block text-base font-medium text-gray-700 dark:text-gray-300 mb-2",children:[(0,t.jsx)(x,{children:"Type "}),(0,t.jsx)(x,{strong:!0,type:"danger",children:$}),(0,t.jsx)(x,{children:" to confirm deletion:"})]}),(0,t.jsx)(o.Input,{value:O,onChange:e=>j(e.target.value),placeholder:$,className:"rounded-md",prefix:(0,t.jsx)(c.ExclamationCircleOutlined,{style:{color:S.colorError}}),autoFocus:!0})]})]})})}])},350967,46757,e=>{"use strict";var t=e.i(290571),r=e.i(444755),n=e.i(673706),l=e.i(271645);let o={0:"grid-cols-none",1:"grid-cols-1",2:"grid-cols-2",3:"grid-cols-3",4:"grid-cols-4",5:"grid-cols-5",6:"grid-cols-6",7:"grid-cols-7",8:"grid-cols-8",9:"grid-cols-9",10:"grid-cols-10",11:"grid-cols-11",12:"grid-cols-12"},i={0:"sm:grid-cols-none",1:"sm:grid-cols-1",2:"sm:grid-cols-2",3:"sm:grid-cols-3",4:"sm:grid-cols-4",5:"sm:grid-cols-5",6:"sm:grid-cols-6",7:"sm:grid-cols-7",8:"sm:grid-cols-8",9:"sm:grid-cols-9",10:"sm:grid-cols-10",11:"sm:grid-cols-11",12:"sm:grid-cols-12"},a={0:"md:grid-cols-none",1:"md:grid-cols-1",2:"md:grid-cols-2",3:"md:grid-cols-3",4:"md:grid-cols-4",5:"md:grid-cols-5",6:"md:grid-cols-6",7:"md:grid-cols-7",8:"md:grid-cols-8",9:"md:grid-cols-9",10:"md:grid-cols-10",11:"md:grid-cols-11",12:"md:grid-cols-12"},s={0:"lg:grid-cols-none",1:"lg:grid-cols-1",2:"lg:grid-cols-2",3:"lg:grid-cols-3",4:"lg:grid-cols-4",5:"lg:grid-cols-5",6:"lg:grid-cols-6",7:"lg:grid-cols-7",8:"lg:grid-cols-8",9:"lg:grid-cols-9",10:"lg:grid-cols-10",11:"lg:grid-cols-11",12:"lg:grid-cols-12"};e.s(["colSpan",0,{1:"col-span-1",2:"col-span-2",3:"col-span-3",4:"col-span-4",5:"col-span-5",6:"col-span-6",7:"col-span-7",8:"col-span-8",9:"col-span-9",10:"col-span-10",11:"col-span-11",12:"col-span-12",13:"col-span-13"},"colSpanLg",0,{1:"lg:col-span-1",2:"lg:col-span-2",3:"lg:col-span-3",4:"lg:col-span-4",5:"lg:col-span-5",6:"lg:col-span-6",7:"lg:col-span-7",8:"lg:col-span-8",9:"lg:col-span-9",10:"lg:col-span-10",11:"lg:col-span-11",12:"lg:col-span-12",13:"lg:col-span-13"},"colSpanMd",0,{1:"md:col-span-1",2:"md:col-span-2",3:"md:col-span-3",4:"md:col-span-4",5:"md:col-span-5",6:"md:col-span-6",7:"md:col-span-7",8:"md:col-span-8",9:"md:col-span-9",10:"md:col-span-10",11:"md:col-span-11",12:"md:col-span-12",13:"md:col-span-13"},"colSpanSm",0,{1:"sm:col-span-1",2:"sm:col-span-2",3:"sm:col-span-3",4:"sm:col-span-4",5:"sm:col-span-5",6:"sm:col-span-6",7:"sm:col-span-7",8:"sm:col-span-8",9:"sm:col-span-9",10:"sm:col-span-10",11:"sm:col-span-11",12:"sm:col-span-12",13:"sm:col-span-13"},"gridCols",0,o,"gridColsLg",0,s,"gridColsMd",0,a,"gridColsSm",0,i],46757);let c=(0,n.makeClassName)("Grid"),d=(e,t)=>e&&Object.keys(t).includes(String(e))?t[e]:"",u=l.default.forwardRef((e,n)=>{let{numItems:u=1,numItemsSm:g,numItemsMd:m,numItemsLg:p,children:f,className:b}=e,h=(0,t.__rest)(e,["numItems","numItemsSm","numItemsMd","numItemsLg","children","className"]),y=d(u,o),$=d(g,i),v=d(m,a),x=d(p,s),S=(0,r.tremorTwMerge)(y,$,v,x);return l.default.createElement("div",Object.assign({ref:n,className:(0,r.tremorTwMerge)(c("root"),"grid",S,b)},h),f)});u.displayName="Grid",e.s(["Grid",0,u],350967)},530212,e=>{"use strict";var t=e.i(271645);let r=t.forwardRef(function(e,r){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:r},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M10 19l-7-7m0 0l7-7m-7 7h18"}))});e.s(["ArrowLeftIcon",0,r],530212)},309426,e=>{"use strict";var t=e.i(290571),r=e.i(444755),n=e.i(673706),l=e.i(271645),o=e.i(46757);let i=(0,n.makeClassName)("Col"),a=l.default.forwardRef((e,n)=>{let a,s,c,d,{numColSpan:u=1,numColSpanSm:g,numColSpanMd:m,numColSpanLg:p,children:f,className:b}=e,h=(0,t.__rest)(e,["numColSpan","numColSpanSm","numColSpanMd","numColSpanLg","children","className"]),y=(e,t)=>e&&Object.keys(t).includes(String(e))?t[e]:"";return l.default.createElement("div",Object.assign({ref:n,className:(0,r.tremorTwMerge)(i("root"),(a=y(u,o.colSpan),s=y(g,o.colSpanSm),c=y(m,o.colSpanMd),d=y(p,o.colSpanLg),(0,r.tremorTwMerge)(a,s,c,d)),b)},h),f)});a.displayName="Col",e.s(["Col",0,a],309426)},597440,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let n={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z"}}]},name:"delete",theme:"outlined"};var l=e.i(9583),o=r.forwardRef(function(e,o){return r.createElement(l.default,(0,t.default)({},e,{ref:o,icon:n}))});e.s(["default",0,o],597440)},955135,e=>{"use strict";var t=e.i(597440);e.s(["DeleteOutlined",()=>t.default])},695411,e=>{"use strict";var t=e.i(602869);let r=async e=>{try{let r=await (0,t.modelHubCall)(e);if(console.log("model_info:",r),r?.data.length>0){let e=r.data.map(e=>({model_group:e.model_group,mode:e?.mode}));return e.sort((e,t)=>e.model_group.localeCompare(t.model_group)),e}return[]}catch(e){throw console.error("Error fetching model info:",e),e}};e.s(["fetchAvailableModels",0,r])},482725,e=>{"use strict";var t=e.i(244451);e.s(["Spin",()=>t.default])},184163,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let n={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M505.7 661a8 8 0 0012.6 0l112-141.7c4.1-5.2.4-12.9-6.3-12.9h-74.1V168c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v338.3H400c-6.7 0-10.4 7.7-6.3 12.9l112 141.8zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"}}]},name:"download",theme:"outlined"};var l=e.i(9583),o=r.forwardRef(function(e,o){return r.createElement(l.default,(0,t.default)({},e,{ref:o,icon:n}))});e.s(["default",0,o],184163)},309821,e=>{"use strict";e.i(247167);var t=e.i(271645),r=e.i(135551),n=e.i(201072),l=e.i(121229),o=e.i(726289),i=e.i(864517),a=e.i(343794),s=e.i(529681),c=e.i(242064),d=e.i(931067),u=e.i(209428),g=e.i(703923),m={percent:0,prefixCls:"rc-progress",strokeColor:"#2db7f5",strokeLinecap:"round",strokeWidth:1,trailColor:"#D9D9D9",trailWidth:1,gapPosition:"bottom"},p=function(){var e=(0,t.useRef)([]),r=(0,t.useRef)(null);return(0,t.useEffect)(function(){var t=Date.now(),n=!1;e.current.forEach(function(e){if(e){n=!0;var l=e.style;l.transitionDuration=".3s, .3s, .3s, .06s",r.current&&t-r.current<100&&(l.transitionDuration="0s, 0s")}}),n&&(r.current=Date.now())}),e.current},f=e.i(410160),b=e.i(392221),h=e.i(654310),y=0,$=(0,h.default)();let v=function(e){var r=t.useState(),n=(0,b.default)(r,2),l=n[0],o=n[1];return t.useEffect(function(){var e;o("rc_progress_".concat(($?(e=y,y+=1):e="TEST_OR_SSR",e)))},[]),e||l};var x=function(e){var r=e.bg,n=e.children;return t.createElement("div",{style:{width:"100%",height:"100%",background:r}},n)};function S(e,t){return Object.keys(e).map(function(r){var n=parseFloat(r),l="".concat(Math.floor(n*t),"%");return"".concat(e[r]," ").concat(l)})}var O=t.forwardRef(function(e,r){var n=e.prefixCls,l=e.color,o=e.gradientId,i=e.radius,a=e.style,s=e.ptg,c=e.strokeLinecap,d=e.strokeWidth,u=e.size,g=e.gapDegree,m=l&&"object"===(0,f.default)(l),p=u/2,b=t.createElement("circle",{className:"".concat(n,"-circle-path"),r:i,cx:p,cy:p,stroke:m?"#FFF":void 0,strokeLinecap:c,strokeWidth:d,opacity:+(0!==s),style:a,ref:r});if(!m)return b;var h="".concat(o,"-conic"),y=S(l,(360-g)/360),$=S(l,1),v="conic-gradient(from ".concat(g?"".concat(180+g/2,"deg"):"0deg",", ").concat(y.join(", "),")"),O="linear-gradient(to ".concat(g?"bottom":"top",", ").concat($.join(", "),")");return t.createElement(t.Fragment,null,t.createElement("mask",{id:h},b),t.createElement("foreignObject",{x:0,y:0,width:u,height:u,mask:"url(#".concat(h,")")},t.createElement(x,{bg:O},t.createElement(x,{bg:v}))))}),j=function(e,t,r,n,l,o,i,a,s,c){var d=arguments.length>10&&void 0!==arguments[10]?arguments[10]:0,u=(100-n)/100*t;return"round"===s&&100!==n&&(u+=c/2)>=t&&(u=t-.01),{stroke:"string"==typeof a?a:void 0,strokeDasharray:"".concat(t,"px ").concat(e),strokeDashoffset:u+d,transform:"rotate(".concat(l+r/100*360*((360-o)/360)+(0===o?0:({bottom:0,top:180,left:90,right:-90})[i]),"deg)"),transformOrigin:"".concat(50,"px ").concat(50,"px"),transition:"stroke-dashoffset .3s ease 0s, stroke-dasharray .3s ease 0s, stroke .3s, stroke-width .06s ease .3s, opacity .3s ease 0s",fillOpacity:0}},C=["id","prefixCls","steps","strokeWidth","trailWidth","gapDegree","gapPosition","trailColor","strokeLinecap","style","className","strokeColor","percent"];function k(e){var t=null!=e?e:[];return Array.isArray(t)?t:[t]}let w=function(e){var r,n,l,o,i=(0,u.default)((0,u.default)({},m),e),s=i.id,c=i.prefixCls,b=i.steps,h=i.strokeWidth,y=i.trailWidth,$=i.gapDegree,x=void 0===$?0:$,S=i.gapPosition,w=i.trailColor,E=i.strokeLinecap,N=i.style,z=i.className,T=i.strokeColor,M=i.percent,P=(0,g.default)(i,C),B=v(s),I="".concat(B,"-gradient"),L=50-h/2,R=2*Math.PI*L,W=x>0?90+x/2:-90,A=(360-x)/360*R,H="object"===(0,f.default)(b)?b:{count:b,gap:2},D=H.count,G=H.gap,X=k(M),F=k(T),_=F.find(function(e){return e&&"object"===(0,f.default)(e)}),q=_&&"object"===(0,f.default)(_)?"butt":E,K=j(R,A,0,100,W,x,S,w,q,h),V=p();return t.createElement("svg",(0,d.default)({className:(0,a.default)("".concat(c,"-circle"),z),viewBox:"0 0 ".concat(100," ").concat(100),style:N,id:s,role:"presentation"},P),!D&&t.createElement("circle",{className:"".concat(c,"-circle-trail"),r:L,cx:50,cy:50,stroke:w,strokeLinecap:q,strokeWidth:y||h,style:K}),D?(r=Math.round(D*(X[0]/100)),n=100/D,l=0,Array(D).fill(null).map(function(e,o){var i=o<=r-1?F[0]:w,a=i&&"object"===(0,f.default)(i)?"url(#".concat(I,")"):void 0,s=j(R,A,l,n,W,x,S,i,"butt",h,G);return l+=(A-s.strokeDashoffset+G)*100/A,t.createElement("circle",{key:o,className:"".concat(c,"-circle-path"),r:L,cx:50,cy:50,stroke:a,strokeWidth:h,opacity:1,style:s,ref:function(e){V[o]=e}})})):(o=0,X.map(function(e,r){var n=F[r]||F[F.length-1],l=j(R,A,o,e,W,x,S,n,q,h);return o+=e,t.createElement(O,{key:r,color:n,ptg:e,radius:L,prefixCls:c,gradientId:I,style:l,strokeLinecap:q,strokeWidth:h,gapDegree:x,ref:function(e){V[r]=e},size:100})}).reverse()))};var E=e.i(491816);e.i(765846);var N=e.i(896091);function z(e){return!e||e<0?0:e>100?100:e}function T({success:e,successPercent:t}){let r=t;return e&&"progress"in e&&(r=e.progress),e&&"percent"in e&&(r=e.percent),r}let M=(e,t,r)=>{var n,l,o,i;let a=-1,s=-1;if("step"===t){let t=r.steps,n=r.strokeWidth;"string"==typeof e||void 0===e?(a="small"===e?2:14,s=null!=n?n:8):"number"==typeof e?[a,s]=[e,e]:[a=14,s=8]=Array.isArray(e)?e:[e.width,e.height],a*=t}else if("line"===t){let t=null==r?void 0:r.strokeWidth;"string"==typeof e||void 0===e?s=t||("small"===e?6:8):"number"==typeof e?[a,s]=[e,e]:[a=-1,s=8]=Array.isArray(e)?e:[e.width,e.height]}else("circle"===t||"dashboard"===t)&&("string"==typeof e||void 0===e?[a,s]="small"===e?[60,60]:[120,120]:"number"==typeof e?[a,s]=[e,e]:Array.isArray(e)&&(a=null!=(l=null!=(n=e[0])?n:e[1])?l:120,s=null!=(i=null!=(o=e[0])?o:e[1])?i:120));return[a,s]},P=e=>{let{prefixCls:r,trailColor:n=null,strokeLinecap:l="round",gapPosition:o,gapDegree:i,width:s=120,type:c,children:d,success:u,size:g=s,steps:m}=e,[p,f]=M(g,"circle"),{strokeWidth:b}=e;void 0===b&&(b=Math.max(3/p*100,6));let h=t.useMemo(()=>i||0===i?i:"dashboard"===c?75:void 0,[i,c]),y=(({percent:e,success:t,successPercent:r})=>{let n=z(T({success:t,successPercent:r}));return[n,z(z(e)-n)]})(e),$="[object Object]"===Object.prototype.toString.call(e.strokeColor),v=(({success:e={},strokeColor:t})=>{let{strokeColor:r}=e;return[r||N.presetPrimaryColors.green,t||null]})({success:u,strokeColor:e.strokeColor}),x=(0,a.default)(`${r}-inner`,{[`${r}-circle-gradient`]:$}),S=t.createElement(w,{steps:m,percent:m?y[1]:y,strokeWidth:b,trailWidth:b,strokeColor:m?v[1]:v,strokeLinecap:l,trailColor:n,prefixCls:r,gapDegree:h,gapPosition:o||"dashboard"===c&&"bottom"||void 0}),O=p<=20,j=t.createElement("div",{className:x,style:{width:p,height:f,fontSize:.15*p+6}},S,!O&&d);return O?t.createElement(E.default,{title:d},j):j};e.i(296059);var B=e.i(694758),I=e.i(915654),L=e.i(183293),R=e.i(246422),W=e.i(838378);let A="--progress-line-stroke-color",H="--progress-percent",D=e=>{let t=e?"100%":"-100%";return new B.Keyframes(`antProgress${e?"RTL":"LTR"}Active`,{"0%":{transform:`translateX(${t}) scaleX(0)`,opacity:.1},"20%":{transform:`translateX(${t}) scaleX(0)`,opacity:.5},to:{transform:"translateX(0) scaleX(1)",opacity:0}})},G=(0,R.genStyleHooks)("Progress",e=>{let t=e.calc(e.marginXXS).div(2).equal(),r=(0,W.mergeToken)(e,{progressStepMarginInlineEnd:t,progressStepMinWidth:t,progressActiveMotionDuration:"2.4s"});return[(e=>{let{componentCls:t,iconCls:r}=e;return{[t]:Object.assign(Object.assign({},(0,L.resetComponent)(e)),{display:"inline-block","&-rtl":{direction:"rtl"},"&-line":{position:"relative",width:"100%",fontSize:e.fontSize},[`${t}-outer`]:{display:"inline-flex",alignItems:"center",width:"100%"},[`${t}-inner`]:{position:"relative",display:"inline-block",width:"100%",flex:1,overflow:"hidden",verticalAlign:"middle",backgroundColor:e.remainingColor,borderRadius:e.lineBorderRadius},[`${t}-inner:not(${t}-circle-gradient)`]:{[`${t}-circle-path`]:{stroke:e.defaultColor}},[`${t}-success-bg, ${t}-bg`]:{position:"relative",background:e.defaultColor,borderRadius:e.lineBorderRadius,transition:`all ${e.motionDurationSlow} ${e.motionEaseInOutCirc}`},[`${t}-layout-bottom`]:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",[`${t}-text`]:{width:"max-content",marginInlineStart:0,marginTop:e.marginXXS}},[`${t}-bg`]:{overflow:"hidden","&::after":{content:'""',background:{_multi_value_:!0,value:["inherit",`var(${A})`]},height:"100%",width:`calc(1 / var(${H}) * 100%)`,display:"block"},[`&${t}-bg-inner`]:{minWidth:"max-content","&::after":{content:"none"},[`${t}-text-inner`]:{color:e.colorWhite,[`&${t}-text-bright`]:{color:"rgba(0, 0, 0, 0.45)"}}}},[`${t}-success-bg`]:{position:"absolute",insetBlockStart:0,insetInlineStart:0,backgroundColor:e.colorSuccess},[`${t}-text`]:{display:"inline-block",marginInlineStart:e.marginXS,color:e.colorText,lineHeight:1,width:"2em",whiteSpace:"nowrap",textAlign:"start",verticalAlign:"middle",wordBreak:"normal",[r]:{fontSize:e.fontSize},[`&${t}-text-outer`]:{width:"max-content"},[`&${t}-text-outer${t}-text-start`]:{width:"max-content",marginInlineStart:0,marginInlineEnd:e.marginXS}},[`${t}-text-inner`]:{display:"flex",justifyContent:"center",alignItems:"center",width:"100%",height:"100%",marginInlineStart:0,padding:`0 ${(0,I.unit)(e.paddingXXS)}`,[`&${t}-text-start`]:{justifyContent:"start"},[`&${t}-text-end`]:{justifyContent:"end"}},[`&${t}-status-active`]:{[`${t}-bg::before`]:{position:"absolute",inset:0,backgroundColor:e.colorBgContainer,borderRadius:e.lineBorderRadius,opacity:0,animationName:D(),animationDuration:e.progressActiveMotionDuration,animationTimingFunction:e.motionEaseOutQuint,animationIterationCount:"infinite",content:'""'}},[`&${t}-rtl${t}-status-active`]:{[`${t}-bg::before`]:{animationName:D(!0)}},[`&${t}-status-exception`]:{[`${t}-bg`]:{backgroundColor:e.colorError},[`${t}-text`]:{color:e.colorError}},[`&${t}-status-exception ${t}-inner:not(${t}-circle-gradient)`]:{[`${t}-circle-path`]:{stroke:e.colorError}},[`&${t}-status-success`]:{[`${t}-bg`]:{backgroundColor:e.colorSuccess},[`${t}-text`]:{color:e.colorSuccess}},[`&${t}-status-success ${t}-inner:not(${t}-circle-gradient)`]:{[`${t}-circle-path`]:{stroke:e.colorSuccess}}})}})(r),(e=>{let{componentCls:t,iconCls:r}=e;return{[t]:{[`${t}-circle-trail`]:{stroke:e.remainingColor},[`&${t}-circle ${t}-inner`]:{position:"relative",lineHeight:1,backgroundColor:"transparent"},[`&${t}-circle ${t}-text`]:{position:"absolute",insetBlockStart:"50%",insetInlineStart:0,width:"100%",margin:0,padding:0,color:e.circleTextColor,fontSize:e.circleTextFontSize,lineHeight:1,whiteSpace:"normal",textAlign:"center",transform:"translateY(-50%)",[r]:{fontSize:e.circleIconFontSize}},[`${t}-circle&-status-exception`]:{[`${t}-text`]:{color:e.colorError}},[`${t}-circle&-status-success`]:{[`${t}-text`]:{color:e.colorSuccess}}},[`${t}-inline-circle`]:{lineHeight:1,[`${t}-inner`]:{verticalAlign:"bottom"}}}})(r),(e=>{let{componentCls:t}=e;return{[t]:{[`${t}-steps`]:{display:"inline-block","&-outer":{display:"flex",flexDirection:"row",alignItems:"center"},"&-item":{flexShrink:0,minWidth:e.progressStepMinWidth,marginInlineEnd:e.progressStepMarginInlineEnd,backgroundColor:e.remainingColor,transition:`all ${e.motionDurationSlow}`,"&-active":{backgroundColor:e.defaultColor}}}}}})(r),(e=>{let{componentCls:t,iconCls:r}=e;return{[t]:{[`${t}-small&-line, ${t}-small&-line ${t}-text ${r}`]:{fontSize:e.fontSizeSM}}}})(r)]},e=>({circleTextColor:e.colorText,defaultColor:e.colorInfo,remainingColor:e.colorFillSecondary,lineBorderRadius:100,circleTextFontSize:"1em",circleIconFontSize:`${e.fontSize/e.fontSizeSM}em`}));var X=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&0>t.indexOf(n)&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var l=0,n=Object.getOwnPropertySymbols(e);lt.indexOf(n[l])&&Object.prototype.propertyIsEnumerable.call(e,n[l])&&(r[n[l]]=e[n[l]]);return r};let F=e=>{let{prefixCls:r,direction:n,percent:l,size:o,strokeWidth:i,strokeColor:s,strokeLinecap:c="round",children:d,trailColor:u=null,percentPosition:g,success:m}=e,{align:p,type:f}=g,b=s&&"string"!=typeof s?((e,t)=>{let{from:r=N.presetPrimaryColors.blue,to:n=N.presetPrimaryColors.blue,direction:l="rtl"===t?"to left":"to right"}=e,o=X(e,["from","to","direction"]);if(0!==Object.keys(o).length){let e,t=(e=[],Object.keys(o).forEach(t=>{let r=Number.parseFloat(t.replace(/%/g,""));Number.isNaN(r)||e.push({key:r,value:o[t]})}),(e=e.sort((e,t)=>e.key-t.key)).map(({key:e,value:t})=>`${t} ${e}%`).join(", ")),r=`linear-gradient(${l}, ${t})`;return{background:r,[A]:r}}let i=`linear-gradient(${l}, ${r}, ${n})`;return{background:i,[A]:i}})(s,n):{[A]:s,background:s},h="square"===c||"butt"===c?0:void 0,[y,$]=M(null!=o?o:[-1,i||("small"===o?6:8)],"line",{strokeWidth:i}),v=Object.assign(Object.assign({width:`${z(l)}%`,height:$,borderRadius:h},b),{[H]:z(l)/100}),x=T(e),S={width:`${z(x)}%`,height:$,borderRadius:h,backgroundColor:null==m?void 0:m.strokeColor},O=t.createElement("div",{className:`${r}-inner`,style:{backgroundColor:u||void 0,borderRadius:h}},t.createElement("div",{className:(0,a.default)(`${r}-bg`,`${r}-bg-${f}`),style:v},"inner"===f&&d),void 0!==x&&t.createElement("div",{className:`${r}-success-bg`,style:S})),j="outer"===f&&"start"===p,C="outer"===f&&"end"===p;return"outer"===f&&"center"===p?t.createElement("div",{className:`${r}-layout-bottom`},O,d):t.createElement("div",{className:`${r}-outer`,style:{width:y<0?"100%":y}},j&&d,O,C&&d)},_=e=>{let{size:r,steps:n,rounding:l=Math.round,percent:o=0,strokeWidth:i=8,strokeColor:s,trailColor:c=null,prefixCls:d,children:u}=e,g=l(o/100*n),[m,p]=M(null!=r?r:["small"===r?2:14,i],"step",{steps:n,strokeWidth:i}),f=m/n,b=Array.from({length:n});for(let e=0;et.indexOf(n)&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var l=0,n=Object.getOwnPropertySymbols(e);lt.indexOf(n[l])&&Object.prototype.propertyIsEnumerable.call(e,n[l])&&(r[n[l]]=e[n[l]]);return r};let K=["normal","exception","active","success"],V=t.forwardRef((e,d)=>{let u,{prefixCls:g,className:m,rootClassName:p,steps:f,strokeColor:b,percent:h=0,size:y="default",showInfo:$=!0,type:v="line",status:x,format:S,style:O,percentPosition:j={}}=e,C=q(e,["prefixCls","className","rootClassName","steps","strokeColor","percent","size","showInfo","type","status","format","style","percentPosition"]),{align:k="end",type:w="outer"}=j,E=Array.isArray(b)?b[0]:b,N="string"==typeof b||Array.isArray(b)?b:void 0,B=t.useMemo(()=>{if(E){let e="string"==typeof E?E:Object.values(E)[0];return new r.FastColor(e).isLight()}return!1},[b]),I=t.useMemo(()=>{var t,r;let n=T(e);return Number.parseInt(void 0!==n?null==(t=null!=n?n:0)?void 0:t.toString():null==(r=null!=h?h:0)?void 0:r.toString(),10)},[h,e.success,e.successPercent]),L=t.useMemo(()=>!K.includes(x)&&I>=100?"success":x||"normal",[x,I]),{getPrefixCls:R,direction:W,progress:A}=t.useContext(c.ConfigContext),H=R("progress",g),[D,X,V]=G(H),Q="line"===v,U=Q&&!f,Y=t.useMemo(()=>{let r;if(!$)return null;let s=T(e),c=S||(e=>`${e}%`),d=Q&&B&&"inner"===w;return"inner"===w||S||"exception"!==L&&"success"!==L?r=c(z(h),z(s)):"exception"===L?r=Q?t.createElement(o.default,null):t.createElement(i.default,null):"success"===L&&(r=Q?t.createElement(n.default,null):t.createElement(l.default,null)),t.createElement("span",{className:(0,a.default)(`${H}-text`,{[`${H}-text-bright`]:d,[`${H}-text-${k}`]:U,[`${H}-text-${w}`]:U}),title:"string"==typeof r?r:void 0},r)},[$,h,I,L,v,H,S]);"line"===v?u=f?t.createElement(_,Object.assign({},e,{strokeColor:N,prefixCls:H,steps:"object"==typeof f?f.count:f}),Y):t.createElement(F,Object.assign({},e,{strokeColor:E,prefixCls:H,direction:W,percentPosition:{align:k,type:w}}),Y):("circle"===v||"dashboard"===v)&&(u=t.createElement(P,Object.assign({},e,{strokeColor:E,prefixCls:H,progressStatus:L}),Y));let J=(0,a.default)(H,`${H}-status-${L}`,{[`${H}-${"dashboard"===v&&"circle"||v}`]:"line"!==v,[`${H}-inline-circle`]:"circle"===v&&M(y,"circle")[0]<=20,[`${H}-line`]:U,[`${H}-line-align-${k}`]:U,[`${H}-line-position-${w}`]:U,[`${H}-steps`]:f,[`${H}-show-info`]:$,[`${H}-${y}`]:"string"==typeof y,[`${H}-rtl`]:"rtl"===W},null==A?void 0:A.className,m,p,X,V);return D(t.createElement("div",Object.assign({ref:d,style:Object.assign(Object.assign({},null==A?void 0:A.style),O),className:J,role:"progressbar","aria-valuenow":I,"aria-valuemin":0,"aria-valuemax":100},(0,s.default)(C,["trailColor","strokeWidth","width","gapDegree","gapPosition","strokeLinecap","success","successPercent"])),u))});e.s(["default",0,V],309821)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/114pbx0696lkh.js b/litellm/proxy/_experimental/out/_next/static/chunks/114pbx0696lkh.js new file mode 100644 index 00000000000..50c32df21ba --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/114pbx0696lkh.js @@ -0,0 +1 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,109034,e=>{"use strict";var t=e.i(266027),s=e.i(243652),a=e.i(602869),l=e.i(135214);let r=(0,s.createQueryKeys)("tags");e.s(["useTags",0,()=>{let{accessToken:e,userId:s,userRole:i}=(0,l.default)();return(0,t.useQuery)({queryKey:r.list({}),queryFn:async()=>await (0,a.tagListCall)(e),enabled:!!(e&&s&&i)})}])},9314,e=>{"use strict";var t=e.i(843476),s=e.i(199133),a=e.i(981339),l=e.i(645526),r=e.i(599724),i=e.i(263147);e.s(["default",0,({value:e,onChange:n,placeholder:o="Select access groups",disabled:d=!1,style:c,className:u,showLabel:m=!1,labelText:p="Access Group",allowClear:g=!0})=>{let{data:h,isLoading:x,isError:y}=(0,i.useAccessGroups)();if(x)return(0,t.jsxs)("div",{children:[m&&(0,t.jsxs)(r.Text,{className:"font-medium block mb-2 text-gray-700 flex items-center",children:[(0,t.jsx)(l.TeamOutlined,{className:"mr-2"})," ",p]}),(0,t.jsx)(a.Skeleton.Input,{active:!0,block:!0,style:{height:32,...c}})]});let _=(h??[]).map(e=>({label:(0,t.jsxs)("span",{children:[(0,t.jsx)("span",{className:"font-medium",children:e.access_group_name})," ",(0,t.jsxs)("span",{className:"text-gray-400 text-xs",children:["(",e.access_group_id,")"]})]}),value:e.access_group_id,selectedLabel:e.access_group_name,searchText:`${e.access_group_name} ${e.access_group_id}`}));return(0,t.jsxs)("div",{children:[m&&(0,t.jsxs)(r.Text,{className:"font-medium block mb-2 text-gray-700 flex items-center",children:[(0,t.jsx)(l.TeamOutlined,{className:"mr-2"})," ",p]}),(0,t.jsx)(s.Select,{mode:"multiple",value:e,placeholder:o,onChange:n,disabled:d,allowClear:g,showSearch:!0,style:{width:"100%",...c},className:`rounded-md ${u??""}`,notFoundContent:y?(0,t.jsx)("span",{className:"text-red-500",children:"Failed to load access groups"}):"No access groups found",filterOption:(e,t)=>(_.find(e=>e.value===t?.value)?.searchText??"").toLowerCase().includes(e.toLowerCase()),optionLabelProp:"selectedLabel",options:_.map(e=>({label:e.label,value:e.value,selectedLabel:e.selectedLabel}))})]})}])},552130,e=>{"use strict";var t=e.i(843476),s=e.i(271645),a=e.i(199133),l=e.i(602869);e.s(["default",0,({onChange:e,value:r,className:i,accessToken:n,placeholder:o="Select agents",disabled:d=!1})=>{let[c,u]=(0,s.useState)([]),[m,p]=(0,s.useState)([]),[g,h]=(0,s.useState)(!1);(0,s.useEffect)(()=>{(async()=>{if(n){h(!0);try{let e=await (0,l.getAgentsList)(n),t=e?.agents||[];u(t);let s=new Set;t.forEach(e=>{let t=e.agent_access_groups;t&&Array.isArray(t)&&t.forEach(e=>s.add(e))}),p(Array.from(s))}catch(e){console.error("Error fetching agents:",e)}finally{h(!1)}}})()},[n]);let x=[...m.map(e=>({label:e,value:`group:${e}`,isAccessGroup:!0,searchText:`${e} Access Group`})),...c.map(e=>({label:`${e.agent_name||e.agent_id}`,value:e.agent_id,isAccessGroup:!1,searchText:`${e.agent_name||e.agent_id} ${e.agent_id} Agent`}))],y=[...r?.agents||[],...(r?.accessGroups||[]).map(e=>`group:${e}`)];return(0,t.jsx)("div",{children:(0,t.jsx)(a.Select,{mode:"multiple",placeholder:o,onChange:t=>{e({agents:t.filter(e=>!e.startsWith("group:")),accessGroups:t.filter(e=>e.startsWith("group:")).map(e=>e.replace("group:",""))})},value:y,loading:g,className:i,allowClear:!0,showSearch:!0,style:{width:"100%"},disabled:d,filterOption:(e,t)=>(x.find(e=>e.value===t?.value)?.searchText||"").toLowerCase().includes(e.toLowerCase()),children:x.map(e=>(0,t.jsx)(a.Select.Option,{value:e.value,label:e.label,children:(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[(0,t.jsx)("span",{style:{display:"inline-block",width:8,height:8,borderRadius:"50%",background:e.isAccessGroup?"#52c41a":"#722ed1",flexShrink:0}}),(0,t.jsx)("span",{style:{flex:1},children:e.label}),(0,t.jsx)("span",{style:{color:e.isAccessGroup?"#52c41a":"#722ed1",fontSize:"12px",fontWeight:500,opacity:.8},children:e.isAccessGroup?"Access Group":"Agent"})]})},e.value))})})}])},844565,e=>{"use strict";var t=e.i(843476),s=e.i(271645),a=e.i(199133),l=e.i(602869);e.s(["default",0,({onChange:e,value:r,className:i,accessToken:n,placeholder:o="Select pass through routes",disabled:d=!1,teamId:c})=>{let[u,m]=(0,s.useState)([]),[p,g]=(0,s.useState)(!1);return(0,s.useEffect)(()=>{(async()=>{if(n){g(!0);try{let e=await (0,l.getPassThroughEndpointsCall)(n,c);if(e.endpoints){let t=e.endpoints.flatMap(e=>{let t=e.path,s=e.methods;return s&&s.length>0?s.map(e=>({label:`${e} ${t}`,value:t})):[{label:t,value:t}]});m(t)}}catch(e){console.error("Error fetching pass through routes:",e)}finally{g(!1)}}})()},[n,c]),(0,t.jsx)(a.Select,{mode:"tags",placeholder:o,onChange:e,value:r,loading:p,className:i,allowClear:!0,options:u,optionFilterProp:"label",showSearch:!0,style:{width:"100%"},disabled:d})}])},810757,477386,e=>{"use strict";var t=e.i(271645);let s=t.forwardRef(function(e,s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z"}),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"}))});e.s(["CogIcon",0,s],810757);let a=t.forwardRef(function(e,s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728A9 9 0 015.636 5.636m12.728 12.728L5.636 5.636"}))});e.s(["BanIcon",0,a],477386)},557662,e=>{"use strict";let t="/ui/assets/logos/",s=[{id:"arize",displayName:"Arize",logo:`${t}arize.png`,supports_key_team_logging:!0,dynamic_params:{arize_api_key:"password",arize_space_id:"password"},description:"Arize Logging Integration"},{id:"braintrust",displayName:"Braintrust",logo:`${t}braintrust.png`,supports_key_team_logging:!1,dynamic_params:{braintrust_api_key:"password",braintrust_project_name:"text"},description:"Braintrust Logging Integration"},{id:"custom_callback_api",displayName:"Custom Callback API",logo:`${t}custom.svg`,supports_key_team_logging:!0,dynamic_params:{custom_callback_api_url:"text",custom_callback_api_headers:"text"},description:"Custom Callback API Logging Integration"},{id:"galileo",displayName:"Galileo",logo:`${t}galileo.ico`,supports_key_team_logging:!1,dynamic_params:{GALILEO_API_KEY:"password",GALILEO_PROJECT_ID:"text",GALILEO_LOG_STREAM_ID:"text",GALILEO_BASE_URL:"text",GALILEO_USERNAME:"text",GALILEO_PASSWORD:"password"},description:"Galileo AI Observability Integration"},{id:"datadog",displayName:"Datadog",logo:`${t}datadog.png`,supports_key_team_logging:!1,dynamic_params:{dd_api_key:"password",dd_site:"text"},description:"Datadog Logging Integration"},{id:"lago",displayName:"Lago",logo:`${t}lago.svg`,supports_key_team_logging:!1,dynamic_params:{lago_api_url:"text",lago_api_key:"password"},description:"Lago Billing Logging Integration"},{id:"langfuse",displayName:"Langfuse",logo:`${t}langfuse.png`,supports_key_team_logging:!0,dynamic_params:{langfuse_public_key:"text",langfuse_secret_key:"password",langfuse_host:"text"},description:"Langfuse v2 Logging Integration"},{id:"langfuse_otel",displayName:"Langfuse OTEL",logo:`${t}langfuse.png`,supports_key_team_logging:!0,dynamic_params:{langfuse_public_key:"text",langfuse_secret_key:"password",langfuse_host:"text"},description:"Langfuse v3 OTEL Logging Integration"},{id:"langsmith",displayName:"LangSmith",logo:`${t}langsmith.png`,supports_key_team_logging:!0,dynamic_params:{langsmith_api_key:"password",langsmith_project:"text",langsmith_base_url:"text",langsmith_sampling_rate:"number"},description:"Langsmith Logging Integration"},{id:"openmeter",displayName:"OpenMeter",logo:`${t}openmeter.png`,supports_key_team_logging:!1,dynamic_params:{openmeter_api_key:"password",openmeter_base_url:"text"},description:"OpenMeter Logging Integration"},{id:"otel",displayName:"Open Telemetry",logo:`${t}otel.png`,supports_key_team_logging:!1,dynamic_params:{otel_endpoint:"text",otel_headers:"text"},description:"OpenTelemetry Logging Integration"},{id:"s3",displayName:"S3",logo:`${t}aws.svg`,supports_key_team_logging:!1,dynamic_params:{s3_bucket_name:"text",aws_access_key_id:"password",aws_secret_access_key:"password",aws_region:"text"},description:"S3 Bucket (AWS) Logging Integration"},{id:"SQS",displayName:"SQS",logo:`${t}aws.svg`,supports_key_team_logging:!1,dynamic_params:{sqs_queue_url:"text",aws_access_key_id:"password",aws_secret_access_key:"password",aws_region:"text"},description:"SQS Queue (AWS) Logging Integration"}],a=s.reduce((e,t)=>(e[t.displayName]=t,e),{}),l=s.reduce((e,t)=>(e[t.displayName]=t.id,e),{}),r=s.reduce((e,t)=>(e[t.id]=t.displayName,e),{});e.s(["callbackInfo",0,a,"callback_map",0,l,"mapDisplayToInternalNames",0,e=>e.map(e=>l[e]||e),"mapInternalToDisplayNames",0,e=>e.map(e=>r[e]||e),"reverse_callback_map",0,r])},390605,e=>{"use strict";var t=e.i(843476),s=e.i(271645),a=e.i(602869),l=e.i(599724),r=e.i(482725),i=e.i(91739),n=e.i(500727),o=e.i(531516),d=e.i(696609);e.s(["default",0,({accessToken:e,selectedServers:c,toolPermissions:u,onChange:m,disabled:p=!1})=>{let{data:g=[]}=(0,n.useMCPServers)(),[h,x]=(0,s.useState)({}),[y,_]=(0,s.useState)({}),[f,b]=(0,s.useState)({}),[j,v]=(0,s.useState)({}),w=(0,s.useRef)(u);(0,s.useEffect)(()=>{w.current=u},[u]);let N=(0,s.useMemo)(()=>0===c.length?[]:g.filter(e=>c.includes(e.server_id)),[g,c]),k=async(e,t)=>{_(t=>({...t,[e]:!0})),b(t=>({...t,[e]:""}));try{let s=await (0,a.listMCPTools)(t,e);if(s.error)b(t=>({...t,[e]:s.message||"Failed to fetch tools"})),x(t=>({...t,[e]:[]}));else{let t=s.tools||[];x(s=>({...s,[e]:t}));let a=w.current;if(!a[e]&&t.length>0){let s=t.filter(e=>"delete"!==(0,d.classifyToolOp)(e.name,e.description||"")).map(e=>e.name);m({...a,[e]:s})}}}catch(t){console.error(`Error fetching tools for server ${e}:`,t),b(t=>({...t,[e]:"Failed to fetch tools"})),x(t=>({...t,[e]:[]}))}finally{_(t=>({...t,[e]:!1}))}};(0,s.useEffect)(()=>{N.forEach(t=>{h[t.server_id]||y[t.server_id]||k(t.server_id,e)})},[N,e]);let S=(e,t)=>{m({...u,[e]:t})};return 0===c.length?null:(0,t.jsx)("div",{className:"space-y-4",children:N.map(e=>{let s=e.server_name||e.alias||e.server_id,a=h[e.server_id]||[],n=u[e.server_id]||[],d=y[e.server_id],c=f[e.server_id],g=j[e.server_id]??"crud";return(0,t.jsxs)("div",{className:"border rounded-lg bg-gray-50",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between p-4 border-b bg-white rounded-t-lg",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)(l.Text,{className:"font-semibold text-gray-900",children:s}),e.description&&(0,t.jsx)(l.Text,{className:"text-sm text-gray-500",children:e.description})]}),(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[!p&&a.length>0&&(0,t.jsx)(i.Radio.Group,{value:g,onChange:t=>v(s=>({...s,[e.server_id]:t.target.value})),size:"small",optionType:"button",buttonStyle:"solid",options:[{label:"Risk Groups",value:"crud"},{label:"Flat List",value:"flat"}]}),!p&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("button",{type:"button",className:"text-sm text-blue-600 hover:text-blue-700 font-medium",onClick:()=>{var t;let s;return s=h[t=e.server_id]||[],void m({...u,[t]:s.map(e=>e.name)})},disabled:d,children:"Select All"}),(0,t.jsx)("button",{type:"button",className:"text-sm text-blue-600 hover:text-blue-700 font-medium",onClick:()=>{var t;return t=e.server_id,void m({...u,[t]:[]})},disabled:d,children:"Deselect All"})]})]})]}),(0,t.jsxs)("div",{className:"p-4",children:[d&&(0,t.jsxs)("div",{className:"flex items-center justify-center py-8",children:[(0,t.jsx)(r.Spin,{size:"large"}),(0,t.jsx)(l.Text,{className:"ml-3 text-gray-500",children:"Loading tools..."})]}),c&&!d&&(0,t.jsxs)("div",{className:"p-4 bg-red-50 border border-red-200 rounded-lg text-center",children:[(0,t.jsx)(l.Text,{className:"text-red-600 font-medium",children:"Unable to load tools"}),(0,t.jsx)(l.Text,{className:"text-sm text-red-500 mt-1",children:c})]}),!d&&!c&&a.length>0&&"crud"===g&&(0,t.jsx)(o.default,{tools:a,value:u[e.server_id]?n:void 0,onChange:t=>S(e.server_id,t),readOnly:p}),!d&&!c&&a.length>0&&"flat"===g&&(0,t.jsx)("div",{className:"space-y-2",children:a.map(s=>{let a=n.includes(s.name);return(0,t.jsxs)("div",{className:"flex items-start gap-2",children:[(0,t.jsx)("input",{type:"checkbox",checked:a,onChange:()=>{if(p)return;let t=a?n.filter(e=>e!==s.name):[...n,s.name];S(e.server_id,t)},disabled:p,className:"mt-0.5"}),(0,t.jsx)("div",{className:"flex-1 min-w-0",children:(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(l.Text,{className:"font-medium text-gray-900",children:s.name}),(0,t.jsxs)(l.Text,{className:"text-sm text-gray-500",children:["- ",s.description||"No description"]})]})})]},s.name)})}),!d&&!c&&0===a.length&&(0,t.jsx)("div",{className:"text-center py-6",children:(0,t.jsx)(l.Text,{className:"text-gray-500",children:"No tools available"})})]})]},e.server_id)})})}])},266484,e=>{"use strict";var t=e.i(843476),s=e.i(199133),a=e.i(592968),l=e.i(312361),r=e.i(827252),i=e.i(994388),n=e.i(304967),o=e.i(779241),d=e.i(988297),c=e.i(68155),u=e.i(810757),m=e.i(477386),p=e.i(557662),g=e.i(555987),h=e.i(435451);let{Option:x}=s.Select;e.s(["default",0,({value:e=[],onChange:y,disabledCallbacks:_=[],onDisabledCallbacksChange:f})=>{let b=Object.entries(p.callbackInfo).filter(([e,t])=>t.supports_key_team_logging).map(([e,t])=>e),j=Object.keys(p.callbackInfo),v=e=>{y?.(e)},w=(t,s,a)=>{let l=[...e];if("callback_name"===s){let e=p.callback_map[a]||a;l[t]={...l[t],[s]:e,callback_vars:{}}}else l[t]={...l[t],[s]:a};v(l)},N=(t,s,a)=>{let l=[...e];l[t]={...l[t],callback_vars:{...l[t].callback_vars,[s]:a}},v(l)};return(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,t.jsx)(m.BanIcon,{className:"w-5 h-5 text-red-500"}),(0,t.jsx)("span",{className:"text-base font-semibold text-gray-800",children:"Disabled Callbacks"}),(0,t.jsx)(a.Tooltip,{title:"Select callbacks to disable for this key. Disabled callbacks will not receive any logging data.",children:(0,t.jsx)(r.InfoCircleOutlined,{className:"text-gray-400 cursor-help"})})]}),(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)("label",{className:"text-sm font-medium text-gray-700",children:"Disabled Callbacks"}),(0,t.jsx)(s.Select,{mode:"multiple",placeholder:"Select callbacks to disable",value:_,onChange:e=>{let t=(0,p.mapDisplayToInternalNames)(e);f?.(t)},style:{width:"100%"},optionLabelProp:"label",children:j.map(e=>{let s=(0,g.resolveLogoSrc)(p.callbackInfo[e]?.logo),l=p.callbackInfo[e]?.description;return(0,t.jsx)(x,{value:e,label:e,children:(0,t.jsx)(a.Tooltip,{title:l,placement:"right",children:(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[s&&(0,t.jsx)("img",{src:s,alt:e,className:"w-4 h-4 object-contain",onError:t=>{let s=t.target,a=s.parentElement;if(a){let t=document.createElement("div");t.className="w-4 h-4 rounded-full bg-gray-200 flex items-center justify-center text-xs",t.textContent=e.charAt(0),a.replaceChild(t,s)}}}),(0,t.jsx)("span",{children:e})]})})},e)})}),(0,t.jsx)("div",{className:"text-xs text-gray-500",children:"Select callbacks that should be disabled for this key. These callbacks will not receive any logging data."})]})]}),(0,t.jsx)(l.Divider,{}),(0,t.jsxs)("div",{className:"flex justify-between items-center",children:[(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,t.jsx)(u.CogIcon,{className:"w-5 h-5 text-blue-500"}),(0,t.jsx)("span",{className:"text-base font-semibold text-gray-800",children:"Logging Integrations"}),(0,t.jsx)(a.Tooltip,{title:"Configure callback logging integrations for this team.",children:(0,t.jsx)(r.InfoCircleOutlined,{className:"text-gray-400 cursor-help"})})]}),(0,t.jsx)(i.Button,{variant:"secondary",onClick:()=>{v([...e,{callback_name:"",callback_type:"success",callback_vars:{}}])},icon:d.PlusIcon,size:"sm",className:"hover:border-blue-400 hover:text-blue-500",type:"button",children:"Add Integration"})]}),(0,t.jsx)("div",{className:"space-y-4",children:e.map((l,d)=>{let u=l.callback_name?Object.entries(p.callback_map).find(([e,t])=>t===l.callback_name)?.[0]:void 0,m=u?(0,g.resolveLogoSrc)(p.callbackInfo[u]?.logo):null;return(0,t.jsxs)(n.Card,{className:"border border-gray-200 shadow-sm hover:shadow-md transition-shadow duration-200",decoration:"top",decorationColor:"blue",children:[(0,t.jsxs)("div",{className:"flex justify-between items-start mb-4",children:[(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[m&&(0,t.jsx)("img",{src:m,alt:u,className:"w-5 h-5 object-contain"}),(0,t.jsxs)("span",{className:"text-sm font-medium",children:[u||"New Integration"," Configuration"]})]}),(0,t.jsx)(i.Button,{variant:"light",onClick:()=>{v(e.filter((e,t)=>t!==d))},icon:c.TrashIcon,size:"xs",color:"red",className:"hover:bg-red-50",type:"button",children:"Remove"})]}),(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)("label",{className:"text-sm font-medium text-gray-700",children:"Integration Type"}),(0,t.jsx)(s.Select,{value:u,placeholder:"Select integration",onChange:e=>w(d,"callback_name",e),className:"w-full",optionLabelProp:"label",children:b.map(e=>{let s=(0,g.resolveLogoSrc)(p.callbackInfo[e]?.logo),l=p.callbackInfo[e]?.description;return(0,t.jsx)(x,{value:e,label:e,children:(0,t.jsx)(a.Tooltip,{title:l,placement:"right",children:(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[s&&(0,t.jsx)("img",{src:s,alt:e,className:"w-4 h-4 object-contain",onError:t=>{let s=t.target,a=s.parentElement;if(a){let t=document.createElement("div");t.className="w-4 h-4 rounded-full bg-gray-200 flex items-center justify-center text-xs",t.textContent=e.charAt(0),a.replaceChild(t,s)}}}),(0,t.jsx)("span",{children:e})]})})},e)})})]}),(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)("label",{className:"text-sm font-medium text-gray-700",children:"Event Type"}),(0,t.jsxs)(s.Select,{value:l.callback_type,onChange:e=>w(d,"callback_type",e),className:"w-full",children:[(0,t.jsx)(x,{value:"success",children:(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,t.jsx)("div",{className:"w-2 h-2 bg-green-500 rounded-full"}),(0,t.jsx)("span",{children:"Success Only"})]})}),(0,t.jsx)(x,{value:"failure",children:(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,t.jsx)("div",{className:"w-2 h-2 bg-red-500 rounded-full"}),(0,t.jsx)("span",{children:"Failure Only"})]})}),(0,t.jsx)(x,{value:"success_and_failure",children:(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,t.jsx)("div",{className:"w-2 h-2 bg-blue-500 rounded-full"}),(0,t.jsx)("span",{children:"Success & Failure"})]})})]})]})]}),((e,s)=>{if(!e.callback_name)return null;let l=Object.entries(p.callback_map).find(([t,s])=>s===e.callback_name)?.[0];if(!l)return null;let i=p.callbackInfo[l]?.dynamic_params||{};return 0===Object.keys(i).length?null:(0,t.jsxs)("div",{className:"mt-6 pt-4 border-t border-gray-100",children:[(0,t.jsxs)("div",{className:"flex items-center space-x-2 mb-4",children:[(0,t.jsx)("div",{className:"w-3 h-3 bg-blue-100 rounded-full flex items-center justify-center",children:(0,t.jsx)("div",{className:"w-1.5 h-1.5 bg-blue-500 rounded-full"})}),(0,t.jsx)("span",{className:"text-sm font-medium text-gray-700",children:"Integration Parameters"})]}),(0,t.jsx)("div",{className:"grid grid-cols-1 gap-4",children:Object.entries(i).map(([l,i])=>(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsxs)("label",{className:"text-sm font-medium text-gray-700 capitalize flex items-center space-x-1",children:[(0,t.jsx)("span",{children:l.replace(/_/g," ")}),(0,t.jsx)(a.Tooltip,{title:`Environment variable reference recommended: os.environ/${l.toUpperCase()}`,children:(0,t.jsx)(r.InfoCircleOutlined,{className:"text-gray-400 cursor-help text-xs"})}),"password"===i&&(0,t.jsx)("span",{className:"inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-yellow-100 text-yellow-800",children:"Sensitive"}),"number"===i&&(0,t.jsx)("span",{className:"inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-yellow-100 text-yellow-800",children:"Number"})]}),"number"===i&&(0,t.jsx)("span",{className:"text-xs text-gray-500",children:"Value must be between 0 and 1"}),"number"===i?(0,t.jsx)(h.default,{step:.01,width:400,placeholder:`os.environ/${l.toUpperCase()}`,value:e.callback_vars[l]||"",onChange:e=>N(s,l,e.target.value)}):(0,t.jsx)(o.TextInput,{type:"password"===i?"password":"text",placeholder:`os.environ/${l.toUpperCase()}`,value:e.callback_vars[l]||"",onChange:e=>N(s,l,e.target.value)})]},l))})]})})(l,d)]})]},d)})}),0===e.length&&(0,t.jsxs)("div",{className:"text-center py-12 text-gray-500 border-2 border-dashed border-gray-200 rounded-lg bg-gray-50/50",children:[(0,t.jsx)(u.CogIcon,{className:"w-12 h-12 text-gray-300 mb-3 mx-auto"}),(0,t.jsx)("div",{className:"text-base font-medium mb-1",children:"No logging integrations configured"}),(0,t.jsx)("div",{className:"text-sm text-gray-400",children:'Click "Add Integration" to configure logging for this team'})]})]})}])},460285,e=>{"use strict";var t=e.i(843476),s=e.i(271645),a=e.i(404206),l=e.i(723731),r=e.i(653824),i=e.i(881073),n=e.i(197647),o=e.i(602869),d=e.i(158392),c=e.i(419470),u=e.i(695411);let m=(0,s.forwardRef)(({accessToken:e,value:m,onChange:p,modelData:g},h)=>{let[x,y]=(0,s.useState)({routerSettings:{},selectedStrategy:null,enableTagFiltering:!1}),[_,f]=(0,s.useState)([]),[b,j]=(0,s.useState)([]),[v,w]=(0,s.useState)([]),[N,k]=(0,s.useState)([]),[S,C]=(0,s.useState)({}),[T,I]=(0,s.useState)({}),A=(0,s.useRef)(!1),L=(0,s.useRef)(null);(0,s.useEffect)(()=>{let e=m?.router_settings?JSON.stringify({routing_strategy:m.router_settings.routing_strategy,fallbacks:m.router_settings.fallbacks,enable_tag_filtering:m.router_settings.enable_tag_filtering}):null;if(A.current&&e===L.current){A.current=!1;return}if(A.current&&e!==L.current&&(A.current=!1),e!==L.current)if(L.current=e,m?.router_settings){let e=m.router_settings,{fallbacks:t,...s}=e;y({routerSettings:s,selectedStrategy:e.routing_strategy||null,enableTagFiltering:e.enable_tag_filtering??!1});let a=e.fallbacks||[];f(a),j(a&&0!==a.length?a.map((e,t)=>{let[s,a]=Object.entries(e)[0];return{id:(t+1).toString(),primaryModel:s||null,fallbackModels:a||[]}}):[{id:"1",primaryModel:null,fallbackModels:[]}])}else y({routerSettings:{},selectedStrategy:null,enableTagFiltering:!1}),f([]),j([{id:"1",primaryModel:null,fallbackModels:[]}])},[m]),(0,s.useEffect)(()=>{e&&(0,o.getRouterSettingsCall)(e).then(e=>{if(e.fields){let t={};e.fields.forEach(e=>{t[e.field_name]={ui_field_name:e.ui_field_name,field_description:e.field_description,options:e.options,link:e.link}}),C(t);let s=e.fields.find(e=>"routing_strategy"===e.field_name);s?.options&&k(s.options),e.routing_strategy_descriptions&&I(e.routing_strategy_descriptions)}})},[e]),(0,s.useEffect)(()=>{e&&(async()=>{try{let t=await (0,u.fetchAvailableModels)(e);w(t)}catch(e){console.error("Error fetching model info for fallbacks:",e)}})()},[e]);let F=()=>{let e=new Set(["allowed_fails","cooldown_time","num_retries","timeout","retry_after"]),t=new Set(["model_group_alias","retry_policy"]),s=Object.fromEntries(Object.entries({...x.routerSettings,enable_tag_filtering:x.enableTagFiltering,routing_strategy:x.selectedStrategy,fallbacks:_.length>0?_:null}).map(([s,a])=>{if("routing_strategy_args"!==s&&"routing_strategy"!==s&&"enable_tag_filtering"!==s&&"fallbacks"!==s){let l=document.querySelector(`input[name="${s}"]`);if(l){if(void 0!==l.value&&""!==l.value){let r=((s,a,l)=>{if(null==a)return l;let r=String(a).trim();if(""===r||"null"===r.toLowerCase())return null;if(e.has(s)){let e=Number(r);return Number.isNaN(e)?l:e}if(t.has(s)){if(""===r)return null;try{return JSON.parse(r)}catch{return l}}return"true"===r.toLowerCase()||"false"!==r.toLowerCase()&&r})(s,l.value,a);return[s,r]}return[s,null]}}else if("routing_strategy"===s)return[s,x.selectedStrategy];else if("enable_tag_filtering"===s)return[s,x.enableTagFiltering];else if("fallbacks"===s)return[s,_.length>0?_:null];else if("routing_strategy_args"===s&&"latency-based-routing"===x.selectedStrategy){let e=document.querySelector('input[name="lowest_latency_buffer"]'),t=document.querySelector('input[name="ttl"]'),s={};return e?.value&&(s.lowest_latency_buffer=Number(e.value)),t?.value&&(s.ttl=Number(t.value)),["routing_strategy_args",Object.keys(s).length>0?s:null]}return[s,a]}).filter(e=>null!=e)),a=(e,t=!1)=>null==e||"object"==typeof e&&!Array.isArray(e)&&0===Object.keys(e).length||t&&("number"!=typeof e||Number.isNaN(e))?null:e;return{routing_strategy:a(s.routing_strategy),allowed_fails:a(s.allowed_fails,!0),cooldown_time:a(s.cooldown_time,!0),num_retries:a(s.num_retries,!0),timeout:a(s.timeout,!0),retry_after:a(s.retry_after,!0),fallbacks:_.length>0?_:null,context_window_fallbacks:a(s.context_window_fallbacks),retry_policy:a(s.retry_policy),model_group_alias:a(s.model_group_alias),enable_tag_filtering:x.enableTagFiltering,routing_strategy_args:a(s.routing_strategy_args)}};(0,s.useEffect)(()=>{if(!p)return;let e=setTimeout(()=>{A.current=!0,p({router_settings:F()})},100);return()=>clearTimeout(e)},[x,_]);let O=Array.from(new Set(v.map(e=>e.model_group))).sort();return((0,s.useImperativeHandle)(h,()=>({getValue:()=>({router_settings:F()})})),e)?(0,t.jsx)("div",{className:"w-full",children:(0,t.jsxs)(r.TabGroup,{className:"w-full",children:[(0,t.jsxs)(i.TabList,{variant:"line",defaultValue:"1",className:"px-8 pt-4",children:[(0,t.jsx)(n.Tab,{value:"1",children:"Loadbalancing"}),(0,t.jsx)(n.Tab,{value:"2",children:"Fallbacks"})]}),(0,t.jsxs)(l.TabPanels,{className:"px-8 py-6",children:[(0,t.jsx)(a.TabPanel,{children:(0,t.jsx)(d.default,{value:x,onChange:y,routerFieldsMetadata:S,availableRoutingStrategies:N,routingStrategyDescriptions:T})}),(0,t.jsx)(a.TabPanel,{children:(0,t.jsx)(c.FallbackSelectionForm,{groups:b,onGroupsChange:e=>{j(e),f(e.filter(e=>e.primaryModel&&e.fallbackModels.length>0).map(e=>({[e.primaryModel]:e.fallbackModels})))},availableModels:O,maxGroups:5})})]})]})}):null});m.displayName="RouterSettingsAccordion",e.s(["default",0,m])},207082,e=>{"use strict";var t=e.i(619273),s=e.i(266027),a=e.i(243652),l=e.i(602869),r=e.i(431703),i=e.i(135214);let n=(0,a.createQueryKeys)("keys"),o=async(e,t,s,a={})=>{try{let i=(0,l.getProxyBaseUrl)(),n=new URLSearchParams(Object.entries({team_id:a.teamID,project_id:a.projectID,agent_id:a.agentID,organization_id:a.organizationID,key_alias:a.selectedKeyAlias,key_hash:a.keyHash,user_id:a.userID,page:t,size:s,sort_by:a.sortBy,sort_order:a.sortOrder,expand:a.expand,status:a.status,return_full_object:"true",include_team_keys:"true",include_created_by_keys:"true",substring_matching:"true"}).filter(([,e])=>null!=e).map(([e,t])=>[e,String(t)])),o=`${i?`${i}/key/list`:"/key/list"}?${n}`,d=await fetch(o,{method:"GET",headers:{[(0,l.getGlobalLitellmHeaderName)()]:`Bearer ${e}`,"Content-Type":"application/json"}});if(!d.ok){let e=await d.json(),t=(0,r.deriveErrorMessage)(e);throw(0,l.handleError)(t),Error(t)}let c=await d.json();return console.log("/key/list API Response:",c),c}catch(e){throw console.error("Failed to list keys:",e),e}},d=(0,a.createQueryKeys)("deletedKeys");e.s(["keyKeys",0,n,"useDeletedKeys",0,(e,a,l={})=>{let{accessToken:r}=(0,i.default)();return(0,s.useQuery)({queryKey:d.list({page:e,limit:a,...l}),queryFn:async()=>await o(r,e,a,{...l,status:"deleted"}),enabled:!!r,staleTime:3e4,placeholderData:t.keepPreviousData})},"useKeys",0,(e,a,l={})=>{let{accessToken:r}=(0,i.default)();return(0,s.useQuery)({queryKey:n.list({page:e,limit:a,...l}),queryFn:async()=>await o(r,e,a,l),enabled:!!r,staleTime:3e4,placeholderData:t.keepPreviousData})}])},510674,e=>{"use strict";var t=e.i(266027),s=e.i(243652),a=e.i(602869),l=e.i(431703),r=e.i(135214),i=e.i(708347);let n=(0,s.createQueryKeys)("projects"),o=[...i.all_admin_roles,...i.internalUserRoles],d=async e=>{let t=(0,a.getProxyBaseUrl)(),s=`${t}/project/list`,r=await fetch(s,{method:"GET",headers:{[(0,a.getGlobalLitellmHeaderName)()]:`Bearer ${e}`,"Content-Type":"application/json"}});if(!r.ok){let e=await r.json(),t=(0,l.deriveErrorMessage)(e);throw(0,a.handleError)(t),Error(t)}return r.json()};e.s(["projectKeys",0,n,"useProjects",0,()=>{let{accessToken:e,userRole:s}=(0,r.default)();return(0,t.useQuery)({queryKey:n.list({}),queryFn:async()=>d(e),enabled:!!e&&o.includes(s)})}])},392110,e=>{"use strict";var t=e.i(843476),s=e.i(271645),a=e.i(199133),l=e.i(592968),r=e.i(312361),i=e.i(790848),n=e.i(536916),o=e.i(827252),d=e.i(779241);let{Option:c}=a.Select;e.s(["default",0,({form:e,autoRotationEnabled:u,onAutoRotationChange:m,rotationInterval:p,onRotationIntervalChange:g,isCreateMode:h=!1,neverExpire:x=!1,onNeverExpireChange:y})=>{let _=p&&!["7d","30d","90d","180d","365d"].includes(p),[f,b]=(0,s.useState)(_),[j,v]=(0,s.useState)(_?p:""),[w,N]=(0,s.useState)(e?.getFieldValue?.("duration")||"");return(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsx)("span",{className:"text-sm font-medium text-gray-700",children:"Key Expiry Settings"}),(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsxs)("label",{className:"text-sm font-medium text-gray-700 flex items-center space-x-1",children:[(0,t.jsx)("span",{children:"Expire Key"}),(0,t.jsx)(l.Tooltip,{title:"Set when this key should expire. Format: 30s (seconds), 30m (minutes), 30h (hours), 30d (days). Leave empty to keep the current expiry unchanged.",children:(0,t.jsx)(o.InfoCircleOutlined,{className:"text-gray-400 cursor-help text-xs"})}),!h&&y&&(0,t.jsx)(n.Checkbox,{checked:x,onChange:t=>{let s=t.target.checked;y(s),s&&(N(""),e&&"function"==typeof e.setFieldValue?e.setFieldValue("duration",""):e&&"function"==typeof e.setFieldsValue&&e.setFieldsValue({duration:""}))},className:"ml-2 text-sm font-normal text-gray-600",children:"Never Expire"})]}),(0,t.jsx)(d.TextInput,{name:"duration",placeholder:h?"e.g., 30d or leave empty to never expire":"e.g., 30d",className:"w-full",value:w,onValueChange:t=>{N(t),e&&"function"==typeof e.setFieldValue?e.setFieldValue("duration",t):e&&"function"==typeof e.setFieldsValue&&e.setFieldsValue({duration:t})},disabled:!h&&x})]})]}),(0,t.jsx)(r.Divider,{}),(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsx)("span",{className:"text-sm font-medium text-gray-700",children:"Auto-Rotation Settings"}),(0,t.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsxs)("label",{className:"text-sm font-medium text-gray-700 flex items-center space-x-1",children:[(0,t.jsx)("span",{children:"Enable Auto-Rotation"}),(0,t.jsx)(l.Tooltip,{title:"Key will automatically regenerate at the specified interval for enhanced security.",children:(0,t.jsx)(o.InfoCircleOutlined,{className:"text-gray-400 cursor-help text-xs"})})]}),(0,t.jsx)(i.Switch,{checked:u,onChange:m,size:"default",className:u?"":"bg-gray-400"})]}),u&&(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsxs)("label",{className:"text-sm font-medium text-gray-700 flex items-center space-x-1",children:[(0,t.jsx)("span",{children:"Rotation Interval"}),(0,t.jsx)(l.Tooltip,{title:"How often the key should be automatically rotated. Choose the interval that best fits your security requirements.",children:(0,t.jsx)(o.InfoCircleOutlined,{className:"text-gray-400 cursor-help text-xs"})})]}),(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsxs)(a.Select,{value:f?"custom":p,onChange:e=>{"custom"===e?b(!0):(b(!1),v(""),g(e))},className:"w-full",placeholder:"Select interval",children:[(0,t.jsx)(c,{value:"7d",children:"7 days"}),(0,t.jsx)(c,{value:"30d",children:"30 days"}),(0,t.jsx)(c,{value:"90d",children:"90 days"}),(0,t.jsx)(c,{value:"180d",children:"180 days"}),(0,t.jsx)(c,{value:"365d",children:"365 days"}),(0,t.jsx)(c,{value:"custom",children:"Custom interval"})]}),f&&(0,t.jsxs)("div",{className:"space-y-1",children:[(0,t.jsx)(d.TextInput,{value:j,onChange:e=>{let t=e.target.value;v(t),g(t)},placeholder:"e.g., 1s, 5m, 2h, 14d"}),(0,t.jsx)("div",{className:"text-xs text-gray-500",children:"Supported formats: seconds (s), minutes (m), hours (h), days (d)"})]})]})]})]}),u&&(0,t.jsx)("div",{className:"bg-blue-50 p-3 rounded-md text-sm text-blue-700",children:"When rotation occurs, you'll receive a notification with the new key. The old key will be deactivated after a brief grace period."})]})]})}])},939510,e=>{"use strict";var t=e.i(843476),s=e.i(808613),a=e.i(199133),l=e.i(592968),r=e.i(827252);let{Option:i}=a.Select;e.s(["default",0,({type:e,name:n,showDetailedDescriptions:o=!0,className:d="",initialValue:c=null,form:u,onChange:m})=>{let p=e.toUpperCase(),g=e.toLowerCase(),h=`Select 'guaranteed_throughput' to prevent overallocating ${p} limit when the key belongs to a Team with specific ${p} limits.`;return(0,t.jsx)(s.Form.Item,{label:(0,t.jsxs)("span",{children:[p," Rate Limit Type"," ",(0,t.jsx)(l.Tooltip,{title:h,children:(0,t.jsx)(r.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:n,initialValue:c,className:d,children:(0,t.jsx)(a.Select,{defaultValue:o?"default":void 0,placeholder:"Select rate limit type",style:{width:"100%"},optionLabelProp:o?"label":void 0,onChange:e=>{u&&u.setFieldValue(n,e),m&&m(e)},children:o?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i,{value:"best_effort_throughput",label:"Default",children:(0,t.jsxs)("div",{style:{padding:"4px 0"},children:[(0,t.jsx)("div",{style:{fontWeight:500},children:"Default"}),(0,t.jsxs)("div",{style:{fontSize:"11px",color:"#6b7280",marginTop:"2px"},children:["Best effort throughput - no error if we're overallocating ",g," (Team/Key Limits checked at runtime)."]})]})}),(0,t.jsx)(i,{value:"guaranteed_throughput",label:"Guaranteed throughput",children:(0,t.jsxs)("div",{style:{padding:"4px 0"},children:[(0,t.jsx)("div",{style:{fontWeight:500},children:"Guaranteed throughput"}),(0,t.jsxs)("div",{style:{fontSize:"11px",color:"#6b7280",marginTop:"2px"},children:["Guaranteed throughput - raise an error if we're overallocating ",g," (also checks model-specific limits)"]})]})}),(0,t.jsx)(i,{value:"dynamic",label:"Dynamic",children:(0,t.jsxs)("div",{style:{padding:"4px 0"},children:[(0,t.jsx)("div",{style:{fontWeight:500},children:"Dynamic"}),(0,t.jsxs)("div",{style:{fontSize:"11px",color:"#6b7280",marginTop:"2px"},children:["If the key has a set ",p," (e.g. 2 ",p,") and there are no 429 errors, it can dynamically exceed the limit when the model being called is not erroring."]})]})})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i,{value:"best_effort_throughput",children:"Best effort throughput"}),(0,t.jsx)(i,{value:"guaranteed_throughput",children:"Guaranteed throughput"}),(0,t.jsx)(i,{value:"dynamic",children:"Dynamic"})]})})})}])},363256,e=>{"use strict";var t=e.i(843476),s=e.i(199133);let{Text:a}=e.i(898586).Typography;e.s(["default",0,({organizations:e,value:l,onChange:r,disabled:i,loading:n,style:o})=>(0,t.jsx)(s.Select,{showSearch:!0,placeholder:"All Organizations",value:l,onChange:r,disabled:i,loading:n,allowClear:!0,style:{minWidth:280,...o},filterOption:(t,s)=>{if(!s)return!1;let a=e?.find(e=>e.organization_id===s.key);if(!a)return!1;let l=t.toLowerCase().trim(),r=(a.organization_alias||"").toLowerCase(),i=(a.organization_id||"").toLowerCase();return r.includes(l)||i.includes(l)},children:e?.map(e=>(0,t.jsxs)(s.Select.Option,{value:e.organization_id,children:[(0,t.jsx)("span",{className:"font-medium",children:e.organization_alias})," ",(0,t.jsxs)(a,{type:"secondary",children:["(",e.organization_id,")"]})]},e.organization_id))})])},319312,e=>{"use strict";var t=e.i(843476),s=e.i(464571),a=e.i(28651),l=e.i(199133);let r=[{value:"1h",label:"Hourly",resetHint:"Resets every hour"},{value:"24h",label:"Daily",resetHint:"Resets daily at midnight UTC"},{value:"7d",label:"Weekly",resetHint:"Resets every Sunday at midnight UTC"},{value:"30d",label:"Monthly",resetHint:"Resets on the 1st of every month at midnight UTC"}];e.s(["BudgetWindowsEditor",0,function({value:e,onChange:i}){let n=(t,s,a)=>{i(e.map((e,l)=>l===t?{...e,[s]:a}:e))};return(0,t.jsxs)("div",{children:[e.map((o,d)=>{let c=r.find(e=>e.value===o.budget_duration)?.resetHint;return(0,t.jsxs)("div",{style:{marginBottom:12},children:[(0,t.jsxs)("div",{style:{display:"flex",gap:8,alignItems:"center"},children:[(0,t.jsx)(l.Select,{value:o.budget_duration,onChange:e=>n(d,"budget_duration",e),style:{width:130},options:r.map(e=>({value:e.value,label:e.label}))}),(0,t.jsx)(a.InputNumber,{step:.01,min:0,precision:2,value:o.max_budget??void 0,onChange:e=>n(d,"max_budget",e??null),placeholder:"Max spend ($)",style:{width:160},prefix:"$"}),(0,t.jsx)(s.Button,{type:"text",danger:!0,size:"small",onClick:()=>{i(e.filter((e,t)=>t!==d))},style:{padding:"0 4px"},children:"✕"})]}),c&&(0,t.jsxs)("div",{style:{fontSize:11,color:"#888",marginTop:3,marginLeft:2},children:["↻ ",c]})]},d)}),(0,t.jsx)(s.Button,{size:"small",onClick:t=>{t.preventDefault(),i([...e,{budget_duration:"24h",max_budget:null}])},children:"+ Add Budget Window"})]})}])},533882,e=>{"use strict";var t=e.i(843476),s=e.i(271645),a=e.i(250980),l=e.i(797672),r=e.i(68155),i=e.i(304967),n=e.i(629569),o=e.i(599724),d=e.i(269200),c=e.i(427612),u=e.i(64848),m=e.i(942232),p=e.i(496020),g=e.i(977572),h=e.i(992619),x=e.i(727749);e.s(["default",0,({accessToken:e,initialModelAliases:y={},onAliasUpdate:_,showExampleConfig:f=!0})=>{let[b,j]=(0,s.useState)([]),[v,w]=(0,s.useState)({aliasName:"",targetModel:""}),[N,k]=(0,s.useState)(null);(0,s.useEffect)(()=>{j(Object.entries(y).map(([e,t],s)=>({id:`${s}-${e}`,aliasName:e,targetModel:t})))},[y]);let S=()=>{if(!N)return;if(!N.aliasName||!N.targetModel)return void x.default.fromBackend("Please provide both alias name and target model");if(b.some(e=>e.id!==N.id&&e.aliasName===N.aliasName))return void x.default.fromBackend("An alias with this name already exists");let e=b.map(e=>e.id===N.id?N:e);j(e),k(null);let t={};e.forEach(e=>{t[e.aliasName]=e.targetModel}),_&&_(t),x.default.success("Alias updated successfully")},C=()=>{k(null)},T=b.reduce((e,t)=>(e[t.aliasName]=t.targetModel,e),{});return(0,t.jsxs)("div",{className:"mt-4",children:[(0,t.jsxs)("div",{className:"mb-6",children:[(0,t.jsx)(o.Text,{className:"text-sm font-medium text-gray-700 mb-2",children:"Add New Alias"}),(0,t.jsxs)("div",{className:"grid grid-cols-3 gap-4",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"block text-xs text-gray-500 mb-1",children:"Alias Name"}),(0,t.jsx)("input",{type:"text",value:v.aliasName,onChange:e=>w({...v,aliasName:e.target.value}),placeholder:"e.g., gpt-4o",className:"w-full px-3 py-2 border border-gray-300 rounded-md text-sm"})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"block text-xs text-gray-500 mb-1",children:"Target Model"}),(0,t.jsx)(h.default,{accessToken:e,value:v.targetModel,placeholder:"Select target model",onChange:e=>w({...v,targetModel:e}),showLabel:!1})]}),(0,t.jsx)("div",{className:"flex items-end",children:(0,t.jsxs)("button",{onClick:()=>{if(!v.aliasName||!v.targetModel)return void x.default.fromBackend("Please provide both alias name and target model");if(b.some(e=>e.aliasName===v.aliasName))return void x.default.fromBackend("An alias with this name already exists");let e=[...b,{id:`${Date.now()}-${v.aliasName}`,aliasName:v.aliasName,targetModel:v.targetModel}];j(e),w({aliasName:"",targetModel:""});let t={};e.forEach(e=>{t[e.aliasName]=e.targetModel}),_&&_(t),x.default.success("Alias added successfully")},disabled:!v.aliasName||!v.targetModel,className:`flex items-center px-4 py-2 rounded-md text-sm ${!v.aliasName||!v.targetModel?"bg-gray-300 text-gray-500 cursor-not-allowed":"bg-green-600 text-white hover:bg-green-700"}`,children:[(0,t.jsx)(a.PlusCircleIcon,{className:"w-4 h-4 mr-1"}),"Add Alias"]})})]})]}),(0,t.jsx)(o.Text,{className:"text-sm font-medium text-gray-700 mb-2",children:"Manage Existing Aliases"}),(0,t.jsx)("div",{className:"rounded-lg custom-border relative mb-6",children:(0,t.jsx)("div",{className:"overflow-x-auto",children:(0,t.jsxs)(d.Table,{className:"[&_td]:py-0.5 [&_th]:py-1",children:[(0,t.jsx)(c.TableHead,{children:(0,t.jsxs)(p.TableRow,{children:[(0,t.jsx)(u.TableHeaderCell,{className:"py-1 h-8",children:"Alias Name"}),(0,t.jsx)(u.TableHeaderCell,{className:"py-1 h-8",children:"Target Model"}),(0,t.jsx)(u.TableHeaderCell,{className:"py-1 h-8",children:"Actions"})]})}),(0,t.jsxs)(m.TableBody,{children:[b.map(s=>(0,t.jsx)(p.TableRow,{className:"h-8",children:N&&N.id===s.id?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(g.TableCell,{className:"py-0.5",children:(0,t.jsx)("input",{type:"text",value:N.aliasName,onChange:e=>k({...N,aliasName:e.target.value}),className:"w-full px-2 py-1 border border-gray-300 rounded-md text-sm"})}),(0,t.jsx)(g.TableCell,{className:"py-0.5",children:(0,t.jsx)(h.default,{accessToken:e,value:N.targetModel,onChange:e=>k({...N,targetModel:e}),showLabel:!1,style:{height:"32px"}})}),(0,t.jsx)(g.TableCell,{className:"py-0.5 whitespace-nowrap",children:(0,t.jsxs)("div",{className:"flex space-x-2",children:[(0,t.jsx)("button",{onClick:S,className:"text-xs bg-blue-50 text-blue-600 px-2 py-1 rounded hover:bg-blue-100",children:"Save"}),(0,t.jsx)("button",{onClick:C,className:"text-xs bg-gray-50 text-gray-600 px-2 py-1 rounded hover:bg-gray-100",children:"Cancel"})]})})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(g.TableCell,{className:"py-0.5 text-sm text-gray-900",children:s.aliasName}),(0,t.jsx)(g.TableCell,{className:"py-0.5 text-sm text-gray-500",children:s.targetModel}),(0,t.jsx)(g.TableCell,{className:"py-0.5 whitespace-nowrap",children:(0,t.jsxs)("div",{className:"flex space-x-2",children:[(0,t.jsx)("button",{onClick:()=>{k({...s})},className:"text-xs bg-blue-50 text-blue-600 px-2 py-1 rounded hover:bg-blue-100",children:(0,t.jsx)(l.PencilIcon,{className:"w-3 h-3"})}),(0,t.jsx)("button",{onClick:()=>{var e;let t,a;return e=s.id,j(t=b.filter(t=>t.id!==e)),a={},void(t.forEach(e=>{a[e.aliasName]=e.targetModel}),_&&_(a),x.default.success("Alias deleted successfully"))},className:"text-xs bg-red-50 text-red-600 px-2 py-1 rounded hover:bg-red-100",children:(0,t.jsx)(r.TrashIcon,{className:"w-3 h-3"})})]})})]})},s.id)),0===b.length&&(0,t.jsx)(p.TableRow,{children:(0,t.jsx)(g.TableCell,{colSpan:3,className:"py-0.5 text-sm text-gray-500 text-center",children:"No aliases added yet. Add a new alias above."})})]})]})})}),f&&(0,t.jsxs)(i.Card,{children:[(0,t.jsx)(n.Title,{className:"mb-4",children:"Configuration Example"}),(0,t.jsx)(o.Text,{className:"text-gray-600 mb-4",children:"Here's how your current aliases would look in the config:"}),(0,t.jsx)("div",{className:"bg-gray-100 rounded-lg p-4 font-mono text-sm",children:(0,t.jsxs)("div",{className:"text-gray-700",children:["model_aliases:",0===Object.keys(T).length?(0,t.jsxs)("span",{className:"text-gray-500",children:[(0,t.jsx)("br",{}),"  # No aliases configured yet"]}):Object.entries(T).map(([e,s])=>(0,t.jsxs)("span",{children:[(0,t.jsx)("br",{}),'  "',e,'": "',s,'"']},e))]})})]})]})}])},651904,e=>{"use strict";var t=e.i(843476),s=e.i(599724),a=e.i(266484);e.s(["default",0,function({value:e,onChange:l,premiumUser:r=!1,disabledCallbacks:i=[],onDisabledCallbacksChange:n}){return r?(0,t.jsx)(a.default,{value:e,onChange:l,disabledCallbacks:i,onDisabledCallbacksChange:n}):(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"flex flex-wrap gap-2 mb-3",children:[(0,t.jsx)("div",{className:"inline-flex items-center px-3 py-1.5 rounded-lg bg-green-50 border border-green-200 text-green-800 text-sm font-medium opacity-50",children:"✨ langfuse-logging"}),(0,t.jsx)("div",{className:"inline-flex items-center px-3 py-1.5 rounded-lg bg-green-50 border border-green-200 text-green-800 text-sm font-medium opacity-50",children:"✨ datadog-logging"})]}),(0,t.jsx)("div",{className:"p-3 bg-yellow-50 border border-yellow-200 rounded-lg",children:(0,t.jsxs)(s.Text,{className:"text-sm text-yellow-800",children:["Setting Key/Team logging settings is a LiteLLM Enterprise feature. Global Logging Settings are available for all free users. Get a trial key"," ",(0,t.jsx)("a",{href:"https://www.litellm.ai/#pricing",target:"_blank",rel:"noopener noreferrer",className:"underline",children:"here"}),"."]})})]})}])},575260,e=>{"use strict";var t=e.i(843476),s=e.i(199133),a=e.i(482725),l=e.i(56456);e.s(["default",0,({projects:e,value:r,onChange:i,disabled:n,loading:o,teamId:d})=>{let c=d?e?.filter(e=>e.team_id===d):e;return(0,t.jsx)(s.Select,{showSearch:!0,placeholder:"Search or select a project",value:r,onChange:i,disabled:n,loading:o,allowClear:!0,notFoundContent:o?(0,t.jsx)(a.Spin,{indicator:(0,t.jsx)(l.LoadingOutlined,{spin:!0}),size:"small"}):void 0,filterOption:(e,t)=>{if(!t)return!1;let s=c?.find(e=>e.project_id===t.key);if(!s)return!1;let a=e.toLowerCase().trim(),l=(s.project_alias||"").toLowerCase(),r=(s.project_id||"").toLowerCase();return l.includes(a)||r.includes(a)},optionFilterProp:"children",children:!o&&c?.map(e=>(0,t.jsxs)(s.Select.Option,{value:e.project_id,children:[(0,t.jsx)("span",{className:"font-medium",children:e.project_alias||e.project_id})," ",(0,t.jsxs)("span",{className:"text-gray-500",children:["(",e.project_id,")"]})]},e.project_id))})}])},364769,e=>{"use strict";var t=e.i(843476),s=e.i(271645),a=e.i(237016),l=e.i(464571),r=e.i(888259);e.s(["default",0,({apiKey:e})=>{let[i,n]=(0,s.useState)(!1);return(0,t.jsxs)("div",{children:[(0,t.jsxs)("p",{className:"mb-2",children:["Please save this secret key somewhere safe and accessible. For security reasons,"," ",(0,t.jsx)("b",{children:"you will not be able to view it again"})," through your LiteLLM account. If you lose this secret key, you will need to generate a new one."]}),(0,t.jsx)("p",{className:"text-sm text-gray-600 mt-3 mb-1",children:"Virtual Key:"}),(0,t.jsx)("div",{style:{background:"#f8f8f8",padding:"10px",borderRadius:"5px",marginBottom:"10px"},children:(0,t.jsx)("pre",{style:{wordWrap:"break-word",whiteSpace:"normal",margin:0},children:e})}),(0,t.jsx)(a.CopyToClipboard,{text:e,onCopy:()=>{n(!0),r.default.success("Key copied to clipboard"),setTimeout(()=>n(!1),2e3)},children:(0,t.jsx)(l.Button,{type:"primary",style:{marginTop:12},children:i?"Copied!":"Copy Virtual Key"})})]})}])},702597,e=>{"use strict";var t=e.i(843476),s=e.i(207082),a=e.i(109799),l=e.i(510674),r=e.i(109034),i=e.i(292639),n=e.i(135214),o=e.i(500330),d=e.i(827252),c=e.i(912598),u=e.i(677667),m=e.i(130643),p=e.i(898667),g=e.i(994388),h=e.i(309426),x=e.i(350967),y=e.i(599724),_=e.i(779241),f=e.i(629569),b=e.i(464571),j=e.i(808613),v=e.i(311451),w=e.i(212931),N=e.i(91739),k=e.i(199133),S=e.i(790848),C=e.i(262218),T=e.i(592968),I=e.i(898586),A=e.i(374009),L=e.i(271645),F=e.i(708347),O=e.i(552130),E=e.i(557662),M=e.i(9314),P=e.i(860585),R=e.i(82946),$=e.i(392110),B=e.i(533882),V=e.i(844565),D=e.i(651904),U=e.i(939510),z=e.i(460285),G=e.i(663435),K=e.i(363256),q=e.i(575260),H=e.i(371455),W=e.i(319312),Q=e.i(355619),J=e.i(75921),Y=e.i(234713),X=e.i(390605),Z=e.i(727749),ee=e.i(602869),et=e.i(364769),es=e.i(435451),ea=e.i(916940);let{Option:el}=k.Select,er=async(e,t,s,a)=>{try{if(null===e||null===t)return[];if(null!==s){let l=(await (0,ee.modelAvailableCall)(s,e,t,!0,a,!0)).data.map(e=>e.id);return console.log("available_model_names:",l),l}return[]}catch(e){return console.error("Error fetching user models:",e),[]}},ei=async(e,t,s,a)=>{try{if(null===e||null===t)return;if(null!==s){let l=(await (0,ee.modelAvailableCall)(s,e,t)).data.map(e=>e.id);console.log("available_model_names:",l),a(l)}}catch(e){console.error("Error fetching user models:",e)}};e.s(["default",0,({team:e,teams:en,data:eo,addKey:ed,autoOpenCreate:ec,prefillData:eu})=>{let{accessToken:em,userId:ep,userRole:eg,premiumUser:eh}=(0,n.default)(),ex=eh||null!=eg&&F.rolesWithWriteAccess.includes(eg),{data:ey,isLoading:e_}=(0,a.useOrganizations)(),{data:ef,isLoading:eb}=(0,l.useProjects)(),{data:ej}=(0,i.useUISettings)(),{data:ev}=(0,r.useTags)(),ew=!!ej?.values?.enable_projects_ui,eN=!!ej?.values?.disable_custom_api_keys,ek=ev?Object.values(ev).map(e=>({value:e.name,label:e.name})):[],eS=(0,c.useQueryClient)(),[eC]=j.Form.useForm(),[eT,eI]=(0,L.useState)(!1),[eA,eL]=(0,L.useState)(null),[eF,eO]=(0,L.useState)(null),[eE,eM]=(0,L.useState)([]),[eP,eR]=(0,L.useState)([]),[e$,eB]=(0,L.useState)("you"),[eV,eD]=(0,L.useState)(!1),[eU,ez]=(0,L.useState)(null),[eG,eK]=(0,L.useState)([]),[eq,eH]=(0,L.useState)([]),[eW,eQ]=(0,L.useState)([]),[eJ,eY]=(0,L.useState)([]),[eX,eZ]=(0,L.useState)(e),[e0,e1]=(0,L.useState)(null),[e4,e2]=(0,L.useState)(null),[e5,e3]=(0,L.useState)(!1),[e6,e7]=(0,L.useState)(null),[e9,e8]=(0,L.useState)({}),[te,tt]=(0,L.useState)([]),[ts,ta]=(0,L.useState)(!1),[tl,tr]=(0,L.useState)([]),[ti,tn]=(0,L.useState)([]),[to,td]=(0,L.useState)("llm_api"),[tc,tu]=(0,L.useState)({}),[tm,tp]=(0,L.useState)(!1),[tg,th]=(0,L.useState)("30d"),[tx,ty]=(0,L.useState)(null),[t_,tf]=(0,L.useState)([]),[tb,tj]=(0,L.useState)(0),[tv,tw]=(0,L.useState)([]),[tN,tk]=(0,L.useState)(null),tS=()=>{eI(!1),eC.resetFields(),eY([]),tn([]),td("llm_api"),tu({}),tp(!1),th("30d"),ty(null),tj(e=>e+1),tk(null),e1(null),e2(null),tf([])},tC=()=>{eI(!1),eL(null),eZ(null),eC.resetFields(),eY([]),tn([]),td("llm_api"),tu({}),tp(!1),th("30d"),ty(null),tj(e=>e+1),tk(null),e1(null),e2(null),tf([])};(0,L.useEffect)(()=>{ep&&eg&&em&&ei(ep,eg,em,eM)},[em,ep,eg]),(0,L.useEffect)(()=>{em&&(0,ee.getAgentsList)(em).then(e=>tw(e?.agents||[])).catch(()=>tw([]))},[em]),(0,L.useEffect)(()=>{let e=async()=>{try{let e=(await (0,ee.getPoliciesList)(em)).policies.map(e=>e.policy_name);eH(e)}catch(e){console.error("Failed to fetch policies:",e)}},t=async()=>{try{let e=await (0,ee.getPromptsList)(em);eQ(e.prompts.map(e=>e.prompt_id))}catch(e){console.error("Failed to fetch prompts:",e)}};(async()=>{try{let e=(await (0,ee.getGuardrailsList)(em)).guardrails.map(e=>e.guardrail_name);eK(e)}catch(e){console.error("Failed to fetch guardrails:",e)}})(),e(),t()},[em]),(0,L.useEffect)(()=>{(async()=>{try{if(em){let e=sessionStorage.getItem("possibleUserRoles");if(e)e8(JSON.parse(e));else{let e=await (0,ee.getPossibleUserRoles)(em);sessionStorage.setItem("possibleUserRoles",JSON.stringify(e)),e8(e)}}}catch(e){console.error("Error fetching possible user roles:",e)}})()},[em]),(0,L.useEffect)(()=>{if(ec&&!eV&&en&&eg&&F.rolesWithWriteAccess.includes(eg)&&(eI(!0),eD(!0),eu)){if(eu.owned_by&&("another_user"===eu.owned_by&&"Admin"!==eg?eB("you"):eB(eu.owned_by)),eu.team_id){let e=en?.find(e=>e.team_id===eu.team_id)||null;e&&(eZ(e),eC.setFieldsValue({team_id:eu.team_id}))}eu.key_alias&&eC.setFieldsValue({key_alias:eu.key_alias}),eu.models&&eu.models.length>0&&ez(eu.models),eu.key_type&&(td(eu.key_type),eC.setFieldsValue({key_type:eu.key_type}))}},[ec,eu,en,eV,eC,eg]);let tT=eP.includes("no-default-models")&&!eX,tI=async e=>{try{let t,a=e?.key_alias??"",l=e?.team_id??null;if((eo?.filter(e=>e.team_id===l).map(e=>e.key_alias)??[]).includes(a))throw Error(`Key alias ${a} already exists for team with ID ${l}, please provide another key alias`);if(Z.default.info("Making API Call"),eI(!0),"you"===e$)e.user_id=ep;else if("agent"===e$){if(!tN)return void Z.default.fromBackend("Please select an agent");e.agent_id=tN}let r={};try{r=JSON.parse(e.metadata||"{}")}catch(e){console.error("Error parsing metadata:",e)}if("service_account"===e$&&(r.service_account_id=e.key_alias),eJ.length>0&&(r={...r,logging:eJ.filter(e=>e.callback_name)}),ti.length>0){let e=(0,E.mapDisplayToInternalNames)(ti);r={...r,litellm_disabled_callbacks:e}}if(tm&&(e.auto_rotate=!0,e.rotation_interval=tg),e.duration&&""!==e.duration.trim()||(e.duration=null),e.metadata=JSON.stringify(r),e.disable_global_guardrails||delete e.disable_global_guardrails,e.allowed_vector_store_ids&&e.allowed_vector_store_ids.length>0&&(e.object_permission={vector_stores:e.allowed_vector_store_ids},delete e.allowed_vector_store_ids),e.allowed_mcp_servers_and_groups&&(e.allowed_mcp_servers_and_groups.servers?.length>0||e.allowed_mcp_servers_and_groups.accessGroups?.length>0)){e.object_permission||(e.object_permission={});let{servers:t,accessGroups:s}=e.allowed_mcp_servers_and_groups;t&&t.length>0&&(e.object_permission.mcp_servers=t),s&&s.length>0&&(e.object_permission.mcp_access_groups=s),delete e.allowed_mcp_servers_and_groups}let i=e.mcp_tool_permissions||{};if(Object.keys(i).length>0&&(e.object_permission||(e.object_permission={}),e.object_permission.mcp_tool_permissions=i),delete e.mcp_tool_permissions,e.allowed_mcp_access_groups&&e.allowed_mcp_access_groups.length>0&&(e.object_permission||(e.object_permission={}),e.object_permission.mcp_access_groups=e.allowed_mcp_access_groups,delete e.allowed_mcp_access_groups),e.allowed_agents_and_groups&&(e.allowed_agents_and_groups.agents?.length>0||e.allowed_agents_and_groups.accessGroups?.length>0)){e.object_permission||(e.object_permission={});let{agents:t,accessGroups:s}=e.allowed_agents_and_groups;t&&t.length>0&&(e.object_permission.agents=t),s&&s.length>0&&(e.object_permission.agent_access_groups=s),delete e.allowed_agents_and_groups}Object.keys(tc).length>0&&(e.aliases=JSON.stringify(tc)),tx?.router_settings&&Object.values(tx.router_settings).some(e=>null!=e&&""!==e)&&(e.router_settings=tx.router_settings);let n=t_.filter(e=>e.budget_duration&&null!==e.max_budget&&void 0!==e.max_budget);n.length>0&&(e.budget_limits=n),t="service_account"===e$?await (0,ee.keyCreateServiceAccountCall)(em,e):await (0,ee.keyCreateCall)(em,ep,e),console.log("key create Response:",t),ed(t),eS.invalidateQueries({queryKey:s.keyKeys.lists()}),eL(t.key),eO(t.soft_budget),Z.default.success("Virtual Key Created"),eC.resetFields(),tf([]),localStorage.removeItem("userData"+ep)}catch(t){console.log("error in create key:",t);let e=(e=>{let t;if(!(t=!e||"object"!=typeof e||e instanceof Error?String(e):JSON.stringify(e)).includes("/key/generate")&&!t.includes("KeyManagementRoutes.KEY_GENERATE"))return`Error creating the key: ${e}`;let s=t;try{if(!e||"object"!=typeof e||e instanceof Error){let e=t.match(/\{[\s\S]*\}/);if(e){let t=JSON.parse(e[0]),a=t?.error||t;a?.message&&(s=a.message)}}else{let t=e?.error||e;t?.message&&(s=t.message)}}catch(e){}return t.includes("team_member_permission_error")||s.includes("Team member does not have permissions")?"Team member does not have permission to generate key for this team. Ask your proxy admin to configure the team member permission settings.":`Error creating the key: ${e}`})(t);Z.default.fromBackend(e)}};(0,L.useEffect)(()=>{if(e4){let e=ef?.find(e=>e.project_id===e4);eR(e?.models??[]),eC.setFieldValue("models",[]);return}ep&&eg&&em&&er(ep,eg,em,eX?.team_id??null).then(e=>{eR(Array.from(new Set([...eX?.models??[],...e])))}),eU||eC.setFieldValue("models",[]),eC.setFieldValue("allowed_mcp_servers_and_groups",{servers:[],accessGroups:[]})},[eX,e4,em,ep,eg,eC]),(0,L.useEffect)(()=>{if(!eU||0===eU.length||!eP||0===eP.length)return;let e=eU.filter(e=>eP.includes(e));e.length>0&&eC.setFieldsValue({models:e}),ez(null)},[eU,eP,eC]),(0,L.useEffect)(()=>{if(!e4||!en)return;let e=ef?.find(e=>e.project_id===e4);if(!e?.team_id||eX?.team_id===e.team_id)return;let t=en.find(t=>t.team_id===e.team_id)||null;t&&(eZ(t),eC.setFieldValue("team_id",t.team_id))},[en,e4,ef]);let tA=async e=>{if(!e)return void tt([]);ta(!0);try{let t=new URLSearchParams;if(t.append("user_email",e),null==em)return;let s=(await (0,ee.userFilterUICall)(em,t)).map(e=>({label:`${e.user_email} (${e.user_id})`,value:e.user_id,user:e}));tt(s)}catch(e){console.error("Error fetching users:",e),Z.default.fromBackend("Failed to search for users")}finally{ta(!1)}},tL=(0,L.useCallback)((0,A.default)(e=>tA(e),300),[em]);return(0,t.jsxs)("div",{children:[eg&&F.rolesWithWriteAccess.includes(eg)&&(0,t.jsx)(g.Button,{className:"mx-auto",onClick:()=>eI(!0),"data-testid":"create-key-button",children:"+ Create New Key"}),(0,t.jsx)(w.Modal,{open:eT,width:1e3,footer:null,onOk:tS,onCancel:tC,children:(0,t.jsxs)(j.Form,{form:eC,onFinish:tI,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,t.jsxs)("div",{className:"mb-8",children:[(0,t.jsx)(f.Title,{className:"mb-4",children:"Key Ownership"}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Owned By"," ",(0,t.jsx)(T.Tooltip,{title:"Select who will own this Virtual Key",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),className:"mb-4",children:(0,t.jsxs)(N.Radio.Group,{onChange:e=>eB(e.target.value),value:e$,children:[(0,t.jsx)(N.Radio,{value:"you",children:"You"}),(0,t.jsx)(N.Radio,{value:"service_account",children:"Service Account"}),"Admin"===eg&&(0,t.jsx)(N.Radio,{value:"another_user",children:"Another User"}),(0,t.jsxs)(N.Radio,{value:"agent",children:["Agent ",(0,t.jsx)(C.Tag,{color:"purple",children:"New"})]})]})}),"another_user"===e$&&(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["User ID"," ",(0,t.jsx)(T.Tooltip,{title:"The user who will own this key and be responsible for its usage",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"user_id",className:"mt-4",rules:[{required:"another_user"===e$,message:"Please input the user ID of the user you are assigning the key to"}],children:(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{style:{display:"flex",marginBottom:"8px"},children:[(0,t.jsx)(k.Select,{showSearch:!0,placeholder:"Type email to search for users",filterOption:!1,onSearch:e=>{tL(e)},onSelect:(e,t)=>{let s;return s=t.user,void eC.setFieldsValue({user_id:s.user_id})},options:te,loading:ts,allowClear:!0,style:{width:"100%"},notFoundContent:ts?"Searching...":"No users found"}),(0,t.jsx)(b.Button,{onClick:()=>e3(!0),style:{marginLeft:"8px"},children:"Create User"})]}),(0,t.jsx)("div",{className:"text-xs text-gray-500",children:"Search by email to find users"})]})}),"agent"===e$&&(0,t.jsxs)("div",{className:"mt-4 p-4 bg-purple-50 border border-purple-200 rounded-md",children:[(0,t.jsx)("div",{className:"mb-3",children:(0,t.jsxs)("span",{className:"text-sm font-medium text-gray-700",children:["Select Agent ",(0,t.jsx)("span",{className:"text-red-500",children:"*"})]})}),(0,t.jsx)(k.Select,{showSearch:!0,placeholder:"Select an agent",style:{width:"100%"},value:tN,onChange:e=>tk(e),filterOption:(e,t)=>t?.label?.toLowerCase().includes(e.toLowerCase()),options:tv.map(e=>({label:e.agent_name||e.agent_id,value:e.agent_id}))}),(0,t.jsx)("div",{className:"text-xs text-gray-500 mt-2",children:"This key will be used by the selected agent to make requests to LiteLLM"})]}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Organization"," ",(0,t.jsx)(T.Tooltip,{title:"The organization this key belongs to. Selecting an organization filters the available teams.",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"organization_id",className:"mt-4",children:(0,t.jsx)(K.default,{organizations:ey,loading:e_,disabled:"Admin"!==eg,onChange:e=>{e1(e||null),eZ(null),e2(null),eC.setFieldValue("team_id",void 0),eC.setFieldValue("project_id",void 0)}})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Team"," ",(0,t.jsx)(T.Tooltip,{title:"The team this key belongs to, which determines available models and budget limits",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"team_id",initialValue:e?e.team_id:null,className:"mt-4",rules:[{required:"service_account"===e$,message:"Please select a team for the service account"}],help:"service_account"===e$?"required":"",children:(0,t.jsx)(G.default,{disabled:null!==e4,organizationId:e0,onTeamSelect:e=>{eZ(e),e2(null),eC.setFieldValue("project_id",void 0),e?.organization_id?(e1(e.organization_id),eC.setFieldValue("organization_id",e.organization_id)):e||(e1(null),eC.setFieldValue("organization_id",void 0))}})}),ew&&(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Project"," ",(0,t.jsx)(T.Tooltip,{title:"Assign this key to a project. Selecting a project will lock the team to the project's team.",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"project_id",className:"mt-4",children:(0,t.jsx)(q.default,{projects:ef,teamId:eX?.team_id,loading:eb||!en,onChange:e=>{if(!e){e2(null),eZ(null),eC.setFieldValue("team_id",void 0);return}e2(e)}})})]}),tT&&(0,t.jsx)("div",{className:"mb-8 p-4 bg-blue-50 border border-blue-200 rounded-md",children:(0,t.jsx)(y.Text,{className:"text-blue-800 text-sm",children:"Please select a team to continue configuring your Virtual Key. If you do not see any teams, please contact your Proxy Admin to either provide you with access to models or to add you to a team."})}),!tT&&(0,t.jsxs)("div",{className:"mb-8",children:[(0,t.jsx)(f.Title,{className:"mb-4",children:"Key Details"}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["you"===e$||"another_user"===e$?"Key Name":"Service Account ID"," ",(0,t.jsx)(T.Tooltip,{title:"you"===e$||"another_user"===e$?"A descriptive name to identify this key":"Unique identifier for this service account",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"key_alias",rules:[{required:!0,message:`Please input a ${"you"===e$?"key name":"service account ID"}`}],help:"required",children:(0,t.jsx)(_.TextInput,{placeholder:""})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Models"," ",(0,t.jsx)(T.Tooltip,{title:"Select which models this key can access. Choose 'All Team Models' to grant access to all models available to the team. Leave empty to allow access to all models.",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"models",rules:[],help:"management"===to||"read_only"===to?"Models field is disabled for this key type":"optional - leave empty to allow access to all models",className:"mt-4",children:(0,t.jsxs)(k.Select,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},disabled:"management"===to||"read_only"===to,onChange:e=>{e.includes("all-team-models")&&eC.setFieldsValue({models:["all-team-models"]})},children:[!e4&&(0,t.jsx)(el,{value:"all-team-models",children:"All Team Models"},"all-team-models"),eP.map(e=>(0,t.jsx)(el,{value:e,children:(0,Q.getModelDisplayName)(e)},e))]})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Key Type"," ",(0,t.jsx)(T.Tooltip,{title:"Select the type of key to determine what routes and operations this key can access",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"key_type",initialValue:"llm_api",className:"mt-4",children:(0,t.jsxs)(k.Select,{defaultValue:"llm_api",placeholder:"Select key type",style:{width:"100%"},optionLabelProp:"label",onChange:e=>{td(e),("management"===e||"read_only"===e)&&eC.setFieldsValue({models:[]})},children:[(0,t.jsx)(el,{value:"llm_api",label:"AI APIs",children:(0,t.jsxs)("div",{style:{padding:"4px 0"},children:[(0,t.jsx)(I.Typography.Text,{strong:!0,children:"AI APIs"}),(0,t.jsx)(I.Typography.Paragraph,{type:"secondary",style:{fontSize:11,margin:"2px 0 0"},children:"Can call only AI API routes (chat/completions, embeddings, etc.)"})]})}),(0,t.jsx)(el,{value:"management",label:"Management",children:(0,t.jsxs)("div",{style:{padding:"4px 0"},children:[(0,t.jsx)(I.Typography.Text,{strong:!0,children:"Management"}),(0,t.jsx)(I.Typography.Paragraph,{type:"secondary",style:{fontSize:11,margin:"2px 0 0"},children:"Can call only management routes (user/team/key management)"})]})}),(0,t.jsx)(el,{value:"default",label:"Full Access",children:(0,t.jsxs)("div",{style:{padding:"4px 0"},children:[(0,t.jsx)(I.Typography.Text,{strong:!0,children:"Full Access"}),(0,t.jsx)(I.Typography.Paragraph,{type:"secondary",style:{fontSize:11,margin:"2px 0 0"},children:"Can call all routes (AI APIs, Management, and read-only)"})]})})]})})]}),!tT&&(0,t.jsx)("div",{className:"mb-8",children:(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)(f.Title,{className:"m-0",children:"Optional Settings"})}),(0,t.jsxs)(m.AccordionBody,{children:[(0,t.jsx)(j.Form.Item,{className:"mt-4",label:(0,t.jsxs)("span",{children:["Max Budget (USD)"," ",(0,t.jsx)(T.Tooltip,{title:"Maximum amount in USD this key can spend. When reached, the key will be blocked from making further requests",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"max_budget",help:`Budget cannot exceed team max budget: $${e?.max_budget!==null&&e?.max_budget!==void 0?e?.max_budget:"unlimited"}`,rules:[{validator:async(t,s)=>{if(s&&e&&null!==e.max_budget&&s>e.max_budget)throw Error(`Budget cannot exceed team max budget: $${(0,o.formatNumberWithCommas)(e.max_budget,4)}`)}}],children:(0,t.jsx)(es.default,{step:.01,precision:2,width:200})}),(0,t.jsx)(j.Form.Item,{className:"mt-4",label:(0,t.jsxs)("span",{children:["Reset Budget"," ",(0,t.jsx)(T.Tooltip,{title:"How often the budget should reset. For example, setting 'daily' will reset the budget every 24 hours",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"budget_duration",help:`Team Reset Budget: ${e?.budget_duration!==null&&e?.budget_duration!==void 0?e?.budget_duration:"None"}`,children:(0,t.jsx)(P.default,{onChange:e=>eC.setFieldValue("budget_duration",e)})}),(0,t.jsx)(j.Form.Item,{className:"mt-4",label:(0,t.jsxs)("span",{children:["Budget Windows"," ",(0,t.jsx)(T.Tooltip,{title:"Set multiple independent budget windows (e.g., hourly $10 AND monthly $200). Each window tracks spend separately and resets on its own schedule.",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),children:(0,t.jsx)(W.BudgetWindowsEditor,{value:t_,onChange:tf})}),(0,t.jsx)(j.Form.Item,{className:"mt-4",label:(0,t.jsxs)("span",{children:["Tokens per minute Limit (TPM)"," ",(0,t.jsx)(T.Tooltip,{title:"Maximum number of tokens this key can process per minute. Helps control usage and costs",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"tpm_limit",help:`TPM cannot exceed team TPM limit: ${e?.tpm_limit!==null&&e?.tpm_limit!==void 0?e?.tpm_limit:"unlimited"}`,rules:[{validator:async(t,s)=>{if(s&&e&&null!==e.tpm_limit&&s>e.tpm_limit)throw Error(`TPM limit cannot exceed team TPM limit: ${e.tpm_limit}`)}}],children:(0,t.jsx)(es.default,{step:1,width:400})}),(0,t.jsx)(U.default,{type:"tpm",name:"tpm_limit_type",className:"mt-4",initialValue:null,form:eC,showDetailedDescriptions:!0}),(0,t.jsx)(j.Form.Item,{className:"mt-4",label:(0,t.jsxs)("span",{children:["Requests per minute Limit (RPM)"," ",(0,t.jsx)(T.Tooltip,{title:"Maximum number of API requests this key can make per minute. Helps prevent abuse and manage load",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"rpm_limit",help:`RPM cannot exceed team RPM limit: ${e?.rpm_limit!==null&&e?.rpm_limit!==void 0?e?.rpm_limit:"unlimited"}`,rules:[{validator:async(t,s)=>{if(s&&e&&null!==e.rpm_limit&&s>e.rpm_limit)throw Error(`RPM limit cannot exceed team RPM limit: ${e.rpm_limit}`)}}],children:(0,t.jsx)(es.default,{step:1,width:400})}),(0,t.jsx)(U.default,{type:"rpm",name:"rpm_limit_type",className:"mt-4",initialValue:null,form:eC,showDetailedDescriptions:!0}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Guardrails"," ",(0,t.jsx)(T.Tooltip,{title:"Apply safety guardrails to this key to filter content or enforce policies",children:(0,t.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/guardrails/quick_start",target:"_blank",rel:"noopener noreferrer",onClick:e=>e.stopPropagation(),children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})})]}),name:"guardrails",className:"mt-4",help:ex?"Select existing guardrails or enter new ones":"Premium feature - Upgrade to set guardrails by key",children:(0,t.jsx)(k.Select,{mode:"tags",style:{width:"100%"},disabled:!ex,placeholder:ex?"Select or enter guardrails":"Premium feature - Upgrade to set guardrails by key",options:eG.map(e=>({value:e,label:e}))})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Disable Global Guardrails"," ",(0,t.jsx)(T.Tooltip,{title:"When enabled, this key will bypass any guardrails configured to run on every request (global guardrails)",children:(0,t.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/guardrails/quick_start",target:"_blank",rel:"noopener noreferrer",onClick:e=>e.stopPropagation(),children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})})]}),name:"disable_global_guardrails",className:"mt-4",valuePropName:"checked",help:ex?"Bypass global guardrails for this key":"Premium feature - Upgrade to disable global guardrails by key",children:(0,t.jsx)(S.Switch,{disabled:!ex,checkedChildren:"Yes",unCheckedChildren:"No"})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Policies"," ",(0,t.jsx)(T.Tooltip,{title:"Apply policies to this key to control guardrails and other settings",children:(0,t.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/guardrails/guardrail_policies",target:"_blank",rel:"noopener noreferrer",onClick:e=>e.stopPropagation(),children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})})]}),name:"policies",className:"mt-4",help:eh?"Select existing policies or enter new ones":"Premium feature - Upgrade to set policies by key",children:(0,t.jsx)(k.Select,{mode:"tags",style:{width:"100%"},disabled:!eh,placeholder:eh?"Select or enter policies":"Premium feature - Upgrade to set policies by key",options:eq.map(e=>({value:e,label:e}))})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Prompts"," ",(0,t.jsx)(T.Tooltip,{title:"Allow this key to use specific prompt templates",children:(0,t.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/prompt_management",target:"_blank",rel:"noopener noreferrer",onClick:e=>e.stopPropagation(),children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})})]}),name:"prompts",className:"mt-4",help:eh?"Select existing prompts or enter new ones":"Premium feature - Upgrade to set prompts by key",children:(0,t.jsx)(k.Select,{mode:"tags",style:{width:"100%"},disabled:!eh,placeholder:eh?"Select or enter prompts":"Premium feature - Upgrade to set prompts by key",options:eW.map(e=>({value:e,label:e}))})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Access Groups"," ",(0,t.jsx)(T.Tooltip,{title:"Assign access groups to this key. Access groups control which models, MCP servers, and agents this key can use",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"access_group_ids",className:"mt-4",help:"Select access groups to assign to this key",children:(0,t.jsx)(M.default,{placeholder:"Select access groups (optional)"})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Allowed Pass Through Routes"," ",(0,t.jsx)(T.Tooltip,{title:"Allow this key to use specific pass through routes",children:(0,t.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/pass_through",target:"_blank",rel:"noopener noreferrer",onClick:e=>e.stopPropagation(),children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})})]}),name:"allowed_passthrough_routes",className:"mt-4",help:eh?"Select existing pass through routes or enter new ones":"Premium feature - Upgrade to set pass through routes by key",children:(0,t.jsx)(V.default,{onChange:e=>eC.setFieldValue("allowed_passthrough_routes",e),value:eC.getFieldValue("allowed_passthrough_routes"),accessToken:em,placeholder:eh?"Select or enter pass through routes":"Premium feature - Upgrade to set pass through routes by key",disabled:!eh,teamId:eX?eX.team_id:null})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Allowed Vector Stores"," ",(0,t.jsx)(T.Tooltip,{title:"Select which vector stores this key can access. If none selected, the key will have access to all available vector stores",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"allowed_vector_store_ids",className:"mt-4",help:"Select vector stores this key can access. Leave empty for access to all vector stores",children:(0,t.jsx)(ea.default,{onChange:e=>eC.setFieldValue("allowed_vector_store_ids",e),value:eC.getFieldValue("allowed_vector_store_ids"),accessToken:em,placeholder:"Select vector stores (optional)"})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Metadata"," ",(0,t.jsx)(T.Tooltip,{title:"JSON object with additional information about this key. Used for tracking or custom logic",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"metadata",className:"mt-4",children:(0,t.jsx)(v.Input.TextArea,{rows:4,placeholder:"Enter metadata as JSON"})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Tags"," ",(0,t.jsx)(T.Tooltip,{title:"Tags for tracking spend and/or doing tag-based routing. Used for analytics and filtering",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"tags",className:"mt-4",help:"Tags for tracking spend and/or doing tag-based routing.",children:(0,t.jsx)(k.Select,{mode:"tags",style:{width:"100%"},placeholder:"Select or enter tags",tokenSeparators:[","],options:ek})}),(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)("b",{children:"MCP Settings"})}),(0,t.jsxs)(m.AccordionBody,{children:[(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Allowed MCP Servers"," ",(0,t.jsx)(T.Tooltip,{title:"Select which MCP servers or access groups this key can access",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"allowed_mcp_servers_and_groups",help:"Select MCP servers or access groups this key can access",children:(0,t.jsx)(J.default,{onChange:e=>eC.setFieldValue("allowed_mcp_servers_and_groups",e),value:eC.getFieldValue("allowed_mcp_servers_and_groups"),accessToken:em,teamId:eX?.team_id??null,placeholder:"Select MCP servers or access groups (optional)",allowNoMcpServers:!0})}),(0,t.jsx)(j.Form.Item,{name:"mcp_tool_permissions",initialValue:{},hidden:!0,children:(0,t.jsx)(v.Input,{type:"hidden"})}),(0,t.jsx)(j.Form.Item,{noStyle:!0,shouldUpdate:(e,t)=>e.allowed_mcp_servers_and_groups!==t.allowed_mcp_servers_and_groups||e.mcp_tool_permissions!==t.mcp_tool_permissions,children:()=>(0,t.jsx)("div",{className:"mt-6",children:(0,t.jsx)(X.default,{accessToken:em,selectedServers:(eC.getFieldValue("allowed_mcp_servers_and_groups")?.servers||[]).filter(e=>e!==Y.NO_MCP_SERVERS_SENTINEL),toolPermissions:eC.getFieldValue("mcp_tool_permissions")||{},onChange:e=>eC.setFieldsValue({mcp_tool_permissions:e})})})})]})]}),(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)("b",{children:"Agent Settings"})}),(0,t.jsx)(m.AccordionBody,{children:(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Allowed Agents"," ",(0,t.jsx)(T.Tooltip,{title:"Select which agents or access groups this key can access",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"allowed_agents_and_groups",help:"Select agents or access groups this key can access",children:(0,t.jsx)(O.default,{onChange:e=>eC.setFieldValue("allowed_agents_and_groups",e),value:eC.getFieldValue("allowed_agents_and_groups"),accessToken:em,placeholder:"Select agents or access groups (optional)"})})})]}),eh?(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)("b",{children:"Logging Settings"})}),(0,t.jsx)(m.AccordionBody,{children:(0,t.jsx)("div",{className:"mt-4",children:(0,t.jsx)(D.default,{value:eJ,onChange:eY,premiumUser:!0,disabledCallbacks:ti,onDisabledCallbacksChange:tn})})})]}):(0,t.jsx)(T.Tooltip,{title:(0,t.jsxs)("span",{children:["Key-level logging settings is an enterprise feature, get in touch -",(0,t.jsx)("a",{href:"https://www.litellm.ai/enterprise",target:"_blank",children:"https://www.litellm.ai/enterprise"})]}),placement:"top",children:(0,t.jsxs)("div",{style:{position:"relative"},children:[(0,t.jsx)("div",{style:{opacity:.5},children:(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)("b",{children:"Logging Settings"})}),(0,t.jsx)(m.AccordionBody,{children:(0,t.jsx)("div",{className:"mt-4",children:(0,t.jsx)(D.default,{value:eJ,onChange:eY,premiumUser:!1,disabledCallbacks:ti,onDisabledCallbacksChange:tn})})})]})}),(0,t.jsx)("div",{style:{position:"absolute",inset:0,cursor:"not-allowed"}})]})}),(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)("b",{children:"Router Settings"})}),(0,t.jsx)(m.AccordionBody,{children:(0,t.jsx)("div",{className:"mt-4 w-full",children:(0,t.jsx)(z.default,{accessToken:em||"",value:tx||void 0,onChange:ty,modelData:eE.length>0?{data:eE.map(e=>({model_name:e}))}:void 0},tb)})})]},`router-settings-accordion-${tb}`),(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)("b",{children:"Model Aliases"})}),(0,t.jsx)(m.AccordionBody,{children:(0,t.jsxs)("div",{className:"mt-4",children:[(0,t.jsx)(y.Text,{className:"text-sm text-gray-600 mb-4",children:"Create custom aliases for models that can be used in API calls. This allows you to create shortcuts for specific models."}),(0,t.jsx)(B.default,{accessToken:em,initialModelAliases:tc,onAliasUpdate:tu,showExampleConfig:!1})]})})]}),(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)("b",{children:"Key Lifecycle"})}),(0,t.jsx)(m.AccordionBody,{children:(0,t.jsx)("div",{className:"mt-4",children:(0,t.jsx)($.default,{form:eC,autoRotationEnabled:tm,onAutoRotationChange:tp,rotationInterval:tg,onRotationIntervalChange:th,isCreateMode:!0})})}),(0,t.jsx)(j.Form.Item,{name:"duration",hidden:!0,initialValue:null,children:(0,t.jsx)(v.Input,{})})]}),(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("b",{children:"Advanced Settings"}),(0,t.jsx)(T.Tooltip,{title:(0,t.jsxs)("span",{children:["Learn more about advanced settings in our"," ",(0,t.jsx)("a",{href:ee.proxyBaseUrl?`${ee.proxyBaseUrl}/#/key%20management/generate_key_fn_key_generate_post`:"/#/key%20management/generate_key_fn_key_generate_post",target:"_blank",rel:"noopener noreferrer",className:"text-blue-400 hover:text-blue-300",children:"documentation"})]}),children:(0,t.jsx)(d.InfoCircleOutlined,{className:"text-gray-400 hover:text-gray-300 cursor-help"})})]})}),(0,t.jsx)(m.AccordionBody,{children:(0,t.jsx)(R.default,{schemaComponent:"GenerateKeyRequest",form:eC,excludedFields:["key_alias","team_id","organization_id","models","duration","metadata","tags","guardrails","max_budget","budget_duration","tpm_limit","rpm_limit",...eN?["key"]:[]]})})]})]})]})}),(0,t.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,t.jsx)(b.Button,{htmlType:"submit",disabled:tT,style:{opacity:tT?.5:1},children:"Create Key"})})]})}),e5&&(0,t.jsx)(w.Modal,{title:"Create New User",open:e5,onCancel:()=>e3(!1),footer:null,width:800,children:(0,t.jsx)(H.CreateUserButton,{userID:ep,accessToken:em,teams:en,possibleUIRoles:e9,onUserCreated:e=>{e7(e),eC.setFieldsValue({user_id:e}),e3(!1)},isEmbedded:!0})}),eA&&(0,t.jsx)(w.Modal,{open:eT,onOk:tS,onCancel:tC,footer:null,children:(0,t.jsxs)(x.Grid,{numItems:1,className:"gap-2 w-full",children:[(0,t.jsx)(f.Title,{children:"Save your Key"}),(0,t.jsx)(h.Col,{numColSpan:1,children:null!=eA?(0,t.jsx)(et.default,{apiKey:eA}):(0,t.jsx)(y.Text,{children:"Key being created, this might take 30s"})})]})})]})},"fetchTeamModels",0,er,"fetchUserModels",0,ei],702597)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/11h.ntqd0jl3z.js b/litellm/proxy/_experimental/out/_next/static/chunks/11h.ntqd0jl3z.js new file mode 100644 index 00000000000..a04cd25a736 --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/11h.ntqd0jl3z.js @@ -0,0 +1 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,419530,(e,t,r)=>{var n=e.r(641015),a=e.r(580957),i=e.r(666305);t.exports=function(e,t){return e&&e.length?n(e,i(t,2),a):void 0}},549673,(e,t,r)=>{var n=e.r(641015),a=e.r(666305),i=e.r(298128);t.exports=function(e,t){return e&&e.length?n(e,a(t,2),i):void 0}},617802,413990,e=>{"use strict";var t=e.i(843476),r=e.i(271645),n=e.i(602869),a=e.i(500330),i=e.i(135214);e.s(["default",0,({userSpend:e,userMaxBudget:o,selectedTeam:l})=>{let{accessToken:s,userRole:c,userId:u}=(0,i.default)(),[d,f]=(0,r.useState)(null!==e?e:0),[p,m]=(0,r.useState)(l?Number((0,a.formatNumberWithCommas)(l.max_budget,4)):null);(0,r.useEffect)(()=>{if(l)if("Default Team"===l.team_alias)m(o);else{let e=!1;if(l.team_memberships)for(let t of l.team_memberships)t.user_id===u&&"max_budget"in t.litellm_budget_table&&null!==t.litellm_budget_table.max_budget&&(m(t.litellm_budget_table.max_budget),e=!0);e||m(l.max_budget)}else m(o)},[l,o]);let[y,h]=(0,r.useState)([]);(0,r.useEffect)(()=>{let e=async()=>{if(!s||!u||!c)return};(async()=>{try{if(null===u||null===c)return;if(null!==s){let e=(await (0,n.modelAvailableCall)(s,u,c)).data.map(e=>e.id);console.log("available_model_names:",e),h(e)}}catch(e){console.error("Error fetching user models:",e)}})(),e()},[c,s,u]),(0,r.useEffect)(()=>{null!==e&&f(e)},[e]);let v=[];l&&l.models&&(v=l.models),v&&v.includes("all-proxy-models")?(console.log("user models:",y),v=y):v&&v.includes("all-team-models")?v=l.models:v&&0===v.length&&(v=y);let b=null!==p?`$${(0,a.formatNumberWithCommas)(Number(p),4)} limit`:"No limit",g=void 0!==d?(0,a.formatNumberWithCommas)(d,4):null;return console.log(`spend in view user spend: ${d}`),(0,t.jsx)("div",{className:"flex items-center",children:(0,t.jsxs)("div",{className:"flex justify-between gap-x-6",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"text-tremor-default text-tremor-content dark:text-dark-tremor-content",children:"Total Spend"}),(0,t.jsxs)("p",{className:"text-2xl text-tremor-content-strong dark:text-dark-tremor-content-strong font-semibold",children:["$",g]})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"text-tremor-default text-tremor-content dark:text-dark-tremor-content",children:"Max Budget"}),(0,t.jsx)("p",{className:"text-2xl text-tremor-content-strong dark:text-dark-tremor-content-strong font-semibold",children:b})]})]})})}],617802);var o=e.i(290571),l=e.i(480731),s=e.i(95779),c=e.i(444755),u=e.i(673706),d=e.i(731195),f=e.i(883966),p=e.i(771223),m=e.i(207670),y=e.i(997865),h=e.i(238279),v=e.i(781977),b=["points","className","baseLinePoints","connectNulls"];function g(){return(g=Object.assign.bind()).apply(this,arguments)}function x(e){return function(e){if(Array.isArray(e))return k(e)}(e)||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e){if(e){if("string"==typeof e)return k(e,void 0);var t=Object.prototype.toString.call(e).slice(8,-1);if("Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t)return Array.from(e);if("Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return k(e,void 0)}}(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function k(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r0&&void 0!==arguments[0]?arguments[0]:[],t=[[]];return e.forEach(function(e){A(e)?t[t.length-1].push(e):t[t.length-1].length>0&&t.push([])}),A(e[0])&&t[t.length-1].push(e[0]),t[t.length-1].length<=0&&(t=t.slice(0,-1)),t},w=function(e,t){var r=O(e);t&&(r=[r.reduce(function(e,t){return[].concat(x(e),x(t))},[])]);var n=r.map(function(e){return e.reduce(function(e,t,r){return"".concat(e).concat(0===r?"M":"L").concat(t.x,",").concat(t.y)},"")}).join("");return 1===r.length?"".concat(n,"Z"):n},j=function(e,t,r){var n=w(e,r);return"".concat("Z"===n.slice(-1)?n.slice(0,-1):n,"L").concat(w(t.reverse(),r).slice(1))},P=function(e){var t=e.points,n=e.className,a=e.baseLinePoints,i=e.connectNulls,o=function(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}(e,b);if(!t||!t.length)return null;var l=(0,m.default)("recharts-polygon",n);if(a&&a.length){var s=o.stroke&&"none"!==o.stroke,c=j(t,a,i);return r.default.createElement("g",{className:l},r.default.createElement("path",g({},(0,v.filterProps)(o,!0),{fill:"Z"===c.slice(-1)?o.fill:"none",stroke:"none",d:c})),s?r.default.createElement("path",g({},(0,v.filterProps)(o,!0),{fill:"none",d:w(t,i)})):null,s?r.default.createElement("path",g({},(0,v.filterProps)(o,!0),{fill:"none",d:w(a,i)})):null)}var u=w(t,i);return r.default.createElement("path",g({},(0,v.filterProps)(o,!0),{fill:"Z"===u.slice(-1)?o.fill:"none",className:l,d:u}))},S=e.i(209516),E=e.i(373393),C=e.i(768970);function N(e){return(N="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function T(){return(T=Object.assign.bind()).apply(this,arguments)}function L(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function D(e){for(var t=1;t1e-5?"outer"===t?"start":"end":r<-1e-5?"outer"===t?"end":"start":"middle"}},{key:"renderAxisLine",value:function(){var e=this.props,t=e.cx,n=e.cy,a=e.radius,i=e.axisLine,o=e.axisLineType,l=D(D({},(0,v.filterProps)(this.props,!1)),{},{fill:"none"},(0,v.filterProps)(i,!1));if("circle"===o)return r.default.createElement(h.Dot,T({className:"recharts-polar-angle-axis-line"},l,{cx:t,cy:n,r:a}));var s=this.props.ticks.map(function(e){return(0,C.polarToCartesian)(t,n,a,e.coordinate)});return r.default.createElement(P,T({className:"recharts-polar-angle-axis-line"},l,{points:s}))}},{key:"renderTicks",value:function(){var e=this,t=this.props,n=t.ticks,i=t.tick,o=t.tickLine,l=t.tickFormatter,s=t.stroke,c=(0,v.filterProps)(this.props,!1),u=(0,v.filterProps)(i,!1),d=D(D({},c),{},{fill:"none"},(0,v.filterProps)(o,!1)),f=n.map(function(t,n){var f=e.getTickLineCoord(t),p=D(D(D({textAnchor:e.getTickTextAnchor(t)},c),{},{stroke:"none",fill:s},u),{},{index:n,payload:t,x:f.x2,y:f.y2});return r.default.createElement(y.Layer,T({className:(0,m.default)("recharts-polar-angle-axis-tick",(0,C.getTickClassName)(i)),key:"tick-".concat(t.coordinate)},(0,E.adaptEventsOfChild)(e.props,t,n)),o&&r.default.createElement("line",T({className:"recharts-polar-angle-axis-tick-line"},d,f)),i&&a.renderTickItem(i,p,l?l(t.value,n):t.value))});return r.default.createElement(y.Layer,{className:"recharts-polar-angle-axis-ticks"},f)}},{key:"render",value:function(){var e=this.props,t=e.ticks,n=e.radius,a=e.axisLine;return!(n<=0)&&t&&t.length?r.default.createElement(y.Layer,{className:(0,m.default)("recharts-polar-angle-axis",this.props.className)},a&&this.renderAxisLine(),this.renderTicks()):null}}],n=[{key:"renderTickItem",value:function(e,t,n){return r.default.isValidElement(e)?r.default.cloneElement(e,t):(0,p.default)(e)?e(t):r.default.createElement(S.Text,T({},t,{className:"recharts-polar-angle-axis-tick-value"}),n)}}],t&&R(a.prototype,t),n&&R(a,n),Object.defineProperty(a,"prototype",{writable:!1}),a}(r.PureComponent);_(V,"displayName","PolarAngleAxis"),_(V,"axisType","angleAxis"),_(V,"defaultProps",{type:"category",angleAxisId:0,scale:"auto",cx:0,cy:0,orientation:"outer",axisLine:!0,tickLine:!0,tickSize:8,tick:!0,hide:!1,allowDuplicatedCategory:!0});var F=e.i(419530),W=e.i(549673),z=e.i(800494),G=["cx","cy","angle","ticks","axisLine"],H=["ticks","tick","angle","tickFormatter","stroke"];function q(e){return(q="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function U(){return(U=Object.assign.bind()).apply(this,arguments)}function X(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function Y(e){for(var t=1;t=0)continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}function J(e,t){for(var r=0;r0?(0,eo.default)(e,"paddingAngle",0):0;if(r){var l=(0,ep.interpolateNumber)(r.endAngle-r.startAngle,e.endAngle-e.startAngle),s=ex(ex({},e),{},{startAngle:o+n,endAngle:o+l(a)+n});i.push(s),o=s.endAngle}else{var c=e.endAngle,d=e.startAngle,f=(0,ep.interpolateNumber)(0,c-d)(a),p=ex(ex({},e),{},{startAngle:o+n,endAngle:o+f+n});i.push(p),o=p.endAngle}}),r.default.createElement(y.Layer,null,e.renderSectorsStatically(i))})}},{key:"attachKeyboardHandlers",value:function(e){var t=this;e.onkeydown=function(e){if(!e.altKey)switch(e.key){case"ArrowLeft":var r=++t.state.sectorToFocus%t.sectorRefs.length;t.sectorRefs[r].focus(),t.setState({sectorToFocus:r});break;case"ArrowRight":var n=--t.state.sectorToFocus<0?t.sectorRefs.length-1:t.state.sectorToFocus%t.sectorRefs.length;t.sectorRefs[n].focus(),t.setState({sectorToFocus:n});break;case"Escape":t.sectorRefs[t.state.sectorToFocus].blur(),t.setState({sectorToFocus:0})}}}},{key:"renderSectors",value:function(){var e=this.props,t=e.sectors,r=e.isAnimationActive,n=this.state.prevSectors;return r&&t&&t.length&&(!n||!(0,el.default)(n,t))?this.renderSectorsWithAnimation():this.renderSectorsStatically(t)}},{key:"componentDidMount",value:function(){this.pieRef&&this.attachKeyboardHandlers(this.pieRef)}},{key:"render",value:function(){var e=this,t=this.props,n=t.hide,a=t.sectors,i=t.className,o=t.label,l=t.cx,s=t.cy,c=t.innerRadius,u=t.outerRadius,d=t.isAnimationActive,f=this.state.isAnimationFinished;if(n||!a||!a.length||!(0,ep.isNumber)(l)||!(0,ep.isNumber)(s)||!(0,ep.isNumber)(c)||!(0,ep.isNumber)(u))return null;var p=(0,m.default)("recharts-pie",i);return r.default.createElement(y.Layer,{tabIndex:this.props.rootTabIndex,className:p,ref:function(t){e.pieRef=t}},this.renderSectors(),o&&this.renderLabels(a),z.Label.renderCallByParent(this.props,null,!1),(!d||f)&&eu.LabelList.renderCallByParent(this.props,a,!1))}}],n=[{key:"getDerivedStateFromProps",value:function(e,t){return t.prevIsAnimationActive!==e.isAnimationActive?{prevIsAnimationActive:e.isAnimationActive,prevAnimationId:e.animationId,curSectors:e.sectors,prevSectors:[],isAnimationFinished:!0}:e.isAnimationActive&&e.animationId!==t.prevAnimationId?{prevAnimationId:e.animationId,curSectors:e.sectors,prevSectors:t.curSectors,isAnimationFinished:!0}:e.sectors!==t.curSectors?{curSectors:e.sectors,isAnimationFinished:!0}:null}},{key:"getTextAnchor",value:function(e,t){return e>t?"start":e=360?x:x-1)*u,A=o.reduce(function(e,t){var r=(0,em.getValueByDataKey)(t,g,0);return e+((0,ep.isNumber)(r)?r:0)},0);return A>0&&(t=o.map(function(e,t){var n,a=(0,em.getValueByDataKey)(e,g,0),i=(0,em.getValueByDataKey)(e,f,t),o=((0,ep.isNumber)(a)?a:0)/A,c=(n=t?r.endAngle+(0,ep.mathSign)(v)*u*(0!==a):s)+(0,ep.mathSign)(v)*((0!==a?y:0)+o*k),d=(n+c)/2,p=(h.innerRadius+h.outerRadius)/2,b=[{name:i,value:a,payload:e,dataKey:g,type:m}],x=(0,C.polarToCartesian)(h.cx,h.cy,p,d);return r=ex(ex(ex({percent:o,cornerRadius:l,name:i,tooltipPayload:b,midAngle:d,middleRadius:p,tooltipPosition:x},e),h),{},{value:(0,em.getValueByDataKey)(e,g),startAngle:n,endAngle:c,payload:e,paddingAngle:(0,ep.mathSign)(v)*u})})),ex(ex({},h),{},{sectors:t,data:o})});var eE=(0,f.generateCategoricalChart)({chartName:"PieChart",GraphicalChild:eS,validateTooltipEventTypes:["item"],defaultTooltipEventType:"item",legendContent:"children",axisComponents:[{axisType:"angleAxis",AxisComp:V},{axisType:"radiusAxis",AxisComp:ea}],formatAxisMap:C.formatAxisMap,defaultProps:{layout:"centric",startAngle:0,endAngle:360,cx:"50%",cy:"50%",innerRadius:0,outerRadius:"80%"}}),eC=e.i(234239),eN=e.i(239425),eT=e.i(628781),eL=e.i(933303);let eD=({active:e,payload:t,valueFormatter:n})=>{if(e&&(null==t?void 0:t[0])){let e=null==t?void 0:t[0];return r.default.createElement(eL.ChartTooltipFrame,null,r.default.createElement("div",{className:(0,c.tremorTwMerge)("px-4 py-2")},r.default.createElement(eL.ChartTooltipRow,{value:n(e.value),name:e.name,color:e.payload.color})))}return null},eR=e=>{let{cx:t,cy:n,innerRadius:a,outerRadius:i,startAngle:o,endAngle:l,className:s}=e;return r.default.createElement("g",null,r.default.createElement(eN.Sector,{cx:t,cy:n,innerRadius:a,outerRadius:i,startAngle:o,endAngle:l,className:s,fill:"",opacity:.3,style:{outline:"none"}}))},eI=r.default.forwardRef((e,t)=>{let{data:n=[],category:a="value",index:i="name",colors:f=s.themeColorRange,variant:p="donut",valueFormatter:m=u.defaultValueFormatter,label:y,showLabel:h=!0,animationDuration:v=900,showAnimation:b=!1,showTooltip:g=!0,noDataText:x,onValueChange:k,customTooltip:A,className:O}=e,w=(0,o.__rest)(e,["data","category","index","colors","variant","valueFormatter","label","showLabel","animationDuration","showAnimation","showTooltip","noDataText","onValueChange","customTooltip","className"]),j="donut"==p,P=y||m((0,u.sumNumericArray)(n.map(e=>e[a]))),[S,E]=r.default.useState(void 0),C=!!k;return(0,r.useEffect)(()=>{let e=document.querySelectorAll(".recharts-pie-sector");e&&e.forEach(e=>{e.setAttribute("style","outline: none")})},[S]),r.default.createElement("div",Object.assign({ref:t,className:(0,c.tremorTwMerge)("w-full h-40",O)},w),r.default.createElement(d.ResponsiveContainer,{className:"h-full w-full"},(null==n?void 0:n.length)?r.default.createElement(eE,{onClick:C&&S?()=>{E(void 0),null==k||k(null)}:void 0,margin:{top:0,left:0,right:0,bottom:0}},h&&j?r.default.createElement("text",{className:(0,c.tremorTwMerge)("fill-tremor-content-emphasis","dark:fill-dark-tremor-content-emphasis"),x:"50%",y:"50%",textAnchor:"middle",dominantBaseline:"middle"},P):null,r.default.createElement(eS,{className:(0,c.tremorTwMerge)("stroke-tremor-background dark:stroke-dark-tremor-background",k?"cursor-pointer":"cursor-default"),data:n.map((e,t)=>{let r=t{var n;return A?r.default.createElement(A,{payload:null==t?void 0:t.map(e=>{var r,n,a;return Object.assign(Object.assign({},e),{color:null!=(a=null==(n=null==(r=null==t?void 0:t[0])?void 0:r.payload)?void 0:n.color)?a:l.BaseColors.Gray})}),active:e,label:null==(n=null==t?void 0:t[0])?void 0:n.name}):r.default.createElement(eD,{active:e,payload:t,valueFormatter:m})}:r.default.createElement(r.default.Fragment,null)})):r.default.createElement(eT.default,{noDataText:x})))});eI.displayName="DonutChart",e.s(["DonutChart",0,eI],413990)},476961,555706,e=>{"use strict";var t=e.i(290571),r=e.i(271645),n=e.i(731195),a=e.i(883966),i=e.i(207670),o=e.i(273050),l=e.i(771223),s=e.i(86966),c=e.i(629873),u=e.i(878948),d=e.i(898892),f=e.i(372733),p=e.i(238279),m=e.i(997865),y=e.i(969212),h=e.i(562728),v=e.i(794395),b=e.i(198770),g=e.i(781977),x=["layout","type","stroke","connectNulls","isRange","ref"],k=["key"];function A(e){return(A="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function O(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}function w(){return(w=Object.assign.bind()).apply(this,arguments)}function j(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function P(e){for(var t=1;t0||!(0,d.default)(l,n)||!(0,d.default)(s,a))?this.renderAreaWithAnimation(e,t):this.renderAreaStatically(n,a,e,t)}},{key:"render",value:function(){var e,t=this.props,n=t.hide,a=t.dot,o=t.points,l=t.className,s=t.top,u=t.left,d=t.xAxis,f=t.yAxis,p=t.width,h=t.height,v=t.isAnimationActive,b=t.id;if(n||!o||!o.length)return null;var x=this.state.isAnimationFinished,k=1===o.length,A=(0,i.default)("recharts-area",l),O=d&&d.allowDataOverflow,w=f&&f.allowDataOverflow,j=O||w,P=(0,c.default)(b)?this.id:b,S=null!=(e=(0,g.filterProps)(a,!1))?e:{r:3,strokeWidth:2},E=S.r,C=S.strokeWidth,N=((0,g.hasClipDot)(a)?a:{}).clipDot,T=void 0===N||N,L=2*(void 0===E?3:E)+(void 0===C?2:C);return r.default.createElement(m.Layer,{className:A},O||w?r.default.createElement("defs",null,r.default.createElement("clipPath",{id:"clipPath-".concat(P)},r.default.createElement("rect",{x:O?u:u-p/2,y:w?s:s-h/2,width:O?p:2*p,height:w?h:2*h})),!T&&r.default.createElement("clipPath",{id:"clipPath-dots-".concat(P)},r.default.createElement("rect",{x:u-L/2,y:s-L/2,width:p+L,height:h+L}))):null,k?null:this.renderArea(j,P),(a||k)&&this.renderDots(j,T,P),(!v||x)&&y.LabelList.renderCallByParent(this.props,o))}}],n=[{key:"getDerivedStateFromProps",value:function(e,t){return e.animationId!==t.prevAnimationId?{prevAnimationId:e.animationId,curPoints:e.points,curBaseLine:e.baseLine,prevPoints:t.curPoints,prevBaseLine:t.curBaseLine}:e.points!==t.curPoints||e.baseLine!==t.curBaseLine?{curPoints:e.points,curBaseLine:e.baseLine}:null}}],t&&S(a.prototype,t),n&&S(a,n),Object.defineProperty(a,"prototype",{writable:!1}),a}(r.PureComponent);T(D,"displayName","Area"),T(D,"defaultProps",{stroke:"#3182bd",fill:"#3182bd",fillOpacity:.6,xAxisId:0,yAxisId:0,legendType:"line",connectNulls:!1,points:[],dot:!1,activeDot:!0,hide:!1,isAnimationActive:!h.Global.isSsr,animationBegin:0,animationDuration:1500,animationEasing:"ease"}),T(D,"getBaseValue",function(e,t,r,n){var a=e.layout,i=e.baseValue,o=t.props.baseValue,l=null!=o?o:i;if((0,v.isNumber)(l)&&"number"==typeof l)return l;var s="horizontal"===a?n:r,c=s.scale.domain();if("number"===s.type){var u=Math.max(c[0],c[1]),d=Math.min(c[0],c[1]);return"dataMin"===l?d:"dataMax"===l||u<0?u:Math.max(Math.min(c[0],c[1]),0)}return"dataMin"===l?c[0]:"dataMax"===l?c[1]:c[0]}),T(D,"getComposedData",function(e){var t,r=e.props,n=e.item,a=e.xAxis,i=e.yAxis,o=e.xAxisTicks,l=e.yAxisTicks,s=e.bandSize,c=e.dataKey,u=e.stackedData,d=e.dataStartIndex,f=e.displayedData,p=e.offset,m=r.layout,y=u&&u.length,h=D.getBaseValue(r,n,a,i),v="horizontal"===m,g=!1,x=f.map(function(e,t){y?r=u[d+t]:Array.isArray(r=(0,b.getValueByDataKey)(e,c))?g=!0:r=[h,r];var r,n=null==r[1]||y&&null==(0,b.getValueByDataKey)(e,c);return v?{x:(0,b.getCateCoordinateOfLine)({axis:a,ticks:o,bandSize:s,entry:e,index:t}),y:n?null:i.scale(r[1]),value:r,payload:e}:{x:n?null:a.scale(r[1]),y:(0,b.getCateCoordinateOfLine)({axis:i,ticks:l,bandSize:s,entry:e,index:t}),value:r,payload:e}});return t=y||g?x.map(function(e){var t=Array.isArray(e.value)?e.value[0]:null;return v?{x:e.x,y:null!=t&&null!=e.y?i.scale(t):null}:{x:null!=t?a.scale(t):null,y:e.y}}):v?i.scale(h):a.scale(h),P({points:x,baseLine:t,layout:m,isRange:g},p)}),T(D,"renderDotItem",function(e,t){var n;if(r.default.isValidElement(e))n=r.default.cloneElement(e,t);else if((0,l.default)(e))n=e(t);else{var a=(0,i.default)("recharts-area-dot","boolean"!=typeof e?e.className:""),o=t.key,s=O(t,k);n=r.default.createElement(p.Dot,w({},s,{key:o,className:a}))}return n});var R=e.i(785183),I=e.i(93230),B=e.i(844171),M=(0,a.generateCategoricalChart)({chartName:"AreaChart",GraphicalChild:D,axisComponents:[{axisType:"xAxis",AxisComp:R.XAxis},{axisType:"yAxis",AxisComp:I.YAxis}],formatAxisMap:B.formatAxisMap}),_=e.i(872526),$=e.i(800494),K=e.i(234239),V=e.i(559559),F=e.i(734251),W=["type","layout","connectNulls","ref"],z=["key"];function G(e){return(G="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function H(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r={};for(var n in e)if(Object.prototype.hasOwnProperty.call(e,n)){if(t.indexOf(n)>=0)continue;r[n]=e[n]}return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}function q(){return(q=Object.assign.bind()).apply(this,arguments)}function U(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),r.push.apply(r,n)}return r}function X(e){for(var t=1;ttypeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e){if(e){if("string"==typeof e)return Z(e,void 0);var t=Object.prototype.toString.call(e).slice(8,-1);if("Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t)return Array.from(e);if("Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return Z(e,void 0)}}(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Z(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);rl){c=[].concat(Y(n.slice(0,u)),[l-d]);break}var f=c.length%2==0?[0,s]:[s];return[].concat(Y(a.repeat(n,o)),Y(c),f).map(function(e){return"".concat(e,"px")}).join(", ")}),er(e,"id",(0,v.uniqueId)("recharts-line-")),er(e,"pathRef",function(t){e.mainCurve=t}),er(e,"handleAnimationEnd",function(){e.setState({isAnimationFinished:!0}),e.props.onAnimationEnd&&e.props.onAnimationEnd()}),er(e,"handleAnimationStart",function(){e.setState({isAnimationFinished:!1}),e.props.onAnimationStart&&e.props.onAnimationStart()}),e}if("function"!=typeof e&&null!==e)throw TypeError("Super expression must either be null or a function");return a.prototype=Object.create(e&&e.prototype,{constructor:{value:a,writable:!0,configurable:!0}}),Object.defineProperty(a,"prototype",{writable:!1}),e&&et(a,e),t=[{key:"componentDidMount",value:function(){if(this.props.isAnimationActive){var e=this.getTotalLength();this.setState({totalLength:e})}}},{key:"componentDidUpdate",value:function(){if(this.props.isAnimationActive){var e=this.getTotalLength();e!==this.state.totalLength&&this.setState({totalLength:e})}}},{key:"getTotalLength",value:function(){var e=this.mainCurve;try{return e&&e.getTotalLength&&e.getTotalLength()||0}catch(e){return 0}}},{key:"renderErrorBar",value:function(e,t){if(this.props.isAnimationActive&&!this.state.isAnimationFinished)return null;var n=this.props,a=n.points,i=n.xAxis,o=n.yAxis,l=n.layout,s=n.children,c=(0,g.findAllByType)(s,F.ErrorBar);if(!c)return null;var u=function(e,t){return{x:e.x,y:e.y,value:e.value,errorVal:(0,b.getValueByDataKey)(e.payload,t)}};return r.default.createElement(m.Layer,{clipPath:e?"url(#clipPath-".concat(t,")"):null},c.map(function(e){return r.default.cloneElement(e,{key:"bar-".concat(e.props.dataKey),data:a,xAxis:i,yAxis:o,layout:l,dataPointFormatter:u})}))}},{key:"renderDots",value:function(e,t,n){if(this.props.isAnimationActive&&!this.state.isAnimationFinished)return null;var i=this.props,o=i.dot,l=i.points,s=i.dataKey,c=(0,g.filterProps)(this.props,!1),u=(0,g.filterProps)(o,!0),d=l.map(function(e,t){var r=X(X(X({key:"dot-".concat(t),r:3},c),u),{},{index:t,cx:e.x,cy:e.y,value:e.value,dataKey:s,payload:e.payload,points:l});return a.renderDotItem(o,r)}),f={clipPath:e?"url(#clipPath-".concat(t?"":"dots-").concat(n,")"):null};return r.default.createElement(m.Layer,q({className:"recharts-line-dots",key:"dots"},f),d)}},{key:"renderCurveStatically",value:function(e,t,n,a){var i=this.props,o=i.type,l=i.layout,s=i.connectNulls,c=(i.ref,H(i,W)),u=X(X(X({},(0,g.filterProps)(c,!0)),{},{fill:"none",className:"recharts-line-curve",clipPath:t?"url(#clipPath-".concat(n,")"):null,points:e},a),{},{type:o,layout:l,connectNulls:s});return r.default.createElement(f.Curve,q({},u,{pathRef:this.pathRef}))}},{key:"renderCurveWithAnimation",value:function(e,t){var n=this,a=this.props,i=a.points,l=a.strokeDasharray,s=a.isAnimationActive,c=a.animationBegin,u=a.animationDuration,d=a.animationEasing,f=a.animationId,p=a.animateNewValues,m=a.width,y=a.height,h=this.state,b=h.prevPoints,g=h.totalLength;return r.default.createElement(o.default,{begin:c,duration:u,isActive:s,easing:d,from:{t:0},to:{t:1},key:"line-".concat(f),onAnimationEnd:this.handleAnimationEnd,onAnimationStart:this.handleAnimationStart},function(r){var a,o=r.t;if(b){var s=b.length/i.length,c=i.map(function(e,t){var r=Math.floor(t*s);if(b[r]){var n=b[r],a=(0,v.interpolateNumber)(n.x,e.x),i=(0,v.interpolateNumber)(n.y,e.y);return X(X({},e),{},{x:a(o),y:i(o)})}if(p){var l=(0,v.interpolateNumber)(2*m,e.x),c=(0,v.interpolateNumber)(y/2,e.y);return X(X({},e),{},{x:l(o),y:c(o)})}return X(X({},e),{},{x:e.x,y:e.y})});return n.renderCurveStatically(c,e,t)}var u=(0,v.interpolateNumber)(0,g)(o);if(l){var d="".concat(l).split(/[,\s]+/gim).map(function(e){return parseFloat(e)});a=n.getStrokeDasharray(u,g,d)}else a=n.generateSimpleStrokeDasharray(g,u);return n.renderCurveStatically(i,e,t,{strokeDasharray:a})})}},{key:"renderCurve",value:function(e,t){var r=this.props,n=r.points,a=r.isAnimationActive,i=this.state,o=i.prevPoints,l=i.totalLength;return a&&n&&n.length&&(!o&&l>0||!(0,d.default)(o,n))?this.renderCurveWithAnimation(e,t):this.renderCurveStatically(n,e,t)}},{key:"render",value:function(){var e,t=this.props,n=t.hide,a=t.dot,o=t.points,l=t.className,s=t.xAxis,u=t.yAxis,d=t.top,f=t.left,p=t.width,h=t.height,v=t.isAnimationActive,b=t.id;if(n||!o||!o.length)return null;var x=this.state.isAnimationFinished,k=1===o.length,A=(0,i.default)("recharts-line",l),O=s&&s.allowDataOverflow,w=u&&u.allowDataOverflow,j=O||w,P=(0,c.default)(b)?this.id:b,S=null!=(e=(0,g.filterProps)(a,!1))?e:{r:3,strokeWidth:2},E=S.r,C=S.strokeWidth,N=((0,g.hasClipDot)(a)?a:{}).clipDot,T=void 0===N||N,L=2*(void 0===E?3:E)+(void 0===C?2:C);return r.default.createElement(m.Layer,{className:A},O||w?r.default.createElement("defs",null,r.default.createElement("clipPath",{id:"clipPath-".concat(P)},r.default.createElement("rect",{x:O?f:f-p/2,y:w?d:d-h/2,width:O?p:2*p,height:w?h:2*h})),!T&&r.default.createElement("clipPath",{id:"clipPath-dots-".concat(P)},r.default.createElement("rect",{x:f-L/2,y:d-L/2,width:p+L,height:h+L}))):null,!k&&this.renderCurve(j,P),this.renderErrorBar(j,P),(k||a)&&this.renderDots(j,T,P),(!v||x)&&y.LabelList.renderCallByParent(this.props,o))}}],n=[{key:"getDerivedStateFromProps",value:function(e,t){return e.animationId!==t.prevAnimationId?{prevAnimationId:e.animationId,curPoints:e.points,prevPoints:t.curPoints}:e.points!==t.curPoints?{curPoints:e.points}:null}},{key:"repeat",value:function(e,t){for(var r=e.length%2!=0?[].concat(Y(e),[0]):e,n=[],a=0;a{let{data:i=[],categories:o=[],index:l,stack:s=!1,colors:c=eu.themeColorRange,valueFormatter:u=ef.defaultValueFormatter,startEndOnly:d=!1,showXAxis:f=!0,showYAxis:m=!0,yAxisWidth:y=56,intervalType:h="equidistantPreserveStart",showAnimation:v=!1,animationDuration:b=900,showTooltip:g=!0,showLegend:x=!0,showGridLines:k=!0,showGradient:A=!0,autoMinValue:O=!1,curveType:w="linear",minValue:j,maxValue:P,connectNulls:S=!1,allowDecimals:E=!0,noDataText:C,className:N,onValueChange:T,enableLegendSlider:L=!1,customTooltip:B,rotateLabelX:F,padding:W=!f&&!m||d&&!m?{left:0,right:0}:{left:20,right:20},tickGap:z=5,xAxisLabel:G,yAxisLabel:H}=e,q=(0,t.__rest)(e,["data","categories","index","stack","colors","valueFormatter","startEndOnly","showXAxis","showYAxis","yAxisWidth","intervalType","showAnimation","animationDuration","showTooltip","showLegend","showGridLines","showGradient","autoMinValue","curveType","minValue","maxValue","connectNulls","allowDecimals","noDataText","className","onValueChange","enableLegendSlider","customTooltip","rotateLabelX","padding","tickGap","xAxisLabel","yAxisLabel"]),[U,X]=(0,r.useState)(60),[Y,Z]=(0,r.useState)(void 0),[J,Q]=(0,r.useState)(void 0),ee=(0,es.constructCategoryColors)(o,c),et=(0,es.getYAxisDomain)(O,j,P),er=!!T;function en(e){er&&(e===J&&!Y||(0,es.hasOnlyOneValueForThisKey)(i,e)&&Y&&Y.dataKey===e?(Q(void 0),null==T||T(null)):(Q(e),null==T||T({eventType:"category",categoryClicked:e})),Z(void 0))}return r.default.createElement("div",Object.assign({ref:a,className:(0,ed.tremorTwMerge)("w-full h-80",N)},q),r.default.createElement(n.ResponsiveContainer,{className:"h-full w-full"},(null==i?void 0:i.length)?r.default.createElement(M,{data:i,onClick:er&&(J||Y)?()=>{Z(void 0),Q(void 0),null==T||T(null)}:void 0,margin:{bottom:G?30:void 0,left:H?20:void 0,right:H?5:void 0,top:5}},k?r.default.createElement(_.CartesianGrid,{className:(0,ed.tremorTwMerge)("stroke-1","stroke-tremor-border","dark:stroke-dark-tremor-border"),horizontal:!0,vertical:!1}):null,r.default.createElement(R.XAxis,{padding:W,hide:!f,dataKey:l,tick:{transform:"translate(0, 6)"},ticks:d?[i[0][l],i[i.length-1][l]]:void 0,fill:"",stroke:"",className:(0,ed.tremorTwMerge)("text-tremor-label","fill-tremor-content","dark:fill-dark-tremor-content"),interval:d?"preserveStartEnd":h,tickLine:!1,axisLine:!1,minTickGap:z,angle:null==F?void 0:F.angle,dy:null==F?void 0:F.verticalShift,height:null==F?void 0:F.xAxisHeight},G&&r.default.createElement($.Label,{position:"insideBottom",offset:-20,className:"fill-tremor-content-emphasis text-tremor-default font-medium dark:fill-dark-tremor-content-emphasis"},G)),r.default.createElement(I.YAxis,{width:y,hide:!m,axisLine:!1,tickLine:!1,type:"number",domain:et,tick:{transform:"translate(-3, 0)"},fill:"",stroke:"",className:(0,ed.tremorTwMerge)("text-tremor-label","fill-tremor-content","dark:fill-dark-tremor-content"),tickFormatter:u,allowDecimals:E},H&&r.default.createElement($.Label,{position:"insideLeft",style:{textAnchor:"middle"},angle:-90,offset:-15,className:"fill-tremor-content-emphasis text-tremor-default font-medium dark:fill-dark-tremor-content-emphasis"},H)),r.default.createElement(K.Tooltip,{wrapperStyle:{outline:"none"},isAnimationActive:!1,cursor:{stroke:"#d1d5db",strokeWidth:1},content:g?({active:e,payload:t,label:n})=>B?r.default.createElement(B,{payload:null==t?void 0:t.map(e=>{var t;return Object.assign(Object.assign({},e),{color:null!=(t=ee.get(e.dataKey))?t:ec.BaseColors.Gray})}),active:e,label:n}):r.default.createElement(eo.default,{active:e,payload:t,label:n,valueFormatter:u,categoryColors:ee}):r.default.createElement(r.default.Fragment,null),position:{y:0}}),x?r.default.createElement(V.Legend,{verticalAlign:"top",height:U,content:({payload:e})=>(0,ei.default)({payload:e},ee,X,J,er?e=>en(e):void 0,L)}):null,o.map(e=>{var t,n,a;let i=(null!=(t=ee.get(e))?t:ec.BaseColors.Gray).replace("#","");return r.default.createElement("defs",{key:e},A?r.default.createElement("linearGradient",{className:(0,ef.getColorClassNames)(null!=(n=ee.get(e))?n:ec.BaseColors.Gray,eu.colorPalette.text).textColor,id:i,x1:"0",y1:"0",x2:"0",y2:"1"},r.default.createElement("stop",{offset:"5%",stopColor:"currentColor",stopOpacity:Y||J&&J!==e?.15:.4}),r.default.createElement("stop",{offset:"95%",stopColor:"currentColor",stopOpacity:0})):r.default.createElement("linearGradient",{className:(0,ef.getColorClassNames)(null!=(a=ee.get(e))?a:ec.BaseColors.Gray,eu.colorPalette.text).textColor,id:i,x1:"0",y1:"0",x2:"0",y2:"1"},r.default.createElement("stop",{stopColor:"currentColor",stopOpacity:Y||J&&J!==e?.1:.3})))}),o.map(e=>{var t,n;let a=(null!=(t=ee.get(e))?t:ec.BaseColors.Gray).replace("#","");return r.default.createElement(D,{className:(0,ef.getColorClassNames)(null!=(n=ee.get(e))?n:ec.BaseColors.Gray,eu.colorPalette.text).strokeColor,strokeOpacity:Y||J&&J!==e?.3:1,activeDot:e=>{var t;let{cx:n,cy:a,stroke:o,strokeLinecap:l,strokeLinejoin:s,strokeWidth:c,dataKey:u}=e;return r.default.createElement(p.Dot,{className:(0,ed.tremorTwMerge)("stroke-tremor-background dark:stroke-dark-tremor-background",T?"cursor-pointer":"",(0,ef.getColorClassNames)(null!=(t=ee.get(u))?t:ec.BaseColors.Gray,eu.colorPalette.text).fillColor),cx:n,cy:a,r:5,fill:"",stroke:o,strokeLinecap:l,strokeLinejoin:s,strokeWidth:c,onClick:(t,r)=>{r.stopPropagation(),er&&(e.index===(null==Y?void 0:Y.index)&&e.dataKey===(null==Y?void 0:Y.dataKey)||(0,es.hasOnlyOneValueForThisKey)(i,e.dataKey)&&J&&J===e.dataKey?(Q(void 0),Z(void 0),null==T||T(null)):(Q(e.dataKey),Z({index:e.index,dataKey:e.dataKey}),null==T||T(Object.assign({eventType:"dot",categoryClicked:e.dataKey},e.payload))))}})},dot:t=>{var n;let{stroke:a,strokeLinecap:o,strokeLinejoin:l,strokeWidth:s,cx:c,cy:u,dataKey:d,index:f}=t;return(0,es.hasOnlyOneValueForThisKey)(i,e)&&!(Y||J&&J!==e)||(null==Y?void 0:Y.index)===f&&(null==Y?void 0:Y.dataKey)===e?r.default.createElement(p.Dot,{key:f,cx:c,cy:u,r:5,stroke:a,fill:"",strokeLinecap:o,strokeLinejoin:l,strokeWidth:s,className:(0,ed.tremorTwMerge)("stroke-tremor-background dark:stroke-dark-tremor-background",T?"cursor-pointer":"",(0,ef.getColorClassNames)(null!=(n=ee.get(d))?n:ec.BaseColors.Gray,eu.colorPalette.text).fillColor)}):r.default.createElement(r.Fragment,{key:f})},key:e,name:e,type:w,dataKey:e,stroke:"",fill:`url(#${a})`,strokeWidth:2,strokeLinejoin:"round",strokeLinecap:"round",isAnimationActive:v,animationDuration:b,stackId:s?"a":void 0,connectNulls:S})}),T?o.map(e=>r.default.createElement(ea,{className:(0,ed.tremorTwMerge)("cursor-pointer"),strokeOpacity:0,key:e,name:e,type:w,dataKey:e,stroke:"transparent",fill:"transparent",legendType:"none",tooltipType:"none",strokeWidth:12,connectNulls:S,onClick:(e,t)=>{t.stopPropagation();let{name:r}=e;en(r)}})):null):r.default.createElement(el.default,{noDataText:C})))});ep.displayName="AreaChart",e.s(["AreaChart",0,ep],476961)},560025,e=>{"use strict";e.i(247167);var t=e.i(271645),r=e.i(343794),n=e.i(931067),a=e.i(392221),i=e.i(703923),o=e.i(211577),l=e.i(209428),s=e.i(410160),c=e.i(914949),u=e.i(529681),d=e.i(611935),f=e.i(361275),p=e.i(174428),m=function(e,t){if(!e)return null;var r={left:e.offsetLeft,right:e.parentElement.clientWidth-e.clientWidth-e.offsetLeft,width:e.clientWidth,top:e.offsetTop,bottom:e.parentElement.clientHeight-e.clientHeight-e.offsetTop,height:e.clientHeight};return t?{left:0,right:0,width:0,top:r.top,bottom:r.bottom,height:r.height}:{left:r.left,right:r.right,width:r.width,top:0,bottom:0,height:0}},y=function(e){return void 0!==e?"".concat(e,"px"):void 0};function h(e){var n=e.prefixCls,i=e.containerRef,o=e.value,s=e.getValueIndex,c=e.motionName,u=e.onMotionStart,h=e.onMotionEnd,v=e.direction,b=e.vertical,g=void 0!==b&&b,x=t.useRef(null),k=t.useState(o),A=(0,a.default)(k,2),O=A[0],w=A[1],j=function(e){var t,r=s(e),a=null==(t=i.current)?void 0:t.querySelectorAll(".".concat(n,"-item"))[r];return(null==a?void 0:a.offsetParent)&&a},P=t.useState(null),S=(0,a.default)(P,2),E=S[0],C=S[1],N=t.useState(null),T=(0,a.default)(N,2),L=T[0],D=T[1];(0,p.default)(function(){if(O!==o){var e=j(O),t=j(o),r=m(e,g),n=m(t,g);w(o),C(r),D(n),e&&t?u():h()}},[o]);var R=t.useMemo(function(){if(g){var e;return y(null!=(e=null==E?void 0:E.top)?e:0)}return"rtl"===v?y(-(null==E?void 0:E.right)):y(null==E?void 0:E.left)},[g,v,E]),I=t.useMemo(function(){if(g){var e;return y(null!=(e=null==L?void 0:L.top)?e:0)}return"rtl"===v?y(-(null==L?void 0:L.right)):y(null==L?void 0:L.left)},[g,v,L]);return E&&L?t.createElement(f.default,{visible:!0,motionName:c,motionAppear:!0,onAppearStart:function(){return g?{transform:"translateY(var(--thumb-start-top))",height:"var(--thumb-start-height)"}:{transform:"translateX(var(--thumb-start-left))",width:"var(--thumb-start-width)"}},onAppearActive:function(){return g?{transform:"translateY(var(--thumb-active-top))",height:"var(--thumb-active-height)"}:{transform:"translateX(var(--thumb-active-left))",width:"var(--thumb-active-width)"}},onVisibleChanged:function(){C(null),D(null),h()}},function(e,a){var i=e.className,o=e.style,s=(0,l.default)((0,l.default)({},o),{},{"--thumb-start-left":R,"--thumb-start-width":y(null==E?void 0:E.width),"--thumb-active-left":I,"--thumb-active-width":y(null==L?void 0:L.width),"--thumb-start-top":R,"--thumb-start-height":y(null==E?void 0:E.height),"--thumb-active-top":I,"--thumb-active-height":y(null==L?void 0:L.height)}),c={ref:(0,d.composeRef)(x,a),style:s,className:(0,r.default)("".concat(n,"-thumb"),i)};return t.createElement("div",c)}):null}var v=["prefixCls","direction","vertical","options","disabled","defaultValue","value","name","onChange","className","motionName"],b=function(e){var n=e.prefixCls,a=e.className,i=e.disabled,l=e.checked,s=e.label,c=e.title,u=e.value,d=e.name,f=e.onChange,p=e.onFocus,m=e.onBlur,y=e.onKeyDown,h=e.onKeyUp,v=e.onMouseDown;return t.createElement("label",{className:(0,r.default)(a,(0,o.default)({},"".concat(n,"-item-disabled"),i)),onMouseDown:v},t.createElement("input",{name:d,className:"".concat(n,"-item-input"),type:"radio",disabled:i,checked:l,onChange:function(e){i||f(e,u)},onFocus:p,onBlur:m,onKeyDown:y,onKeyUp:h}),t.createElement("div",{className:"".concat(n,"-item-label"),title:c},s))},g=t.forwardRef(function(e,f){var p,m=e.prefixCls,y=void 0===m?"rc-segmented":m,g=e.direction,x=e.vertical,k=e.options,A=void 0===k?[]:k,O=e.disabled,w=e.defaultValue,j=e.value,P=e.name,S=e.onChange,E=e.className,C=e.motionName,N=(0,i.default)(e,v),T=t.useRef(null),L=t.useMemo(function(){return(0,d.composeRef)(T,f)},[T,f]),D=t.useMemo(function(){return A.map(function(e){if("object"===(0,s.default)(e)&&null!==e){var t=function(e){if(void 0!==e.title)return e.title;if("object"!==(0,s.default)(e.label)){var t;return null==(t=e.label)?void 0:t.toString()}}(e);return(0,l.default)((0,l.default)({},e),{},{title:t})}return{label:null==e?void 0:e.toString(),title:null==e?void 0:e.toString(),value:e}})},[A]),R=(0,c.default)(null==(p=D[0])?void 0:p.value,{value:j,defaultValue:w}),I=(0,a.default)(R,2),B=I[0],M=I[1],_=t.useState(!1),$=(0,a.default)(_,2),K=$[0],V=$[1],F=function(e,t){M(t),null==S||S(t)},W=(0,u.default)(N,["children"]),z=t.useState(!1),G=(0,a.default)(z,2),H=G[0],q=G[1],U=t.useState(!1),X=(0,a.default)(U,2),Y=X[0],Z=X[1],J=function(){Z(!0)},Q=function(){Z(!1)},ee=function(){q(!1)},et=function(e){"Tab"===e.key&&q(!0)},er=function(e){var t=D.findIndex(function(e){return e.value===B}),r=D.length,n=D[(t+e+r)%r];n&&(M(n.value),null==S||S(n.value))},en=function(e){switch(e.key){case"ArrowLeft":case"ArrowUp":er(-1);break;case"ArrowRight":case"ArrowDown":er(1)}};return t.createElement("div",(0,n.default)({role:"radiogroup","aria-label":"segmented control",tabIndex:O?void 0:0,"aria-orientation":x?"vertical":"horizontal"},W,{className:(0,r.default)(y,(0,o.default)((0,o.default)((0,o.default)({},"".concat(y,"-rtl"),"rtl"===g),"".concat(y,"-disabled"),O),"".concat(y,"-vertical"),x),void 0===E?"":E),ref:L}),t.createElement("div",{className:"".concat(y,"-group")},t.createElement(h,{vertical:x,prefixCls:y,value:B,containerRef:T,motionName:"".concat(y,"-").concat(void 0===C?"thumb-motion":C),direction:g,getValueIndex:function(e){return D.findIndex(function(t){return t.value===e})},onMotionStart:function(){V(!0)},onMotionEnd:function(){V(!1)}}),D.map(function(e){return t.createElement(b,(0,n.default)({},e,{name:P,key:e.value,prefixCls:y,className:(0,r.default)(e.className,"".concat(y,"-item"),(0,o.default)((0,o.default)({},"".concat(y,"-item-selected"),e.value===B&&!K),"".concat(y,"-item-focused"),Y&&H&&e.value===B)),checked:e.value===B,onChange:F,onFocus:J,onBlur:Q,onKeyDown:en,onKeyUp:et,onMouseDown:ee,disabled:!!O||!!e.disabled}))})))}),x=e.i(981444),k=e.i(242064),A=e.i(517455);e.i(296059);var O=e.i(915654),w=e.i(183293),j=e.i(246422),P=e.i(838378);function S(e,t){return{[`${e}, ${e}:hover, ${e}:focus`]:{color:t.colorTextDisabled,cursor:"not-allowed"}}}function E(e){return{background:e.itemSelectedBg,boxShadow:e.boxShadowTertiary}}let C=Object.assign({overflow:"hidden"},w.textEllipsis),N=(0,j.genStyleHooks)("Segmented",e=>{let{lineWidth:t,calc:r}=e;return(e=>{let{componentCls:t}=e,r=e.calc(e.controlHeight).sub(e.calc(e.trackPadding).mul(2)).equal(),n=e.calc(e.controlHeightLG).sub(e.calc(e.trackPadding).mul(2)).equal(),a=e.calc(e.controlHeightSM).sub(e.calc(e.trackPadding).mul(2)).equal();return{[t]:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},(0,w.resetComponent)(e)),{display:"inline-block",padding:e.trackPadding,color:e.itemColor,background:e.trackBg,borderRadius:e.borderRadius,transition:`all ${e.motionDurationMid}`}),(0,w.genFocusStyle)(e)),{[`${t}-group`]:{position:"relative",display:"flex",alignItems:"stretch",justifyItems:"flex-start",flexDirection:"row",width:"100%"},[`&${t}-rtl`]:{direction:"rtl"},[`&${t}-vertical`]:{[`${t}-group`]:{flexDirection:"column"},[`${t}-thumb`]:{width:"100%",height:0,padding:`0 ${(0,O.unit)(e.paddingXXS)}`}},[`&${t}-block`]:{display:"flex"},[`&${t}-block ${t}-item`]:{flex:1,minWidth:0},[`${t}-item`]:{position:"relative",textAlign:"center",cursor:"pointer",transition:`color ${e.motionDurationMid}`,borderRadius:e.borderRadiusSM,transform:"translateZ(0)","&-selected":Object.assign(Object.assign({},E(e)),{color:e.itemSelectedColor}),"&-focused":(0,w.genFocusOutline)(e),"&::after":{content:'""',position:"absolute",zIndex:-1,width:"100%",height:"100%",top:0,insetInlineStart:0,borderRadius:"inherit",opacity:0,transition:`opacity ${e.motionDurationMid}, background-color ${e.motionDurationMid}`,pointerEvents:"none"},[`&:not(${t}-item-selected):not(${t}-item-disabled)`]:{"&:hover, &:active":{color:e.itemHoverColor},"&:hover::after":{opacity:1,backgroundColor:e.itemHoverBg},"&:active::after":{opacity:1,backgroundColor:e.itemActiveBg}},"&-label":Object.assign({minHeight:r,lineHeight:(0,O.unit)(r),padding:`0 ${(0,O.unit)(e.segmentedPaddingHorizontal)}`},C),"&-icon + *":{marginInlineStart:e.calc(e.marginSM).div(2).equal()},"&-input":{position:"absolute",insetBlockStart:0,insetInlineStart:0,width:0,height:0,opacity:0,pointerEvents:"none"}},[`${t}-thumb`]:Object.assign(Object.assign({},E(e)),{position:"absolute",insetBlockStart:0,insetInlineStart:0,width:0,height:"100%",padding:`${(0,O.unit)(e.paddingXXS)} 0`,borderRadius:e.borderRadiusSM,[`& ~ ${t}-item:not(${t}-item-selected):not(${t}-item-disabled)::after`]:{backgroundColor:"transparent"}}),[`&${t}-lg`]:{borderRadius:e.borderRadiusLG,[`${t}-item-label`]:{minHeight:n,lineHeight:(0,O.unit)(n),padding:`0 ${(0,O.unit)(e.segmentedPaddingHorizontal)}`,fontSize:e.fontSizeLG},[`${t}-item, ${t}-thumb`]:{borderRadius:e.borderRadius}},[`&${t}-sm`]:{borderRadius:e.borderRadiusSM,[`${t}-item-label`]:{minHeight:a,lineHeight:(0,O.unit)(a),padding:`0 ${(0,O.unit)(e.segmentedPaddingHorizontalSM)}`},[`${t}-item, ${t}-thumb`]:{borderRadius:e.borderRadiusXS}}}),S(`&-disabled ${t}-item`,e)),S(`${t}-item-disabled`,e)),{[`${t}-thumb-motion-appear-active`]:{transition:`transform ${e.motionDurationSlow} ${e.motionEaseInOut}, width ${e.motionDurationSlow} ${e.motionEaseInOut}`,willChange:"transform, width"},[`&${t}-shape-round`]:{borderRadius:9999,[`${t}-item, ${t}-thumb`]:{borderRadius:9999}}})}})((0,P.mergeToken)(e,{segmentedPaddingHorizontal:r(e.controlPaddingHorizontal).sub(t).equal(),segmentedPaddingHorizontalSM:r(e.controlPaddingHorizontalSM).sub(t).equal()}))},e=>{let{colorTextLabel:t,colorText:r,colorFillSecondary:n,colorBgElevated:a,colorFill:i,lineWidthBold:o,colorBgLayout:l}=e;return{trackPadding:o,trackBg:l,itemColor:t,itemHoverColor:r,itemHoverBg:n,itemSelectedBg:a,itemActiveBg:i,itemSelectedColor:r}});var T=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&0>t.indexOf(n)&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var a=0,n=Object.getOwnPropertySymbols(e);at.indexOf(n[a])&&Object.prototype.propertyIsEnumerable.call(e,n[a])&&(r[n[a]]=e[n[a]]);return r};let L=t.forwardRef((e,n)=>{let a=(0,x.default)(),{prefixCls:i,className:o,rootClassName:l,block:s,options:c=[],size:u="middle",style:d,vertical:f,shape:p="default",name:m=a}=e,y=T(e,["prefixCls","className","rootClassName","block","options","size","style","vertical","shape","name"]),{getPrefixCls:h,direction:v,className:b,style:O}=(0,k.useComponentConfig)("segmented"),w=h("segmented",i),[j,P,S]=N(w),E=(0,A.default)(u),C=t.useMemo(()=>c.map(e=>{if("object"==typeof e&&(null==e?void 0:e.icon)){let{icon:r,label:n}=e;return Object.assign(Object.assign({},T(e,["icon","label"])),{label:t.createElement(t.Fragment,null,t.createElement("span",{className:`${w}-item-icon`},r),n&&t.createElement("span",null,n))})}return e}),[c,w]),L=(0,r.default)(o,l,b,{[`${w}-block`]:s,[`${w}-sm`]:"small"===E,[`${w}-lg`]:"large"===E,[`${w}-vertical`]:f,[`${w}-shape-${p}`]:"round"===p},P,S),D=Object.assign(Object.assign({},O),d);return j(t.createElement(g,Object.assign({},y,{name:m,className:L,style:D,options:C,ref:n,prefixCls:w,direction:v,vertical:f})))});e.s(["Segmented",0,L],560025)},1023,e=>{"use strict";var t=e.i(843476),r=e.i(135214),n=e.i(871943),a=e.i(360820),i=e.i(584935),o=e.i(994388),l=e.i(560025),s=e.i(592968),c=e.i(271645),u=e.i(500330),d=e.i(602869),f=e.i(20147),p=e.i(149121);e.s(["default",0,({topKeys:e,teams:m,showTags:y=!1,topKeysLimit:h,setTopKeysLimit:v})=>{let{accessToken:b,userRole:g,userId:x,premiumUser:k}=(0,r.default)(),[A,O]=(0,c.useState)(!1),[w,j]=(0,c.useState)(null),[P,S]=(0,c.useState)(void 0),[E,C]=(0,c.useState)("table"),[N,T]=(0,c.useState)(new Set),L=async e=>{if(b)try{let t=await (0,d.keyInfoV1Call)(b,e.api_key),r=(e=>{let{key:t,info:r}=e;return{token:t,...r}})(t);S(r),j(e.api_key),O(!0)}catch(e){console.error("Error fetching key info:",e)}},D=()=>{O(!1),j(null),S(void 0)};c.default.useEffect(()=>{let e=e=>{"Escape"===e.key&&A&&D()};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[A]);let R=[{header:"Key ID",accessorKey:"api_key",cell:e=>(0,t.jsx)("div",{className:"overflow-hidden",children:(0,t.jsx)(s.Tooltip,{title:e.getValue(),children:(0,t.jsx)(o.Button,{size:"xs",variant:"light",className:"font-mono text-blue-500 bg-blue-50 hover:bg-blue-100 text-xs font-normal px-2 py-0.5 text-left overflow-hidden truncate max-w-[200px]",onClick:()=>L(e.row.original),children:e.getValue()?`${e.getValue().slice(0,7)}...`:"-"})})})},{header:"Key Alias",accessorKey:"key_alias",cell:e=>e.getValue()||"-"}],I={header:"Spend (USD)",accessorKey:"spend",cell:e=>{let t=e.getValue();return t>0&&t<.01?"<$0.01":`$${(0,u.formatNumberWithCommas)(t,2)}`}},B=y?[...R,{header:"Tags",accessorKey:"tags",cell:e=>{let r=e.getValue(),i=e.row.original.api_key,o=N.has(i);if(!r||0===r.length)return"-";let l=r.sort((e,t)=>t.usage-e.usage),c=o?l:l.slice(0,2),d=r.length>2;return(0,t.jsx)("div",{className:"overflow-hidden",children:(0,t.jsxs)("div",{className:"flex flex-wrap items-center gap-1",children:[c.map((e,r)=>(0,t.jsx)(s.Tooltip,{title:(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"text-gray-300",children:"Tag Name:"})," ",e.tag]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("span",{className:"text-gray-300",children:"Spend:"})," ",e.usage>0&&e.usage<.01?"<$0.01":`$${(0,u.formatNumberWithCommas)(e.usage,2)}`]})]}),children:(0,t.jsxs)("span",{className:"px-2 py-1 bg-gray-100 rounded-full text-xs",children:[e.tag.slice(0,7),"..."]})},r)),d&&(0,t.jsx)("button",{onClick:()=>{T(e=>{let t=new Set(e);return t.has(i)?t.delete(i):t.add(i),t})},className:"ml-1 p-1 hover:bg-gray-200 rounded-full transition-colors",title:o?"Show fewer tags":"Show all tags",children:o?(0,t.jsx)(a.ChevronUpIcon,{className:"h-3 w-3 text-gray-500"}):(0,t.jsx)(n.ChevronDownIcon,{className:"h-3 w-3 text-gray-500"})})]})})}},I]:[...R,I],M=e.map(e=>({...e,display_key_alias:e.key_alias&&e.key_alias.length>10?`${e.key_alias.slice(0,10)}...`:e.key_alias||"-"}));return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"mb-4 flex justify-between items-center",children:[(0,t.jsx)(l.Segmented,{options:[{label:"5",value:5},{label:"10",value:10},{label:"25",value:25},{label:"50",value:50}],value:h,onChange:e=>v(e)}),(0,t.jsxs)("div",{className:"flex space-x-2",children:[(0,t.jsx)("button",{onClick:()=>C("table"),className:`px-3 py-1 text-sm rounded-md ${"table"===E?"bg-blue-100 text-blue-700":"bg-gray-100 text-gray-700"}`,children:"Table View"}),(0,t.jsx)("button",{onClick:()=>C("chart"),className:`px-3 py-1 text-sm rounded-md ${"chart"===E?"bg-blue-100 text-blue-700":"bg-gray-100 text-gray-700"}`,children:"Chart View"})]})]}),"chart"===E?(0,t.jsx)("div",{className:"relative max-h-[600px] overflow-y-auto",children:(0,t.jsx)(i.BarChart,{className:"mt-4 cursor-pointer hover:opacity-90",style:{height:52*Math.min(M.length,h)},data:M,index:"display_key_alias",categories:["spend"],colors:["cyan"],yAxisWidth:120,tickGap:5,layout:"vertical",showLegend:!1,valueFormatter:e=>`$${(0,u.formatNumberWithCommas)(e,2)}`,onValueChange:e=>L(e),showTooltip:!0,customTooltip:e=>{let r=e.payload?.[0]?.payload;return(0,t.jsx)("div",{className:"relative z-50 p-3 bg-black/90 shadow-lg rounded-lg text-white max-w-xs",children:(0,t.jsxs)("div",{className:"space-y-1.5",children:[(0,t.jsxs)("div",{className:"text-sm",children:[(0,t.jsx)("span",{className:"text-gray-300",children:"Key Alias: "}),(0,t.jsx)("span",{className:"font-mono text-gray-100 break-all",children:r?.key_alias})]}),(0,t.jsxs)("div",{className:"text-sm",children:[(0,t.jsx)("span",{className:"text-gray-300",children:"Key ID: "}),(0,t.jsx)("span",{className:"font-mono text-gray-100 break-all",children:r?.api_key})]}),(0,t.jsxs)("div",{className:"text-sm",children:[(0,t.jsx)("span",{className:"text-gray-300",children:"Spend: "}),(0,t.jsxs)("span",{className:"text-white font-medium",children:["$",(0,u.formatNumberWithCommas)(r?.spend,2)]})]})]})})}})}):(0,t.jsx)("div",{className:"border rounded-lg overflow-hidden max-h-[600px] overflow-y-auto",children:(0,t.jsx)(p.DataTable,{columns:B,data:e,renderSubComponent:()=>(0,t.jsx)(t.Fragment,{}),getRowCanExpand:()=>!1,isLoading:!1})}),A&&w&&P&&(console.log("Rendering modal with:",{isModalOpen:A,selectedKey:w,keyData:P}),(0,t.jsx)("div",{className:"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50",onClick:e=>{e.target===e.currentTarget&&D()},children:(0,t.jsxs)("div",{className:"bg-white rounded-lg shadow-xl relative w-11/12 max-w-6xl max-h-[90vh] overflow-y-auto min-h-[750px]",children:[(0,t.jsx)("button",{onClick:D,className:"absolute top-4 right-4 text-gray-500 hover:text-gray-700 focus:outline-none","aria-label":"Close",children:(0,t.jsx)("svg",{className:"w-6 h-6",fill:"none",stroke:"currentColor",viewBox:"0 0 24 24",children:(0,t.jsx)("path",{strokeLinecap:"round",strokeLinejoin:"round",strokeWidth:"2",d:"M6 18L18 6M6 6l12 12"})})}),(0,t.jsx)("div",{className:"p-6 h-full",children:(0,t.jsx)(f.default,{keyId:w,onClose:D,keyData:P,teams:m})})]})}))]})}],1023)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/11kowzys1c43t.js b/litellm/proxy/_experimental/out/_next/static/chunks/11kowzys1c43t.js new file mode 100644 index 00000000000..7a80a8c8e37 --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/11kowzys1c43t.js @@ -0,0 +1,420 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,728889,e=>{"use strict";var t=e.i(290571),i=e.i(271645),o=e.i(829087),r=e.i(480731),a=e.i(444755),n=e.i(673706),l=e.i(95779);let s={xs:{paddingX:"px-1.5",paddingY:"py-1.5"},sm:{paddingX:"px-1.5",paddingY:"py-1.5"},md:{paddingX:"px-2",paddingY:"py-2"},lg:{paddingX:"px-2",paddingY:"py-2"},xl:{paddingX:"px-2.5",paddingY:"py-2.5"}},c={xs:{height:"h-3",width:"w-3"},sm:{height:"h-5",width:"w-5"},md:{height:"h-5",width:"w-5"},lg:{height:"h-7",width:"w-7"},xl:{height:"h-9",width:"w-9"}},d={simple:{rounded:"",border:"",ring:"",shadow:""},light:{rounded:"rounded-tremor-default",border:"",ring:"",shadow:""},shadow:{rounded:"rounded-tremor-default",border:"border",ring:"",shadow:"shadow-tremor-card dark:shadow-dark-tremor-card"},solid:{rounded:"rounded-tremor-default",border:"border-2",ring:"ring-1",shadow:""},outlined:{rounded:"rounded-tremor-default",border:"border",ring:"ring-2",shadow:""}},m=(0,n.makeClassName)("Icon"),p=i.default.forwardRef((e,p)=>{let{icon:g,variant:u="simple",tooltip:h,size:f=r.Sizes.SM,color:b,className:v}=e,x=(0,t.__rest)(e,["icon","variant","tooltip","size","color","className"]),_=((e,t)=>{switch(e){case"simple":return{textColor:t?(0,n.getColorClassNames)(t,l.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:"",borderColor:"",ringColor:""};case"light":return{textColor:t?(0,n.getColorClassNames)(t,l.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:t?(0,a.tremorTwMerge)((0,n.getColorClassNames)(t,l.colorPalette.background).bgColor,"bg-opacity-20"):"bg-tremor-brand-muted dark:bg-dark-tremor-brand-muted",borderColor:"",ringColor:""};case"shadow":return{textColor:t?(0,n.getColorClassNames)(t,l.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:t?(0,a.tremorTwMerge)((0,n.getColorClassNames)(t,l.colorPalette.background).bgColor,"bg-opacity-20"):"bg-tremor-background dark:bg-dark-tremor-background",borderColor:"border-tremor-border dark:border-dark-tremor-border",ringColor:""};case"solid":return{textColor:t?(0,n.getColorClassNames)(t,l.colorPalette.text).textColor:"text-tremor-brand-inverted dark:text-dark-tremor-brand-inverted",bgColor:t?(0,a.tremorTwMerge)((0,n.getColorClassNames)(t,l.colorPalette.background).bgColor,"bg-opacity-20"):"bg-tremor-brand dark:bg-dark-tremor-brand",borderColor:"border-tremor-brand-inverted dark:border-dark-tremor-brand-inverted",ringColor:"ring-tremor-ring dark:ring-dark-tremor-ring"};case"outlined":return{textColor:t?(0,n.getColorClassNames)(t,l.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",bgColor:t?(0,a.tremorTwMerge)((0,n.getColorClassNames)(t,l.colorPalette.background).bgColor,"bg-opacity-20"):"bg-tremor-background dark:bg-dark-tremor-background",borderColor:t?(0,n.getColorClassNames)(t,l.colorPalette.ring).borderColor:"border-tremor-brand-subtle dark:border-dark-tremor-brand-subtle",ringColor:t?(0,a.tremorTwMerge)((0,n.getColorClassNames)(t,l.colorPalette.ring).ringColor,"ring-opacity-40"):"ring-tremor-brand-muted dark:ring-dark-tremor-brand-muted"}}})(u,b),{tooltipProps:$,getReferenceProps:y}=(0,o.useTooltip)();return i.default.createElement("span",Object.assign({ref:(0,n.mergeRefs)([p,$.refs.setReference]),className:(0,a.tremorTwMerge)(m("root"),"inline-flex shrink-0 items-center justify-center",_.bgColor,_.textColor,_.borderColor,_.ringColor,d[u].rounded,d[u].border,d[u].shadow,d[u].ring,s[f].paddingX,s[f].paddingY,v)},y,x),i.default.createElement(o.default,Object.assign({text:h},$)),i.default.createElement(g,{className:(0,a.tremorTwMerge)(m("icon"),"shrink-0",c[f].height,c[f].width)}))});p.displayName="Icon",e.s(["default",0,p],728889)},752978,e=>{"use strict";var t=e.i(728889);e.s(["Icon",()=>t.default])},591935,e=>{"use strict";var t=e.i(271645);let i=t.forwardRef(function(e,i){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:i},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z"}))});e.s(["PencilAltIcon",0,i],591935)},122577,e=>{"use strict";var t=e.i(271645);let i=t.forwardRef(function(e,i){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:i},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M14.752 11.168l-3.197-2.132A1 1 0 0010 9.87v4.263a1 1 0 001.555.832l3.197-2.132a1 1 0 000-1.664z"}),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M21 12a9 9 0 11-18 0 9 9 0 0118 0z"}))});e.s(["PlayIcon",0,i],122577)},434626,e=>{"use strict";var t=e.i(271645);let i=t.forwardRef(function(e,i){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:i},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"}))});e.s(["ExternalLinkIcon",0,i],434626)},551332,e=>{"use strict";var t=e.i(271645);let i=t.forwardRef(function(e,i){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:i},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M8 5H6a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2v-1M8 5a2 2 0 002 2h2a2 2 0 002-2M8 5a2 2 0 012-2h2a2 2 0 012 2m0 0h2a2 2 0 012 2v3m2 4H10m0 0l3-3m-3 3l3 3"}))});e.s(["ClipboardCopyIcon",0,i],551332)},902555,e=>{"use strict";var t=e.i(843476),i=e.i(591935),o=e.i(122577),r=e.i(278587),a=e.i(68155),n=e.i(360820),l=e.i(871943),s=e.i(434626),c=e.i(551332),d=e.i(592968),m=e.i(115504),p=e.i(752978);function g({icon:e,onClick:i,className:o,disabled:r,dataTestId:a}){return r?(0,t.jsx)(p.Icon,{icon:e,size:"sm",className:"opacity-50 cursor-not-allowed","data-testid":a}):(0,t.jsx)(p.Icon,{icon:e,size:"sm",onClick:i,className:(0,m.cx)("cursor-pointer",o),"data-testid":a})}let u={Edit:{icon:i.PencilAltIcon,className:"hover:text-blue-600"},Delete:{icon:a.TrashIcon,className:"hover:text-red-600"},Test:{icon:o.PlayIcon,className:"hover:text-blue-600"},Regenerate:{icon:r.RefreshIcon,className:"hover:text-green-600"},Up:{icon:n.ChevronUpIcon,className:"hover:text-blue-600"},Down:{icon:l.ChevronDownIcon,className:"hover:text-blue-600"},Open:{icon:s.ExternalLinkIcon,className:"hover:text-green-600"},Copy:{icon:c.ClipboardCopyIcon,className:"hover:text-blue-600"}};e.s(["default",0,function({onClick:e,tooltipText:i,disabled:o=!1,disabledTooltipText:r,dataTestId:a,variant:n}){let{icon:l,className:s}=u[n];return(0,t.jsx)(d.Tooltip,{title:o?r:i,children:(0,t.jsx)("span",{children:(0,t.jsx)(g,{icon:l,onClick:e,className:s,disabled:o,dataTestId:a})})})}],902555)},916925,e=>{"use strict";var t,i=e.i(555987),o=((t={}).A2A_Agent="A2A Agent",t.AI21="Ai21",t.AI21_CHAT="Ai21 Chat",t.AIML="AI/ML API",t.AIOHTTP_OPENAI="Aiohttp Openai",t.Anthropic="Anthropic",t.ANTHROPIC_TEXT="Anthropic Text",t.AssemblyAI="AssemblyAI",t.AUTO_ROUTER="Auto Router",t.Bedrock="Amazon Bedrock",t.BedrockMantle="Amazon Bedrock Mantle",t.SageMaker="AWS SageMaker",t.Azure="Azure",t.Azure_AI_Studio="Azure AI Foundry (Studio)",t.AZURE_TEXT="Azure Text",t.BASETEN="Baseten",t.BYTEZ="Bytez",t.Cerebras="Cerebras",t.CLARIFAI="Clarifai",t.CLOUDFLARE="Cloudflare",t.CODESTRAL="Codestral",t.Cohere="Cohere",t.COHERE_CHAT="Cohere Chat",t.COMETAPI="Cometapi",t.COMPACTIFAI="Compactifai",t.Cursor="Cursor",t.Dashscope="Dashscope",t.Databricks="Databricks (Qwen API)",t.DATAROBOT="Datarobot",t.DeepInfra="DeepInfra",t.Deepgram="Deepgram",t.Deepseek="Deepseek",t.DOCKER_MODEL_RUNNER="Docker Model Runner",t.DOTPROMPT="Dotprompt",t.ElevenLabs="ElevenLabs",t.EMPOWER="Empower",t.FalAI="Fal AI",t.FEATHERLESS_AI="Featherless Ai",t.FireworksAI="Fireworks AI",t.FRIENDLIAI="Friendliai",t.GALADRIEL="Galadriel",t.GITHUB_COPILOT="Github Copilot",t.Google_AI_Studio="Google AI Studio",t.GradientAI="GradientAI",t.Groq="Groq",t.HEROKU="Heroku",t.Hosted_Vllm="vllm",t.HUGGINGFACE="Huggingface",t.HYPERBOLIC="Hyperbolic",t.Infinity="Infinity",t.JinaAI="Jina AI",t.LAMBDA_AI="Lambda Ai",t.LEMONADE="Lemonade",t.LLAMAFILE="Llamafile",t.LM_STUDIO="Lm Studio",t.LLAMA="Meta Llama",t.MARITALK="Maritalk",t.MiniMax="MiniMax",t.MistralAI="Mistral AI",t.MOONSHOT="Moonshot",t.MORPH="Morph",t.NEBIUS="Nebius",t.NLP_CLOUD="Nlp Cloud",t.NOVITA="Novita",t.NSCALE="Nscale",t.NVIDIA_NIM="Nvidia Nim",t.Ollama="Ollama",t.OLLAMA_CHAT="Ollama Chat",t.OOBABOOGA="Oobabooga",t.OpenAI="OpenAI",t.OPENAI_LIKE="Openai Like",t.OpenAI_Compatible="OpenAI-Compatible Chat Completions (Together AI, vLLM, etc.)",t.OpenAI_Text="OpenAI Text Completion",t.OpenAI_Text_Compatible="OpenAI-Compatible Completions (legacy /v1/completions)",t.Openrouter="Openrouter",t.Oracle="Oracle Cloud Infrastructure (OCI)",t.OVHCLOUD="Ovhcloud",t.Perplexity="Perplexity",t.PETALS="Petals",t.PG_VECTOR="Pg Vector",t.PREDIBASE="Predibase",t.RECRAFT="Recraft",t.REPLICATE="Replicate",t.RunwayML="RunwayML",t.SAGEMAKER_LEGACY="Sagemaker",t.Sambanova="Sambanova",t.SAP="SAP Generative AI Hub",t.Snowflake="Snowflake",t.Soniox="Soniox",t.TEXT_COMPLETION_CODESTRAL="Text-Completion-Codestral",t.TogetherAI="TogetherAI",t.TOPAZ="Topaz",t.Triton="Triton",t.V0="V0",t.VERCEL_AI_GATEWAY="Vercel Ai Gateway",t.Vertex_AI="Vertex AI (Anthropic, Gemini, etc.)",t.VERTEX_AI_BETA="Vertex Ai Beta",t.VLLM="Vllm",t.VolcEngine="VolcEngine",t.Voyage="Voyage AI",t.WANDB="Wandb",t.WATSONX="Watsonx",t.WATSONX_TEXT="Watsonx Text",t.xAI="xAI",t.XINFERENCE="Xinference",t.ZAI="Z.AI (Zhipu AI)",t);let r={A2A_Agent:"a2a_agent",AI21:"ai21",AI21_CHAT:"ai21_chat",AIML:"aiml",AIOHTTP_OPENAI:"aiohttp_openai",Anthropic:"anthropic",ANTHROPIC_TEXT:"anthropic_text",AssemblyAI:"assemblyai",AUTO_ROUTER:"auto_router",Azure:"azure",Azure_AI_Studio:"azure_ai",AZURE_TEXT:"azure_text",BASETEN:"baseten",Bedrock:"bedrock",BedrockMantle:"bedrock_mantle",BYTEZ:"bytez",Cerebras:"cerebras",CLARIFAI:"clarifai",CLOUDFLARE:"cloudflare",CODESTRAL:"codestral",Cohere:"cohere",COHERE_CHAT:"cohere_chat",COMETAPI:"cometapi",COMPACTIFAI:"compactifai",Cursor:"cursor",Dashscope:"dashscope",Databricks:"databricks",DATAROBOT:"datarobot",DeepInfra:"deepinfra",Deepgram:"deepgram",Deepseek:"deepseek",DOCKER_MODEL_RUNNER:"docker_model_runner",DOTPROMPT:"dotprompt",ElevenLabs:"elevenlabs",EMPOWER:"empower",FalAI:"fal_ai",FEATHERLESS_AI:"featherless_ai",FireworksAI:"fireworks_ai",FRIENDLIAI:"friendliai",GALADRIEL:"galadriel",GITHUB_COPILOT:"github_copilot",Google_AI_Studio:"gemini",GradientAI:"gradient_ai",Groq:"groq",HEROKU:"heroku",Hosted_Vllm:"hosted_vllm",HUGGINGFACE:"huggingface",HYPERBOLIC:"hyperbolic",Infinity:"infinity",JinaAI:"jina_ai",LAMBDA_AI:"lambda_ai",LEMONADE:"lemonade",LLAMAFILE:"llamafile",LLAMA:"meta_llama",LM_STUDIO:"lm_studio",MARITALK:"maritalk",MiniMax:"minimax",MistralAI:"mistral",MOONSHOT:"moonshot",MORPH:"morph",NEBIUS:"nebius",NLP_CLOUD:"nlp_cloud",NOVITA:"novita",NSCALE:"nscale",NVIDIA_NIM:"nvidia_nim",Ollama:"ollama",OLLAMA_CHAT:"ollama_chat",OOBABOOGA:"oobabooga",OpenAI:"openai",OPENAI_LIKE:"openai_like",OpenAI_Compatible:"openai",OpenAI_Text:"text-completion-openai",OpenAI_Text_Compatible:"text-completion-openai",Openrouter:"openrouter",Oracle:"oci",OVHCLOUD:"ovhcloud",Perplexity:"perplexity",PETALS:"petals",PG_VECTOR:"pg_vector",PREDIBASE:"predibase",RECRAFT:"recraft",REPLICATE:"replicate",RunwayML:"runwayml",SAGEMAKER_LEGACY:"sagemaker",SageMaker:"sagemaker_chat",Sambanova:"sambanova",SAP:"sap",Snowflake:"snowflake",Soniox:"soniox",TEXT_COMPLETION_CODESTRAL:"text-completion-codestral",TogetherAI:"together_ai",TOPAZ:"topaz",Triton:"triton",V0:"v0",VERCEL_AI_GATEWAY:"vercel_ai_gateway",Vertex_AI:"vertex_ai",VERTEX_AI_BETA:"vertex_ai_beta",VLLM:"vllm",VolcEngine:"volcengine",Voyage:"voyage",WANDB:"wandb",WATSONX:"watsonx",WATSONX_TEXT:"watsonx_text",xAI:"xai",XINFERENCE:"xinference",ZAI:"zai"},a=new Set(["bedrock_mantle"]),n="/ui/assets/logos/",l={"A2A Agent":`${n}a2a_agent.png`,Ai21:`${n}ai21.svg`,"Ai21 Chat":`${n}ai21.svg`,"AI/ML API":`${n}aiml_api.svg`,"Aiohttp Openai":`${n}openai_small.svg`,Anthropic:`${n}anthropic.svg`,"Anthropic Text":`${n}anthropic.svg`,AssemblyAI:`${n}assemblyai_small.png`,Azure:`${n}microsoft_azure.svg`,"Azure AI Foundry (Studio)":`${n}microsoft_azure.svg`,"Azure Text":`${n}microsoft_azure.svg`,Baseten:`${n}baseten.svg`,"Amazon Bedrock":`${n}bedrock.svg`,"Amazon Bedrock Mantle":`${n}bedrock.svg`,"AWS SageMaker":`${n}bedrock.svg`,Cerebras:`${n}cerebras.svg`,Cloudflare:`${n}cloudflare.svg`,Codestral:`${n}mistral.svg`,Cohere:`${n}cohere.svg`,"Cohere Chat":`${n}cohere.svg`,Cometapi:`${n}cometapi.svg`,Cursor:`${n}cursor.svg`,"Databricks (Qwen API)":`${n}databricks.svg`,Dashscope:`${n}dashscope.svg`,Deepseek:`${n}deepseek.svg`,Deepgram:`${n}deepgram.png`,DeepInfra:`${n}deepinfra.png`,ElevenLabs:`${n}elevenlabs.png`,"Fal AI":`${n}fal_ai.jpg`,"Featherless Ai":`${n}featherless.svg`,"Fireworks AI":`${n}fireworks.svg`,Friendliai:`${n}friendli.svg`,"Github Copilot":`${n}github_copilot.svg`,"Google AI Studio":`${n}google.svg`,GradientAI:`${n}gradientai.svg`,Groq:`${n}groq.svg`,vllm:`${n}vllm.png`,Huggingface:`${n}huggingface.svg`,Hyperbolic:`${n}hyperbolic.svg`,Infinity:`${n}infinity.png`,"Jina AI":`${n}jina.png`,"Lambda Ai":`${n}lambda.svg`,"Lm Studio":`${n}lmstudio.svg`,"Meta Llama":`${n}meta_llama.svg`,MiniMax:`${n}minimax.svg`,"Mistral AI":`${n}mistral.svg`,Moonshot:`${n}moonshot.svg`,Morph:`${n}morph.svg`,Nebius:`${n}nebius.svg`,Novita:`${n}novita.svg`,"Nvidia Nim":`${n}nvidia_nim.svg`,Ollama:`${n}ollama.svg`,"Ollama Chat":`${n}ollama.svg`,Oobabooga:`${n}openai_small.svg`,OpenAI:`${n}openai_small.svg`,"Openai Like":`${n}openai_small.svg`,"OpenAI Text Completion":`${n}openai_small.svg`,"OpenAI-Compatible Completions (legacy /v1/completions)":`${n}openai_small.svg`,"OpenAI-Compatible Chat Completions (Together AI, vLLM, etc.)":`${n}openai_small.svg`,Openrouter:`${n}openrouter.svg`,"Oracle Cloud Infrastructure (OCI)":`${n}oracle.svg`,Perplexity:`${n}perplexity-ai.svg`,Recraft:`${n}recraft.svg`,Replicate:`${n}replicate.svg`,RunwayML:`${n}runwayml.png`,Sagemaker:`${n}bedrock.svg`,Sambanova:`${n}sambanova.svg`,"SAP Generative AI Hub":`${n}sap.png`,Snowflake:`${n}snowflake.svg`,Soniox:`${n}soniox.svg`,"Text-Completion-Codestral":`${n}mistral.svg`,TogetherAI:`${n}togetherai.svg`,Topaz:`${n}topaz.svg`,Triton:`${n}nvidia_triton.png`,V0:`${n}v0.svg`,"Vercel Ai Gateway":`${n}vercel.svg`,"Vertex AI (Anthropic, Gemini, etc.)":`${n}google.svg`,"Vertex Ai Beta":`${n}google.svg`,Vllm:`${n}vllm.png`,VolcEngine:`${n}volcengine.png`,"Voyage AI":`${n}voyage.webp`,Watsonx:`${n}watsonx.svg`,"Watsonx Text":`${n}watsonx.svg`,xAI:`${n}xai.svg`,Xinference:`${n}xinference.svg`};e.s(["Providers",()=>o,"getPlaceholder",0,e=>{if("AI/ML API"===e)return"aiml/flux-pro/v1.1";if("Vertex AI (Anthropic, Gemini, etc.)"===e)return"gemini-pro";if("Anthropic"==e)return"claude-3-opus";if("Amazon Bedrock"==e)return"claude-3-opus";if("AWS SageMaker"==e)return"sagemaker/jumpstart-dft-meta-textgeneration-llama-2-7b";else if("Google AI Studio"==e)return"gemini-pro";else if("Azure AI Foundry (Studio)"==e)return"azure_ai/command-r-plus";else if("Azure"==e)return"my-deployment";else if("Oracle Cloud Infrastructure (OCI)"==e)return"oci/xai.grok-4";else if("Snowflake"==e)return"snowflake/mistral-7b";else if("Voyage AI"==e)return"voyage/";else if("Jina AI"==e)return"jina_ai/";else if("VolcEngine"==e)return"volcengine/";else if("DeepInfra"==e)return"deepinfra/";else if("Fal AI"==e)return"fal_ai/fal-ai/flux-pro/v1.1-ultra";else if("RunwayML"==e)return"runwayml/gen4_turbo";else if("Watsonx"===e)return"watsonx/ibm/granite-3-3-8b-instruct";else if("Cursor"===e)return"cursor/claude-4-sonnet";else if("Z.AI (Zhipu AI)"===e)return"zai/glm-4.5";else return"gpt-3.5-turbo"},"getProviderLogoAndName",0,e=>{if(!e)return{logo:"",displayName:"-"};if("gemini"===e.toLowerCase()){let e="Google AI Studio";return{logo:(0,i.resolveLogoSrc)(l[e])??"",displayName:e}}let t=Object.keys(r).find(t=>r[t].toLowerCase()===e.toLowerCase())??Object.keys(r).find(t=>t.toLowerCase()===e.toLowerCase());if(!t)return{logo:"",displayName:e};let a=o[t];return{logo:(0,i.resolveLogoSrc)(l[a])??"",displayName:a}},"getProviderModels",0,(e,t)=>{console.log(`Provider key: ${e}`);let i=r[e];console.log(`Provider mapped to: ${i}`);let o=[];return e&&"object"==typeof t&&(Object.entries(t).forEach(([e,t])=>{if(null!==t&&"object"==typeof t&&"litellm_provider"in t){let r=t.litellm_provider,n="string"==typeof r&&(r.startsWith(`${i}_`)||r.startsWith(`${i}-`));(r===i||n&&!a.has(r))&&o.push(e)}}),"Cohere"==e&&(console.log("Adding cohere chat models"),Object.entries(t).forEach(([e,t])=>{null!==t&&"object"==typeof t&&"litellm_provider"in t&&"cohere_chat"===t.litellm_provider&&o.push(e)})),"AWS SageMaker"==e&&(console.log("Adding sagemaker chat models"),Object.entries(t).forEach(([e,t])=>{null!==t&&"object"==typeof t&&"litellm_provider"in t&&"sagemaker_chat"===t.litellm_provider&&o.push(e)}))),o},"providerLogoMap",0,l,"provider_map",0,r])},94629,e=>{"use strict";var t=e.i(271645);let i=t.forwardRef(function(e,i){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:i},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M7 16V4m0 0L3 8m4-4l4 4m6 0v12m0 0l4-4m-4 4l-4-4"}))});e.s(["SwitchVerticalIcon",0,i],94629)},991124,e=>{"use strict";let t=(0,e.i(475254).default)("copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);e.s(["default",0,t])},166406,e=>{"use strict";var t=e.i(190144);e.s(["CopyOutlined",()=>t.default])},447566,e=>{"use strict";e.i(247167);var t=e.i(931067),i=e.i(271645);let o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M872 474H286.9l350.2-304c5.6-4.9 2.2-14-5.2-14h-88.5c-3.9 0-7.6 1.4-10.5 3.9L155 487.8a31.96 31.96 0 000 48.3L535.1 866c1.5 1.3 3.3 2 5.2 2h91.5c7.4 0 10.8-9.2 5.2-14L286.9 550H872c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8z"}}]},name:"arrow-left",theme:"outlined"};var r=e.i(9583),a=i.forwardRef(function(e,a){return i.createElement(r.default,(0,t.default)({},e,{ref:a,icon:o}))});e.s(["ArrowLeftOutlined",0,a],447566)},360820,e=>{"use strict";var t=e.i(271645);let i=t.forwardRef(function(e,i){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:i},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M5 15l7-7 7 7"}))});e.s(["ChevronUpIcon",0,i],360820)},871943,e=>{"use strict";var t=e.i(271645);let i=t.forwardRef(function(e,i){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:i},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 9l-7 7-7-7"}))});e.s(["ChevronDownIcon",0,i],871943)},269200,e=>{"use strict";var t=e.i(290571),i=e.i(271645),o=e.i(444755);let r=(0,e.i(673706).makeClassName)("Table"),a=i.default.forwardRef((e,a)=>{let{children:n,className:l}=e,s=(0,t.__rest)(e,["children","className"]);return i.default.createElement("div",{className:(0,o.tremorTwMerge)(r("root"),"overflow-auto",l)},i.default.createElement("table",Object.assign({ref:a,className:(0,o.tremorTwMerge)(r("table"),"w-full text-tremor-default","text-tremor-content","dark:text-dark-tremor-content")},s),n))});a.displayName="Table",e.s(["Table",0,a],269200)},942232,e=>{"use strict";var t=e.i(290571),i=e.i(271645),o=e.i(444755);let r=(0,e.i(673706).makeClassName)("TableBody"),a=i.default.forwardRef((e,a)=>{let{children:n,className:l}=e,s=(0,t.__rest)(e,["children","className"]);return i.default.createElement(i.default.Fragment,null,i.default.createElement("tbody",Object.assign({ref:a,className:(0,o.tremorTwMerge)(r("root"),"align-top divide-y","divide-tremor-border","dark:divide-dark-tremor-border",l)},s),n))});a.displayName="TableBody",e.s(["TableBody",0,a],942232)},977572,e=>{"use strict";var t=e.i(290571),i=e.i(271645),o=e.i(444755);let r=(0,e.i(673706).makeClassName)("TableCell"),a=i.default.forwardRef((e,a)=>{let{children:n,className:l}=e,s=(0,t.__rest)(e,["children","className"]);return i.default.createElement(i.default.Fragment,null,i.default.createElement("td",Object.assign({ref:a,className:(0,o.tremorTwMerge)(r("root"),"align-middle whitespace-nowrap text-left p-4",l)},s),n))});a.displayName="TableCell",e.s(["TableCell",0,a],977572)},427612,e=>{"use strict";var t=e.i(290571),i=e.i(271645),o=e.i(444755);let r=(0,e.i(673706).makeClassName)("TableHead"),a=i.default.forwardRef((e,a)=>{let{children:n,className:l}=e,s=(0,t.__rest)(e,["children","className"]);return i.default.createElement(i.default.Fragment,null,i.default.createElement("thead",Object.assign({ref:a,className:(0,o.tremorTwMerge)(r("root"),"text-left","text-tremor-content","dark:text-dark-tremor-content",l)},s),n))});a.displayName="TableHead",e.s(["TableHead",0,a],427612)},64848,e=>{"use strict";var t=e.i(290571),i=e.i(271645),o=e.i(444755);let r=(0,e.i(673706).makeClassName)("TableHeaderCell"),a=i.default.forwardRef((e,a)=>{let{children:n,className:l}=e,s=(0,t.__rest)(e,["children","className"]);return i.default.createElement(i.default.Fragment,null,i.default.createElement("th",Object.assign({ref:a,className:(0,o.tremorTwMerge)(r("root"),"whitespace-nowrap text-left font-semibold top-0 px-4 py-3.5","text-tremor-content-strong","dark:text-dark-tremor-content-strong",l)},s),n))});a.displayName="TableHeaderCell",e.s(["TableHeaderCell",0,a],64848)},496020,e=>{"use strict";var t=e.i(290571),i=e.i(271645),o=e.i(444755);let r=(0,e.i(673706).makeClassName)("TableRow"),a=i.default.forwardRef((e,a)=>{let{children:n,className:l}=e,s=(0,t.__rest)(e,["children","className"]);return i.default.createElement(i.default.Fragment,null,i.default.createElement("tr",Object.assign({ref:a,className:(0,o.tremorTwMerge)(r("row"),l)},s),n))});a.displayName="TableRow",e.s(["TableRow",0,a],496020)},68155,e=>{"use strict";var t=e.i(271645);let i=t.forwardRef(function(e,i){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:i},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"}))});e.s(["TrashIcon",0,i],68155)},278587,e=>{"use strict";var t=e.i(271645);let i=t.forwardRef(function(e,i){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:i},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15"}))});e.s(["RefreshIcon",0,i],278587)},502547,e=>{"use strict";var t=e.i(271645);let i=t.forwardRef(function(e,i){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:i},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9 5l7 7-7 7"}))});e.s(["ChevronRightIcon",0,i],502547)},280898,e=>{"use strict";e.i(247167);var t=e.i(271645),i=e.i(121229),o=e.i(864517),r=e.i(343794),a=e.i(931067),n=e.i(209428),l=e.i(211577),s=e.i(703923),c=e.i(404948),d=["className","prefixCls","style","active","status","iconPrefix","icon","wrapperStyle","stepNumber","disabled","description","title","subTitle","progressDot","stepIcon","tailContent","icons","stepIndex","onStepClick","onClick","render"];function m(e){return"string"==typeof e}let p=function(e){var i,o,p,g,u,h=e.className,f=e.prefixCls,b=e.style,v=e.active,x=e.status,_=e.iconPrefix,$=e.icon,y=(e.wrapperStyle,e.stepNumber),I=e.disabled,C=e.description,A=e.title,w=e.subTitle,S=e.progressDot,k=e.stepIcon,E=e.tailContent,T=e.icons,O=e.stepIndex,j=e.onStepClick,N=e.onClick,L=e.render,M=(0,s.default)(e,d),R={};j&&!I&&(R.role="button",R.tabIndex=0,R.onClick=function(e){null==N||N(e),j(O)},R.onKeyDown=function(e){var t=e.which;(t===c.default.ENTER||t===c.default.SPACE)&&j(O)});var z=x||"wait",P=(0,r.default)("".concat(f,"-item"),"".concat(f,"-item-").concat(z),h,(u={},(0,l.default)(u,"".concat(f,"-item-custom"),$),(0,l.default)(u,"".concat(f,"-item-active"),v),(0,l.default)(u,"".concat(f,"-item-disabled"),!0===I),u)),D=(0,n.default)({},b),H=t.createElement("div",(0,a.default)({},M,{className:P,style:D}),t.createElement("div",(0,a.default)({onClick:N},R,{className:"".concat(f,"-item-container")}),t.createElement("div",{className:"".concat(f,"-item-tail")},E),t.createElement("div",{className:"".concat(f,"-item-icon")},(p=(0,r.default)("".concat(f,"-icon"),"".concat(_,"icon"),(i={},(0,l.default)(i,"".concat(_,"icon-").concat($),$&&m($)),(0,l.default)(i,"".concat(_,"icon-check"),!$&&"finish"===x&&(T&&!T.finish||!T)),(0,l.default)(i,"".concat(_,"icon-cross"),!$&&"error"===x&&(T&&!T.error||!T)),i)),g=t.createElement("span",{className:"".concat(f,"-icon-dot")}),o=S?"function"==typeof S?t.createElement("span",{className:"".concat(f,"-icon")},S(g,{index:y-1,status:x,title:A,description:C})):t.createElement("span",{className:"".concat(f,"-icon")},g):$&&!m($)?t.createElement("span",{className:"".concat(f,"-icon")},$):T&&T.finish&&"finish"===x?t.createElement("span",{className:"".concat(f,"-icon")},T.finish):T&&T.error&&"error"===x?t.createElement("span",{className:"".concat(f,"-icon")},T.error):$||"finish"===x||"error"===x?t.createElement("span",{className:p}):t.createElement("span",{className:"".concat(f,"-icon")},y),k&&(o=k({index:y-1,status:x,title:A,description:C,node:o})),o)),t.createElement("div",{className:"".concat(f,"-item-content")},t.createElement("div",{className:"".concat(f,"-item-title")},A,w&&t.createElement("div",{title:"string"==typeof w?w:void 0,className:"".concat(f,"-item-subtitle")},w)),C&&t.createElement("div",{className:"".concat(f,"-item-description")},C))));return L&&(H=L(H)||null),H};var g=["prefixCls","style","className","children","direction","type","labelPlacement","iconPrefix","status","size","current","progressDot","stepIcon","initial","icons","onChange","itemRender","items"];function u(e){var i,o=e.prefixCls,c=void 0===o?"rc-steps":o,d=e.style,m=void 0===d?{}:d,u=e.className,h=(e.children,e.direction),f=e.type,b=void 0===f?"default":f,v=e.labelPlacement,x=e.iconPrefix,_=void 0===x?"rc":x,$=e.status,y=void 0===$?"process":$,I=e.size,C=e.current,A=void 0===C?0:C,w=e.progressDot,S=e.stepIcon,k=e.initial,E=void 0===k?0:k,T=e.icons,O=e.onChange,j=e.itemRender,N=e.items,L=(0,s.default)(e,g),M="inline"===b,R=M||void 0!==w&&w,z=M||void 0===h?"horizontal":h,P=M?void 0:I,D=(0,r.default)(c,"".concat(c,"-").concat(z),u,(i={},(0,l.default)(i,"".concat(c,"-").concat(P),P),(0,l.default)(i,"".concat(c,"-label-").concat(R?"vertical":void 0===v?"horizontal":v),"horizontal"===z),(0,l.default)(i,"".concat(c,"-dot"),!!R),(0,l.default)(i,"".concat(c,"-navigation"),"navigation"===b),(0,l.default)(i,"".concat(c,"-inline"),M),i)),H=function(e){O&&A!==e&&O(e)};return t.default.createElement("div",(0,a.default)({className:D,style:m},L),(void 0===N?[]:N).filter(function(e){return e}).map(function(e,i){var o=(0,n.default)({},e),r=E+i;return"error"===y&&i===A-1&&(o.className="".concat(c,"-next-error")),o.status||(r===A?o.status=y:r{let i=`${t.componentCls}-item`,o=`${e}IconColor`,r=`${e}TitleColor`,a=`${e}DescriptionColor`,n=`${e}TailColor`,l=`${e}IconBgColor`,s=`${e}IconBorderColor`,c=`${e}DotColor`;return{[`${i}-${e} ${i}-icon`]:{backgroundColor:t[l],borderColor:t[s],[`> ${t.componentCls}-icon`]:{color:t[o],[`${t.componentCls}-icon-dot`]:{background:t[c]}}},[`${i}-${e}${i}-custom ${i}-icon`]:{[`> ${t.componentCls}-icon`]:{color:t[c]}},[`${i}-${e} > ${i}-container > ${i}-content > ${i}-title`]:{color:t[r],"&::after":{backgroundColor:t[n]}},[`${i}-${e} > ${i}-container > ${i}-content > ${i}-description`]:{color:t[a]},[`${i}-${e} > ${i}-container > ${i}-tail::after`]:{backgroundColor:t[n]}}},A=(0,y.genStyleHooks)("Steps",e=>{let{colorTextDisabled:t,controlHeightLG:i,colorTextLightSolid:o,colorText:r,colorPrimary:a,colorTextDescription:n,colorTextQuaternary:l,colorError:s,colorBorderSecondary:c,colorSplit:d}=e;return(e=>{let{componentCls:t}=e;return{[t]:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},(0,$.resetComponent)(e)),{display:"flex",width:"100%",fontSize:0,textAlign:"initial"}),(e=>{let{componentCls:t,motionDurationSlow:i}=e,o=`${t}-item`,r=`${o}-icon`;return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({[o]:{position:"relative",display:"inline-block",flex:1,overflow:"hidden",verticalAlign:"top","&:last-child":{flex:"none",[`> ${o}-container > ${o}-tail, > ${o}-container > ${o}-content > ${o}-title::after`]:{display:"none"}}},[`${o}-container`]:{outline:"none",[`&:focus-visible ${r}`]:(0,$.genFocusOutline)(e)},[`${r}, ${o}-content`]:{display:"inline-block",verticalAlign:"top"},[r]:{width:e.iconSize,height:e.iconSize,marginTop:0,marginBottom:0,marginInlineStart:0,marginInlineEnd:e.marginXS,fontSize:e.iconFontSize,fontFamily:e.fontFamily,lineHeight:(0,_.unit)(e.iconSize),textAlign:"center",borderRadius:e.iconSize,border:`${(0,_.unit)(e.lineWidth)} ${e.lineType} transparent`,transition:`background-color ${i}, border-color ${i}`,[`${t}-icon`]:{position:"relative",top:e.iconTop,color:e.colorPrimary,lineHeight:1}},[`${o}-tail`]:{position:"absolute",top:e.calc(e.iconSize).div(2).equal(),insetInlineStart:0,width:"100%","&::after":{display:"inline-block",width:"100%",height:e.lineWidth,background:e.colorSplit,borderRadius:e.lineWidth,transition:`background ${i}`,content:'""'}},[`${o}-title`]:{position:"relative",display:"inline-block",paddingInlineEnd:e.padding,color:e.colorText,fontSize:e.fontSizeLG,lineHeight:(0,_.unit)(e.titleLineHeight),"&::after":{position:"absolute",top:e.calc(e.titleLineHeight).div(2).equal(),insetInlineStart:"100%",display:"block",width:9999,height:e.lineWidth,background:e.processTailColor,content:'""'}},[`${o}-subtitle`]:{display:"inline",marginInlineStart:e.marginXS,color:e.colorTextDescription,fontWeight:"normal",fontSize:e.fontSize},[`${o}-description`]:{color:e.colorTextDescription,fontSize:e.fontSize}},C("wait",e)),C("process",e)),{[`${o}-process > ${o}-container > ${o}-title`]:{fontWeight:e.fontWeightStrong}}),C("finish",e)),C("error",e)),{[`${o}${t}-next-error > ${t}-item-title::after`]:{background:e.colorError},[`${o}-disabled`]:{cursor:"not-allowed"}})})(e)),(e=>{let{componentCls:t,motionDurationSlow:i}=e;return{[`& ${t}-item`]:{[`&:not(${t}-item-active)`]:{[`& > ${t}-item-container[role='button']`]:{cursor:"pointer",[`${t}-item`]:{[`&-title, &-subtitle, &-description, &-icon ${t}-icon`]:{transition:`color ${i}`}},"&:hover":{[`${t}-item`]:{"&-title, &-subtitle, &-description":{color:e.colorPrimary}}}},[`&:not(${t}-item-process)`]:{[`& > ${t}-item-container[role='button']:hover`]:{[`${t}-item`]:{"&-icon":{borderColor:e.colorPrimary,[`${t}-icon`]:{color:e.colorPrimary}}}}}}},[`&${t}-horizontal:not(${t}-label-vertical)`]:{[`${t}-item`]:{paddingInlineStart:e.padding,whiteSpace:"nowrap","&:first-child":{paddingInlineStart:0},[`&:last-child ${t}-item-title`]:{paddingInlineEnd:0},"&-tail":{display:"none"},"&-description":{maxWidth:e.descriptionMaxWidth,whiteSpace:"normal"}}}}})(e)),(e=>{let{componentCls:t,customIconTop:i,customIconSize:o,customIconFontSize:r}=e;return{[`${t}-item-custom`]:{[`> ${t}-item-container > ${t}-item-icon`]:{height:"auto",background:"none",border:0,[`> ${t}-icon`]:{top:i,width:o,height:o,fontSize:r,lineHeight:(0,_.unit)(o)}}},[`&:not(${t}-vertical)`]:{[`${t}-item-custom`]:{[`${t}-item-icon`]:{width:"auto",background:"none"}}}}})(e)),(e=>{let{componentCls:t,iconSizeSM:i,fontSizeSM:o,fontSize:r,colorTextDescription:a}=e;return{[`&${t}-small`]:{[`&${t}-horizontal:not(${t}-label-vertical) ${t}-item`]:{paddingInlineStart:e.paddingSM,"&:first-child":{paddingInlineStart:0}},[`${t}-item-icon`]:{width:i,height:i,marginTop:0,marginBottom:0,marginInline:`0 ${(0,_.unit)(e.marginXS)}`,fontSize:o,lineHeight:(0,_.unit)(i),textAlign:"center",borderRadius:i},[`${t}-item-title`]:{paddingInlineEnd:e.paddingSM,fontSize:r,lineHeight:(0,_.unit)(i),"&::after":{top:e.calc(i).div(2).equal()}},[`${t}-item-description`]:{color:a,fontSize:r},[`${t}-item-tail`]:{top:e.calc(i).div(2).sub(e.paddingXXS).equal()},[`${t}-item-custom ${t}-item-icon`]:{width:"inherit",height:"inherit",lineHeight:"inherit",background:"none",border:0,borderRadius:0,[`> ${t}-icon`]:{fontSize:i,lineHeight:(0,_.unit)(i),transform:"none"}}}}})(e)),(e=>{let{componentCls:t,iconSizeSM:i,iconSize:o}=e;return{[`&${t}-vertical`]:{display:"flex",flexDirection:"column",[`> ${t}-item`]:{display:"block",flex:"1 0 auto",paddingInlineStart:0,overflow:"visible",[`${t}-item-icon`]:{float:"left",marginInlineEnd:e.margin},[`${t}-item-content`]:{display:"block",minHeight:e.calc(e.controlHeight).mul(1.5).equal(),overflow:"hidden"},[`${t}-item-title`]:{lineHeight:(0,_.unit)(o)},[`${t}-item-description`]:{paddingBottom:e.paddingSM}},[`> ${t}-item > ${t}-item-container > ${t}-item-tail`]:{position:"absolute",top:0,insetInlineStart:e.calc(o).div(2).sub(e.lineWidth).equal(),width:e.lineWidth,height:"100%",padding:`${(0,_.unit)(e.calc(e.marginXXS).mul(1.5).add(o).equal())} 0 ${(0,_.unit)(e.calc(e.marginXXS).mul(1.5).equal())}`,"&::after":{width:e.lineWidth,height:"100%"}},[`> ${t}-item:not(:last-child) > ${t}-item-container > ${t}-item-tail`]:{display:"block"},[` > ${t}-item > ${t}-item-container > ${t}-item-content > ${t}-item-title`]:{"&::after":{display:"none"}},[`&${t}-small ${t}-item-container`]:{[`${t}-item-tail`]:{position:"absolute",top:0,insetInlineStart:e.calc(i).div(2).sub(e.lineWidth).equal(),padding:`${(0,_.unit)(e.calc(e.marginXXS).mul(1.5).add(i).equal())} 0 ${(0,_.unit)(e.calc(e.marginXXS).mul(1.5).equal())}`},[`${t}-item-title`]:{lineHeight:(0,_.unit)(i)}}}}})(e)),(e=>{let{componentCls:t}=e,i=`${t}-item`;return{[`${t}-horizontal`]:{[`${i}-tail`]:{transform:"translateY(-50%)"}}}})(e)),(e=>{let{componentCls:t,iconSize:i,lineHeight:o,iconSizeSM:r}=e;return{[`&${t}-label-vertical`]:{[`${t}-item`]:{overflow:"visible","&-tail":{marginInlineStart:e.calc(i).div(2).add(e.controlHeightLG).equal(),padding:`0 ${(0,_.unit)(e.paddingLG)}`},"&-content":{display:"block",width:e.calc(i).div(2).add(e.controlHeightLG).mul(2).equal(),marginTop:e.marginSM,textAlign:"center"},"&-icon":{display:"inline-block",marginInlineStart:e.controlHeightLG},"&-title":{paddingInlineEnd:0,paddingInlineStart:0,"&::after":{display:"none"}},"&-subtitle":{display:"block",marginBottom:e.marginXXS,marginInlineStart:0,lineHeight:o}},[`&${t}-small:not(${t}-dot)`]:{[`${t}-item`]:{"&-icon":{marginInlineStart:e.calc(i).sub(r).div(2).add(e.controlHeightLG).equal()}}}}}})(e)),(e=>{let{componentCls:t,descriptionMaxWidth:i,lineHeight:o,dotCurrentSize:r,dotSize:a,motionDurationSlow:n}=e;return{[`&${t}-dot, &${t}-dot${t}-small`]:{[`${t}-item`]:{"&-title":{lineHeight:o},"&-tail":{top:e.calc(e.dotSize).sub(e.calc(e.lineWidth).mul(3).equal()).div(2).equal(),width:"100%",marginTop:0,marginBottom:0,marginInline:`${(0,_.unit)(e.calc(i).div(2).equal())} 0`,padding:0,"&::after":{width:`calc(100% - ${(0,_.unit)(e.calc(e.marginSM).mul(2).equal())})`,height:e.calc(e.lineWidth).mul(3).equal(),marginInlineStart:e.marginSM}},"&-icon":{width:a,height:a,marginInlineStart:e.calc(e.descriptionMaxWidth).sub(a).div(2).equal(),paddingInlineEnd:0,lineHeight:(0,_.unit)(a),background:"transparent",border:0,[`${t}-icon-dot`]:{position:"relative",float:"left",width:"100%",height:"100%",borderRadius:100,transition:`all ${n}`,"&::after":{position:"absolute",top:e.calc(e.marginSM).mul(-1).equal(),insetInlineStart:e.calc(a).sub(e.calc(e.controlHeightLG).mul(1.5).equal()).div(2).equal(),width:e.calc(e.controlHeightLG).mul(1.5).equal(),height:e.controlHeight,background:"transparent",content:'""'}}},"&-content":{width:i},[`&-process ${t}-item-icon`]:{position:"relative",top:e.calc(a).sub(r).div(2).equal(),width:r,height:r,lineHeight:(0,_.unit)(r),background:"none",marginInlineStart:e.calc(e.descriptionMaxWidth).sub(r).div(2).equal()},[`&-process ${t}-icon`]:{[`&:first-child ${t}-icon-dot`]:{insetInlineStart:0}}}},[`&${t}-vertical${t}-dot`]:{[`${t}-item-icon`]:{marginTop:e.calc(e.controlHeight).sub(a).div(2).equal(),marginInlineStart:0,background:"none"},[`${t}-item-process ${t}-item-icon`]:{marginTop:e.calc(e.controlHeight).sub(r).div(2).equal(),top:0,insetInlineStart:e.calc(a).sub(r).div(2).equal(),marginInlineStart:0},[`${t}-item > ${t}-item-container > ${t}-item-tail`]:{top:e.calc(e.controlHeight).sub(a).div(2).equal(),insetInlineStart:0,margin:0,padding:`${(0,_.unit)(e.calc(a).add(e.paddingXS).equal())} 0 ${(0,_.unit)(e.paddingXS)}`,"&::after":{marginInlineStart:e.calc(a).sub(e.lineWidth).div(2).equal()}},[`&${t}-small`]:{[`${t}-item-icon`]:{marginTop:e.calc(e.controlHeightSM).sub(a).div(2).equal()},[`${t}-item-process ${t}-item-icon`]:{marginTop:e.calc(e.controlHeightSM).sub(r).div(2).equal()},[`${t}-item > ${t}-item-container > ${t}-item-tail`]:{top:e.calc(e.controlHeightSM).sub(a).div(2).equal()}},[`${t}-item:first-child ${t}-icon-dot`]:{insetInlineStart:0},[`${t}-item-content`]:{width:"inherit"}}}})(e)),(e=>{let{componentCls:t,navContentMaxWidth:i,navArrowColor:o,stepsNavActiveColor:r,motionDurationSlow:a}=e;return{[`&${t}-navigation`]:{paddingTop:e.paddingSM,[`&${t}-small`]:{[`${t}-item`]:{"&-container":{marginInlineStart:e.calc(e.marginSM).mul(-1).equal()}}},[`${t}-item`]:{overflow:"visible",textAlign:"center","&-container":{display:"inline-block",height:"100%",marginInlineStart:e.calc(e.margin).mul(-1).equal(),paddingBottom:e.paddingSM,textAlign:"start",transition:`opacity ${a}`,[`${t}-item-content`]:{maxWidth:i},[`${t}-item-title`]:Object.assign(Object.assign({maxWidth:"100%",paddingInlineEnd:0},$.textEllipsis),{"&::after":{display:"none"}})},[`&:not(${t}-item-active)`]:{[`${t}-item-container[role='button']`]:{cursor:"pointer","&:hover":{opacity:.85}}},"&:last-child":{flex:1,"&::after":{display:"none"}},"&::after":{position:"absolute",top:`calc(50% - ${(0,_.unit)(e.calc(e.paddingSM).div(2).equal())})`,insetInlineStart:"100%",display:"inline-block",width:e.fontSizeIcon,height:e.fontSizeIcon,borderTop:`${(0,_.unit)(e.lineWidth)} ${e.lineType} ${o}`,borderBottom:"none",borderInlineStart:"none",borderInlineEnd:`${(0,_.unit)(e.lineWidth)} ${e.lineType} ${o}`,transform:"translateY(-50%) translateX(-50%) rotate(45deg)",content:'""'},"&::before":{position:"absolute",bottom:0,insetInlineStart:"50%",display:"inline-block",width:0,height:e.lineWidthBold,backgroundColor:r,transition:`width ${a}, inset-inline-start ${a}`,transitionTimingFunction:"ease-out",content:'""'}},[`${t}-item${t}-item-active::before`]:{insetInlineStart:0,width:"100%"}},[`&${t}-navigation${t}-vertical`]:{[`> ${t}-item`]:{marginInlineEnd:0,"&::before":{display:"none"},[`&${t}-item-active::before`]:{top:0,insetInlineEnd:0,insetInlineStart:"unset",display:"block",width:e.calc(e.lineWidth).mul(3).equal(),height:`calc(100% - ${(0,_.unit)(e.marginLG)})`},"&::after":{position:"relative",insetInlineStart:"50%",display:"block",width:e.calc(e.controlHeight).mul(.25).equal(),height:e.calc(e.controlHeight).mul(.25).equal(),marginBottom:e.marginXS,textAlign:"center",transform:"translateY(-50%) translateX(-50%) rotate(135deg)"},"&:last-child":{"&::after":{display:"none"}},[`> ${t}-item-container > ${t}-item-tail`]:{visibility:"hidden"}}},[`&${t}-navigation${t}-horizontal`]:{[`> ${t}-item > ${t}-item-container > ${t}-item-tail`]:{visibility:"hidden"}}}})(e)),(e=>{let{componentCls:t}=e;return{[`&${t}-rtl`]:{direction:"rtl",[`${t}-item`]:{"&-subtitle":{float:"left"}},[`&${t}-navigation`]:{[`${t}-item::after`]:{transform:"rotate(-45deg)"}},[`&${t}-vertical`]:{[`> ${t}-item`]:{"&::after":{transform:"rotate(225deg)"},[`${t}-item-icon`]:{float:"right"}}},[`&${t}-dot`]:{[`${t}-item-icon ${t}-icon-dot, &${t}-small ${t}-item-icon ${t}-icon-dot`]:{float:"right"}}}}})(e)),(e=>{let{antCls:t,componentCls:i,iconSize:o,iconSizeSM:r,processIconColor:a,marginXXS:n,lineWidthBold:l,lineWidth:s,paddingXXS:c}=e,d=e.calc(o).add(e.calc(l).mul(4).equal()).equal(),m=e.calc(r).add(e.calc(e.lineWidth).mul(4).equal()).equal();return{[`&${i}-with-progress`]:{[`${i}-item`]:{paddingTop:c,[`&-process ${i}-item-container ${i}-item-icon ${i}-icon`]:{color:a}},[`&${i}-vertical > ${i}-item `]:{paddingInlineStart:c,[`> ${i}-item-container > ${i}-item-tail`]:{top:n,insetInlineStart:e.calc(o).div(2).sub(s).add(c).equal()}},[`&, &${i}-small`]:{[`&${i}-horizontal ${i}-item:first-child`]:{paddingBottom:c,paddingInlineStart:c}},[`&${i}-small${i}-vertical > ${i}-item > ${i}-item-container > ${i}-item-tail`]:{insetInlineStart:e.calc(r).div(2).sub(s).add(c).equal()},[`&${i}-label-vertical ${i}-item ${i}-item-tail`]:{top:e.calc(o).div(2).add(c).equal()},[`${i}-item-icon`]:{position:"relative",[`${t}-progress`]:{position:"absolute",insetInlineStart:"50%",top:"50%",transform:"translate(-50%, -50%)","&-inner":{width:`${(0,_.unit)(d)} !important`,height:`${(0,_.unit)(d)} !important`}}},[`&${i}-small`]:{[`&${i}-label-vertical ${i}-item ${i}-item-tail`]:{top:e.calc(r).div(2).add(c).equal()},[`${i}-item-icon ${t}-progress-inner`]:{width:`${(0,_.unit)(m)} !important`,height:`${(0,_.unit)(m)} !important`}}}}})(e)),(e=>{let{componentCls:t,inlineDotSize:i,inlineTitleColor:o,inlineTailColor:r}=e,a=e.calc(e.paddingXS).add(e.lineWidth).equal(),n={[`${t}-item-container ${t}-item-content ${t}-item-title`]:{color:o}};return{[`&${t}-inline`]:{width:"auto",display:"inline-flex",[`${t}-item`]:{flex:"none","&-container":{padding:`${(0,_.unit)(a)} ${(0,_.unit)(e.paddingXXS)} 0`,margin:`0 ${(0,_.unit)(e.calc(e.marginXXS).div(2).equal())}`,borderRadius:e.borderRadiusSM,cursor:"pointer",transition:`background-color ${e.motionDurationMid}`,"&:hover":{background:e.controlItemBgHover},"&[role='button']:hover":{opacity:1}},"&-icon":{width:i,height:i,marginInlineStart:`calc(50% - ${(0,_.unit)(e.calc(i).div(2).equal())})`,[`> ${t}-icon`]:{top:0},[`${t}-icon-dot`]:{borderRadius:e.calc(e.fontSizeSM).div(4).equal(),"&::after":{display:"none"}}},"&-content":{width:"auto",marginTop:e.calc(e.marginXS).sub(e.lineWidth).equal()},"&-title":{color:o,fontSize:e.fontSizeSM,lineHeight:e.lineHeightSM,fontWeight:"normal",marginBottom:e.calc(e.marginXXS).div(2).equal()},"&-description":{display:"none"},"&-tail":{marginInlineStart:0,top:e.calc(i).div(2).add(a).equal(),transform:"translateY(-50%)","&:after":{width:"100%",height:e.lineWidth,borderRadius:0,marginInlineStart:0,background:r}},[`&:first-child ${t}-item-tail`]:{width:"50%",marginInlineStart:"50%"},[`&:last-child ${t}-item-tail`]:{display:"block",width:"50%"},"&-wait":Object.assign({[`${t}-item-icon ${t}-icon ${t}-icon-dot`]:{backgroundColor:e.colorBorderBg,border:`${(0,_.unit)(e.lineWidth)} ${e.lineType} ${r}`}},n),"&-finish":Object.assign({[`${t}-item-tail::after`]:{backgroundColor:r},[`${t}-item-icon ${t}-icon ${t}-icon-dot`]:{backgroundColor:r,border:`${(0,_.unit)(e.lineWidth)} ${e.lineType} ${r}`}},n),"&-error":n,"&-active, &-process":Object.assign({[`${t}-item-icon`]:{width:i,height:i,marginInlineStart:`calc(50% - ${(0,_.unit)(e.calc(i).div(2).equal())})`,top:0}},n),[`&:not(${t}-item-active) > ${t}-item-container[role='button']:hover`]:{[`${t}-item-title`]:{color:o}}}}}})(e))}})((0,I.mergeToken)(e,{processIconColor:o,processTitleColor:r,processDescriptionColor:r,processIconBgColor:a,processIconBorderColor:a,processDotColor:a,processTailColor:d,waitTitleColor:n,waitDescriptionColor:n,waitTailColor:d,waitDotColor:t,finishIconColor:a,finishTitleColor:r,finishDescriptionColor:n,finishTailColor:a,finishDotColor:a,errorIconColor:o,errorTitleColor:s,errorDescriptionColor:s,errorTailColor:d,errorIconBgColor:s,errorIconBorderColor:s,errorDotColor:s,stepsNavActiveColor:a,stepsProgressSize:i,inlineDotSize:6,inlineTitleColor:l,inlineTailColor:c}))},e=>({titleLineHeight:e.controlHeight,customIconSize:e.controlHeight,customIconTop:0,customIconFontSize:e.controlHeightSM,iconSize:e.controlHeight,iconTop:-.5,iconFontSize:e.fontSize,iconSizeSM:e.fontSizeHeading3,dotSize:e.controlHeight/4,dotCurrentSize:e.controlHeightLG/4,navArrowColor:e.colorTextDisabled,navContentMaxWidth:"unset",descriptionMaxWidth:140,waitIconColor:e.wireframe?e.colorTextDisabled:e.colorTextLabel,waitIconBgColor:e.wireframe?e.colorBgContainer:e.colorFillContent,waitIconBorderColor:e.wireframe?e.colorTextDisabled:"transparent",finishIconBgColor:e.wireframe?e.colorBgContainer:e.controlItemBgActive,finishIconBorderColor:e.wireframe?e.colorPrimary:e.controlItemBgActive}));var w=e.i(876556),S=function(e,t){var i={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&0>t.indexOf(o)&&(i[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var r=0,o=Object.getOwnPropertySymbols(e);rt.indexOf(o[r])&&Object.prototype.propertyIsEnumerable.call(e,o[r])&&(i[o[r]]=e[o[r]]);return i};let k=e=>{var a,n;let{percent:l,size:s,className:c,rootClassName:d,direction:m,items:p,responsive:g=!0,current:_=0,children:$,style:y}=e,I=S(e,["percent","size","className","rootClassName","direction","items","responsive","current","children","style"]),{xs:C}=(0,b.default)(g),{getPrefixCls:k,direction:E,className:T,style:O}=(0,h.useComponentConfig)("steps"),j=t.useMemo(()=>g&&C?"vertical":m,[g,C,m]),N=(0,f.default)(s),L=k("steps",e.prefixCls),[M,R,z]=A(L),P="inline"===e.type,D=k("",e.iconPrefix),H=(a=p,n=$,a?a:(0,w.default)(n).map(e=>{if(t.isValidElement(e)){let{props:t}=e;return Object.assign({},t)}return null}).filter(e=>e)),B=P?void 0:l,W=Object.assign(Object.assign({},O),y),q=(0,r.default)(T,{[`${L}-rtl`]:"rtl"===E,[`${L}-with-progress`]:void 0!==B},c,d,R,z),G={finish:t.createElement(i.default,{className:`${L}-finish-icon`}),error:t.createElement(o.default,{className:`${L}-error-icon`})};return M(t.createElement(u,Object.assign({icons:G},I,{style:W,current:_,size:N,items:H,itemRender:P?(e,i)=>e.description?t.createElement(x.default,{title:e.description},i):i:void 0,stepIcon:({node:e,status:i})=>"process"===i&&void 0!==B?t.createElement("div",{className:`${L}-progress-icon`},t.createElement(v.default,{type:"circle",percent:B,size:"small"===N?32:40,strokeWidth:4,format:()=>null}),e):e,direction:j,prefixCls:L,iconPrefix:D,className:q})))};k.Step=u.Step,e.s(["Steps",0,k],280898)},879664,e=>{"use strict";let t=(0,e.i(475254).default)("info",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]]);e.s(["default",0,t])},596239,e=>{"use strict";e.i(247167);var t=e.i(931067),i=e.i(271645);let o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M574 665.4a8.03 8.03 0 00-11.3 0L446.5 781.6c-53.8 53.8-144.6 59.5-204 0-59.5-59.5-53.8-150.2 0-204l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3l-39.8-39.8a8.03 8.03 0 00-11.3 0L191.4 526.5c-84.6 84.6-84.6 221.5 0 306s221.5 84.6 306 0l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3L574 665.4zm258.6-474c-84.6-84.6-221.5-84.6-306 0L410.3 307.6a8.03 8.03 0 000 11.3l39.7 39.7c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c53.8-53.8 144.6-59.5 204 0 59.5 59.5 53.8 150.2 0 204L665.3 562.6a8.03 8.03 0 000 11.3l39.8 39.8c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c84.5-84.6 84.5-221.5 0-306.1zM610.1 372.3a8.03 8.03 0 00-11.3 0L372.3 598.7a8.03 8.03 0 000 11.3l39.6 39.6c3.1 3.1 8.2 3.1 11.3 0l226.4-226.4c3.1-3.1 3.1-8.2 0-11.3l-39.5-39.6z"}}]},name:"link",theme:"outlined"};var r=e.i(9583),a=i.forwardRef(function(e,a){return i.createElement(r.default,(0,t.default)({},e,{ref:a,icon:o}))});e.s(["LinkOutlined",0,a],596239)},652272,209261,e=>{"use strict";var t=e.i(843476),i=e.i(271645),o=e.i(447566),r=e.i(166406),a=e.i(492030),n=e.i(596239);let l=e=>"github"===e.source.source&&e.source.repo?`/plugin marketplace add ${e.source.repo}`:"url"===e.source.source&&e.source.url?`/plugin marketplace add ${e.source.url}`:`/plugin marketplace add ${e.name}`;e.s(["formatInstallCommand",0,l,"getCategoryBadgeColor",0,e=>{if(!e)return"gray";let t=e.toLowerCase();if(t.includes("development")||t.includes("dev"))return"blue";if(t.includes("productivity")||t.includes("workflow"))return"green";if(t.includes("learning")||t.includes("education"))return"purple";if(t.includes("security")||t.includes("safety"))return"red";if(t.includes("data")||t.includes("analytics"))return"orange";else if(t.includes("integration")||t.includes("api"))return"yellow";return"gray"},"isValidEmail",0,e=>!e||/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e),"isValidSemanticVersion",0,e=>!e||/^\d+\.\d+\.\d+(-[a-zA-Z0-9.-]+)?(\+[a-zA-Z0-9.-]+)?$/.test(e),"isValidUrl",0,e=>{if(!e)return!0;try{return new URL(e),!0}catch{return!1}},"parseKeywords",0,e=>e&&""!==e.trim()?e.split(",").map(e=>e.trim()).filter(e=>""!==e):[],"validatePluginName",0,e=>!!e&&""!==e.trim()&&/^[a-z0-9-]+$/.test(e)],209261),e.s(["default",0,({skill:e,onBack:s})=>{let c,[d,m]=(0,i.useState)("overview"),[p,g]=(0,i.useState)(null),u=(e,t)=>{navigator.clipboard.writeText(e),g(t),setTimeout(()=>g(null),2e3)},h="github"===(c=e.source).source&&c.repo?`https://github.com/${c.repo}`:"git-subdir"===c.source&&c.url?c.path?`${c.url}/tree/main/${c.path}`:c.url:"url"===c.source&&c.url?c.url:null,f=l(e),b=[...e.category?[{property:"Category",value:e.category}]:[],...e.domain?[{property:"Domain",value:e.domain}]:[],...e.namespace?[{property:"Namespace",value:e.namespace}]:[],...e.version?[{property:"Version",value:e.version}]:[],...e.author?.name?[{property:"Author",value:e.author.name}]:[],...e.created_at?[{property:"Added",value:new Date(e.created_at).toLocaleDateString()}]:[]];return(0,t.jsxs)("div",{style:{padding:"24px 32px 24px 0"},children:[(0,t.jsxs)("div",{onClick:s,style:{display:"inline-flex",alignItems:"center",gap:6,color:"#5f6368",cursor:"pointer",fontSize:14,marginBottom:24},children:[(0,t.jsx)(o.ArrowLeftOutlined,{style:{fontSize:11}}),(0,t.jsx)("span",{children:"Skills"})]}),(0,t.jsxs)("div",{style:{marginBottom:8},children:[(0,t.jsx)("h1",{style:{fontSize:28,fontWeight:400,color:"#202124",margin:0,lineHeight:1.2},children:e.name}),e.description&&(0,t.jsx)("p",{style:{fontSize:14,color:"#5f6368",margin:"8px 0 0 0",lineHeight:1.6},children:e.description})]}),(0,t.jsx)("div",{style:{borderBottom:"1px solid #dadce0",marginBottom:28,marginTop:24},children:(0,t.jsx)("div",{style:{display:"flex",gap:0},children:[{key:"overview",label:"Overview"},{key:"usage",label:"How to Use"}].map(e=>(0,t.jsx)("div",{onClick:()=>m(e.key),style:{padding:"12px 20px",fontSize:14,color:d===e.key?"#1a73e8":"#5f6368",borderBottom:d===e.key?"3px solid #1a73e8":"3px solid transparent",cursor:"pointer",fontWeight:d===e.key?500:400,marginBottom:-1},children:e.label},e.key))})}),"overview"===d&&(0,t.jsxs)("div",{style:{display:"flex",gap:64},children:[(0,t.jsxs)("div",{style:{flex:1,minWidth:0},children:[(0,t.jsx)("h2",{style:{fontSize:18,fontWeight:400,color:"#202124",margin:"0 0 4px 0"},children:"Skill Details"}),(0,t.jsx)("p",{style:{fontSize:13,color:"#5f6368",margin:"0 0 16px 0"},children:"Metadata registered with this skill"}),(0,t.jsxs)("table",{style:{width:"100%",borderCollapse:"collapse",fontSize:14},children:[(0,t.jsx)("thead",{children:(0,t.jsxs)("tr",{style:{borderBottom:"1px solid #dadce0"},children:[(0,t.jsx)("th",{style:{textAlign:"left",padding:"12px 0",color:"#5f6368",fontWeight:500,width:160},children:"Property"}),(0,t.jsx)("th",{style:{textAlign:"left",padding:"12px 0",color:"#5f6368",fontWeight:500},children:e.name})]})}),(0,t.jsx)("tbody",{children:b.map((e,i)=>(0,t.jsxs)("tr",{style:{borderBottom:"1px solid #f1f3f4"},children:[(0,t.jsx)("td",{style:{padding:"12px 0",color:"#3c4043"},children:e.property}),(0,t.jsx)("td",{style:{padding:"12px 0",color:"#202124"},children:e.value})]},i))})]})]}),(0,t.jsxs)("div",{style:{width:240,flexShrink:0},children:[(0,t.jsxs)("div",{style:{marginBottom:24},children:[(0,t.jsx)("div",{style:{fontSize:12,color:"#5f6368",marginBottom:4},children:"Status"}),(0,t.jsx)("span",{style:{fontSize:12,padding:"3px 10px",borderRadius:12,backgroundColor:e.enabled?"#e6f4ea":"#f1f3f4",color:e.enabled?"#137333":"#5f6368",fontWeight:500},children:e.enabled?"Public":"Draft"})]}),h&&(0,t.jsxs)("div",{style:{marginBottom:24},children:[(0,t.jsx)("div",{style:{fontSize:12,color:"#5f6368",marginBottom:4},children:"Source"}),(0,t.jsxs)("a",{href:h,target:"_blank",rel:"noopener noreferrer",style:{fontSize:13,color:"#1a73e8",wordBreak:"break-all",display:"flex",alignItems:"center",gap:4},children:[h.replace("https://",""),(0,t.jsx)(n.LinkOutlined,{style:{fontSize:11,flexShrink:0}})]})]}),e.keywords&&e.keywords.length>0&&(0,t.jsxs)("div",{style:{marginBottom:24},children:[(0,t.jsx)("div",{style:{fontSize:12,color:"#5f6368",marginBottom:8},children:"Tags"}),(0,t.jsx)("div",{style:{display:"flex",flexWrap:"wrap",gap:6},children:e.keywords.map(e=>(0,t.jsx)("span",{style:{fontSize:12,padding:"4px 12px",borderRadius:16,border:"1px solid #dadce0",color:"#3c4043",backgroundColor:"#fff"},children:e},e))})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("div",{style:{fontSize:12,color:"#5f6368",marginBottom:4},children:"Skill ID"}),(0,t.jsx)("div",{style:{fontSize:12,fontFamily:"monospace",color:"#3c4043",wordBreak:"break-all"},children:e.id})]})]})]}),"usage"===d&&(0,t.jsxs)("div",{style:{maxWidth:640},children:[(0,t.jsx)("h2",{style:{fontSize:18,fontWeight:400,color:"#202124",margin:"0 0 8px 0"},children:"Using this skill"}),(0,t.jsx)("p",{style:{fontSize:14,color:"#5f6368",margin:"0 0 24px 0",lineHeight:1.6},children:"Once your proxy is set as a marketplace, enable this skill in Claude Code with one command:"}),(0,t.jsxs)("div",{style:{border:"1px solid #dadce0",borderRadius:8,overflow:"hidden",marginBottom:24},children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"10px 16px",backgroundColor:"#f8f9fa",borderBottom:"1px solid #dadce0"},children:[(0,t.jsx)("span",{style:{fontSize:13,color:"#3c4043",fontWeight:500},children:"Run in Claude Code"}),(0,t.jsxs)("button",{onClick:()=>u(f,"install"),style:{display:"flex",alignItems:"center",gap:4,fontSize:12,color:"install"===p?"#137333":"#1a73e8",background:"none",border:"none",cursor:"pointer",padding:0},children:["install"===p?(0,t.jsx)(a.CheckOutlined,{}):(0,t.jsx)(r.CopyOutlined,{}),"install"===p?"Copied":"Copy"]})]}),(0,t.jsx)("pre",{style:{margin:0,padding:"14px 16px",fontSize:14,fontFamily:"monospace",color:"#202124",backgroundColor:"#fff"},children:f})]}),(0,t.jsxs)("p",{style:{fontSize:13,color:"#5f6368",lineHeight:1.6,margin:0},children:["Don't have the marketplace configured yet?"," ",(0,t.jsx)("span",{onClick:()=>m("setup"),style:{color:"#1a73e8",cursor:"pointer"},children:"See one-time setup →"})]})]}),"setup"===d&&(0,t.jsxs)("div",{style:{maxWidth:640},children:[(0,t.jsx)("h2",{style:{fontSize:18,fontWeight:400,color:"#202124",margin:"0 0 8px 0"},children:"One-time marketplace setup"}),(0,t.jsxs)("p",{style:{fontSize:14,color:"#5f6368",margin:"0 0 24px 0",lineHeight:1.6},children:["Add this to"," ",(0,t.jsx)("code",{style:{fontSize:13,backgroundColor:"#f1f3f4",padding:"1px 6px",borderRadius:4},children:"~/.claude/settings.json"})," ","to point Claude Code at your proxy:"]}),(0,t.jsxs)("div",{style:{border:"1px solid #dadce0",borderRadius:8,overflow:"hidden"},children:[(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"10px 16px",backgroundColor:"#f8f9fa",borderBottom:"1px solid #dadce0"},children:[(0,t.jsx)("span",{style:{fontSize:13,color:"#3c4043",fontWeight:500},children:"~/.claude/settings.json"}),(0,t.jsxs)("button",{onClick:()=>{u(JSON.stringify({extraKnownMarketplaces:{"my-org":{source:"url",url:`${window.location.origin}/claude-code/marketplace.json`}}},null,2),"settings")},style:{display:"flex",alignItems:"center",gap:4,fontSize:12,color:"settings"===p?"#137333":"#1a73e8",background:"none",border:"none",cursor:"pointer",padding:0},children:["settings"===p?(0,t.jsx)(a.CheckOutlined,{}):(0,t.jsx)(r.CopyOutlined,{}),"settings"===p?"Copied":"Copy"]})]}),(0,t.jsx)("pre",{style:{margin:0,padding:"14px 16px",fontSize:13,fontFamily:"monospace",color:"#202124",backgroundColor:"#fff"},children:JSON.stringify({extraKnownMarketplaces:{"my-org":{source:"url",url:`${window.location.origin}/claude-code/marketplace.json`}}},null,2)})]})]})]})}],652272)},798496,e=>{"use strict";var t=e.i(843476),i=e.i(152990),o=e.i(682830),r=e.i(271645),a=e.i(269200),n=e.i(427612),l=e.i(64848),s=e.i(942232),c=e.i(496020),d=e.i(977572),m=e.i(94629),p=e.i(360820),g=e.i(871943);e.s(["ModelDataTable",0,function({data:e=[],columns:u,isLoading:h=!1,defaultSorting:f=[],pagination:b,onPaginationChange:v,enablePagination:x=!1,onRowClick:_}){let[$,y]=r.default.useState(f),[I]=r.default.useState("onChange"),[C,A]=r.default.useState({}),[w,S]=r.default.useState({}),k=(0,i.useReactTable)({data:e,columns:u,state:{sorting:$,columnSizing:C,columnVisibility:w,...x&&b?{pagination:b}:{}},columnResizeMode:I,onSortingChange:y,onColumnSizingChange:A,onColumnVisibilityChange:S,...x&&v?{onPaginationChange:v}:{},getCoreRowModel:(0,o.getCoreRowModel)(),getSortedRowModel:(0,o.getSortedRowModel)(),...x?{getPaginationRowModel:(0,o.getPaginationRowModel)()}:{},enableSorting:!0,enableColumnResizing:!0,defaultColumn:{minSize:40,maxSize:500}});return(0,t.jsx)("div",{className:"rounded-lg custom-border relative",children:(0,t.jsx)("div",{className:"overflow-x-auto",children:(0,t.jsx)("div",{className:"relative min-w-full",children:(0,t.jsxs)(a.Table,{className:"[&_td]:py-2 [&_th]:py-2",style:{width:k.getTotalSize(),minWidth:"100%",tableLayout:"fixed"},children:[(0,t.jsx)(n.TableHead,{children:k.getHeaderGroups().map(e=>(0,t.jsx)(c.TableRow,{children:e.headers.map(e=>(0,t.jsxs)(l.TableHeaderCell,{className:`py-1 h-8 relative ${"actions"===e.id?"sticky right-0 bg-white shadow-[-4px_0_8px_-6px_rgba(0,0,0,0.1)] w-[120px] ml-8":""} ${e.column.columnDef.meta?.className||""}`,style:{width:"actions"===e.id?120:e.getSize(),position:"actions"===e.id?"sticky":"relative",right:"actions"===e.id?0:"auto"},onClick:e.column.getCanSort()?e.column.getToggleSortingHandler():void 0,children:[(0,t.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,t.jsx)("div",{className:"flex items-center",children:e.isPlaceholder?null:(0,i.flexRender)(e.column.columnDef.header,e.getContext())}),"actions"!==e.id&&e.column.getCanSort()&&(0,t.jsx)("div",{className:"w-4",children:e.column.getIsSorted()?({asc:(0,t.jsx)(p.ChevronUpIcon,{className:"h-4 w-4 text-blue-500"}),desc:(0,t.jsx)(g.ChevronDownIcon,{className:"h-4 w-4 text-blue-500"})})[e.column.getIsSorted()]:(0,t.jsx)(m.SwitchVerticalIcon,{className:"h-4 w-4 text-gray-400"})})]}),e.column.getCanResize()&&(0,t.jsx)("div",{onMouseDown:e.getResizeHandler(),onTouchStart:e.getResizeHandler(),className:`absolute right-0 top-0 h-full w-2 cursor-col-resize select-none touch-none ${e.column.getIsResizing()?"bg-blue-500":"hover:bg-blue-200"}`})]},e.id))},e.id))}),(0,t.jsx)(s.TableBody,{children:h?(0,t.jsx)(c.TableRow,{children:(0,t.jsx)(d.TableCell,{colSpan:u.length,className:"h-8 text-center",children:(0,t.jsx)("div",{className:"text-center text-gray-500",children:(0,t.jsx)("p",{children:"🚅 Loading models..."})})})}):k.getRowModel().rows.length>0?k.getRowModel().rows.map(e=>(0,t.jsx)(c.TableRow,{onClick:()=>_?.(e.original),className:_?"cursor-pointer hover:bg-gray-50":"",children:e.getVisibleCells().map(e=>(0,t.jsx)(d.TableCell,{className:`py-0.5 overflow-hidden ${"actions"===e.column.id?"sticky right-0 bg-white shadow-[-4px_0_8px_-6px_rgba(0,0,0,0.1)] w-[120px] ml-8":""} ${e.column.columnDef.meta?.className||""}`,style:{width:"actions"===e.column.id?120:e.column.getSize(),position:"actions"===e.column.id?"sticky":"relative",right:"actions"===e.column.id?0:"auto"},children:(0,i.flexRender)(e.column.columnDef.cell,e.getContext())},e.id))},e.id)):(0,t.jsx)(c.TableRow,{children:(0,t.jsx)(d.TableCell,{colSpan:u.length,className:"h-8 text-center",children:(0,t.jsx)("div",{className:"text-center text-gray-500",children:(0,t.jsx)("p",{children:"No models found"})})})})})]})})})})}])},339019,865361,e=>{"use strict";var t,i,o=((t={}).AUDIO_SPEECH="audio_speech",t.AUDIO_TRANSCRIPTION="audio_transcription",t.IMAGE_GENERATION="image_generation",t.VIDEO_GENERATION="video_generation",t.CHAT="chat",t.RESPONSES="responses",t.IMAGE_EDITS="image_edits",t.ANTHROPIC_MESSAGES="anthropic_messages",t.EMBEDDING="embedding",t),r=((i={}).IMAGE="image",i.VIDEO="video",i.CHAT="chat",i.RESPONSES="responses",i.IMAGE_EDITS="image_edits",i.ANTHROPIC_MESSAGES="anthropic_messages",i.EMBEDDINGS="embeddings",i.SPEECH="speech",i.TRANSCRIPTION="transcription",i.A2A_AGENTS="a2a_agents",i.MCP="mcp",i.REALTIME="realtime",i.INTERACTIONS="interactions",i);let a={image_generation:"image",video_generation:"video",chat:"chat",responses:"responses",image_edits:"image_edits",anthropic_messages:"anthropic_messages",audio_speech:"speech",audio_transcription:"transcription",embedding:"embeddings"};e.s(["EndpointType",()=>r,"getEndpointType",0,e=>{if(console.log("getEndpointType:",e),Object.values(o).includes(e)){let t=a[e];return console.log("endpointType:",t),t}return"chat"}],865361),e.s(["generateCodeSnippet",0,e=>{let t,{apiKeySource:i,accessToken:o,apiKey:a,inputMessage:n,chatHistory:l,selectedTags:s,selectedVectorStores:c,selectedGuardrails:d,selectedPolicies:m,selectedMCPServers:p,mcpServers:g,mcpServerToolRestrictions:u,selectedVoice:h,endpointType:f,selectedModel:b,selectedSdk:v,proxySettings:x}=e,_="session"===i?o:a,$=window.location.origin,y=x?.LITELLM_UI_API_DOC_BASE_URL;y&&y.trim()?$=y:x?.PROXY_BASE_URL&&($=x.PROXY_BASE_URL);let I=n||"Your prompt here",C=I.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\n/g,"\\n"),A=l.filter(e=>!e.isImage).map(({role:e,content:t})=>({role:e,content:t})),w={};s.length>0&&(w.tags=s),c.length>0&&(w.vector_stores=c),d.length>0&&(w.guardrails=d),m.length>0&&(w.policies=m);let S=b||"your-model-name",k="azure"===v?`import openai + +client = openai.AzureOpenAI( + api_key="${_||"YOUR_LITELLM_API_KEY"}", + azure_endpoint="${$}", + api_version="2024-02-01" +)`:`import openai + +client = openai.OpenAI( + api_key="${_||"YOUR_LITELLM_API_KEY"}", + base_url="${$}" +)`;switch(f){case r.CHAT:{let e=Object.keys(w).length>0,i="";if(e){let e=JSON.stringify({metadata:w},null,2).split("\n").map(e=>" ".repeat(4)+e).join("\n").trim();i=`, + extra_body=${e}`}let o=A.length>0?A:[{role:"user",content:I}];t=` +import base64 + +# Helper function to encode images to base64 +def encode_image(image_path): + with open(image_path, "rb") as image_file: + return base64.b64encode(image_file.read()).decode('utf-8') + +# Example with text only +response = client.chat.completions.create( + model="${S}", + messages=${JSON.stringify(o,null,4)}${i} +) + +print(response) + +# Example with image or PDF (uncomment and provide file path to use) +# base64_file = encode_image("path/to/your/file.jpg") # or .pdf +# response_with_file = client.chat.completions.create( +# model="${S}", +# messages=[ +# { +# "role": "user", +# "content": [ +# { +# "type": "text", +# "text": "${C}" +# }, +# { +# "type": "image_url", +# "image_url": { +# "url": f"data:image/jpeg;base64,{base64_file}" # or data:application/pdf;base64,{base64_file} +# } +# } +# ] +# } +# ]${i} +# ) +# print(response_with_file) +`;break}case r.RESPONSES:{let e=Object.keys(w).length>0,i="";if(e){let e=JSON.stringify({metadata:w},null,2).split("\n").map(e=>" ".repeat(4)+e).join("\n").trim();i=`, + extra_body=${e}`}let o=A.length>0?A:[{role:"user",content:I}];t=` +import base64 + +# Helper function to encode images to base64 +def encode_image(image_path): + with open(image_path, "rb") as image_file: + return base64.b64encode(image_file.read()).decode('utf-8') + +# Example with text only +response = client.responses.create( + model="${S}", + input=${JSON.stringify(o,null,4)}${i} +) + +print(response.output_text) + +# Example with image or PDF (uncomment and provide file path to use) +# base64_file = encode_image("path/to/your/file.jpg") # or .pdf +# response_with_file = client.responses.create( +# model="${S}", +# input=[ +# { +# "role": "user", +# "content": [ +# {"type": "input_text", "text": "${C}"}, +# { +# "type": "input_image", +# "image_url": f"data:image/jpeg;base64,{base64_file}", # or data:application/pdf;base64,{base64_file} +# }, +# ], +# } +# ]${i} +# ) +# print(response_with_file.output_text) +`;break}case r.IMAGE:t="azure"===v?` +# NOTE: The Azure SDK does not have a direct equivalent to the multi-modal 'responses.create' method shown for OpenAI. +# This snippet uses 'client.images.generate' and will create a new image based on your prompt. +# It does not use the uploaded image, as 'client.images.generate' does not support image inputs in this context. +import os +import requests +import json +import time +from PIL import Image + +result = client.images.generate( + model="${S}", + prompt="${n}", + n=1 +) + +json_response = json.loads(result.model_dump_json()) + +# Set the directory for the stored image +image_dir = os.path.join(os.curdir, 'images') + +# If the directory doesn't exist, create it +if not os.path.isdir(image_dir): + os.mkdir(image_dir) + +# Initialize the image path +image_filename = f"generated_image_{int(time.time())}.png" +image_path = os.path.join(image_dir, image_filename) + +try: + # Retrieve the generated image + if json_response.get("data") && len(json_response["data"]) > 0 && json_response["data"][0].get("url"): + image_url = json_response["data"][0]["url"] + generated_image = requests.get(image_url).content + with open(image_path, "wb") as image_file: + image_file.write(generated_image) + + print(f"Image saved to {image_path}") + # Display the image + image = Image.open(image_path) + image.show() + else: + print("Could not find image URL in response.") + print("Full response:", json_response) +except Exception as e: + print(f"An error occurred: {e}") + print("Full response:", json_response) +`:` +import base64 +import os +import time +import json +from PIL import Image +import requests + +# Helper function to encode images to base64 +def encode_image(image_path): + with open(image_path, "rb") as image_file: + return base64.b64encode(image_file.read()).decode('utf-8') + +# Helper function to create a file (simplified for this example) +def create_file(image_path): + # In a real implementation, this would upload the file to OpenAI + # For this example, we'll just return a placeholder ID + return f"file_{os.path.basename(image_path).replace('.', '_')}" + +# The prompt entered by the user +prompt = "${C}" + +# Encode images to base64 +base64_image1 = encode_image("body-lotion.png") +base64_image2 = encode_image("soap.png") + +# Create file IDs +file_id1 = create_file("body-lotion.png") +file_id2 = create_file("incense-kit.png") + +response = client.responses.create( + model="${S}", + input=[ + { + "role": "user", + "content": [ + {"type": "input_text", "text": prompt}, + { + "type": "input_image", + "image_url": f"data:image/jpeg;base64,{base64_image1}", + }, + { + "type": "input_image", + "image_url": f"data:image/jpeg;base64,{base64_image2}", + }, + { + "type": "input_image", + "file_id": file_id1, + }, + { + "type": "input_image", + "file_id": file_id2, + } + ], + } + ], + tools=[{"type": "image_generation"}], +) + +# Process the response +image_generation_calls = [ + output + for output in response.output + if output.type == "image_generation_call" +] + +image_data = [output.result for output in image_generation_calls] + +if image_data: + image_base64 = image_data[0] + image_filename = f"edited_image_{int(time.time())}.png" + with open(image_filename, "wb") as f: + f.write(base64.b64decode(image_base64)) + print(f"Image saved to {image_filename}") +else: + # If no image is generated, there might be a text response with an explanation + text_response = [output.text for output in response.output if hasattr(output, 'text')] + if text_response: + print("No image generated. Model response:") + print("\\n".join(text_response)) + else: + print("No image data found in response.") + print("Full response for debugging:") + print(response) +`;break;case r.IMAGE_EDITS:t="azure"===v?` +import base64 +import os +import time +import json +from PIL import Image +import requests + +# Helper function to encode images to base64 +def encode_image(image_path): + with open(image_path, "rb") as image_file: + return base64.b64encode(image_file.read()).decode('utf-8') + +# The prompt entered by the user +prompt = "${C}" + +# Encode images to base64 +base64_image1 = encode_image("body-lotion.png") +base64_image2 = encode_image("soap.png") + +# Create file IDs +file_id1 = create_file("body-lotion.png") +file_id2 = create_file("incense-kit.png") + +response = client.responses.create( + model="${S}", + input=[ + { + "role": "user", + "content": [ + {"type": "input_text", "text": prompt}, + { + "type": "input_image", + "image_url": f"data:image/jpeg;base64,{base64_image1}", + }, + { + "type": "input_image", + "image_url": f"data:image/jpeg;base64,{base64_image2}", + }, + { + "type": "input_image", + "file_id": file_id1, + }, + { + "type": "input_image", + "file_id": file_id2, + } + ], + } + ], + tools=[{"type": "image_generation"}], +) + +# Process the response +image_generation_calls = [ + output + for output in response.output + if output.type == "image_generation_call" +] + +image_data = [output.result for output in image_generation_calls] + +if image_data: + image_base64 = image_data[0] + image_filename = f"edited_image_{int(time.time())}.png" + with open(image_filename, "wb") as f: + f.write(base64.b64decode(image_base64)) + print(f"Image saved to {image_filename}") +else: + # If no image is generated, there might be a text response with an explanation + text_response = [output.text for output in response.output if hasattr(output, 'text')] + if text_response: + print("No image generated. Model response:") + print("\\n".join(text_response)) + else: + print("No image data found in response.") + print("Full response for debugging:") + print(response) +`:` +import base64 +import os +import time + +# Helper function to encode images to base64 +def encode_image(image_path): + with open(image_path, "rb") as image_file: + return base64.b64encode(image_file.read()).decode('utf-8') + +# Helper function to create a file (simplified for this example) +def create_file(image_path): + # In a real implementation, this would upload the file to OpenAI + # For this example, we'll just return a placeholder ID + return f"file_{os.path.basename(image_path).replace('.', '_')}" + +# The prompt entered by the user +prompt = "${C}" + +# Encode images to base64 +base64_image1 = encode_image("body-lotion.png") +base64_image2 = encode_image("soap.png") + +# Create file IDs +file_id1 = create_file("body-lotion.png") +file_id2 = create_file("incense-kit.png") + +response = client.responses.create( + model="${S}", + input=[ + { + "role": "user", + "content": [ + {"type": "input_text", "text": prompt}, + { + "type": "input_image", + "image_url": f"data:image/jpeg;base64,{base64_image1}", + }, + { + "type": "input_image", + "image_url": f"data:image/jpeg;base64,{base64_image2}", + }, + { + "type": "input_image", + "file_id": file_id1, + }, + { + "type": "input_image", + "file_id": file_id2, + } + ], + } + ], + tools=[{"type": "image_generation"}], +) + +# Process the response +image_generation_calls = [ + output + for output in response.output + if output.type == "image_generation_call" +] + +image_data = [output.result for output in image_generation_calls] + +if image_data: + image_base64 = image_data[0] + image_filename = f"edited_image_{int(time.time())}.png" + with open(image_filename, "wb") as f: + f.write(base64.b64decode(image_base64)) + print(f"Image saved to {image_filename}") +else: + # If no image is generated, there might be a text response with an explanation + text_response = [output.text for output in response.output if hasattr(output, 'text')] + if text_response: + print("No image generated. Model response:") + print("\\n".join(text_response)) + else: + print("No image data found in response.") + print("Full response for debugging:") + print(response) +`;break;case r.EMBEDDINGS:t=` +response = client.embeddings.create( + input="${n||"Your string here"}", + model="${S}", + encoding_format="base64" # or "float" +) + +print(response.data[0].embedding) +`;break;case r.TRANSCRIPTION:t=` +# Open the audio file +audio_file = open("path/to/your/audio/file.mp3", "rb") + +# Make the transcription request +response = client.audio.transcriptions.create( + model="${S}", + file=audio_file${n?`, + prompt="${n.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`:""} +) + +print(response.text) +`;break;case r.SPEECH:t=` +# Make the text-to-speech request +response = client.audio.speech.create( + model="${S}", + input="${n||"Your text to convert to speech here"}", + voice="${h}" # Options: alloy, ash, ballad, coral, echo, fable, nova, onyx, sage, shimmer +) + +# Save the audio to a file +output_filename = "output_speech.mp3" +response.stream_to_file(output_filename) +print(f"Audio saved to {output_filename}") + +# Optional: Customize response format and speed +# response = client.audio.speech.create( +# model="${S}", +# input="${n||"Your text to convert to speech here"}", +# voice="alloy", +# response_format="mp3", # Options: mp3, opus, aac, flac, wav, pcm +# speed=1.0 # Range: 0.25 to 4.0 +# ) +# response.stream_to_file("output_speech.mp3") +`;break;default:t="\n# Code generation for this endpoint is not implemented yet."}return`${k} +${t}`}],339019)},157058,e=>{"use strict";var t=e.i(843476),i=e.i(934879),o=e.i(976883),r=e.i(135214),a=e.i(708347);e.s(["default",0,function(){let{accessToken:e,userRole:n,premiumUser:l}=(0,r.default)();return(0,a.isAdminRole)(n)?(0,t.jsx)(i.default,{accessToken:e,publicPage:!1,premiumUser:l,userRole:n}):(0,t.jsx)(o.default,{accessToken:e,isEmbedded:!0})}])}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/129bujhdmi9ce.js b/litellm/proxy/_experimental/out/_next/static/chunks/129bujhdmi9ce.js new file mode 100644 index 00000000000..8008fa6a72d --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/129bujhdmi9ce.js @@ -0,0 +1,4 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,144582,e=>{"use strict";let t=(0,e.i(271645).createContext)({selectedValue:void 0,handleValueChange:void 0});e.s(["default",0,t])},783222,433336,80758,402155,368578,544508,746725,835696,941444,914189,394487,e=>{"use strict";let t;e.i(247167);let r=e=>e?.ownerDocument??document,n=e=>e&&"window"in e&&e.window===e?e:r(e).defaultView||window;function o(e,t){return!!t&&!!e&&e.contains(t)}function s(e){return e.target}let a=null;"u">typeof Element&&Element.prototype;let i=["input:not([disabled]):not([type=hidden])","select:not([disabled])","textarea:not([disabled])","button:not([disabled])","a[href]","area[href]","summary","iframe","object","embed","audio[controls]","video[controls]",'[contenteditable]:not([contenteditable^="false"])',"permission"];i.join(":not([hidden]),"),i.push('[tabindex]:not([tabindex="-1"]):not([disabled])'),i.join(':not([hidden]):not([tabindex="-1"]),');var l=e.i(271645);let u="u">typeof document?l.default.useLayoutEffect:()=>{};function c(e){return e.nativeEvent=e,e.isDefaultPrevented=()=>e.defaultPrevented,e.isPropagationStopped=()=>e.cancelBubble,e.persist=()=>{},e}function d(e){let t=(0,l.useRef)({isFocused:!1,observer:null});return u(()=>{let e=t.current;return()=>{e.observer&&(e.observer.disconnect(),e.observer=null)}},[]),(0,l.useCallback)(r=>{let n=s(r);(n instanceof HTMLButtonElement||n instanceof HTMLInputElement||n instanceof HTMLTextAreaElement||n instanceof HTMLSelectElement)&&(t.current.isFocused=!0,n.addEventListener("focusout",r=>{if(t.current.isFocused=!1,n.disabled){let t=c(r);e?.(t)}t.current.observer&&(t.current.observer.disconnect(),t.current.observer=null)},{once:!0}),t.current.observer=new MutationObserver(()=>{if(t.current.isFocused&&n.disabled){t.current.observer?.disconnect();let e=n===((e=document)=>e.activeElement)()?null:((e=document)=>e.activeElement)();n.dispatchEvent(new FocusEvent("blur",{relatedTarget:e})),n.dispatchEvent(new FocusEvent("focusout",{bubbles:!0,relatedTarget:e}))}}),t.current.observer.observe(n,{attributes:!0,attributeFilter:["disabled"]}))},[e])}function f(e){if("u"e.test(t.brand))||e.test(window.navigator.userAgent)}function p(e){return"u">typeof window&&null!=window.navigator&&e.test(window.navigator.userAgentData?.platform||window.navigator.platform)}function m(e){let t=null;return()=>(null==t&&(t=e()),t)}let b=m(function(){return p(/^Mac/i)}),v=m(function(){return p(/^iPhone/i)}),h=m(function(){return p(/^iPad/i)||b()&&navigator.maxTouchPoints>1}),g=m(function(){return v()||h()});m(function(){return b()||g()});let y=m(function(){return f(/AppleWebKit/i)&&!E()}),E=m(function(){return f(/Chrome/i)}),T=m(function(){return f(/Android/i)}),w=m(function(){return f(/Firefox/i)});function x(e,t,r=!0){let{metaKey:n,ctrlKey:o,altKey:s,shiftKey:i}=t;w()&&window.event?.type?.startsWith("key")&&"_blank"===e.target&&(b()?n=!0:o=!0);let l=y()&&b()&&!h()&&1?new KeyboardEvent("keydown",{keyIdentifier:"Enter",metaKey:n,ctrlKey:o,altKey:s,shiftKey:i}):new MouseEvent("click",{metaKey:n,ctrlKey:o,altKey:s,shiftKey:i,detail:1,bubbles:!0,cancelable:!0});x.isOpening=r;if(function(){if(null==a){a=!1;try{document.createElement("div").focus({get preventScroll(){return a=!0,!0}})}catch{}}return a}())e.focus({preventScroll:!0});else{let t=function(e){let t=e.parentNode,r=[],n=document.scrollingElement||document.documentElement;for(;t instanceof HTMLElement&&t!==n;)(t.offsetHeighttypeof window&&window.document&&window.document.createElement,new WeakMap;l.default.useId;let P=null,k=new Set,L=new Map,N=!1,C=!1,I={Tab:!0,Escape:!0};function S(e,t){for(let r of k)r(e,t)}function A(e){N=!0,x.isOpening||e.metaKey||!b()&&e.altKey||e.ctrlKey||"Control"===e.key||"Shift"===e.key||"Meta"===e.key||(P="keyboard",S("keyboard",e))}function M(e){P="pointer","pointerType"in e&&e.pointerType,("mousedown"===e.type||"pointerdown"===e.type)&&(N=!0,S("pointer",e))}function R(e){x.isOpening||(""!==e.pointerType||!e.isTrusted)&&(T()&&e.pointerType?"click"!==e.type||1!==e.buttons:0!==e.detail||e.pointerType)||(N=!0,P="virtual")}function O(e){let t=n(s(e)),o=r(s(e));s(e)!==t&&s(e)!==o&&e.isTrusted&&(N||C||(P="virtual",S("virtual",e)),N=!1,C=!1)}function D(){N=!1,C=!0}function H(e){if("u"typeof PointerEvent&&(o.addEventListener("pointerdown",M,!0),o.addEventListener("pointermove",M,!0),o.addEventListener("pointerup",M,!0)),t.addEventListener("beforeunload",()=>{j(e)},{once:!0}),L.set(t,{focus:s})}let j=(e,t)=>{let o=n(e),s=r(e);t&&s.removeEventListener("DOMContentLoaded",t),L.has(o)&&(o.HTMLElement.prototype.focus=L.get(o).focus,s.removeEventListener("keydown",A,!0),s.removeEventListener("keyup",A,!0),s.removeEventListener("click",R,!0),o.removeEventListener("focus",O,!0),o.removeEventListener("blur",D,!1),"u">typeof PointerEvent&&(s.removeEventListener("pointerdown",M,!0),s.removeEventListener("pointermove",M,!0),s.removeEventListener("pointerup",M,!0)),L.delete(o))};function K(){return"pointer"!==P}"u">typeof document&&("loading"!==(t=r(void 0)).readyState?H(void 0):t.addEventListener("DOMContentLoaded",()=>{H(void 0)}));let W=new Set(["checkbox","radio","range","color","file","image","button","submit","reset"]);function B(){let e=(0,l.useRef)(new Map),t=(0,l.useCallback)((t,r,n,o)=>{let s=o?.once?(...t)=>{e.current.delete(n),n(...t)}:n;e.current.set(n,{type:r,eventTarget:t,fn:s,options:o}),t.addEventListener(r,s,o)},[]),r=(0,l.useCallback)((t,r,n,o)=>{let s=e.current.get(n)?.fn||n;t.removeEventListener(r,s,o),e.current.delete(n)},[]),n=(0,l.useCallback)(()=>{e.current.forEach((e,t)=>{r(e.eventTarget,e.type,t,e.options)})},[r]);return(0,l.useEffect)(()=>n,[n]),{addGlobalListener:t,removeGlobalListener:r,removeAllGlobalListeners:n}}e.s(["useFocusRing",0,function(e={}){var t;let{autoFocus:a=!1,isTextInput:i,within:u}=e,f=(0,l.useRef)({isFocused:!1,isFocusVisible:a||K()}),[p,m]=(0,l.useState)(!1),[b,v]=(0,l.useState)(()=>f.current.isFocused&&f.current.isFocusVisible),h=(0,l.useCallback)(()=>v(f.current.isFocused&&f.current.isFocusVisible),[]),g=(0,l.useCallback)(e=>{f.current.isFocused=e,f.current.isFocusVisible=K(),m(e),h()},[h]);t={enabled:p,isTextInput:i},H(),(0,l.useEffect)(()=>{if(t?.enabled===!1)return;let e=(e,o)=>{var a;let i,l,u,c,d,p,m,b;a=!!t?.isTextInput,l=r(i=o?s(o):void 0),c=void 0!==(u=n(i))?u.HTMLInputElement:HTMLInputElement,d=void 0!==u?u.HTMLTextAreaElement:HTMLTextAreaElement,p=void 0!==u?u.HTMLElement:HTMLElement,m=void 0!==u?u.KeyboardEvent:KeyboardEvent,b=((e=document)=>e.activeElement)(l),(a=a||b instanceof c&&!W.has(b.type)||b instanceof d||b instanceof p&&b.isContentEditable)&&"keyboard"===e&&o instanceof m&&!I[o.key]||(e=>{f.current.isFocusVisible=e,h()})(K())};return k.add(e),()=>{k.delete(e)}},[i,p]);let{focusProps:y}=function(e){let{isDisabled:t,onFocus:n,onBlur:o,onFocusChange:a}=e,i=(0,l.useCallback)(e=>{if(s(e)===e.currentTarget)return o&&o(e),a&&a(!1),!0},[o,a]),u=d(i),c=(0,l.useCallback)(e=>{let t=s(e),o=r(t),i=o?((e=document)=>e.activeElement)(o):((e=document)=>e.activeElement)();t===e.currentTarget&&t===i&&(n&&n(e),a&&a(!0),u(e))},[a,n,u]);return{focusProps:{onFocus:!t&&(n||a||o)?c:void 0,onBlur:!t&&(o||a)?i:void 0}}}({isDisabled:u,onFocusChange:g}),{focusWithinProps:E}=function(e){let{isDisabled:t,onBlurWithin:n,onFocusWithin:a,onFocusWithinChange:i}=e,u=(0,l.useRef)({isFocusWithin:!1}),{addGlobalListener:f,removeAllGlobalListeners:p}=B(),m=(0,l.useCallback)(e=>{o(e.currentTarget,s(e))&&u.current.isFocusWithin&&!o(e.currentTarget,e.relatedTarget)&&(u.current.isFocusWithin=!1,p(),n&&n(e),i&&i(!1))},[n,i,u,p]),b=d(m),v=(0,l.useCallback)(e=>{if(!o(e.currentTarget,s(e)))return;let t=s(e),n=r(t),l=((e=document)=>e.activeElement)(n);if(!u.current.isFocusWithin&&l===t){a&&a(e),i&&i(!0),u.current.isFocusWithin=!0,b(e);let t=e.currentTarget;f(n,"focus",e=>{let r=s(e);if(u.current.isFocusWithin&&!o(t,r)){let e=new n.defaultView.FocusEvent("blur",{relatedTarget:r});Object.defineProperty(e,"target",{value:t}),Object.defineProperty(e,"currentTarget",{value:t}),m(c(e))}},{capture:!0})}},[a,i,b,f,m]);return t?{focusWithinProps:{onFocus:void 0,onBlur:void 0}}:{focusWithinProps:{onFocus:v,onBlur:m}}}({isDisabled:!u,onFocusWithinChange:g});return{isFocused:p,isFocusVisible:b,focusProps:u?E:y}}],783222);let V=!1,_=0;function G(e){"touch"===e.pointerType&&(V=!0,setTimeout(()=>{V=!1},500))}function U(){let e=r(null);if(void 0!==e)return 0===_&&"u">typeof PointerEvent&&e.addEventListener("pointerup",G),_++,()=>{!(--_>0)&&"u">typeof PointerEvent&&e.removeEventListener("pointerup",G)}}e.s(["useHover",0,function(e){let{onHoverStart:t,onHoverChange:n,onHoverEnd:a,isDisabled:i}=e,[u,c]=(0,l.useState)(!1),d=(0,l.useRef)({isHovered:!1,ignoreEmulatedMouseEvents:!1,pointerType:"",target:null}).current;(0,l.useEffect)(U,[]);let{addGlobalListener:f,removeAllGlobalListeners:p}=B(),{hoverProps:m,triggerHoverEnd:b}=(0,l.useMemo)(()=>{let e=(e,t)=>{let r=d.target;d.pointerType="",d.target=null,"touch"!==t&&d.isHovered&&r&&(d.isHovered=!1,p(),a&&a({type:"hoverend",target:r,pointerType:t}),n&&n(!1),c(!1))},l={};return"u">typeof PointerEvent&&(l.onPointerEnter=a=>{V&&"mouse"===a.pointerType||((a,l)=>{if(d.pointerType=l,i||"touch"===l||d.isHovered||!o(a.currentTarget,s(a)))return;d.isHovered=!0;let u=a.currentTarget;d.target=u,f(r(s(a)),"pointerover",t=>{d.isHovered&&d.target&&!o(d.target,s(t))&&e(t,t.pointerType)},{capture:!0}),t&&t({type:"hoverstart",target:u,pointerType:l}),n&&n(!0),c(!0)})(a,a.pointerType)},l.onPointerLeave=t=>{!i&&o(t.currentTarget,s(t))&&e(t,t.pointerType)}),{hoverProps:l,triggerHoverEnd:e}},[t,n,a,i,d,f,p]);return(0,l.useEffect)(()=>{i&&b({currentTarget:d.target},d.pointerType)},[i]),{hoverProps:m,isHovered:u}}],433336);var $=Object.defineProperty,q=(e,t,r)=>{let n;return(n="symbol"!=typeof t?t+"":t)in e?$(e,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[n]=r,r};let X=new class{constructor(){q(this,"current",this.detect()),q(this,"handoffState","pending"),q(this,"currentId",0)}set(e){this.current!==e&&(this.handoffState="pending",this.currentId=0,this.current=e)}reset(){this.set(this.detect())}nextId(){return++this.currentId}get isServer(){return"server"===this.current}get isClient(){return"client"===this.current}detect(){return"u"setTimeout(()=>{throw e}))}function Z(){let e=[],t={addEventListener:(e,r,n,o)=>(e.addEventListener(r,n,o),t.add(()=>e.removeEventListener(r,n,o))),requestAnimationFrame(...e){let r=requestAnimationFrame(...e);return t.add(()=>cancelAnimationFrame(r))},nextFrame:(...e)=>t.requestAnimationFrame(()=>t.requestAnimationFrame(...e)),setTimeout(...e){let r=setTimeout(...e);return t.add(()=>clearTimeout(r))},microTask(...e){let r={current:!0};return z(()=>{r.current&&e[0]()}),t.add(()=>{r.current=!1})},style(e,t,r){let n=e.style.getPropertyValue(t);return Object.assign(e.style,{[t]:r}),this.add(()=>{Object.assign(e.style,{[t]:n})})},group(e){let t=Z();return e(t),this.add(()=>t.dispose())},add:t=>(e.includes(t)||e.push(t),()=>{let r=e.indexOf(t);if(r>=0)for(let t of e.splice(r,1))t()}),dispose(){for(let t of e.splice(0))t()}};return t}function J(){let[e]=(0,l.useState)(Z);return(0,l.useEffect)(()=>()=>e.dispose(),[e]),e}e.s(["env",0,X],80758),e.s(["getOwnerDocument",0,Y],402155),e.s(["microTask",0,z],368578),e.s(["disposables",0,Z],544508),e.s(["useDisposables",0,J],746725);let Q=(e,t)=>{X.isServer?(0,l.useEffect)(e,t):(0,l.useLayoutEffect)(e,t)};function ee(e){let t=(0,l.useRef)(e);return Q(()=>{t.current=e},[e]),t}e.s(["useIsoMorphicEffect",0,Q],835696),e.s(["useLatestValue",0,ee],941444);let et=function(e){let t=ee(e);return l.default.useCallback((...e)=>t.current(...e),[t])};e.s(["useEvent",0,et],914189),e.s(["useActivePress",0,function({disabled:e=!1}={}){let t=(0,l.useRef)(null),[r,n]=(0,l.useState)(!1),o=J(),s=et(()=>{t.current=null,n(!1),o.dispose()}),a=et(e=>{if(o.dispose(),null===t.current){t.current=e.currentTarget,n(!0);{let r=Y(e.currentTarget);o.addEventListener(r,"pointerup",s,!1),o.addEventListener(r,"pointermove",e=>{if(t.current){var r,o;let s,a;n((s=e.width/2,a=e.height/2,r={top:e.clientY-a,right:e.clientX+s,bottom:e.clientY+a,left:e.clientX-s},o=t.current.getBoundingClientRect(),!(!r||!o||r.righto.right||r.bottomo.bottom)))}},!1),o.addEventListener(r,"pointercancel",s,!1)}}});return{pressed:r,pressProps:e?{}:{onPointerDown:a,onPointerUp:s,onClick:s}}}],394487)},397701,e=>{"use strict";e.s(["match",0,function e(t,r,...n){if(t in r){let e=r[t];return"function"==typeof e?e(...n):e}let o=Error(`Tried to handle "${t}" but there is no handler defined. Only defined handlers are: ${Object.keys(r).map(e=>`"${e}"`).join(", ")}.`);throw Error.captureStackTrace&&Error.captureStackTrace(o,e),o}])},652265,e=>{"use strict";let t,r,n,o,s;e.i(544508);var a=e.i(397701),i=e.i(402155);let l=["[contentEditable=true]","[tabindex]","a[href]","area[href]","button:not([disabled])","iframe","input:not([disabled])","select:not([disabled])","textarea:not([disabled])"].map(e=>`${e}:not([tabindex='-1'])`).join(","),u=["[data-autofocus]"].map(e=>`${e}:not([tabindex='-1'])`).join(",");var c=((t=c||{})[t.First=1]="First",t[t.Previous=2]="Previous",t[t.Next=4]="Next",t[t.Last=8]="Last",t[t.WrapAround=16]="WrapAround",t[t.NoScroll=32]="NoScroll",t[t.AutoFocus=64]="AutoFocus",t),d=((r=d||{})[r.Error=0]="Error",r[r.Overflow=1]="Overflow",r[r.Success=2]="Success",r[r.Underflow=3]="Underflow",r),f=((n=f||{})[n.Previous=-1]="Previous",n[n.Next=1]="Next",n);function p(e=document.body){return null==e?[]:Array.from(e.querySelectorAll(l)).sort((e,t)=>Math.sign((e.tabIndex||Number.MAX_SAFE_INTEGER)-(t.tabIndex||Number.MAX_SAFE_INTEGER)))}var m=((o=m||{})[o.Strict=0]="Strict",o[o.Loose=1]="Loose",o),b=((s=b||{})[s.Keyboard=0]="Keyboard",s[s.Mouse=1]="Mouse",s);function v(e,t=e=>e){return e.slice().sort((e,r)=>{let n=t(e),o=t(r);if(null===n||null===o)return 0;let s=n.compareDocumentPosition(o);return s&Node.DOCUMENT_POSITION_FOLLOWING?-1:s&Node.DOCUMENT_POSITION_PRECEDING?1:0})}function h(e,t,{sorted:r=!0,relativeTo:n=null,skipElements:o=[]}={}){var s,a,i;let l=Array.isArray(e)?e.length>0?e[0].ownerDocument:document:e.ownerDocument,c=Array.isArray(e)?r?v(e):e:64&t?function(e=document.body){return null==e?[]:Array.from(e.querySelectorAll(u)).sort((e,t)=>Math.sign((e.tabIndex||Number.MAX_SAFE_INTEGER)-(t.tabIndex||Number.MAX_SAFE_INTEGER)))}(e):p(e);o.length>0&&c.length>1&&(c=c.filter(e=>!o.some(t=>null!=t&&"current"in t?(null==t?void 0:t.current)===e:t===e))),n=null!=n?n:l.activeElement;let d=(()=>{if(5&t)return 1;if(10&t)return -1;throw Error("Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last")})(),f=(()=>{if(1&t)return 0;if(2&t)return Math.max(0,c.indexOf(n))-1;if(4&t)return Math.max(0,c.indexOf(n))+1;if(8&t)return c.length-1;throw Error("Missing Focus.First, Focus.Previous, Focus.Next or Focus.Last")})(),m=32&t?{preventScroll:!0}:{},b=0,g=c.length,y;do{if(b>=g||b+g<=0)return 0;let e=f+b;if(16&t)e=(e+g)%g;else{if(e<0)return 3;if(e>=g)return 1}null==(y=c[e])||y.focus(m),b+=d}while(y!==l.activeElement)return 6&t&&null!=(i=null==(a=null==(s=y)?void 0:s.matches)?void 0:a.call(s,"textarea,input"))&&i&&y.select(),2}"u">typeof window&&"u">typeof document&&(document.addEventListener("keydown",e=>{e.metaKey||e.altKey||e.ctrlKey||(document.documentElement.dataset.headlessuiFocusVisible="")},!0),document.addEventListener("click",e=>{1===e.detail?delete document.documentElement.dataset.headlessuiFocusVisible:0===e.detail&&(document.documentElement.dataset.headlessuiFocusVisible="")},!0)),e.s(["Focus",0,c,"FocusResult",0,d,"FocusableMode",0,m,"focusFrom",0,function(e,t){return h(p(),t,{relativeTo:e})},"focusIn",0,h,"getFocusableElements",0,p,"isFocusableElement",0,function(e,t=0){var r;return e!==(null==(r=(0,i.getOwnerDocument)(e))?void 0:r.body)&&(0,a.match)(t,{0:()=>e.matches(l),1(){let t=e;for(;null!==t;){if(t.matches(l))return!0;t=t.parentElement}return!1}})},"sortByDomNode",0,v])},144279,294316,e=>{"use strict";var t=e.i(271645);e.s(["useResolveButtonType",0,function(e,r){return(0,t.useMemo)(()=>{var t;if(e.type)return e.type;let n=null!=(t=e.as)?t:"button";if("string"==typeof n&&"button"===n.toLowerCase()||(null==r?void 0:r.tagName)==="BUTTON"&&!r.hasAttribute("type"))return"button"},[e.type,e.as,r])}],144279);var r=e.i(914189);let n=Symbol();e.s(["optionalRef",0,function(e,t=!0){return Object.assign(e,{[n]:t})},"useSyncRefs",0,function(...e){let o=(0,t.useRef)(e);(0,t.useEffect)(()=>{o.current=e},[e]);let s=(0,r.useEvent)(e=>{for(let t of o.current)null!=t&&("function"==typeof t?t(e):t.current=e)});return e.every(e=>null==e||(null==e?void 0:e[n]))?void 0:s}],294316)},732607,e=>{"use strict";e.s(["classNames",0,function(...e){return Array.from(new Set(e.flatMap(e=>"string"==typeof e?e.split(" "):[]))).filter(Boolean).join(" ")}])},700020,e=>{"use strict";let t,r;var n=e.i(271645),o=e.i(732607),s=e.i(397701),a=((t=a||{})[t.None=0]="None",t[t.RenderStrategy=1]="RenderStrategy",t[t.Static=2]="Static",t),i=((r=i||{})[r.Unmount=0]="Unmount",r[r.Hidden=1]="Hidden",r);function l(e,t={},r,s,a){let{as:i=r,children:u,refName:p="ref",...m}=f(e,["unmount","static"]),b=void 0!==e.ref?{[p]:e.ref}:{},v="function"==typeof u?u(t):u;"className"in m&&m.className&&"function"==typeof m.className&&(m.className=m.className(t)),m["aria-labelledby"]&&m["aria-labelledby"]===m.id&&(m["aria-labelledby"]=void 0);let h={};if(t){let e=!1,r=[];for(let[n,o]of Object.entries(t))"boolean"==typeof o&&(e=!0),!0===o&&r.push(n.replace(/([A-Z])/g,e=>`-${e.toLowerCase()}`));if(e)for(let e of(h["data-headlessui-state"]=r.join(" "),r))h[`data-${e}`]=""}if(i===n.Fragment&&(Object.keys(d(m)).length>0||Object.keys(d(h)).length>0))if(!(0,n.isValidElement)(v)||Array.isArray(v)&&v.length>1){if(Object.keys(d(m)).length>0)throw Error(['Passing props on "Fragment"!',"",`The current component <${s} /> is rendering a "Fragment".`,"However we need to passthrough the following props:",Object.keys(d(m)).concat(Object.keys(d(h))).map(e=>` - ${e}`).join(` +`),"","You can apply a few solutions:",['Add an `as="..."` prop, to ensure that we render an actual element instead of a "Fragment".',"Render a single element as the child so that we can forward the props onto that element."].map(e=>` - ${e}`).join(` +`)].join(` +`))}else{var g;let e=v.props,t=null==e?void 0:e.className,r="function"==typeof t?(...e)=>(0,o.classNames)(t(...e),m.className):(0,o.classNames)(t,m.className),s=c(v.props,d(f(m,["ref"])));for(let e in h)e in s&&delete h[e];return(0,n.cloneElement)(v,Object.assign({},s,h,b,{ref:a((g=v,n.default.version.split(".")[0]>="19"?g.props.ref:g.ref),b.ref)},r?{className:r}:{}))}return(0,n.createElement)(i,Object.assign({},f(m,["ref"]),i!==n.Fragment&&b,i!==n.Fragment&&h),v)}function u(...e){return e.every(e=>null==e)?void 0:t=>{for(let r of e)null!=r&&("function"==typeof r?r(t):r.current=t)}}function c(...e){if(0===e.length)return{};if(1===e.length)return e[0];let t={},r={};for(let n of e)for(let e in n)e.startsWith("on")&&"function"==typeof n[e]?(null!=r[e]||(r[e]=[]),r[e].push(n[e])):t[e]=n[e];if(t.disabled||t["aria-disabled"])for(let e in r)/^(on(?:Click|Pointer|Mouse|Key)(?:Down|Up|Press)?)$/.test(e)&&(r[e]=[e=>{var t;return null==(t=null==e?void 0:e.preventDefault)?void 0:t.call(e)}]);for(let e in r)Object.assign(t,{[e](t,...n){for(let o of r[e]){if((t instanceof Event||(null==t?void 0:t.nativeEvent)instanceof Event)&&t.defaultPrevented)return;o(t,...n)}}});return t}function d(e){let t=Object.assign({},e);for(let e in t)void 0===t[e]&&delete t[e];return t}function f(e,t=[]){let r=Object.assign({},e);for(let e of t)e in r&&delete r[e];return r}e.s(["RenderFeatures",0,a,"RenderStrategy",0,i,"compact",0,d,"forwardRefWithAs",0,function(e){var t;return Object.assign((0,n.forwardRef)(e),{displayName:null!=(t=e.displayName)?t:e.name})},"mergeProps",0,function(...e){if(0===e.length)return{};if(1===e.length)return e[0];let t={},r={};for(let n of e)for(let e in n)e.startsWith("on")&&"function"==typeof n[e]?(null!=r[e]||(r[e]=[]),r[e].push(n[e])):t[e]=n[e];for(let e in r)Object.assign(t,{[e](...t){for(let n of r[e])null==n||n(...t)}});return t},"useRender",0,function(){let e,t,r=(e=(0,n.useRef)([]),t=(0,n.useCallback)(t=>{for(let r of e.current)null!=r&&("function"==typeof r?r(t):r.current=t)},[]),(...r)=>{if(!r.every(e=>null==e))return e.current=r,t});return(0,n.useCallback)(e=>(function({ourProps:e,theirProps:t,slot:r,defaultTag:n,features:o,visible:a=!0,name:i,mergeRefs:d}){d=null!=d?d:u;let f=c(t,e);if(a)return l(f,r,n,i,d);let p=null!=o?o:0;if(2&p){let{static:e=!1,...t}=f;if(e)return l(t,r,n,i,d)}if(1&p){let{unmount:e=!0,...t}=f;return(0,s.match)(+!e,{0:()=>null,1:()=>l({...t,hidden:!0,style:{display:"none"}},r,n,i,d)})}return l(f,r,n,i,d)})({mergeRefs:r,...e}),[r])}])},2788,e=>{"use strict";let t;var r=e.i(700020),n=((t=n||{})[t.None=1]="None",t[t.Focusable=2]="Focusable",t[t.Hidden=4]="Hidden",t);let o=(0,r.forwardRefWithAs)(function(e,t){var n;let{features:o=1,...s}=e,a={ref:t,"aria-hidden":(2&o)==2||(null!=(n=s["aria-hidden"])?n:void 0),hidden:(4&o)==4||void 0,style:{position:"fixed",top:1,left:1,width:1,height:0,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0",...(4&o)==4&&(2&o)!=2&&{display:"none"}}};return(0,r.useRender)()({ourProps:a,theirProps:s,slot:{},defaultTag:"span",name:"Hidden"})});e.s(["Hidden",0,o,"HiddenFeatures",0,n])},998348,e=>{"use strict";let t;var r=((t=r||{}).Space=" ",t.Enter="Enter",t.Escape="Escape",t.Backspace="Backspace",t.Delete="Delete",t.ArrowLeft="ArrowLeft",t.ArrowUp="ArrowUp",t.ArrowRight="ArrowRight",t.ArrowDown="ArrowDown",t.Home="Home",t.End="End",t.PageUp="PageUp",t.PageDown="PageDown",t.Tab="Tab",t);e.s(["Keys",0,r])},553521,e=>{"use strict";var t=e.i(271645),r=e.i(835696);e.s(["useIsMounted",0,function(){let e=(0,t.useRef)(!1);return(0,r.useIsoMorphicEffect)(()=>(e.current=!0,()=>{e.current=!1}),[]),e}])},640497,e=>{"use strict";var t=e.i(271645),r=e.i(553521),n=e.i(2788);e.s(["FocusSentinel",0,function({onFocus:e}){let[o,s]=(0,t.useState)(!0),a=(0,r.useIsMounted)();return o?t.default.createElement(n.Hidden,{as:"button",type:"button",features:n.HiddenFeatures.Focusable,onFocus:t=>{t.preventDefault();let r,n=50;r=requestAnimationFrame(function t(){if(n--<=0){r&&cancelAnimationFrame(r);return}if(e()){if(cancelAnimationFrame(r),!a.current)return;s(!1);return}r=requestAnimationFrame(t)})}}):null}])},963703,e=>{"use strict";var t=e.i(271645);let r=t.createContext(null);e.s(["StableCollection",0,function({children:e}){let n=t.useRef({groups:new Map,get(e,t){var r;let n=this.groups.get(e);n||(n=new Map,this.groups.set(e,n));let o=null!=(r=n.get(t))?r:0;return n.set(t,o+1),[Array.from(n.keys()).indexOf(t),function(){let e=n.get(t);e>1?n.set(t,e-1):n.delete(t)}]}});return t.createElement(r.Provider,{value:n},e)},"useStableCollectionIndex",0,function(e){let n=t.useContext(r);if(!n)throw Error("You must wrap your component in a ");let o=t.useId(),[s,a]=n.current.get(e,o);return t.useEffect(()=>a,[]),s}])},970554,e=>{"use strict";let t,r,n;var o=e.i(783222),s=e.i(433336),a=e.i(271645),i=e.i(394487),l=e.i(914189),u=e.i(835696),c=e.i(941444),d=e.i(144279),f=e.i(294316),p=e.i(640497),m=e.i(2788),b=e.i(652265),v=e.i(397701),h=e.i(368578),g=e.i(402155),y=e.i(700020),E=e.i(963703),T=e.i(998348),w=((t=w||{})[t.Forwards=0]="Forwards",t[t.Backwards=1]="Backwards",t),x=((r=x||{})[r.Less=-1]="Less",r[r.Equal=0]="Equal",r[r.Greater=1]="Greater",r),F=((n=F||{})[n.SetSelectedIndex=0]="SetSelectedIndex",n[n.RegisterTab=1]="RegisterTab",n[n.UnregisterTab=2]="UnregisterTab",n[n.RegisterPanel=3]="RegisterPanel",n[n.UnregisterPanel=4]="UnregisterPanel",n);let P={0(e,t){var r;let n=(0,b.sortByDomNode)(e.tabs,e=>e.current),o=(0,b.sortByDomNode)(e.panels,e=>e.current),s=n.filter(e=>{var t;return!(null!=(t=e.current)&&t.hasAttribute("disabled"))}),a={...e,tabs:n,panels:o};if(t.index<0||t.index>n.length-1){let r=(0,v.match)(Math.sign(t.index-e.selectedIndex),{[-1]:()=>1,0:()=>(0,v.match)(Math.sign(t.index),{[-1]:()=>0,0:()=>0,1:()=>1}),1:()=>0});if(0===s.length)return a;let o=(0,v.match)(r,{0:()=>n.indexOf(s[0]),1:()=>n.indexOf(s[s.length-1])});return{...a,selectedIndex:-1===o?e.selectedIndex:o}}let i=n.slice(0,t.index),l=[...n.slice(t.index),...i].find(e=>s.includes(e));if(!l)return a;let u=null!=(r=n.indexOf(l))?r:e.selectedIndex;return -1===u&&(u=e.selectedIndex),{...a,selectedIndex:u}},1(e,t){if(e.tabs.includes(t.tab))return e;let r=e.tabs[e.selectedIndex],n=(0,b.sortByDomNode)([...e.tabs,t.tab],e=>e.current),o=e.selectedIndex;return e.info.current.isControlled||-1===(o=n.indexOf(r))&&(o=e.selectedIndex),{...e,tabs:n,selectedIndex:o}},2:(e,t)=>({...e,tabs:e.tabs.filter(e=>e!==t.tab)}),3:(e,t)=>e.panels.includes(t.panel)?e:{...e,panels:(0,b.sortByDomNode)([...e.panels,t.panel],e=>e.current)},4:(e,t)=>({...e,panels:e.panels.filter(e=>e!==t.panel)})},k=(0,a.createContext)(null);function L(e){let t=(0,a.useContext)(k);if(null===t){let t=Error(`<${e} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,L),t}return t}k.displayName="TabsDataContext";let N=(0,a.createContext)(null);function C(e){let t=(0,a.useContext)(N);if(null===t){let t=Error(`<${e} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,C),t}return t}function I(e,t){return(0,v.match)(t.type,P,e,t)}N.displayName="TabsActionsContext";let S=y.RenderFeatures.RenderStrategy|y.RenderFeatures.Static,A=Object.assign((0,y.forwardRefWithAs)(function(e,t){var r,n;let c=(0,a.useId)(),{id:p=`headlessui-tabs-tab-${c}`,disabled:m=!1,autoFocus:w=!1,...x}=e,{orientation:F,activation:P,selectedIndex:k,tabs:N,panels:I}=L("Tab"),S=C("Tab"),A=L("Tab"),[M,R]=(0,a.useState)(null),O=(0,a.useRef)(null),D=(0,f.useSyncRefs)(O,t,R);(0,u.useIsoMorphicEffect)(()=>S.registerTab(O),[S,O]);let H=(0,E.useStableCollectionIndex)("tabs"),j=N.indexOf(O);-1===j&&(j=H);let K=j===k,W=(0,l.useEvent)(e=>{var t;let r=e();if(r===b.FocusResult.Success&&"auto"===P){let e=null==(t=(0,g.getOwnerDocument)(O))?void 0:t.activeElement,r=A.tabs.findIndex(t=>t.current===e);-1!==r&&S.change(r)}return r}),B=(0,l.useEvent)(e=>{let t=N.map(e=>e.current).filter(Boolean);if(e.key===T.Keys.Space||e.key===T.Keys.Enter){e.preventDefault(),e.stopPropagation(),S.change(j);return}switch(e.key){case T.Keys.Home:case T.Keys.PageUp:return e.preventDefault(),e.stopPropagation(),W(()=>(0,b.focusIn)(t,b.Focus.First));case T.Keys.End:case T.Keys.PageDown:return e.preventDefault(),e.stopPropagation(),W(()=>(0,b.focusIn)(t,b.Focus.Last))}if(W(()=>(0,v.match)(F,{vertical:()=>e.key===T.Keys.ArrowUp?(0,b.focusIn)(t,b.Focus.Previous|b.Focus.WrapAround):e.key===T.Keys.ArrowDown?(0,b.focusIn)(t,b.Focus.Next|b.Focus.WrapAround):b.FocusResult.Error,horizontal:()=>e.key===T.Keys.ArrowLeft?(0,b.focusIn)(t,b.Focus.Previous|b.Focus.WrapAround):e.key===T.Keys.ArrowRight?(0,b.focusIn)(t,b.Focus.Next|b.Focus.WrapAround):b.FocusResult.Error}))===b.FocusResult.Success)return e.preventDefault()}),V=(0,a.useRef)(!1),_=(0,l.useEvent)(()=>{var e;V.current||(V.current=!0,null==(e=O.current)||e.focus({preventScroll:!0}),S.change(j),(0,h.microTask)(()=>{V.current=!1}))}),G=(0,l.useEvent)(e=>{e.preventDefault()}),{isFocusVisible:U,focusProps:$}=(0,o.useFocusRing)({autoFocus:w}),{isHovered:q,hoverProps:X}=(0,s.useHover)({isDisabled:m}),{pressed:Y,pressProps:z}=(0,i.useActivePress)({disabled:m}),Z=(0,a.useMemo)(()=>({selected:K,hover:q,active:Y,focus:U,autofocus:w,disabled:m}),[K,q,U,Y,w,m]),J=(0,y.mergeProps)({ref:D,onKeyDown:B,onMouseDown:G,onClick:_,id:p,role:"tab",type:(0,d.useResolveButtonType)(e,M),"aria-controls":null==(n=null==(r=I[j])?void 0:r.current)?void 0:n.id,"aria-selected":K,tabIndex:K?0:-1,disabled:m||void 0,autoFocus:w},$,X,z);return(0,y.useRender)()({ourProps:J,theirProps:x,slot:Z,defaultTag:"button",name:"Tabs.Tab"})}),{Group:(0,y.forwardRefWithAs)(function(e,t){let{defaultIndex:r=0,vertical:n=!1,manual:o=!1,onChange:s,selectedIndex:i=null,...d}=e,m=n?"vertical":"horizontal",v=o?"manual":"auto",h=null!==i,g=(0,c.useLatestValue)({isControlled:h}),T=(0,f.useSyncRefs)(t),[w,x]=(0,a.useReducer)(I,{info:g,selectedIndex:null!=i?i:r,tabs:[],panels:[]}),F=(0,a.useMemo)(()=>({selectedIndex:w.selectedIndex}),[w.selectedIndex]),P=(0,c.useLatestValue)(s||(()=>{})),L=(0,c.useLatestValue)(w.tabs),C=(0,a.useMemo)(()=>({orientation:m,activation:v,...w}),[m,v,w]),S=(0,l.useEvent)(e=>(x({type:1,tab:e}),()=>x({type:2,tab:e}))),A=(0,l.useEvent)(e=>(x({type:3,panel:e}),()=>x({type:4,panel:e}))),M=(0,l.useEvent)(e=>{R.current!==e&&P.current(e),h||x({type:0,index:e})}),R=(0,c.useLatestValue)(h?e.selectedIndex:w.selectedIndex),O=(0,a.useMemo)(()=>({registerTab:S,registerPanel:A,change:M}),[]);(0,u.useIsoMorphicEffect)(()=>{x({type:0,index:null!=i?i:r})},[i]),(0,u.useIsoMorphicEffect)(()=>{if(void 0===R.current||w.tabs.length<=0)return;let e=(0,b.sortByDomNode)(w.tabs,e=>e.current);e.some((e,t)=>w.tabs[t]!==e)&&M(e.indexOf(w.tabs[R.current]))});let D=(0,y.useRender)();return a.default.createElement(E.StableCollection,null,a.default.createElement(N.Provider,{value:O},a.default.createElement(k.Provider,{value:C},C.tabs.length<=0&&a.default.createElement(p.FocusSentinel,{onFocus:()=>{var e,t;for(let r of L.current)if((null==(e=r.current)?void 0:e.tabIndex)===0)return null==(t=r.current)||t.focus(),!0;return!1}}),D({ourProps:{ref:T},theirProps:d,slot:F,defaultTag:"div",name:"Tabs"}))))}),List:(0,y.forwardRefWithAs)(function(e,t){let{orientation:r,selectedIndex:n}=L("Tab.List"),o=(0,f.useSyncRefs)(t),s=(0,a.useMemo)(()=>({selectedIndex:n}),[n]);return(0,y.useRender)()({ourProps:{ref:o,role:"tablist","aria-orientation":r},theirProps:e,slot:s,defaultTag:"div",name:"Tabs.List"})}),Panels:(0,y.forwardRefWithAs)(function(e,t){let{selectedIndex:r}=L("Tab.Panels"),n=(0,f.useSyncRefs)(t),o=(0,a.useMemo)(()=>({selectedIndex:r}),[r]);return(0,y.useRender)()({ourProps:{ref:n},theirProps:e,slot:o,defaultTag:"div",name:"Tabs.Panels"})}),Panel:(0,y.forwardRefWithAs)(function(e,t){var r,n,s,i;let l=(0,a.useId)(),{id:c=`headlessui-tabs-panel-${l}`,tabIndex:d=0,...p}=e,{selectedIndex:b,tabs:v,panels:h}=L("Tab.Panel"),g=C("Tab.Panel"),T=(0,a.useRef)(null),w=(0,f.useSyncRefs)(T,t);(0,u.useIsoMorphicEffect)(()=>g.registerPanel(T),[g,T]);let x=(0,E.useStableCollectionIndex)("panels"),F=h.indexOf(T);-1===F&&(F=x);let P=F===b,{isFocusVisible:k,focusProps:N}=(0,o.useFocusRing)(),I=(0,a.useMemo)(()=>({selected:P,focus:k}),[P,k]),A=(0,y.mergeProps)({ref:w,id:c,role:"tabpanel","aria-labelledby":null==(n=null==(r=v[F])?void 0:r.current)?void 0:n.id,tabIndex:P?d:-1},N),M=(0,y.useRender)();return P||null!=(s=p.unmount)&&!s||null!=(i=p.static)&&i?M({ourProps:A,theirProps:p,slot:I,defaultTag:"div",features:S,visible:P,name:"Tabs.Panel"}):a.default.createElement(m.Hidden,{"aria-hidden":"true",...A})})});e.s(["Tab",0,A])},405371,910342,e=>{"use strict";var t=e.i(290571),r=e.i(271645),n=e.i(480731);let o=(0,r.createContext)(n.BaseColors.Blue);e.s(["default",0,o],910342);var s=e.i(970554),a=e.i(444755);let i=(0,e.i(673706).makeClassName)("TabList"),l=(0,r.createContext)("line"),u={line:(0,a.tremorTwMerge)("flex border-b space-x-4","border-tremor-border","dark:border-dark-tremor-border"),solid:(0,a.tremorTwMerge)("inline-flex p-0.5 rounded-tremor-default space-x-1.5","bg-tremor-background-subtle","dark:bg-dark-tremor-background-subtle")},c=r.default.forwardRef((e,n)=>{let{color:c,variant:d="line",children:f,className:p}=e,m=(0,t.__rest)(e,["color","variant","children","className"]);return r.default.createElement(s.Tab.List,Object.assign({ref:n,className:(0,a.tremorTwMerge)(i("root"),"justify-start overflow-x-clip",u[d],p)},m),r.default.createElement(l.Provider,{value:d},r.default.createElement(o.Provider,{value:c},f)))});c.displayName="TabList",e.s(["TabVariantContext",0,l,"default",0,c],405371)},197647,e=>{"use strict";var t=e.i(290571),r=e.i(970554),n=e.i(95779),o=e.i(444755),s=e.i(673706),a=e.i(271645),i=e.i(405371),l=e.i(910342);let u=(0,s.makeClassName)("Tab"),c=a.default.forwardRef((e,c)=>{let{icon:d,className:f,children:p}=e,m=(0,t.__rest)(e,["icon","className","children"]),b=(0,a.useContext)(i.TabVariantContext),v=(0,a.useContext)(l.default);return a.default.createElement(r.Tab,Object.assign({ref:c,className:(0,o.tremorTwMerge)(u("root"),"flex whitespace-nowrap truncate max-w-xs outline-none data-focus-visible:ring text-tremor-default transition duration-100",function(e,t){switch(e){case"line":return(0,o.tremorTwMerge)("data-[selected]:border-b-2 hover:border-b-2 border-transparent transition duration-100 -mb-px px-2 py-2","hover:border-tremor-content hover:text-tremor-content-emphasis text-tremor-content","[&:not([data-selected])]:dark:hover:border-dark-tremor-content-emphasis [&:not([data-selected])]:dark:hover:text-dark-tremor-content-emphasis [&:not([data-selected])]:dark:text-dark-tremor-content",t?(0,s.getColorClassNames)(t,n.colorPalette.border).selectBorderColor:["data-[selected]:border-tremor-brand data-[selected]:text-tremor-brand","data-[selected]:dark:border-dark-tremor-brand data-[selected]:dark:text-dark-tremor-brand"]);case"solid":return(0,o.tremorTwMerge)("border-transparent border rounded-tremor-small px-2.5 py-1","data-[selected]:border-tremor-border data-[selected]:bg-tremor-background data-[selected]:shadow-tremor-input [&:not([data-selected])]:hover:text-tremor-content-emphasis data-[selected]:text-tremor-brand [&:not([data-selected])]:text-tremor-content","dark:data-[selected]:border-dark-tremor-border dark:data-[selected]:bg-dark-tremor-background dark:data-[selected]:shadow-dark-tremor-input dark:[&:not([data-selected])]:hover:text-dark-tremor-content-emphasis dark:data-[selected]:text-dark-tremor-brand dark:[&:not([data-selected])]:text-dark-tremor-content",t?(0,s.getColorClassNames)(t,n.colorPalette.text).selectTextColor:"text-tremor-content dark:text-dark-tremor-content")}}(b,v),f,v&&(0,s.getColorClassNames)(v,n.colorPalette.text).selectTextColor)},m),d?a.default.createElement(d,{className:(0,o.tremorTwMerge)(u("icon"),"flex-none h-5 w-5",p?"mr-2":"")}):null,p?a.default.createElement("span",null,p):null)});c.displayName="Tab",e.s(["Tab",0,c],197647)},653824,e=>{"use strict";var t=e.i(290571),r=e.i(970554),n=e.i(444755),o=e.i(673706),s=e.i(271645);let a=(0,o.makeClassName)("TabGroup"),i=s.default.forwardRef((e,o)=>{let{defaultIndex:i,index:l,onIndexChange:u,children:c,className:d}=e,f=(0,t.__rest)(e,["defaultIndex","index","onIndexChange","children","className"]);return s.default.createElement(r.Tab.Group,Object.assign({as:"div",ref:o,defaultIndex:i,selectedIndex:l,onChange:u,className:(0,n.tremorTwMerge)(a("root"),"w-full",d)},f),c)});i.displayName="TabGroup",e.s(["TabGroup",0,i],653824)},881073,e=>{"use strict";var t=e.i(405371);e.s(["TabList",()=>t.default])},751734,e=>{"use strict";let t=(0,e.i(271645).createContext)(0);e.s(["default",0,t])},404206,e=>{"use strict";var t=e.i(290571),r=e.i(751734),n=e.i(144582),o=e.i(444755),s=e.i(673706),a=e.i(271645);let i=(0,s.makeClassName)("TabPanel"),l=a.default.forwardRef((e,s)=>{let{children:l,className:u}=e,c=(0,t.__rest)(e,["children","className"]),{selectedValue:d}=(0,a.useContext)(n.default),f=d===(0,a.useContext)(r.default);return a.default.createElement("div",Object.assign({ref:s,className:(0,o.tremorTwMerge)(i("root"),"w-full mt-2",f?"":"hidden",u),"aria-selected":f?"true":"false"},c),l)});l.displayName="TabPanel",e.s(["TabPanel",0,l],404206)},723731,e=>{"use strict";var t=e.i(290571),r=e.i(970554),n=e.i(751734),o=e.i(144582),s=e.i(444755),a=e.i(673706),i=e.i(271645);let l=(0,a.makeClassName)("TabPanels"),u=i.default.forwardRef((e,a)=>{let{children:u,className:c}=e,d=(0,t.__rest)(e,["children","className"]);return i.default.createElement(r.Tab.Panels,Object.assign({as:"div",ref:a,className:(0,s.tremorTwMerge)(l("root"),"w-full",c)},d),({selectedIndex:e})=>i.default.createElement(o.default.Provider,{value:{selectedValue:e}},i.default.Children.map(u,(e,t)=>i.default.createElement(n.default.Provider,{value:t},e))))});u.displayName="TabPanels",e.s(["TabPanels",0,u],723731)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/13c74.fwk0wmq.js b/litellm/proxy/_experimental/out/_next/static/chunks/13c74.fwk0wmq.js new file mode 100644 index 00000000000..d2a351853fb --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/13c74.fwk0wmq.js @@ -0,0 +1 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,599724,936325,e=>{"use strict";var t=e.i(95779),r=e.i(444755),a=e.i(673706),l=e.i(271645);let s=l.default.forwardRef((e,s)=>{let{color:o,className:i,children:n}=e;return l.default.createElement("p",{ref:s,className:(0,r.tremorTwMerge)("text-tremor-default",o?(0,a.getColorClassNames)(o,t.colorPalette.text).textColor:(0,r.tremorTwMerge)("text-tremor-content","dark:text-dark-tremor-content"),i)},n)});s.displayName="Text",e.s(["default",0,s],936325),e.s(["Text",0,s],599724)},994388,e=>{"use strict";var t=e.i(290571),r=e.i(829087),a=e.i(271645);let l=["preEnter","entering","entered","preExit","exiting","exited","unmounted"],s=e=>({_s:e,status:l[e],isEnter:e<3,isMounted:6!==e,isResolved:2===e||e>4}),o=e=>e?6:5,i=(e,t,r,a,l)=>{clearTimeout(a.current);let o=s(e);t(o),r.current=o,l&&l({current:o})};var n=e.i(480731),d=e.i(444755),c=e.i(673706);let m=e=>{var r=(0,t.__rest)(e,[]);return a.default.createElement("svg",Object.assign({},r,{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"}),a.default.createElement("path",{fill:"none",d:"M0 0h24v24H0z"}),a.default.createElement("path",{d:"M18.364 5.636L16.95 7.05A7 7 0 1 0 19 12h2a9 9 0 1 1-2.636-6.364z"}))};var u=e.i(95779);let g={xs:{height:"h-4",width:"w-4"},sm:{height:"h-5",width:"w-5"},md:{height:"h-5",width:"w-5"},lg:{height:"h-6",width:"w-6"},xl:{height:"h-6",width:"w-6"}},h=(e,t)=>{switch(e){case"primary":return{textColor:t?(0,c.getColorClassNames)("white").textColor:"text-tremor-brand-inverted dark:text-dark-tremor-brand-inverted",hoverTextColor:t?(0,c.getColorClassNames)("white").textColor:"text-tremor-brand-inverted dark:text-dark-tremor-brand-inverted",bgColor:t?(0,c.getColorClassNames)(t,u.colorPalette.background).bgColor:"bg-tremor-brand dark:bg-dark-tremor-brand",hoverBgColor:t?(0,c.getColorClassNames)(t,u.colorPalette.darkBackground).hoverBgColor:"hover:bg-tremor-brand-emphasis dark:hover:bg-dark-tremor-brand-emphasis",borderColor:t?(0,c.getColorClassNames)(t,u.colorPalette.border).borderColor:"border-tremor-brand dark:border-dark-tremor-brand",hoverBorderColor:t?(0,c.getColorClassNames)(t,u.colorPalette.darkBorder).hoverBorderColor:"hover:border-tremor-brand-emphasis dark:hover:border-dark-tremor-brand-emphasis"};case"secondary":return{textColor:t?(0,c.getColorClassNames)(t,u.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",hoverTextColor:t?(0,c.getColorClassNames)(t,u.colorPalette.text).textColor:"hover:text-tremor-brand-emphasis dark:hover:text-dark-tremor-brand-emphasis",bgColor:(0,c.getColorClassNames)("transparent").bgColor,hoverBgColor:t?(0,d.tremorTwMerge)((0,c.getColorClassNames)(t,u.colorPalette.background).hoverBgColor,"hover:bg-opacity-20 dark:hover:bg-opacity-20"):"hover:bg-tremor-brand-faint dark:hover:bg-dark-tremor-brand-faint",borderColor:t?(0,c.getColorClassNames)(t,u.colorPalette.border).borderColor:"border-tremor-brand dark:border-dark-tremor-brand"};case"light":return{textColor:t?(0,c.getColorClassNames)(t,u.colorPalette.text).textColor:"text-tremor-brand dark:text-dark-tremor-brand",hoverTextColor:t?(0,c.getColorClassNames)(t,u.colorPalette.darkText).hoverTextColor:"hover:text-tremor-brand-emphasis dark:hover:text-dark-tremor-brand-emphasis",bgColor:(0,c.getColorClassNames)("transparent").bgColor,borderColor:"",hoverBorderColor:""}}},p=(0,c.makeClassName)("Button"),x=({loading:e,iconSize:t,iconPosition:r,Icon:l,needMargin:s,transitionStatus:o})=>{let i=s?r===n.HorizontalPositions.Left?(0,d.tremorTwMerge)("-ml-1","mr-1.5"):(0,d.tremorTwMerge)("-mr-1","ml-1.5"):"",c=(0,d.tremorTwMerge)("w-0 h-0"),u={default:c,entering:c,entered:t,exiting:t,exited:c};return e?a.default.createElement(m,{className:(0,d.tremorTwMerge)(p("icon"),"animate-spin shrink-0",i,u.default,u[o]),style:{transition:"width 150ms"}}):a.default.createElement(l,{className:(0,d.tremorTwMerge)(p("icon"),"shrink-0",t,i)})},f=a.default.forwardRef((e,l)=>{let{icon:m,iconPosition:u=n.HorizontalPositions.Left,size:f=n.Sizes.SM,color:b,variant:y="primary",disabled:v,loading:w=!1,loadingText:N,children:C,tooltip:k,className:j}=e,S=(0,t.__rest)(e,["icon","iconPosition","size","color","variant","disabled","loading","loadingText","children","tooltip","className"]),M=w||v,_=void 0!==m||w,T=w&&N,E=!(!C&&!T),P=(0,d.tremorTwMerge)(g[f].height,g[f].width),R="light"!==y?(0,d.tremorTwMerge)("rounded-tremor-default border","shadow-tremor-input","dark:shadow-dark-tremor-input"):"",L=h(y,b),O=("light"!==y?{xs:{paddingX:"px-2.5",paddingY:"py-1.5",fontSize:"text-xs"},sm:{paddingX:"px-4",paddingY:"py-2",fontSize:"text-sm"},md:{paddingX:"px-4",paddingY:"py-2",fontSize:"text-md"},lg:{paddingX:"px-4",paddingY:"py-2.5",fontSize:"text-lg"},xl:{paddingX:"px-4",paddingY:"py-3",fontSize:"text-xl"}}:{xs:{paddingX:"",paddingY:"",fontSize:"text-xs"},sm:{paddingX:"",paddingY:"",fontSize:"text-sm"},md:{paddingX:"",paddingY:"",fontSize:"text-md"},lg:{paddingX:"",paddingY:"",fontSize:"text-lg"},xl:{paddingX:"",paddingY:"",fontSize:"text-xl"}})[f],{tooltipProps:z,getReferenceProps:B}=(0,r.useTooltip)(300),[I,A]=(({enter:e=!0,exit:t=!0,preEnter:r,preExit:l,timeout:n,initialEntered:d,mountOnEnter:c,unmountOnExit:m,onStateChange:u}={})=>{let[g,h]=(0,a.useState)(()=>s(d?2:o(c))),p=(0,a.useRef)(g),x=(0,a.useRef)(0),[f,b]="object"==typeof n?[n.enter,n.exit]:[n,n],y=(0,a.useCallback)(()=>{let e=((e,t)=>{switch(e){case 1:case 0:return 2;case 4:case 3:return o(t)}})(p.current._s,m);e&&i(e,h,p,x,u)},[u,m]);return[g,(0,a.useCallback)(a=>{let s=e=>{switch(i(e,h,p,x,u),e){case 1:f>=0&&(x.current=((...e)=>setTimeout(...e))(y,f));break;case 4:b>=0&&(x.current=((...e)=>setTimeout(...e))(y,b));break;case 0:case 3:x.current=((...e)=>setTimeout(...e))(()=>{isNaN(document.body.offsetTop)||s(e+1)},0)}},n=p.current.isEnter;"boolean"!=typeof a&&(a=!n),a?n||s(e?+!r:2):n&&s(t?l?3:4:o(m))},[y,u,e,t,r,l,f,b,m]),y]})({timeout:50});return(0,a.useEffect)(()=>{A(w)},[w]),a.default.createElement("button",Object.assign({ref:(0,c.mergeRefs)([l,z.refs.setReference]),className:(0,d.tremorTwMerge)(p("root"),"shrink-0 inline-flex justify-center items-center group font-medium outline-none",R,O.paddingX,O.paddingY,O.fontSize,L.textColor,L.bgColor,L.borderColor,L.hoverBorderColor,M?"opacity-50 cursor-not-allowed":(0,d.tremorTwMerge)(h(y,b).hoverTextColor,h(y,b).hoverBgColor,h(y,b).hoverBorderColor),j),disabled:M},B,S),a.default.createElement(r.default,Object.assign({text:k},z)),_&&u!==n.HorizontalPositions.Right?a.default.createElement(x,{loading:w,iconSize:P,iconPosition:u,Icon:m,transitionStatus:I.status,needMargin:E}):null,T||C?a.default.createElement("span",{className:(0,d.tremorTwMerge)(p("text"),"text-tremor-default whitespace-nowrap")},T?N:C):null,_&&u===n.HorizontalPositions.Right?a.default.createElement(x,{loading:w,iconSize:P,iconPosition:u,Icon:m,transitionStatus:I.status,needMargin:E}):null)});f.displayName="Button",e.s(["Button",0,f],994388)},304967,e=>{"use strict";var t=e.i(290571),r=e.i(271645),a=e.i(480731),l=e.i(95779),s=e.i(444755),o=e.i(673706);let i=(0,o.makeClassName)("Card"),n=r.default.forwardRef((e,n)=>{let{decoration:d="",decorationColor:c,children:m,className:u}=e,g=(0,t.__rest)(e,["decoration","decorationColor","children","className"]);return r.default.createElement("div",Object.assign({ref:n,className:(0,s.tremorTwMerge)(i("root"),"relative w-full text-left ring-1 rounded-tremor-default p-6","bg-tremor-background ring-tremor-ring shadow-tremor-card","dark:bg-dark-tremor-background dark:ring-dark-tremor-ring dark:shadow-dark-tremor-card",c?(0,o.getColorClassNames)(c,l.colorPalette.border).borderColor:"border-tremor-brand dark:border-dark-tremor-brand",(e=>{if(!e)return"";switch(e){case a.HorizontalPositions.Left:return"border-l-4";case a.VerticalPositions.Top:return"border-t-4";case a.HorizontalPositions.Right:return"border-r-4";case a.VerticalPositions.Bottom:return"border-b-4";default:return""}})(d),u)},g),m)});n.displayName="Card",e.s(["Card",0,n],304967)},629569,e=>{"use strict";var t=e.i(290571),r=e.i(95779),a=e.i(444755),l=e.i(673706),s=e.i(271645);let o=s.default.forwardRef((e,o)=>{let{color:i,children:n,className:d}=e,c=(0,t.__rest)(e,["color","children","className"]);return s.default.createElement("p",Object.assign({ref:o,className:(0,a.tremorTwMerge)("font-medium text-tremor-title",i?(0,l.getColorClassNames)(i,r.colorPalette.darkText).textColor:"text-tremor-content-strong dark:text-dark-tremor-content-strong",d)},c),n)});o.displayName="Title",e.s(["Title",0,o],629569)},653496,e=>{"use strict";var t=e.i(721369);e.s(["Tabs",()=>t.default])},536916,e=>{"use strict";var t=e.i(374276);e.s(["Checkbox",()=>t.default])},292639,e=>{"use strict";var t=e.i(602869),r=e.i(266027);let a=(0,e.i(243652).createQueryKeys)("uiSettings");e.s(["useUISettings",0,()=>(0,r.useQuery)({queryKey:a.list({}),queryFn:async()=>await (0,t.getUiSettings)(),staleTime:36e5,gcTime:36e5})])},250980,e=>{"use strict";var t=e.i(271645);let r=t.forwardRef(function(e,r){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:r},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 9v3m0 0v3m0-3h3m-3 0H9m12 0a9 9 0 11-18 0 9 9 0 0118 0z"}))});e.s(["PlusCircleIcon",0,r],250980)},603908,e=>{"use strict";let t=(0,e.i(475254).default)("plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);e.s(["default",0,t])},107233,37727,e=>{"use strict";var t=e.i(603908);e.s(["Plus",()=>t.default],107233);var r=e.i(841947);e.s(["X",()=>r.default],37727)},158392,419470,e=>{"use strict";var t=e.i(843476),r=e.i(311451);let a={ttl:3600,lowest_latency_buffer:0},l=({routingStrategyArgs:e})=>{let l={ttl:"Sliding window to look back over when calculating the average latency of a deployment. Default - 1 hour (in seconds).",lowest_latency_buffer:"Shuffle between deployments within this % of the lowest latency. Default - 0 (i.e. always pick lowest latency)."};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsxs)("div",{className:"max-w-3xl",children:[(0,t.jsx)("h3",{className:"text-sm font-medium text-gray-900",children:"Latency-Based Configuration"}),(0,t.jsx)("p",{className:"text-xs text-gray-500 mt-1",children:"Fine-tune latency-based routing behavior"})]}),(0,t.jsx)("div",{className:"grid grid-cols-1 gap-6 lg:grid-cols-2 xl:grid-cols-3",children:Object.entries(e||a).map(([e,a])=>(0,t.jsx)("div",{className:"space-y-2",children:(0,t.jsxs)("label",{className:"block",children:[(0,t.jsx)("span",{className:"text-xs font-medium text-gray-700 uppercase tracking-wide",children:e.replace(/_/g," ")}),(0,t.jsx)("p",{className:"text-xs text-gray-500 mt-0.5 mb-2",children:l[e]||""}),(0,t.jsx)(r.Input,{name:e,defaultValue:"object"==typeof a?JSON.stringify(a,null,2):a?.toString(),className:"font-mono text-sm w-full"})]})},e))})]}),(0,t.jsx)("div",{className:"border-t border-gray-200"})]})},s=({routerSettings:e,routerFieldsMetadata:a})=>(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsxs)("div",{className:"max-w-3xl",children:[(0,t.jsx)("h3",{className:"text-sm font-medium text-gray-900",children:"Reliability & Retries"}),(0,t.jsx)("p",{className:"text-xs text-gray-500 mt-1",children:"Configure retry logic and failure handling"})]}),(0,t.jsx)("div",{className:"grid grid-cols-1 gap-6 lg:grid-cols-2 xl:grid-cols-3",children:Object.entries(e).filter(([e,t])=>"fallbacks"!=e&&"context_window_fallbacks"!=e&&"routing_strategy_args"!=e&&"routing_strategy"!=e&&"enable_tag_filtering"!=e&&"retry_policy"!=e&&"model_group_retry_policy"!=e).map(([e,l])=>(0,t.jsx)("div",{className:"space-y-2",children:(0,t.jsxs)("label",{className:"block",children:[(0,t.jsx)("span",{className:"text-xs font-medium text-gray-700 uppercase tracking-wide",children:a[e]?.ui_field_name||e}),(0,t.jsx)("p",{className:"text-xs text-gray-500 mt-0.5 mb-2",children:a[e]?.field_description||""}),(0,t.jsx)(r.Input,{name:e,defaultValue:null==l||"null"===l?"":"object"==typeof l?JSON.stringify(l,null,2):l?.toString()||"",placeholder:"—",className:"font-mono text-sm w-full"})]})},e))})]});var o=e.i(199133);let i=({selectedStrategy:e,availableStrategies:r,routingStrategyDescriptions:a,routerFieldsMetadata:l,onStrategyChange:s})=>(0,t.jsxs)("div",{className:"space-y-2 max-w-3xl",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"text-xs font-medium text-gray-700 uppercase tracking-wide",children:l.routing_strategy?.ui_field_name||"Routing Strategy"}),(0,t.jsx)("p",{className:"text-xs text-gray-500 mt-0.5 mb-2",children:l.routing_strategy?.field_description||""})]}),(0,t.jsx)("div",{className:"routing-strategy-select max-w-3xl",children:(0,t.jsx)(o.Select,{value:e,onChange:s,style:{width:"100%"},size:"large",children:r.map(e=>(0,t.jsx)(o.Select.Option,{value:e,label:e,children:(0,t.jsxs)("div",{className:"flex flex-col gap-0.5 py-1",children:[(0,t.jsx)("span",{className:"font-mono text-sm font-medium",children:e}),a[e]&&(0,t.jsx)("span",{className:"text-xs text-gray-500 font-normal",children:a[e]})]})},e))})})]});var n=e.i(790848);let d=({enabled:e,routerFieldsMetadata:r,onToggle:a})=>(0,t.jsx)("div",{className:"space-y-3 max-w-3xl",children:(0,t.jsxs)("div",{className:"flex items-start justify-between",children:[(0,t.jsxs)("div",{className:"flex-1",children:[(0,t.jsx)("label",{className:"text-xs font-medium text-gray-700 uppercase tracking-wide",children:r.enable_tag_filtering?.ui_field_name||"Enable Tag Filtering"}),(0,t.jsxs)("p",{className:"text-xs text-gray-500 mt-0.5",children:[r.enable_tag_filtering?.field_description||"",r.enable_tag_filtering?.link&&(0,t.jsxs)(t.Fragment,{children:[" ",(0,t.jsx)("a",{href:r.enable_tag_filtering.link,target:"_blank",rel:"noopener noreferrer",className:"text-blue-600 hover:text-blue-800 underline",children:"Learn more"})]})]})]}),(0,t.jsx)(n.Switch,{checked:e,onChange:a,className:"ml-4"})]})});e.s(["default",0,({value:e,onChange:r,routerFieldsMetadata:a,availableRoutingStrategies:o,routingStrategyDescriptions:n})=>(0,t.jsxs)("div",{className:"w-full space-y-8 py-2",children:[(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsxs)("div",{className:"max-w-3xl",children:[(0,t.jsx)("h3",{className:"text-sm font-medium text-gray-900",children:"Routing Settings"}),(0,t.jsx)("p",{className:"text-xs text-gray-500 mt-1",children:"Configure how requests are routed to deployments"})]}),o.length>0&&(0,t.jsx)(i,{selectedStrategy:e.selectedStrategy||e.routerSettings.routing_strategy||null,availableStrategies:o,routingStrategyDescriptions:n,routerFieldsMetadata:a,onStrategyChange:t=>{r({...e,selectedStrategy:t})}}),(0,t.jsx)(d,{enabled:e.enableTagFiltering,routerFieldsMetadata:a,onToggle:t=>{r({...e,enableTagFiltering:t})}})]}),(0,t.jsx)("div",{className:"border-t border-gray-200"}),"latency-based-routing"===e.selectedStrategy&&(0,t.jsx)(l,{routingStrategyArgs:e.routerSettings.routing_strategy_args}),(0,t.jsx)(s,{routerSettings:e.routerSettings,routerFieldsMetadata:a})]})],158392);var c=e.i(994388),m=e.i(653496),u=e.i(107233),g=e.i(271645),h=e.i(888259),p=e.i(592968),x=e.i(361653),x=x;let f=(0,e.i(475254).default)("arrow-down",[["path",{d:"M12 5v14",key:"s699le"}],["path",{d:"m19 12-7 7-7-7",key:"1idqje"}]]);var b=e.i(37727);function y({group:e,onChange:r,availableModels:a,maxFallbacks:l}){let s=a.filter(t=>t!==e.primaryModel),i=e.fallbackModels.length{let a=[...e.fallbackModels];a.includes(t)&&(a=a.filter(e=>e!==t)),r({...e,primaryModel:t,fallbackModels:a})},showSearch:!0,getPopupContainer:e=>e.parentElement||document.body,filterOption:(e,t)=>(t?.label??"").toLowerCase().includes(e.toLowerCase()),options:a.map(e=>({label:e,value:e}))}),!e.primaryModel&&(0,t.jsxs)("div",{className:"mt-2 flex items-center gap-2 text-amber-600 text-xs bg-amber-50 p-2 rounded",children:[(0,t.jsx)(x.default,{className:"w-4 h-4"}),(0,t.jsx)("span",{children:"Select a model to begin configuring fallbacks"})]})]}),(0,t.jsx)("div",{className:"flex items-center justify-center -my-4 z-10",children:(0,t.jsxs)("div",{className:"bg-indigo-50 text-indigo-500 px-4 py-1 rounded-full text-xs font-bold border border-indigo-100 flex items-center gap-2 shadow-sm",children:[(0,t.jsx)(f,{className:"w-4 h-4"}),"IF FAILS, TRY..."]})}),(0,t.jsxs)("div",{className:`transition-opacity duration-300 ${!e.primaryModel?"opacity-50 pointer-events-none":"opacity-100"}`,children:[(0,t.jsxs)("label",{className:"block text-sm font-semibold text-gray-700 mb-2",children:["Fallback Chain ",(0,t.jsx)("span",{className:"text-red-500",children:"*"}),(0,t.jsxs)("span",{className:"text-xs text-gray-500 font-normal ml-2",children:["(Max ",l," fallbacks at a time)"]})]}),(0,t.jsxs)("div",{className:"bg-gray-50 rounded-xl p-4 border border-gray-200",children:[(0,t.jsxs)("div",{className:"mb-4",children:[(0,t.jsx)(o.Select,{mode:"multiple",className:"w-full",size:"large",placeholder:i?"Select fallback models to add...":`Maximum ${l} fallbacks reached`,value:e.fallbackModels,onChange:t=>{let a=t.slice(0,l);r({...e,fallbackModels:a})},disabled:!e.primaryModel,getPopupContainer:e=>e.parentElement||document.body,options:s.map(e=>({label:e,value:e})),optionRender:(r,a)=>{let l=e.fallbackModels.includes(r.value),s=l?e.fallbackModels.indexOf(r.value)+1:null;return(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[l&&null!==s&&(0,t.jsx)("span",{className:"flex items-center justify-center w-5 h-5 rounded bg-indigo-100 text-indigo-600 text-xs font-bold",children:s}),(0,t.jsx)("span",{children:r.label})]})},maxTagCount:"responsive",maxTagPlaceholder:e=>(0,t.jsx)(p.Tooltip,{styles:{root:{pointerEvents:"none"}},title:e.map(({value:e})=>e).join(", "),children:(0,t.jsxs)("span",{children:["+",e.length," more"]})}),showSearch:!0,filterOption:(e,t)=>(t?.label??"").toLowerCase().includes(e.toLowerCase())}),(0,t.jsx)("p",{className:"text-xs text-gray-500 mt-1 ml-1",children:i?`Search and select multiple models. Selected models will appear below in order. (${e.fallbackModels.length}/${l} used)`:`Maximum ${l} fallbacks reached. Remove some to add more.`})]}),(0,t.jsx)("div",{className:"space-y-2 min-h-[100px]",children:0===e.fallbackModels.length?(0,t.jsxs)("div",{className:"h-32 border-2 border-dashed border-gray-300 rounded-lg flex flex-col items-center justify-center text-gray-400",children:[(0,t.jsx)("span",{className:"text-sm",children:"No fallback models selected"}),(0,t.jsx)("span",{className:"text-xs mt-1",children:"Add models from the dropdown above"})]}):e.fallbackModels.map((a,l)=>(0,t.jsxs)("div",{className:"group flex items-center justify-between p-3 bg-white rounded-lg border border-gray-200 hover:border-indigo-300 hover:shadow-sm transition-all",children:[(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsx)("div",{className:"flex items-center justify-center w-6 h-6 rounded bg-gray-100 text-gray-400 group-hover:text-indigo-500 group-hover:bg-indigo-50",children:(0,t.jsx)("span",{className:"text-xs font-bold",children:l+1})}),(0,t.jsx)("div",{children:(0,t.jsx)("span",{className:"font-medium text-gray-800",children:a})})]}),(0,t.jsx)("button",{type:"button",onClick:()=>{let t;return t=e.fallbackModels.filter((e,t)=>t!==l),void r({...e,fallbackModels:t})},className:"opacity-0 group-hover:opacity-100 transition-opacity text-gray-400 hover:text-red-500 p-1",children:(0,t.jsx)(b.X,{className:"w-4 h-4"})})]},`${a}-${l}`))})]})]})]})}e.s(["FallbackSelectionForm",0,function({groups:e,onGroupsChange:r,availableModels:a,maxFallbacks:l=10,maxGroups:s=5}){let[o,i]=(0,g.useState)(e.length>0?e[0].id:"1");(0,g.useEffect)(()=>{e.length>0?e.some(e=>e.id===o)||i(e[0].id):i("1")},[e]);let n=()=>{if(e.length>=s)return;let t=Date.now().toString();r([...e,{id:t,primaryModel:null,fallbackModels:[]}]),i(t)},d=t=>{r(e.map(e=>e.id===t.id?t:e))},p=e.map((r,s)=>{let o=r.primaryModel?r.primaryModel:`Group ${s+1}`;return{key:r.id,label:o,closable:e.length>1,children:(0,t.jsx)(y,{group:r,onChange:d,availableModels:a,maxFallbacks:l})}});return 0===e.length?(0,t.jsxs)("div",{className:"text-center py-12 bg-gray-50 rounded-lg border border-dashed border-gray-300",children:[(0,t.jsx)("p",{className:"text-gray-500 mb-4",children:"No fallback groups configured"}),(0,t.jsx)(c.Button,{variant:"primary",onClick:n,icon:()=>(0,t.jsx)(u.Plus,{className:"w-4 h-4"}),children:"Create First Group"})]}):(0,t.jsx)(m.Tabs,{type:"editable-card",activeKey:o,onChange:i,onEdit:(t,a)=>{"add"===a?n():"remove"===a&&e.length>1&&(t=>{if(1===e.length)return h.default.warning("At least one group is required");let a=e.filter(e=>e.id!==t);r(a),o===t&&a.length>0&&i(a[a.length-1].id)})(t)},items:p,className:"fallback-tabs",tabBarStyle:{marginBottom:0},hideAdd:e.length>=s})}],419470)},309426,e=>{"use strict";var t=e.i(290571),r=e.i(444755),a=e.i(673706),l=e.i(271645),s=e.i(46757);let o=(0,a.makeClassName)("Col"),i=l.default.forwardRef((e,a)=>{let i,n,d,c,{numColSpan:m=1,numColSpanSm:u,numColSpanMd:g,numColSpanLg:h,children:p,className:x}=e,f=(0,t.__rest)(e,["numColSpan","numColSpanSm","numColSpanMd","numColSpanLg","children","className"]),b=(e,t)=>e&&Object.keys(t).includes(String(e))?t[e]:"";return l.default.createElement("div",Object.assign({ref:a,className:(0,r.tremorTwMerge)(o("root"),(i=b(m,s.colSpan),n=b(u,s.colSpanSm),d=b(g,s.colSpanMd),c=b(h,s.colSpanLg),(0,r.tremorTwMerge)(i,n,d,c)),x)},f),p)});i.displayName="Col",e.s(["Col",0,i],309426)},860585,e=>{"use strict";var t=e.i(843476),r=e.i(199133);let{Option:a}=r.Select;e.s(["default",0,({value:e,onChange:l,className:s="",style:o={}})=>(0,t.jsxs)(r.Select,{style:{width:"100%",...o},value:e||void 0,onChange:l,className:s,placeholder:"n/a",allowClear:!0,children:[(0,t.jsx)(a,{value:"1h",children:"hourly"}),(0,t.jsx)(a,{value:"24h",children:"daily"}),(0,t.jsx)(a,{value:"7d",children:"weekly"}),(0,t.jsx)(a,{value:"30d",children:"monthly"})]}),"getBudgetDurationLabel",0,e=>e?({"1h":"hourly","24h":"daily","7d":"weekly","30d":"monthly"})[e]||e:"Not set"])},213205,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let a={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M678.3 642.4c24.2-13 51.9-20.4 81.4-20.4h.1c3 0 4.4-3.6 2.2-5.6a371.67 371.67 0 00-103.7-65.8c-.4-.2-.8-.3-1.2-.5C719.2 505 759.6 431.7 759.6 349c0-137-110.8-248-247.5-248S264.7 212 264.7 349c0 82.7 40.4 156 102.6 201.1-.4.2-.8.3-1.2.5-44.7 18.9-84.8 46-119.3 80.6a373.42 373.42 0 00-80.4 119.5A373.6 373.6 0 00137 888.8a8 8 0 008 8.2h59.9c4.3 0 7.9-3.5 8-7.8 2-77.2 32.9-149.5 87.6-204.3C357 628.2 432.2 597 512.2 597c56.7 0 111.1 15.7 158 45.1a8.1 8.1 0 008.1.3zM512.2 521c-45.8 0-88.9-17.9-121.4-50.4A171.2 171.2 0 01340.5 349c0-45.9 17.9-89.1 50.3-121.6S466.3 177 512.2 177s88.9 17.9 121.4 50.4A171.2 171.2 0 01683.9 349c0 45.9-17.9 89.1-50.3 121.6C601.1 503.1 558 521 512.2 521zM880 759h-84v-84c0-4.4-3.6-8-8-8h-56c-4.4 0-8 3.6-8 8v84h-84c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h84v84c0 4.4 3.6 8 8 8h56c4.4 0 8-3.6 8-8v-84h84c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8z"}}]},name:"user-add",theme:"outlined"};var l=e.i(9583),s=r.forwardRef(function(e,s){return r.createElement(l.default,(0,t.default)({},e,{ref:s,icon:a}))});e.s(["UserAddOutlined",0,s],213205)},355619,e=>{"use strict";var t=e.i(602869);let r=async(e,r,a)=>{try{if(null===e||null===r)return;if(null!==a){let l=(await (0,t.modelAvailableCall)(a,e,r,!0,null,!0)).data.map(e=>e.id),s=[],o=[];return l.forEach(e=>{e.endsWith("/*")?s.push(e):o.push(e)}),[...s,...o]}}catch(e){console.error("Error fetching user models:",e)}};e.s(["fetchAvailableModelsForTeamOrKey",0,r,"getModelDisplayName",0,e=>{if("all-proxy-models"===e)return"All Proxy Models";if(e.endsWith("/*")){let t=e.replace("/*","");return`All ${t} models`}return e},"unfurlWildcardModelsInList",0,(e,t)=>{let r=[],a=[];return console.log("teamModels",e),console.log("allModels",t),e.forEach(e=>{if(e.endsWith("/*")){let l=e.replace("/*",""),s=t.filter(e=>e.startsWith(l+"/"));a.push(...s),r.push(e)}else a.push(e)}),[...r,...a].filter((e,t,r)=>r.indexOf(e)===t)}])},350967,46757,e=>{"use strict";var t=e.i(290571),r=e.i(444755),a=e.i(673706),l=e.i(271645);let s={0:"grid-cols-none",1:"grid-cols-1",2:"grid-cols-2",3:"grid-cols-3",4:"grid-cols-4",5:"grid-cols-5",6:"grid-cols-6",7:"grid-cols-7",8:"grid-cols-8",9:"grid-cols-9",10:"grid-cols-10",11:"grid-cols-11",12:"grid-cols-12"},o={0:"sm:grid-cols-none",1:"sm:grid-cols-1",2:"sm:grid-cols-2",3:"sm:grid-cols-3",4:"sm:grid-cols-4",5:"sm:grid-cols-5",6:"sm:grid-cols-6",7:"sm:grid-cols-7",8:"sm:grid-cols-8",9:"sm:grid-cols-9",10:"sm:grid-cols-10",11:"sm:grid-cols-11",12:"sm:grid-cols-12"},i={0:"md:grid-cols-none",1:"md:grid-cols-1",2:"md:grid-cols-2",3:"md:grid-cols-3",4:"md:grid-cols-4",5:"md:grid-cols-5",6:"md:grid-cols-6",7:"md:grid-cols-7",8:"md:grid-cols-8",9:"md:grid-cols-9",10:"md:grid-cols-10",11:"md:grid-cols-11",12:"md:grid-cols-12"},n={0:"lg:grid-cols-none",1:"lg:grid-cols-1",2:"lg:grid-cols-2",3:"lg:grid-cols-3",4:"lg:grid-cols-4",5:"lg:grid-cols-5",6:"lg:grid-cols-6",7:"lg:grid-cols-7",8:"lg:grid-cols-8",9:"lg:grid-cols-9",10:"lg:grid-cols-10",11:"lg:grid-cols-11",12:"lg:grid-cols-12"};e.s(["colSpan",0,{1:"col-span-1",2:"col-span-2",3:"col-span-3",4:"col-span-4",5:"col-span-5",6:"col-span-6",7:"col-span-7",8:"col-span-8",9:"col-span-9",10:"col-span-10",11:"col-span-11",12:"col-span-12",13:"col-span-13"},"colSpanLg",0,{1:"lg:col-span-1",2:"lg:col-span-2",3:"lg:col-span-3",4:"lg:col-span-4",5:"lg:col-span-5",6:"lg:col-span-6",7:"lg:col-span-7",8:"lg:col-span-8",9:"lg:col-span-9",10:"lg:col-span-10",11:"lg:col-span-11",12:"lg:col-span-12",13:"lg:col-span-13"},"colSpanMd",0,{1:"md:col-span-1",2:"md:col-span-2",3:"md:col-span-3",4:"md:col-span-4",5:"md:col-span-5",6:"md:col-span-6",7:"md:col-span-7",8:"md:col-span-8",9:"md:col-span-9",10:"md:col-span-10",11:"md:col-span-11",12:"md:col-span-12",13:"md:col-span-13"},"colSpanSm",0,{1:"sm:col-span-1",2:"sm:col-span-2",3:"sm:col-span-3",4:"sm:col-span-4",5:"sm:col-span-5",6:"sm:col-span-6",7:"sm:col-span-7",8:"sm:col-span-8",9:"sm:col-span-9",10:"sm:col-span-10",11:"sm:col-span-11",12:"sm:col-span-12",13:"sm:col-span-13"},"gridCols",0,s,"gridColsLg",0,n,"gridColsMd",0,i,"gridColsSm",0,o],46757);let d=(0,a.makeClassName)("Grid"),c=(e,t)=>e&&Object.keys(t).includes(String(e))?t[e]:"",m=l.default.forwardRef((e,a)=>{let{numItems:m=1,numItemsSm:u,numItemsMd:g,numItemsLg:h,children:p,className:x}=e,f=(0,t.__rest)(e,["numItems","numItemsSm","numItemsMd","numItemsLg","children","className"]),b=c(m,s),y=c(u,o),v=c(g,i),w=c(h,n),N=(0,r.tremorTwMerge)(b,y,v,w);return l.default.createElement("div",Object.assign({ref:a,className:(0,r.tremorTwMerge)(d("root"),"grid",N,x)},f),p)});m.displayName="Grid",e.s(["Grid",0,m],350967)},981339,e=>{"use strict";var t=e.i(185793);e.s(["Skeleton",()=>t.default])},500727,e=>{"use strict";var t=e.i(266027),r=e.i(243652),a=e.i(602869),l=e.i(135214);let s=(0,r.createQueryKeys)("mcpServers");e.s(["useMCPServers",0,e=>{let{accessToken:r}=(0,l.default)();return(0,t.useQuery)({queryKey:s.list(e?{filters:{teamId:e}}:void 0),queryFn:async()=>await (0,a.fetchMCPServers)(r,e),enabled:!!r})}])},699857,e=>{"use strict";var t=e.i(266027),r=e.i(243652),a=e.i(602869),l=e.i(135214);let s=(0,r.createQueryKeys)("mcpToolsets");e.s(["useMCPToolsets",0,()=>{let{accessToken:e}=(0,l.default)();return(0,t.useQuery)({queryKey:s.list(),queryFn:async()=>await (0,a.fetchMCPToolsets)(e),enabled:!!e})}])},916940,e=>{"use strict";var t=e.i(843476),r=e.i(271645),a=e.i(199133),l=e.i(602869);e.s(["default",0,({onChange:e,value:s,className:o,accessToken:i,placeholder:n="Select vector stores",disabled:d=!1})=>{let[c,m]=(0,r.useState)([]),[u,g]=(0,r.useState)(!1);return(0,r.useEffect)(()=>{(async()=>{if(i){g(!0);try{let e=await (0,l.vectorStoreListCall)(i);e.data&&m(e.data)}catch(e){console.error("Error fetching vector stores:",e)}finally{g(!1)}}})()},[i]),(0,t.jsx)("div",{children:(0,t.jsx)(a.Select,{mode:"multiple",placeholder:n,onChange:e,value:s,loading:u,className:o,allowClear:!0,options:c.map(e=>({label:`${e.vector_store_name||e.vector_store_id} (${e.vector_store_id})`,value:e.vector_store_id,title:e.vector_store_description||e.vector_store_id})),optionFilterProp:"label",showSearch:!0,style:{width:"100%"},disabled:d})})}])},101837,e=>{"use strict";var t=e.i(266027),r=e.i(243652),a=e.i(602869),l=e.i(135214);let s=(0,r.createQueryKeys)("mcpAccessGroups");e.s(["useMCPAccessGroups",0,()=>{let{accessToken:e}=(0,l.default)();return(0,t.useQuery)({queryKey:s.list({}),queryFn:async()=>await (0,a.fetchMCPAccessGroups)(e),enabled:!!e})}])},234713,e=>{"use strict";e.s(["NO_MCP_SERVERS_SENTINEL",0,"no-mcp-servers"])},75921,e=>{"use strict";var t=e.i(843476),r=e.i(101837),a=e.i(500727),l=e.i(699857),s=e.i(199133),o=e.i(234713);let i="toolset:";e.s(["default",0,({onChange:e,value:n,className:d,accessToken:c,placeholder:m="Select MCP servers",disabled:u=!1,teamId:g,allowNoMcpServers:h=!1})=>{let{data:p=[],isLoading:x}=(0,a.useMCPServers)(g),{data:f=[],isLoading:b}=(0,r.useMCPAccessGroups)(),{data:y=[],isLoading:v}=(0,l.useMCPToolsets)(),w=new Set(f),N=[...f.map(e=>({label:e,value:e,type:"accessGroup",searchText:`${e} Access Group`})),...p.map(e=>({label:`${e.server_name||e.server_id} (${e.server_id})`,value:e.server_id,type:"server",searchText:`${e.server_name||e.server_id} ${e.server_id} MCP Server`})),...y.map(e=>({label:e.toolset_name,value:`${i}${e.toolset_id}`,type:"toolset",searchText:`${e.toolset_name} ${e.toolset_id} Toolset`}))],C={accessGroup:"#52c41a",server:"#1890ff",toolset:"#722ed1"},k={accessGroup:"Access Group",server:"MCP Server",toolset:"Toolset"},j=[...n?.servers||[],...n?.accessGroups||[],...(n?.toolsets||[]).map(e=>`${i}${e}`)],S=h&&j.includes(o.NO_MCP_SERVERS_SENTINEL);return(0,t.jsx)("div",{children:(0,t.jsxs)(s.Select,{mode:"multiple",placeholder:m,onChange:t=>{if(h&&t.includes(o.NO_MCP_SERVERS_SENTINEL))return void e({servers:[o.NO_MCP_SERVERS_SENTINEL],accessGroups:[],toolsets:[]});let r=t.filter(e=>e.startsWith(i)).map(e=>e.slice(i.length)),a=t.filter(e=>!e.startsWith(i));e({servers:a.filter(e=>!w.has(e)),accessGroups:a.filter(e=>w.has(e)),toolsets:r})},value:j,loading:x||b||v,className:d,allowClear:!0,showSearch:!0,style:{width:"100%"},disabled:u,filterOption:(e,t)=>t?.value===o.NO_MCP_SERVERS_SENTINEL||(N.find(e=>e.value===t?.value)?.searchText||"").toLowerCase().includes(e.toLowerCase()),children:[h&&(0,t.jsx)(s.Select.Option,{value:o.NO_MCP_SERVERS_SENTINEL,label:"No MCP Servers",children:(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[(0,t.jsx)("span",{style:{flex:1},children:"No MCP Servers"}),(0,t.jsx)("span",{style:{color:"#8c8c8c",fontSize:"12px",fontWeight:500,opacity:.8},children:"Block all"})]})},o.NO_MCP_SERVERS_SENTINEL),N.map(e=>(0,t.jsx)(s.Select.Option,{value:e.value,label:e.label,disabled:S,children:(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[(0,t.jsx)("span",{style:{display:"inline-block",width:8,height:8,borderRadius:"50%",background:C[e.type],flexShrink:0}}),(0,t.jsx)("span",{style:{flex:1},children:e.label}),(0,t.jsx)("span",{style:{color:C[e.type],fontSize:"12px",fontWeight:500,opacity:.8},children:k[e.type]})]})},e.value))]})})}])},269200,e=>{"use strict";var t=e.i(290571),r=e.i(271645),a=e.i(444755);let l=(0,e.i(673706).makeClassName)("Table"),s=r.default.forwardRef((e,s)=>{let{children:o,className:i}=e,n=(0,t.__rest)(e,["children","className"]);return r.default.createElement("div",{className:(0,a.tremorTwMerge)(l("root"),"overflow-auto",i)},r.default.createElement("table",Object.assign({ref:s,className:(0,a.tremorTwMerge)(l("table"),"w-full text-tremor-default","text-tremor-content","dark:text-dark-tremor-content")},n),o))});s.displayName="Table",e.s(["Table",0,s],269200)},427612,e=>{"use strict";var t=e.i(290571),r=e.i(271645),a=e.i(444755);let l=(0,e.i(673706).makeClassName)("TableHead"),s=r.default.forwardRef((e,s)=>{let{children:o,className:i}=e,n=(0,t.__rest)(e,["children","className"]);return r.default.createElement(r.default.Fragment,null,r.default.createElement("thead",Object.assign({ref:s,className:(0,a.tremorTwMerge)(l("root"),"text-left","text-tremor-content","dark:text-dark-tremor-content",i)},n),o))});s.displayName="TableHead",e.s(["TableHead",0,s],427612)},64848,e=>{"use strict";var t=e.i(290571),r=e.i(271645),a=e.i(444755);let l=(0,e.i(673706).makeClassName)("TableHeaderCell"),s=r.default.forwardRef((e,s)=>{let{children:o,className:i}=e,n=(0,t.__rest)(e,["children","className"]);return r.default.createElement(r.default.Fragment,null,r.default.createElement("th",Object.assign({ref:s,className:(0,a.tremorTwMerge)(l("root"),"whitespace-nowrap text-left font-semibold top-0 px-4 py-3.5","text-tremor-content-strong","dark:text-dark-tremor-content-strong",i)},n),o))});s.displayName="TableHeaderCell",e.s(["TableHeaderCell",0,s],64848)},942232,e=>{"use strict";var t=e.i(290571),r=e.i(271645),a=e.i(444755);let l=(0,e.i(673706).makeClassName)("TableBody"),s=r.default.forwardRef((e,s)=>{let{children:o,className:i}=e,n=(0,t.__rest)(e,["children","className"]);return r.default.createElement(r.default.Fragment,null,r.default.createElement("tbody",Object.assign({ref:s,className:(0,a.tremorTwMerge)(l("root"),"align-top divide-y","divide-tremor-border","dark:divide-dark-tremor-border",i)},n),o))});s.displayName="TableBody",e.s(["TableBody",0,s],942232)},496020,e=>{"use strict";var t=e.i(290571),r=e.i(271645),a=e.i(444755);let l=(0,e.i(673706).makeClassName)("TableRow"),s=r.default.forwardRef((e,s)=>{let{children:o,className:i}=e,n=(0,t.__rest)(e,["children","className"]);return r.default.createElement(r.default.Fragment,null,r.default.createElement("tr",Object.assign({ref:s,className:(0,a.tremorTwMerge)(l("row"),i)},n),o))});s.displayName="TableRow",e.s(["TableRow",0,s],496020)},977572,e=>{"use strict";var t=e.i(290571),r=e.i(271645),a=e.i(444755);let l=(0,e.i(673706).makeClassName)("TableCell"),s=r.default.forwardRef((e,s)=>{let{children:o,className:i}=e,n=(0,t.__rest)(e,["children","className"]);return r.default.createElement(r.default.Fragment,null,r.default.createElement("td",Object.assign({ref:s,className:(0,a.tremorTwMerge)(l("root"),"align-middle whitespace-nowrap text-left p-4",i)},n),o))});s.displayName="TableCell",e.s(["TableCell",0,s],977572)},68155,e=>{"use strict";var t=e.i(271645);let r=t.forwardRef(function(e,r){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:r},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"}))});e.s(["TrashIcon",0,r],68155)},555987,e=>{"use strict";var t=e.i(221688),r=e.i(950643);let a=/^(https?:|data:|blob:|\/\/)/i;e.s(["resolveLogoSrc",0,(e,l=t.serverRootPath)=>{if(e){let t;return a.test(e)?e:(t=(0,r.normalizeRootPath)(l),`${t}${e.startsWith("/")?e:`/${e}`}`)}}])},695411,e=>{"use strict";var t=e.i(602869);let r=async e=>{try{let r=await (0,t.modelHubCall)(e);if(console.log("model_info:",r),r?.data.length>0){let e=r.data.map(e=>({model_group:e.model_group,mode:e?.mode}));return e.sort((e,t)=>e.model_group.localeCompare(t.model_group)),e}return[]}catch(e){throw console.error("Error fetching model info:",e),e}};e.s(["fetchAvailableModels",0,r])},797672,e=>{"use strict";var t=e.i(271645);let r=t.forwardRef(function(e,r){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:r},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z"}))});e.s(["PencilIcon",0,r],797672)},992619,e=>{"use strict";var t=e.i(843476),r=e.i(271645),a=e.i(779241),l=e.i(599724),s=e.i(199133),o=e.i(983561),i=e.i(695411);e.s(["default",0,({accessToken:e,value:n,placeholder:d="Select a Model",onChange:c,disabled:m=!1,style:u,className:g,showLabel:h=!0,labelText:p="Select Model"})=>{let[x,f]=(0,r.useState)(n),[b,y]=(0,r.useState)(!1),[v,w]=(0,r.useState)([]),N=(0,r.useRef)(null);return(0,r.useEffect)(()=>{f(n)},[n]),(0,r.useEffect)(()=>{e&&(async()=>{try{let t=await (0,i.fetchAvailableModels)(e);console.log("Fetched models for selector:",t),t.length>0&&w(t)}catch(e){console.error("Error fetching model info:",e)}})()},[e]),(0,t.jsxs)("div",{children:[h&&(0,t.jsxs)(l.Text,{className:"font-medium block mb-2 text-gray-700 flex items-center",children:[(0,t.jsx)(o.RobotOutlined,{className:"mr-2"})," ",p]}),(0,t.jsx)(s.Select,{value:x,placeholder:d,onChange:e=>{"custom"===e?(y(!0),f(void 0)):(y(!1),f(e),c&&c(e))},options:[...Array.from(new Set(v.map(e=>e.model_group))).map((e,t)=>({value:e,label:e,key:t})),{value:"custom",label:"Enter custom model",key:"custom"}],style:{width:"100%",...u},showSearch:!0,className:`rounded-md ${g||""}`,disabled:m}),b&&(0,t.jsx)(a.TextInput,{className:"mt-2",placeholder:"Enter custom model name",onValueChange:e=>{N.current&&clearTimeout(N.current),N.current=setTimeout(()=>{f(e),c&&c(e)},500)},disabled:m})]})}])},841947,e=>{"use strict";let t=(0,e.i(475254).default)("x",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);e.s(["default",0,t])},361653,e=>{"use strict";let t=(0,e.i(475254).default)("circle-alert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);e.s(["default",0,t])},409797,e=>{"use strict";var t=e.i(631171);e.s(["ChevronDownIcon",()=>t.default])},91739,e=>{"use strict";var t=e.i(544195);e.s(["Radio",()=>t.default])},988297,e=>{"use strict";var t=e.i(271645);let r=t.forwardRef(function(e,r){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:r},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M12 4v16m8-8H4"}))});e.s(["PlusIcon",0,r],988297)},246349,e=>{"use strict";let t=(0,e.i(475254).default)("chevron-right",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);e.s(["default",0,t])},531516,696609,e=>{"use strict";var t=e.i(843476),r=e.i(271645),a=e.i(536916),l=e.i(599724),s=e.i(409797),o=e.i(246349),o=o;let i=/\b(delete|remove|destroy|purge|drop|erase|unlink)\b/i,n=/\b(create|add|insert|new|post|submit|register|make|generate|write|upload)\b/i,d=/\b(update|edit|modify|change|patch|put|set|rename|move|transform)\b/i,c=/\b(get|read|list|fetch|search|find|query|retrieve|show|view|check|describe|info)\b/i;function m(e,t=""){let r=e.toLowerCase();if(c.test(r))return"read";if(i.test(r))return"delete";if(d.test(r))return"update";if(n.test(r))return"create";if(t){let e=t.toLowerCase();if(c.test(e))return"read";if(i.test(e))return"delete";if(d.test(e))return"update";if(n.test(e))return"create"}return"unknown"}function u(e){let t={read:[],create:[],update:[],delete:[],unknown:[]};for(let r of e)t[m(r.name,r.description)].push(r);return t}let g={read:{label:"Read",description:"Safe operations — fetch, list, search. No side effects.",risk:"low"},create:{label:"Create",description:"Add new resources — insert, upload, register.",risk:"medium"},update:{label:"Update",description:"Modify existing resources — edit, patch, rename.",risk:"medium"},delete:{label:"Delete",description:"Destructive operations — remove, purge, destroy.",risk:"high"},unknown:{label:"Other",description:"Operations that could not be automatically classified.",risk:"unknown"}};e.s(["CRUD_GROUP_META",0,g,"classifyToolOp",0,m,"groupToolsByCrud",0,u],696609);let h=["read","create","update","delete","unknown"],p={low:"bg-green-100 text-green-800",medium:"bg-yellow-100 text-yellow-800",high:"bg-red-100 text-red-800 font-semibold",unknown:"bg-gray-100 text-gray-700"},x={read:"border-green-200",create:"border-blue-200",update:"border-yellow-200",delete:"border-red-300",unknown:"border-gray-200"},f={read:"bg-green-50",create:"bg-blue-50",update:"bg-yellow-50",delete:"bg-red-50",unknown:"bg-gray-50"};e.s(["default",0,({tools:e,value:i,onChange:n,readOnly:d=!1,searchFilter:c=""})=>{let[m,b]=(0,r.useState)({read:!1,create:!1,update:!1,delete:!1,unknown:!0}),y=(0,r.useMemo)(()=>u(e),[e]),v=(0,r.useMemo)(()=>new Set(void 0===i?e.map(e=>e.name):i),[i,e]),w=e=>{if(d)return;let t=new Set(v);t.has(e)?t.delete(e):t.add(e),n(Array.from(t))};return 0===e.length?null:(0,t.jsx)("div",{className:"space-y-3",children:h.map(e=>{let r,i=y[e];if(0===i.length)return null;if(c){let e=c.toLowerCase();if(!i.some(t=>t.name.toLowerCase().includes(e)||(t.description??"").toLowerCase().includes(e)))return null}let u=g[e],h=(r=y[e]).length>0&&r.every(e=>v.has(e.name)),N=(e=>{let t=y[e];if(0===t.length)return!1;let r=t.filter(e=>v.has(e.name)).length;return r>0&&r{b(t=>({...t,[e]:!t[e]}))},children:[C?(0,t.jsx)(o.default,{className:"w-4 h-4 text-gray-500 flex-shrink-0"}):(0,t.jsx)(s.ChevronDownIcon,{className:"w-4 h-4 text-gray-500 flex-shrink-0"}),(0,t.jsx)("span",{className:"font-semibold text-gray-900 text-sm",children:u.label}),(0,t.jsx)("span",{className:`text-xs px-2 py-0.5 rounded-full ${p[u.risk]}`,children:"high"===u.risk?"High Risk":"medium"===u.risk?"Medium Risk":"low"===u.risk?"Safe":"Unclassified"}),(0,t.jsxs)("span",{className:"text-xs text-gray-500 ml-1",children:[i.filter(e=>v.has(e.name)).length,"/",i.length," allowed"]})]}),!d&&(0,t.jsxs)("div",{className:"flex items-center gap-2 ml-4",children:[(0,t.jsx)(l.Text,{className:"text-xs text-gray-500",children:h?"All on":N?"Partial":"All off"}),(0,t.jsx)(a.Checkbox,{checked:h,indeterminate:N,onChange:t=>((e,t)=>{if(d)return;let r=new Set(v);for(let a of y[e])t?r.add(a.name):r.delete(a.name);n(Array.from(r))})(e,t.target.checked),onClick:e=>e.stopPropagation()})]})]}),!C&&(0,t.jsx)("div",{className:"px-4 pt-2 pb-1 text-xs text-gray-500 bg-white border-b border-gray-100",children:u.description}),!C&&(0,t.jsx)("div",{className:"bg-white divide-y divide-gray-50",children:i.filter(e=>!c||e.name.toLowerCase().includes(c.toLowerCase())||(e.description??"").toLowerCase().includes(c.toLowerCase())).map(e=>{let r,s=(r=e.name,v.has(r));return(0,t.jsxs)("div",{className:`flex items-start gap-3 px-4 py-2.5 transition-colors hover:bg-gray-50 ${!d?"cursor-pointer":""} ${s?"":"opacity-60"}`,onClick:()=>w(e.name),children:[(0,t.jsx)(a.Checkbox,{checked:s,onChange:()=>w(e.name),disabled:d,onClick:e=>e.stopPropagation()}),(0,t.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,t.jsx)(l.Text,{className:"font-medium text-gray-900 text-sm",children:e.name}),e.description&&(0,t.jsx)(l.Text,{className:"text-xs text-gray-500 mt-0.5 leading-snug",children:e.description})]}),(0,t.jsx)("span",{className:`text-xs px-1.5 py-0.5 rounded flex-shrink-0 ${s?"bg-green-100 text-green-700":"bg-gray-100 text-gray-500"}`,children:s?"on":"off"})]},e.name)})})]},e)})})}],531516)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/13ln.k6r3lkv_.js b/litellm/proxy/_experimental/out/_next/static/chunks/13ln.k6r3lkv_.js new file mode 100644 index 00000000000..da38606fd2b --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/13ln.k6r3lkv_.js @@ -0,0 +1,167 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,66899,e=>{"use strict";var t=e.i(843476),s=e.i(271645),r=e.i(994388),l=e.i(212931),a=e.i(199133),n=e.i(602869),o=e.i(269200),i=e.i(942232),c=e.i(977572),d=e.i(427612),m=e.i(64848),p=e.i(496020),x=e.i(94629),u=e.i(360820),h=e.i(871943),g=e.i(68155),f=e.i(592968),v=e.i(166406),j=e.i(152990),b=e.i(682830),y=e.i(916925);let N=e=>{let t=new Set,s=/\{\{(\w+)\}\}/g;if(e.messages.forEach(e=>{let r;for(;null!==(r=s.exec(e.content));)t.add(r[1])}),e.developerMessage){let r;for(;null!==(r=s.exec(e.developerMessage));)t.add(r[1])}return Array.from(t)},w=e=>{let t=N(e),s=`--- +model: ${e.model} +`;return void 0!==e.config.temperature&&(s+=`temperature: ${e.config.temperature} +`),void 0!==e.config.max_tokens&&(s+=`max_tokens: ${e.config.max_tokens} +`),void 0!==e.config.top_p&&(s+=`top_p: ${e.config.top_p} +`),s+=`input: + schema: +`,t.forEach(e=>{s+=` ${e}: string +`}),s+=`output: + format: text +`,e.tools&&e.tools.length>0&&(s+=`tools: +`,e.tools.forEach(e=>{let t=JSON.parse(e.json);s+=` - ${JSON.stringify(t)} +`})),s+=`--- + +`,e.developerMessage&&""!==e.developerMessage.trim()&&(s+=`Developer: ${e.developerMessage.trim()} + +`),e.messages.forEach(e=>{let t=e.role.charAt(0).toUpperCase()+e.role.slice(1);s+=`${t}: ${e.content} + +`}),s.trim()},C=e=>{let t=Number(e);return Number.isFinite(t)?t:void 0},_=e=>{let t=e?.prompt_spec?.litellm_params?.dotprompt_content||"";if(!t)throw Error("No dotprompt_content found in API response");let s=t.split("---");if(s.length<3)throw Error("Invalid dotprompt format");let r=s[1],l=s.slice(2).join("---").trim(),a=(e=>{let t={config:{},tools:[]},s=e.split("\n");for(let e of(t.tools=(e=>{let t=[],s=!1;for(let r of e){let e=r.trim();if(!s){("tools:"===e||e.startsWith("tools:"))&&(s=!0);continue}if(r.length>0&&!/^\s/.test(r)&&"-"!==e&&!e.startsWith("-"))break;let l=e.match(/^-+\s*(.+)$/);if(!l)continue;let a=l[1].trim();if(a)try{let e=JSON.parse(a);t.push({name:e?.function?.name||"Unnamed Tool",description:e?.function?.description||"",json:JSON.stringify(e,null,2)})}catch{}}return t})(s),s)){let s=e.trim();if(!s||s.startsWith("input:")||s.startsWith("output:")||s.startsWith("schema:")||s.startsWith("format:")||s.startsWith("tools:")||s.startsWith("-"))continue;let r=s.indexOf(":");if(r<=0)continue;let l=s.substring(0,r).trim(),a=s.substring(r+1).trim();if("model"===l){t.model=a;continue}"temperature"===l&&(t.config.temperature=C(a)),"max_tokens"===l&&(t.config.max_tokens=C(a)),"top_p"===l&&(t.config.top_p=C(a))}return t})(r),n=(e=>{let t=/^(System|Developer|User|Assistant):(?:\s(.*)|\s*)$/,s=[],r="",l=null,a=[],n=()=>{if(!l)return;let e=a.join("\n").trim();"developer"===l?e&&(r=r?`${r} + +${e}`:e):e?s.push({role:l,content:e}):s.push({role:l,content:""})};for(let s of e.split("\n")){let e=s.match(t);if(e){n(),l=e[1].toLowerCase(),a=[e[2]??""];continue}l&&a.push(s)}return n(),{developerMessage:r,messages:s}})(l),o=e?.prompt_spec?.prompt_id||"Unnamed Prompt";return{name:k(o)||o,model:a.model||"gpt-4o",config:a.config,tools:a.tools,developerMessage:n.developerMessage,messages:n.messages.length>0?n.messages:[{role:"user",content:"Enter task specifics. Use {{template_variables}} for dynamic inputs"}],environment:e?.prompt_spec?.environment||e?.prompt_spec?.prompt_info?.environment||"development"}},k=e=>e?e.replace(/[._-]v\d+$/,""):"",T=e=>e?.prompt_id||"",S=e=>{try{let t=e.litellm_params;if(t?.dotprompt_content){let e=t.dotprompt_content.match(/model:\s*([^\n]+)/);if(e)return e[1].trim()}if(t?.prompt_data?.model)return t.prompt_data.model;if(t?.model)return t.model;return null}catch(e){return console.error("Error extracting model:",e),null}},$=({promptsList:e,isLoading:l,onPromptClick:a,onDeleteClick:N,accessToken:w,isAdmin:C})=>{let[_,k]=(0,s.useState)([{id:"created_at",desc:!0}]),[T,$]=(0,s.useState)(new Map);(0,s.useEffect)(()=>{(async()=>{if(w)try{let e=await (0,n.modelHubCall)(w);if(e?.data){let t=new Map;e.data.forEach(e=>{t.set(e.model_group,e)}),$(t)}}catch(e){console.error("Error fetching model hub data:",e)}})()},[w]);let P=e=>e?new Date(e).toLocaleString():"-",I=[{header:"Prompt ID",accessorKey:"prompt_id",cell:e=>{let s=String(e.getValue()||""),l=s.length>25?`${s.slice(0,25)}...`:s;return(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(f.Tooltip,{title:s,children:(0,t.jsx)(r.Button,{size:"xs",variant:"light",className:"font-mono text-blue-500 bg-blue-50 hover:bg-blue-100 text-xs font-normal px-2 py-0.5 text-left overflow-hidden truncate min-w-[220px] justify-start",onClick:()=>e.getValue()&&a?.(e.getValue()),children:l})}),(0,t.jsx)(f.Tooltip,{title:"Copy prompt ID",children:(0,t.jsx)(v.CopyOutlined,{onClick:e=>{e.stopPropagation(),navigator.clipboard.writeText(s)},className:"cursor-pointer text-gray-500 hover:text-blue-500 text-xs"})})]})}},{header:"Model",accessorKey:"model",cell:({row:e})=>{let s=S(e.original);if(!s)return(0,t.jsx)("span",{className:"text-xs text-gray-400",children:"-"});let r=((e,t)=>{if(!e)return null;let s=t.get(e);return s&&s.providers&&s.providers.length>0?s.providers[0]:null})(s,T),{logo:l}=(0,y.getProviderLogoAndName)(r||"");return(0,t.jsx)(f.Tooltip,{title:s,children:(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,t.jsx)("div",{className:"flex-shrink-0",children:r&&l?(0,t.jsx)("img",{src:l,alt:`${r} logo`,className:"w-4 h-4",onError:e=>{let t=e.currentTarget,s=t.parentElement;if(s&&s.contains(t))try{let e=document.createElement("div");e.className="w-4 h-4 rounded-full bg-gray-200 flex items-center justify-center text-xs",e.textContent=r?.charAt(0)||"-",s.replaceChild(e,t)}catch(e){console.error("Failed to replace provider logo fallback:",e)}}}):(0,t.jsx)("div",{className:"w-4 h-4 rounded-full bg-gray-200 flex items-center justify-center text-xs",children:"-"})}),(0,t.jsx)("span",{className:"max-w-[15ch] truncate block",children:s})]})})}},{header:"Created At",accessorKey:"created_at",cell:({row:e})=>{let s=e.original;return(0,t.jsx)(f.Tooltip,{title:s.created_at,children:(0,t.jsx)("span",{className:"text-xs",children:P(s.created_at)})})}},{header:"Updated At",accessorKey:"updated_at",cell:({row:e})=>{let s=e.original;return(0,t.jsx)(f.Tooltip,{title:s.updated_at,children:(0,t.jsx)("span",{className:"text-xs",children:P(s.updated_at)})})}},{header:"Environment",accessorKey:"environment",cell:({row:e})=>{let s=e.original.environment||"development";return(0,t.jsx)("span",{className:`text-xs px-2 py-0.5 rounded ${{production:"text-red-600 bg-red-50",staging:"text-yellow-600 bg-yellow-50",development:"text-green-600 bg-green-50"}[s]||"text-gray-600 bg-gray-50"}`,children:s})}},{header:"Created By",accessorKey:"created_by",cell:({row:e})=>{let s=e.original;return(0,t.jsx)("span",{className:"text-xs text-gray-600",children:s.created_by||"-"})}},{header:"Type",accessorKey:"prompt_info.prompt_type",cell:({row:e})=>{let s=e.original;return(0,t.jsx)(f.Tooltip,{title:s.prompt_info.prompt_type,children:(0,t.jsx)("span",{className:"text-xs",children:s.prompt_info.prompt_type})})}},...C?[{header:"Actions",id:"actions",enableSorting:!1,cell:({row:e})=>{let s=e.original,l=s.prompt_id||"Unknown Prompt";return(0,t.jsx)("div",{className:"flex items-center gap-1",children:(0,t.jsx)(f.Tooltip,{title:"Delete prompt",children:(0,t.jsx)(r.Button,{size:"xs",variant:"light",color:"red",onClick:e=>{e.stopPropagation(),N?.(s.prompt_id,l)},icon:g.TrashIcon,className:"text-red-500 hover:text-red-700 hover:bg-red-50"})})})}}]:[]],B=(0,j.useReactTable)({data:e,columns:I,state:{sorting:_},onSortingChange:k,getCoreRowModel:(0,b.getCoreRowModel)(),getSortedRowModel:(0,b.getSortedRowModel)(),enableSorting:!0});return(0,t.jsx)("div",{className:"rounded-lg custom-border relative",children:(0,t.jsx)("div",{className:"overflow-x-auto",children:(0,t.jsxs)(o.Table,{className:"[&_td]:py-0.5 [&_th]:py-1",children:[(0,t.jsx)(d.TableHead,{children:B.getHeaderGroups().map(e=>(0,t.jsx)(p.TableRow,{children:e.headers.map(e=>(0,t.jsx)(m.TableHeaderCell,{className:"py-1 h-8",onClick:e.column.getToggleSortingHandler(),children:(0,t.jsxs)("div",{className:"flex items-center justify-between gap-2",children:[(0,t.jsx)("div",{className:"flex items-center",children:e.isPlaceholder?null:(0,j.flexRender)(e.column.columnDef.header,e.getContext())}),(0,t.jsx)("div",{className:"w-4",children:e.column.getIsSorted()?({asc:(0,t.jsx)(u.ChevronUpIcon,{className:"h-4 w-4 text-blue-500"}),desc:(0,t.jsx)(h.ChevronDownIcon,{className:"h-4 w-4 text-blue-500"})})[e.column.getIsSorted()]:(0,t.jsx)(x.SwitchVerticalIcon,{className:"h-4 w-4 text-gray-400"})})]})},e.id))},e.id))}),(0,t.jsx)(i.TableBody,{children:l?(0,t.jsx)(p.TableRow,{children:(0,t.jsx)(c.TableCell,{colSpan:I.length,className:"h-8 text-center",children:(0,t.jsx)("div",{className:"text-center text-gray-500",children:(0,t.jsx)("p",{children:"Loading..."})})})}):e.length>0?B.getRowModel().rows.map(e=>(0,t.jsx)(p.TableRow,{className:"h-8",children:e.getVisibleCells().map(e=>(0,t.jsx)(c.TableCell,{className:"py-0.5 max-h-8 overflow-hidden text-ellipsis whitespace-nowrap",children:(0,j.flexRender)(e.column.columnDef.cell,e.getContext())},e.id))},e.id)):(0,t.jsx)(p.TableRow,{children:(0,t.jsx)(c.TableCell,{colSpan:I.length,className:"h-8 text-center",children:(0,t.jsx)("div",{className:"text-center text-gray-500",children:(0,t.jsx)("p",{children:"No prompts found"})})})})})]})})})};var P=e.i(304967),I=e.i(629569),B=e.i(599724),E=e.i(350967),O=e.i(389083),A=e.i(197647),D=e.i(653824),M=e.i(881073),R=e.i(404206),z=e.i(723731),L=e.i(464571),F=e.i(530212),U=e.i(797672),V=e.i(500330),H=e.i(678784),J=e.i(118366),W=e.i(727749),K=e.i(653496),q=e.i(245094),G=e.i(650056),X=e.i(219470);let Y=({promptId:e,model:n,promptVariables:o={},accessToken:i,version:c="1",proxySettings:d})=>{let[m,p]=(0,s.useState)(!1),[x,u]=(0,s.useState)("curl"),[h,g]=(0,s.useState)("basic"),[f,v]=(0,s.useState)(""),j=window.location.origin,b=d?.LITELLM_UI_API_DOC_BASE_URL;b&&b.trim()?j=b:d?.PROXY_BASE_URL&&(j=d.PROXY_BASE_URL);let y=i||"sk-1234";return s.default.useEffect(()=>{m&&v((()=>{let t=Object.keys(o).length>0;if("curl"===x)if("basic"===h)return`curl -X POST '${j}/chat/completions' \\ + -H 'Content-Type: application/json' \\ + -H 'Authorization: Bearer ${y}' \\ + -d '{ + "model": "${n}", + "prompt_id": "${e}"${t?`, + "prompt_variables": ${JSON.stringify(o,null,6).replace(/\n/g,"\n ")}`:""} + }' | jq`;else if("messages"===h)return`curl -X POST '${j}/chat/completions' \\ + -H 'Content-Type: application/json' \\ + -H 'Authorization: Bearer ${y}' \\ + -d '{ + "model": "${n}", + "prompt_id": "${e}"${t?`, + "prompt_variables": ${JSON.stringify(o,null,6).replace(/\n/g,"\n ")}`:""}, + "messages": [ + { + "role": "user", + "content": "hi" + } + ] + }' | jq`;else return`curl -X POST '${j}/chat/completions' \\ + -H 'Content-Type: application/json' \\ + -H 'Authorization: Bearer ${y}' \\ + -d '{ + "model": "${n}", + "prompt_id": "${e}", + "prompt_version": ${c}, + "messages": [ + { + "role": "user", + "content": "Who are u" + } + ] + }' | jq`;if("python"===x){let s=`import openai + +client = openai.OpenAI( + api_key="${y}", + base_url="${j}" +) +`;return"basic"===h?`${s} +response = client.chat.completions.create( + model="${n}", + extra_body={ + "prompt_id": "${e}"${t?`, + "prompt_variables": ${JSON.stringify(o,null,8).replace(/\n/g,"\n ")}`:""} + } +) + +print(response)`:"messages"===h?`${s} +response = client.chat.completions.create( + model="${n}", + messages=[ + {"role": "user", "content": "hi"} + ], + extra_body={ + "prompt_id": "${e}"${t?`, + "prompt_variables": ${JSON.stringify(o,null,8).replace(/\n/g,"\n ")}`:""} + } +) + +print(response)`:`${s} +response = client.chat.completions.create( + model="${n}", + messages=[ + {"role": "user", "content": "Who are u"} + ], + extra_body={ + "prompt_id": "${e}", + "prompt_version": ${c} + } +) + +print(response)`}{let s=`import OpenAI from 'openai'; + +const client = new OpenAI({ + apiKey: "${y}", + baseURL: "${j}" +}); +`;return"basic"===h?`${s} +async function main() { + const response = await client.chat.completions.create({ + model: "${n}", + ${t?`prompt_id: "${e}", + prompt_variables: ${JSON.stringify(o,null,8).replace(/\n/g,"\n ")}`:`prompt_id: "${e}"`} + }); + + console.log(response); +} + +main();`:"messages"===h?`${s} +async function main() { + const response = await client.chat.completions.create({ + model: "${n}", + messages: [ + { role: "user", content: "hi" } + ], + ${t?`prompt_id: "${e}", + prompt_variables: ${JSON.stringify(o,null,8).replace(/\n/g,"\n ")}`:`prompt_id: "${e}"`} + }); + + console.log(response); +} + +main();`:`${s} +async function main() { + const response = await client.chat.completions.create({ + model: "${n}", + messages: [ + { role: "user", content: "Who are u" } + ], + prompt_id: "${e}", + prompt_version: ${c} + }); + + console.log(response); +} + +main();`}})())},[m,x,h,e,n,o]),(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.Button,{variant:"secondary",icon:q.CodeOutlined,onClick:()=>{p(!0)},children:"Get Code"}),(0,t.jsxs)(l.Modal,{title:"Generated Code",open:m,onCancel:()=>{p(!1)},footer:null,width:800,children:[(0,t.jsxs)("div",{className:"flex justify-between items-center mb-4",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)(B.Text,{className:"font-medium block mb-1 text-gray-700",children:"Language"}),(0,t.jsx)(a.Select,{value:x,onChange:e=>u(e),style:{width:180},options:[{value:"curl",label:"cURL"},{value:"python",label:"Python (OpenAI SDK)"},{value:"javascript",label:"JavaScript (OpenAI SDK)"}]})]}),(0,t.jsx)(L.Button,{onClick:()=>{navigator.clipboard.writeText(f),W.default.success("Copied to clipboard!")},children:"Copy to Clipboard"})]}),(0,t.jsx)(K.Tabs,{activeKey:h,onChange:g,items:[{label:"Basic",key:"basic"},{label:"With Messages",key:"messages"},{label:"With Version",key:"version"}]}),(0,t.jsx)(G.Prism,{language:"curl"===x?"bash":"python"===x?"python":"javascript",style:X.coy,wrapLines:!0,wrapLongLines:!0,className:"rounded-md mt-0",customStyle:{maxHeight:"60vh",overflowY:"auto",marginTop:0,borderTopLeftRadius:0,borderTopRightRadius:0},children:f})]})]})},Z=({promptId:e,onClose:a,accessToken:x,isAdmin:u,onDelete:h,onEdit:f})=>{let[v,j]=(0,s.useState)(null),[b,y]=(0,s.useState)(null),[N,w]=(0,s.useState)(null),[C,_]=(0,s.useState)(!0),[k,$]=(0,s.useState)({}),[K,q]=(0,s.useState)(!1),[G,X]=(0,s.useState)(!1),[Z,Q]=(0,s.useState)([]),[ee,et]=(0,s.useState)(null),[es,er]=(0,s.useState)([]),[el,ea]=(0,s.useState)(null),[en,eo]=(0,s.useState)(!1),ei=async t=>{try{if(_(!0),!x)return;let s=await (0,n.getPromptInfo)(x,e,t);j(s.prompt_spec),y(s.raw_prompt_template),w(s),s.environments&&s.environments.length>0&&(Q(s.environments),ee||et(s.prompt_spec.environment||s.environments[0])),ea(s.prompt_spec.version||null)}catch(e){W.default.fromBackend("Failed to load prompt information"),console.error("Error fetching prompt info:",e)}finally{_(!1)}},ec=async t=>{if(x){eo(!0);try{let s=await (0,n.getPromptVersions)(x,e,t);er(s.prompts||[])}catch{er([])}finally{eo(!1)}}},ed=(0,s.useRef)(!0);if((0,s.useEffect)(()=>{et(null),Q([]),er([]),ei()},[e,x]),(0,s.useEffect)(()=>{if(ed.current){ed.current=!1,ee&&x&&ec(ee);return}ee&&x&&(ei(ee),ec(ee))},[ee]),C&&!v)return(0,t.jsx)("div",{className:"p-4",children:"Loading..."});if(!v)return(0,t.jsx)("div",{className:"p-4",children:"Prompt not found"});let em=e=>e?new Date(e).toLocaleString():"-",ep=async(e,t)=>{await (0,V.copyToClipboard)(e)&&($(e=>({...e,[t]:!0})),setTimeout(()=>{$(e=>({...e,[t]:!1}))},2e3))},ex=async()=>{if(x&&v){X(!0);try{await (0,n.deletePromptCall)(x,eg),W.default.success(`Prompt "${eg}" deleted successfully`),h?.(),a()}catch(e){console.error("Error deleting prompt:",e),W.default.fromBackend("Failed to delete prompt")}finally{X(!1),q(!1)}}},eu=async t=>{if(!x||!ee)return;let s=t.version||1;ea(s);try{let t=`${e}.v${s}`,r=await (0,n.getPromptInfo)(x,t,ee);j(r.prompt_spec),y(r.raw_prompt_template),w(r)}catch{W.default.fromBackend(`Failed to load version v${s}`)}},eh=v&&S(v)||"gpt-4o",eg=T(v),ef=(e=>{let t;if(e?.version)return String(e.version);var s=(t=T(e),e?.litellm_params?.prompt_id||t);if(!s)return"1";let r=s.match(/[._-]v(\d+)$/);return r?r[1]:"1"})(v),ev=es.length>0?Math.max(...es.map(e=>e.version||1)):null,ej=null!==ev&&null!==el&&elep(eg,"prompt-id"),className:`left-2 z-10 transition-all duration-200 ${k["prompt-id"]?"text-green-600 bg-green-50 border-green-200":"text-gray-500 hover:text-gray-700 hover:bg-gray-100"}`})]})]}),(0,t.jsxs)("div",{className:"flex gap-2",children:[(0,t.jsx)(Y,{promptId:eg,model:eh,promptVariables:(e=>{let t;if(!e)return{};let s={},r=/\{\{(\w+)\}\}/g;for(;null!==(t=r.exec(e));){let e=t[1];s[e]||(s[e]=`example_${e}`)}return s})(b?.content),accessToken:x,version:ef}),(0,t.jsx)(r.Button,{icon:U.PencilIcon,variant:"primary",onClick:()=>f?.(N),className:"flex items-center",children:"Prompt Studio"}),u&&(0,t.jsx)(r.Button,{icon:g.TrashIcon,variant:"secondary",onClick:()=>{q(!0)},className:"flex items-center",children:"Delete Prompt"})]})]})]}),Z.length>0&&(0,t.jsx)("div",{className:"flex gap-2 mb-4",children:[...Z].sort((e,t)=>{let s={development:0,staging:1,production:2};return(s[e]??99)-(s[t]??99)}).map(e=>(0,t.jsxs)("button",{onClick:()=>{et(e),ea(null)},className:`px-4 py-2 rounded-lg text-sm font-medium transition-all ${ee===e?"production"===e?"bg-red-100 text-red-800 border-2 border-red-300":"staging"===e?"bg-yellow-100 text-yellow-800 border-2 border-yellow-300":"bg-green-100 text-green-800 border-2 border-green-300":"bg-gray-100 text-gray-600 border-2 border-transparent hover:bg-gray-200"}`,children:[e,es.length>0&&ee===e&&(0,t.jsxs)("span",{className:"ml-1 text-xs opacity-75",children:["(v",ev,")"]})]},e))}),ej&&(0,t.jsxs)("div",{className:"mb-4 p-3 bg-amber-50 border border-amber-200 rounded-lg flex items-center justify-between",children:[(0,t.jsxs)(B.Text,{className:"text-amber-800",children:["Viewing v",el," — not the latest version (v",ev,")"]}),(0,t.jsx)(r.Button,{variant:"light",size:"xs",onClick:()=>{let e=es.find(e=>e.version===ev);e&&eu(e)},children:"Go to latest"})]}),(0,t.jsxs)(D.TabGroup,{children:[(0,t.jsxs)(M.TabList,{className:"mb-4",children:[(0,t.jsx)(A.Tab,{children:"Overview"},"overview"),b?(0,t.jsx)(A.Tab,{children:"Prompt Template"},"prompt-template"):(0,t.jsx)(t.Fragment,{}),(0,t.jsx)(A.Tab,{children:"Raw JSON"},"raw-json")]}),(0,t.jsxs)(z.TabPanels,{children:[(0,t.jsxs)(R.TabPanel,{children:[(0,t.jsxs)(E.Grid,{numItems:1,numItemsSm:2,numItemsLg:4,className:"gap-4",children:[(0,t.jsxs)(P.Card,{children:[(0,t.jsx)(B.Text,{children:"Version"}),(0,t.jsxs)("div",{className:"mt-2",children:[(0,t.jsx)(I.Title,{children:ef}),(0,t.jsxs)(O.Badge,{color:"blue",className:"mt-1",children:["v",ef]})]})]}),(0,t.jsxs)(P.Card,{children:[(0,t.jsx)(B.Text,{children:"Prompt Type"}),(0,t.jsx)("div",{className:"mt-2",children:(0,t.jsx)(I.Title,{children:v.prompt_info?.prompt_type||"-"})})]}),(0,t.jsxs)(P.Card,{children:[(0,t.jsx)(B.Text,{children:"Created By"}),(0,t.jsx)("div",{className:"mt-2",children:(0,t.jsx)(I.Title,{className:"text-sm",children:v.created_by||"-"})})]}),(0,t.jsxs)(P.Card,{children:[(0,t.jsx)(B.Text,{children:"Created At"}),(0,t.jsxs)("div",{className:"mt-2",children:[(0,t.jsx)(I.Title,{className:"text-sm",children:em(v.created_at)}),(0,t.jsxs)(B.Text,{className:"text-xs",children:["Updated: ",em(v.updated_at)]})]})]})]}),(0,t.jsxs)(P.Card,{className:"mt-6",children:[(0,t.jsxs)(I.Title,{className:"mb-3",children:["Version History — ",ee]}),en?(0,t.jsx)(B.Text,{children:"Loading versions..."}):es.length>0?(0,t.jsxs)(o.Table,{children:[(0,t.jsx)(d.TableHead,{children:(0,t.jsxs)(p.TableRow,{children:[(0,t.jsx)(m.TableHeaderCell,{children:"Version"}),(0,t.jsx)(m.TableHeaderCell,{children:"Created By"}),(0,t.jsx)(m.TableHeaderCell,{children:"Date"}),(0,t.jsx)(m.TableHeaderCell,{children:"Actions"})]})}),(0,t.jsx)(i.TableBody,{children:es.map(e=>{let s=e.version||1,l=s===el,a=s===ev;return(0,t.jsxs)(p.TableRow,{className:`cursor-pointer hover:bg-blue-50 transition-colors ${l?"bg-blue-50":""}`,onClick:()=>eu(e),children:[(0,t.jsxs)(c.TableCell,{children:[(0,t.jsxs)("span",{className:l?"font-bold":"",children:["v",s]}),a&&(0,t.jsx)(O.Badge,{color:"blue",className:"ml-2",size:"xs",children:"latest"})]}),(0,t.jsx)(c.TableCell,{children:(0,t.jsx)("span",{className:"text-sm",children:e.created_by||"-"})}),(0,t.jsx)(c.TableCell,{children:(0,t.jsx)("span",{className:"text-sm",children:em(e.created_at)})}),(0,t.jsx)(c.TableCell,{children:(0,t.jsx)(r.Button,{icon:U.PencilIcon,variant:"light",size:"xs",onClick:t=>{t.stopPropagation();let s={prompt_spec:{...e,prompt_id:eg,environment:ee},raw_prompt_template:l?b:null};f?.(s)},children:"Edit"})})]},s)})})]}):(0,t.jsxs)(B.Text,{className:"text-gray-400",children:["No versions found in ",ee]})]})]}),b&&(0,t.jsx)(R.TabPanel,{children:(0,t.jsxs)(P.Card,{children:[(0,t.jsxs)("div",{className:"flex justify-between items-center mb-4",children:[(0,t.jsx)(I.Title,{children:"Prompt Template"}),(0,t.jsx)(L.Button,{type:"text",size:"small",icon:k["prompt-content"]?(0,t.jsx)(H.CheckIcon,{size:16}):(0,t.jsx)(J.CopyIcon,{size:16}),onClick:()=>ep(b.content,"prompt-content"),className:`transition-all duration-200 ${k["prompt-content"]?"text-green-600 bg-green-50 border-green-200":"text-gray-500 hover:text-gray-700 hover:bg-gray-100"}`,children:k["prompt-content"]?"Copied!":"Copy Content"})]}),(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)(B.Text,{className:"font-medium",children:"Template ID"}),(0,t.jsx)("div",{className:"font-mono text-sm bg-gray-50 p-2 rounded",children:b.litellm_prompt_id})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)(B.Text,{className:"font-medium",children:"Content"}),(0,t.jsx)("div",{className:"mt-2 p-4 bg-gray-50 rounded-md border overflow-auto max-h-96",children:(0,t.jsx)("pre",{className:"text-sm text-gray-800 whitespace-pre-wrap",children:b.content})})]}),b.metadata&&Object.keys(b.metadata).length>0&&(0,t.jsxs)("div",{children:[(0,t.jsx)(B.Text,{className:"font-medium",children:"Template Metadata"}),(0,t.jsx)("div",{className:"mt-2 p-3 bg-gray-50 rounded-md border",children:(0,t.jsx)("pre",{className:"text-xs text-gray-800 whitespace-pre-wrap overflow-auto max-h-64",children:JSON.stringify(b.metadata,null,2)})})]})]})]})}),(0,t.jsx)(R.TabPanel,{children:(0,t.jsxs)(P.Card,{children:[(0,t.jsxs)("div",{className:"flex justify-between items-center mb-4",children:[(0,t.jsx)(I.Title,{children:"Raw API Response"}),(0,t.jsx)(L.Button,{type:"text",size:"small",icon:k["raw-json"]?(0,t.jsx)(H.CheckIcon,{size:16}):(0,t.jsx)(J.CopyIcon,{size:16}),onClick:()=>ep(JSON.stringify(N,null,2),"raw-json"),className:`transition-all duration-200 ${k["raw-json"]?"text-green-600 bg-green-50 border-green-200":"text-gray-500 hover:text-gray-700 hover:bg-gray-100"}`,children:k["raw-json"]?"Copied!":"Copy JSON"})]}),(0,t.jsx)("div",{className:"p-4 bg-gray-50 rounded-md border overflow-auto",children:(0,t.jsx)("pre",{className:"text-xs text-gray-800 whitespace-pre-wrap",children:JSON.stringify(N,null,2)})})]})})]})]}),(0,t.jsxs)(l.Modal,{title:"Delete Prompt",open:K,onOk:ex,onCancel:()=>{q(!1)},confirmLoading:G,okText:"Delete",okButtonProps:{danger:!0},children:[(0,t.jsxs)("p",{children:["Are you sure you want to delete prompt: ",(0,t.jsx)("strong",{children:eg}),"?"]}),(0,t.jsx)("p",{children:"This action cannot be undone."})]})]})};var Q=e.i(808613),ee=e.i(515831),et=e.i(312361),es=e.i(779241),er=e.i(519756);let{Option:el}=a.Select,ea=({visible:e,onClose:r,accessToken:o,onSuccess:i})=>{let[c]=Q.Form.useForm(),[d,m]=(0,s.useState)(!1),[p,x]=(0,s.useState)([]),[u,h]=(0,s.useState)("dotprompt"),g=()=>{c.resetFields(),x([]),h("dotprompt"),r()},f=async()=>{try{let e=await c.validateFields();if(console.log("values: ",e),!o)return void W.default.fromBackend("Access token is required");if("dotprompt"===u&&0===p.length)return void W.default.fromBackend("Please upload a .prompt file");m(!0);let t={};if("dotprompt"===u&&p.length>0){let s=p[0].originFileObj;try{let r=await (0,n.convertPromptFileToJson)(o,s);console.log("Conversion result:",r),t={prompt_id:e.prompt_id,litellm_params:{prompt_integration:"dotprompt",prompt_id:r.prompt_id,prompt_data:r.json_data},prompt_info:{prompt_type:"db"}}}catch(e){console.error("Error converting prompt file:",e),W.default.fromBackend("Failed to convert prompt file to JSON"),m(!1);return}}try{await (0,n.createPromptCall)(o,t),W.default.success("Prompt created successfully!"),g(),i()}catch(e){console.error("Error creating prompt:",e),W.default.fromBackend("Failed to create prompt")}}catch(e){console.error("Form validation error:",e)}finally{m(!1)}};return(0,t.jsx)(l.Modal,{title:"Add New Prompt",open:e,onCancel:g,footer:[(0,t.jsx)(L.Button,{onClick:g,children:"Cancel"},"cancel"),(0,t.jsx)(L.Button,{loading:d,onClick:f,children:"Create Prompt"},"submit")],width:600,children:(0,t.jsxs)(Q.Form,{form:c,layout:"vertical",requiredMark:!1,children:[(0,t.jsx)(Q.Form.Item,{label:"Prompt ID",name:"prompt_id",rules:[{required:!0,message:"Please enter a prompt ID"},{pattern:/^[a-zA-Z0-9_-]+$/,message:"Prompt ID can only contain letters, numbers, underscores, and hyphens"}],children:(0,t.jsx)(es.TextInput,{placeholder:"Enter unique prompt ID (e.g., my_prompt_id)"})}),(0,t.jsx)(Q.Form.Item,{label:"Prompt Integration",name:"prompt_integration",initialValue:"dotprompt",children:(0,t.jsx)(a.Select,{value:u,onChange:h,children:(0,t.jsx)(el,{value:"dotprompt",children:"dotprompt"})})}),"dotprompt"===u&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(et.Divider,{}),(0,t.jsxs)(Q.Form.Item,{label:"Prompt File",extra:"Upload a .prompt file that follows the Dotprompt specification",children:[(0,t.jsx)(ee.Upload,{...{beforeUpload:e=>(e.name.endsWith(".prompt")||W.default.fromBackend("Please upload a .prompt file"),!1),fileList:p,onChange:({fileList:e})=>{x(e.slice(-1))},onRemove:()=>{x([])}},children:(0,t.jsx)(L.Button,{icon:(0,t.jsx)(er.UploadOutlined,{}),children:"Select .prompt File"})}),p.length>0&&(0,t.jsxs)("div",{className:"mt-2 text-sm text-gray-600",children:["Selected: ",p[0].name]})]})]})]})})},en=`{ + "type": "function", + "function": { + "name": "get_current_weather", + "description": "Get the current weather in a given location", + "parameters": { + "type": "object", + "properties": { + "location": { + "type": "string", + "description": "The city and state, e.g. San Francisco, CA" + }, + "unit": { + "type": "string", + "enum": ["celsius", "fahrenheit"] + } + }, + "required": ["location"] + } + } +}`,eo=({visible:e,initialJson:r,onSave:a,onClose:n})=>{let[o,i]=(0,s.useState)(r||en),[c,d]=(0,s.useState)(null),m=()=>{d(null),n()};return(0,t.jsx)(l.Modal,{title:(0,t.jsx)("div",{className:"flex items-center justify-between",children:(0,t.jsx)("span",{className:"text-lg font-medium",children:"Add Tool"})}),open:e,onCancel:m,width:800,footer:[(0,t.jsx)(L.Button,{onClick:m,children:"Cancel"},"cancel"),(0,t.jsx)(L.Button,{type:"primary",onClick:()=>{try{JSON.parse(o),d(null),a(o)}catch(e){d("Invalid JSON format. Please check your syntax.")}},children:"Add"},"save")],children:(0,t.jsxs)("div",{className:"space-y-3",children:[c&&(0,t.jsx)("div",{className:"p-3 bg-red-50 border border-red-200 rounded text-red-600 text-sm",children:c}),(0,t.jsx)("textarea",{value:o,onChange:e=>i(e.target.value),className:"w-full min-h-[400px] px-4 py-3 border border-gray-300 rounded-lg text-sm font-mono focus:outline-none focus:ring-2 focus:ring-blue-500 resize-none",placeholder:"Paste your tool JSON here..."})]})})};var ei=e.i(311451),ec=e.i(516430),ed=e.i(475254);let em=(0,ed.default)("save",[["path",{d:"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",key:"1c8476"}],["path",{d:"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7",key:"1ydtos"}],["path",{d:"M7 3v4a1 1 0 0 0 1 1h7",key:"t51u73"}]]),ep=(0,ed.default)("clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]),ex=({promptName:e,onNameChange:s,onBack:l,onSave:n,isSaving:o,editMode:i=!1,onShowHistory:c,version:d,promptModel:m="gpt-4o",promptVariables:p={},accessToken:x,proxySettings:u,environment:h,onEnvironmentChange:g})=>(0,t.jsxs)("div",{className:"bg-white border-b border-gray-200 px-6 py-3 flex items-center justify-between",children:[(0,t.jsxs)("div",{className:"flex items-center space-x-3",children:[(0,t.jsx)(r.Button,{icon:ec.ArrowLeftIcon,variant:"light",onClick:l,size:"xs",children:"Back"}),(0,t.jsx)(ei.Input,{value:e,onChange:e=>s(e.target.value),className:"text-base font-medium border-none shadow-none",style:{width:"200px"}}),d&&(0,t.jsx)("span",{className:"px-2 py-0.5 text-xs bg-blue-100 text-blue-700 rounded font-medium",children:d}),(0,t.jsx)(a.Select,{value:h,onChange:g,style:{width:140},size:"small",options:[{label:"Development",value:"development"},{label:"Staging",value:"staging"},{label:"Production",value:"production"}]}),(0,t.jsx)("span",{className:"px-2 py-0.5 text-xs bg-gray-100 text-gray-600 rounded",children:"Draft"}),(0,t.jsx)("span",{className:"text-xs text-gray-400",children:"Unsaved changes"})]}),(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,t.jsx)(Y,{promptId:e,model:m,promptVariables:p,accessToken:x,version:d?.replace("v","")||"1",proxySettings:u}),i&&c&&(0,t.jsx)(r.Button,{icon:ep,variant:"secondary",onClick:c,children:"History"}),(0,t.jsx)(r.Button,{icon:em,onClick:n,loading:o,disabled:o,children:i?"Update":"Save"})]})]});var eu=e.i(440987),eh=e.i(992619);let eg=({model:e,temperature:r=1,maxTokens:l=1e3,accessToken:a,onModelChange:n,onTemperatureChange:o,onMaxTokensChange:i})=>{let[c,d]=(0,s.useState)(!1);return(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsx)("div",{className:"w-[300px]",children:(0,t.jsx)(eh.default,{accessToken:a||"",value:e,onChange:n,showLabel:!1})}),(0,t.jsxs)("button",{onClick:()=>d(!c),className:"flex items-center gap-2 px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-lg hover:bg-gray-50",children:[(0,t.jsx)(eu.SettingsIcon,{size:16}),(0,t.jsx)("span",{children:"Parameters"})]}),c&&(0,t.jsx)("div",{className:"fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-30",children:(0,t.jsxs)("div",{className:"bg-white rounded-lg shadow-xl p-6 w-96",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between mb-4",children:[(0,t.jsx)("h3",{className:"text-lg font-semibold",children:"Model Parameters"}),(0,t.jsx)("button",{onClick:()=>d(!1),className:"text-gray-400 hover:text-gray-600",children:"✕"})]}),(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsx)("div",{children:(0,t.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,t.jsx)(B.Text,{className:"text-sm text-gray-700",children:"Temperature"}),(0,t.jsx)(ei.Input,{type:"number",size:"small",min:0,max:2,step:.1,value:r,onChange:e=>o(parseFloat(e.target.value)||0),className:"w-20"})]})}),(0,t.jsx)("div",{children:(0,t.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,t.jsx)(B.Text,{className:"text-sm text-gray-700",children:"Max Tokens"}),(0,t.jsx)(ei.Input,{type:"number",size:"small",min:1,max:32768,value:l,onChange:e=>i(parseInt(e.target.value)||1e3),className:"w-24"})]})})]})]})})]})};var ef=e.i(837007);let ev=(0,ed.default)("trash",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}]]),ej=({tools:e,onAddTool:s,onEditTool:r,onRemoveTool:l})=>(0,t.jsxs)(P.Card,{className:"p-3",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between mb-2",children:[(0,t.jsx)(B.Text,{className:"text-sm font-medium",children:"Tools"}),(0,t.jsxs)("button",{onClick:s,className:"text-xs text-blue-600 hover:text-blue-700 flex items-center",children:[(0,t.jsx)(ef.PlusIcon,{size:14,className:"mr-1"}),"Add"]})]}),0===e.length?(0,t.jsx)(B.Text,{className:"text-gray-500 text-xs",children:"No tools added"}):(0,t.jsx)("div",{className:"space-y-2",children:e.map((e,s)=>(0,t.jsxs)("div",{className:"flex items-center justify-between p-2 bg-gray-50 border border-gray-200 rounded",children:[(0,t.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,t.jsx)("div",{className:"font-medium text-xs truncate",children:e.name}),(0,t.jsx)("div",{className:"text-xs text-gray-500 truncate",children:e.description})]}),(0,t.jsxs)("div",{className:"flex items-center space-x-1 ml-2",children:[(0,t.jsx)("button",{onClick:()=>r(s),className:"text-xs text-blue-600 hover:text-blue-700",children:"Edit"}),(0,t.jsx)("button",{onClick:()=>l(s),className:"text-gray-400 hover:text-red-500",children:(0,t.jsx)(ev,{size:14})})]})]},s))})]});var eb=e.i(282786),ey=e.i(262218),eN=e.i(751904);let{TextArea:ew}=ei.Input,eC=({value:e,onChange:r,placeholder:l,rows:a=4,className:n})=>{let[o,i]=(0,s.useState)(null),[c,d]=(0,s.useState)(""),m=()=>{c.trim()&&o&&(r(e.substring(0,o.start)+`{{${c}}}`+e.substring(o.end)),i(null),d(""))},p=(()=>{let t,s=/\{\{(\w+)\}\}/g,r=[];for(;null!==(t=s.exec(e));)r.push({name:t[1],start:t.index,end:t.index+t[0].length});return r})();return(0,t.jsxs)("div",{className:`variable-textarea-container ${n}`,children:[(0,t.jsx)("style",{children:` + .variable-highlight-text { + color: #f97316; + background-color: #fff7ed; + border-radius: 4px; + padding: 0 2px; + border: 1px solid #fed7aa; + font-family: monospace; + } + `}),(0,t.jsx)(ew,{value:e,onChange:e=>r(e.target.value),placeholder:l,rows:a,className:"font-sans"}),p.length>0&&(0,t.jsxs)("div",{className:"mt-2 flex flex-wrap gap-2 items-center",children:[(0,t.jsx)("span",{className:"text-xs text-gray-500 mr-1",children:"Detected variables:"}),p.map((e,s)=>(0,t.jsx)(eb.Popover,{content:(0,t.jsxs)("div",{className:"p-2",style:{minWidth:"200px"},children:[(0,t.jsx)("div",{className:"text-xs text-gray-500 mb-2",children:"Edit variable name"}),(0,t.jsx)(ei.Input,{size:"small",value:c,onChange:e=>d(e.target.value),onPressEnter:m,placeholder:"Variable name",autoFocus:!0}),(0,t.jsxs)("div",{className:"flex gap-2 mt-2",children:[(0,t.jsx)("button",{onClick:m,className:"text-xs px-2 py-1 bg-blue-500 text-white rounded hover:bg-blue-600",children:"Save"}),(0,t.jsx)("button",{onClick:()=>{i(null),d("")},className:"text-xs px-2 py-1 bg-gray-200 text-gray-700 rounded hover:bg-gray-300",children:"Cancel"})]})]}),open:o?.start===e.start,onOpenChange:e=>{e||(i(null),d(""))},trigger:"click",children:(0,t.jsx)(ey.Tag,{color:"orange",className:"cursor-pointer hover:opacity-80 transition-all m-0",icon:(0,t.jsx)(eN.EditOutlined,{}),onClick:()=>{i({oldName:e.name,start:e.start,end:e.end}),d(e.name)},children:e.name})},`${e.start}-${s}`))]})]})},e_=({value:e,onChange:s})=>(0,t.jsxs)(P.Card,{className:"p-3",children:[(0,t.jsx)(B.Text,{className:"block mb-2 text-sm font-medium",children:"Developer message"}),(0,t.jsx)(B.Text,{className:"text-gray-500 text-xs mb-2",children:"Optional system instructions for the model"}),(0,t.jsx)(eC,{value:e,onChange:s,rows:3,placeholder:"e.g., You are a helpful assistant..."})]}),ek=(0,ed.default)("grip-vertical",[["circle",{cx:"9",cy:"12",r:"1",key:"1vctgf"}],["circle",{cx:"9",cy:"5",r:"1",key:"hp0tcf"}],["circle",{cx:"9",cy:"19",r:"1",key:"fkjjf6"}],["circle",{cx:"15",cy:"12",r:"1",key:"1tmaij"}],["circle",{cx:"15",cy:"5",r:"1",key:"19l28e"}],["circle",{cx:"15",cy:"19",r:"1",key:"f4zoj3"}]]),{Option:eT}=a.Select,eS=({messages:e,onAddMessage:r,onUpdateMessage:l,onRemoveMessage:n,onMoveMessage:o})=>{let[i,c]=(0,s.useState)(null),[d,m]=(0,s.useState)(null),p=()=>{c(null),m(null)};return(0,t.jsxs)(P.Card,{className:"p-3",children:[(0,t.jsxs)("div",{className:"mb-2",children:[(0,t.jsx)(B.Text,{className:"text-sm font-medium",children:"Prompt messages"}),(0,t.jsxs)(B.Text,{className:"text-gray-500 text-xs mt-1",children:["Use ",(0,t.jsx)("code",{className:"bg-gray-100 px-1 rounded text-xs",children:"{{variable}}"})," syntax for template variables"]})]}),(0,t.jsx)("div",{className:"space-y-2",children:e.map((s,r)=>(0,t.jsxs)("div",{draggable:!0,onDragStart:()=>{c(r)},onDragOver:e=>{e.preventDefault(),m(r)},onDrop:e=>{e.preventDefault(),null!==i&&i!==r&&o(i,r),c(null),m(null)},onDragEnd:p,className:`border border-gray-300 rounded overflow-hidden bg-white transition-all ${i===r?"opacity-50":""} ${d===r&&i!==r?"border-blue-500 border-2":""}`,children:[(0,t.jsxs)("div",{className:"bg-gray-50 px-2 py-1.5 border-b border-gray-300 flex items-center justify-between",children:[(0,t.jsxs)(a.Select,{value:s.role,onChange:e=>l(r,"role",e),style:{width:100},size:"small",bordered:!1,children:[(0,t.jsx)(eT,{value:"user",children:"User"}),(0,t.jsx)(eT,{value:"assistant",children:"Assistant"}),(0,t.jsx)(eT,{value:"system",children:"System"})]}),(0,t.jsxs)("div",{className:"flex items-center gap-1",children:[e.length>1&&(0,t.jsx)("button",{onClick:()=>n(r),className:"text-gray-400 hover:text-red-500",children:(0,t.jsx)(ev,{size:14})}),(0,t.jsx)("div",{className:"cursor-grab active:cursor-grabbing text-gray-400 hover:text-gray-600",children:(0,t.jsx)(ek,{size:16})})]})]}),(0,t.jsx)("div",{className:"p-2",children:(0,t.jsx)(eC,{value:s.content,onChange:e=>l(r,"content",e),rows:3,placeholder:"Enter prompt content..."})})]},r))}),(0,t.jsxs)("button",{onClick:r,className:"mt-2 text-xs text-blue-600 hover:text-blue-700 flex items-center",children:[(0,t.jsx)(ef.PlusIcon,{size:14,className:"mr-1"}),"Add message"]})]})};var e$=e.i(447593);let eP=({extractedVariables:e,variables:s,onVariableChange:r})=>0===e.length?null:(0,t.jsxs)("div",{className:"p-4 border-b border-gray-200 bg-blue-50",children:[(0,t.jsx)("h3",{className:"text-sm font-semibold text-gray-700 mb-3",children:"Fill in template variables to start testing"}),(0,t.jsx)("div",{className:"space-y-2",children:e.map(e=>(0,t.jsxs)("div",{children:[(0,t.jsxs)("label",{className:"block text-xs text-gray-600 mb-1 font-medium",children:["{{",e,"}}"]}),(0,t.jsx)(ei.Input,{value:s[e]||"",onChange:t=>r(e,t.target.value),placeholder:`Enter value for ${e}`,size:"small"})]},e))})]});var eI=e.i(56456),eB=e.i(482725),eE=e.i(983561);let eO=({hasVariables:e})=>(0,t.jsxs)("div",{className:"h-full flex flex-col items-center justify-center text-gray-400",children:[(0,t.jsx)(eE.RobotOutlined,{style:{fontSize:"48px",marginBottom:"16px"}}),(0,t.jsx)("span",{className:"text-base",children:e?"Fill in the variables above, then type a message to start testing":"Type a message below to start testing your prompt"})]});var eA=e.i(771674),eD=e.i(918789),eM=e.i(285903);let eR=({message:e})=>(0,t.jsx)("div",{className:`mb-4 flex ${"user"===e.role?"justify-end":"justify-start"}`,children:(0,t.jsxs)("div",{className:"max-w-[85%] rounded-lg shadow-sm p-3.5 px-4",style:{backgroundColor:"user"===e.role?"#f0f8ff":"#ffffff",border:"user"===e.role?"1px solid #e6f0fa":"1px solid #f0f0f0"},children:[(0,t.jsxs)("div",{className:"flex items-center gap-2 mb-1.5",children:[(0,t.jsx)("div",{className:"flex items-center justify-center w-6 h-6 rounded-full mr-1",style:{backgroundColor:"user"===e.role?"#e6f0fa":"#f5f5f5"},children:"user"===e.role?(0,t.jsx)(eA.UserOutlined,{style:{fontSize:"12px",color:"#2563eb"}}):(0,t.jsx)(eE.RobotOutlined,{style:{fontSize:"12px",color:"#4b5563"}})}),(0,t.jsx)("strong",{className:"text-sm capitalize",children:e.role}),"assistant"===e.role&&e.model&&(0,t.jsx)("span",{className:"text-xs px-2 py-0.5 rounded bg-gray-100 text-gray-600 font-normal",children:e.model})]}),(0,t.jsxs)("div",{className:"whitespace-pre-wrap break-words max-w-full message-content",style:{wordWrap:"break-word",overflowWrap:"break-word",wordBreak:"break-word",hyphens:"auto"},children:["assistant"===e.role?(0,t.jsx)(eD.default,{components:{code({node:e,inline:s,className:r,children:l,...a}){let n=/language-(\w+)/.exec(r||"");return!s&&n?(0,t.jsx)(G.Prism,{style:X.coy,language:n[1],PreTag:"div",className:"rounded-md my-2",wrapLines:!0,wrapLongLines:!0,...a,children:String(l).replace(/\n$/,"")}):(0,t.jsx)("code",{className:`${r} px-1.5 py-0.5 rounded bg-gray-100 text-sm font-mono`,style:{wordBreak:"break-word"},...a,children:l})},pre:({node:e,...s})=>(0,t.jsx)("pre",{style:{overflowX:"auto",maxWidth:"100%"},...s})},children:e.content}):(0,t.jsx)("div",{className:"whitespace-pre-wrap",children:e.content}),"assistant"===e.role&&(e.timeToFirstToken||e.totalLatency||e.usage)&&(0,t.jsx)(eM.default,{timeToFirstToken:e.timeToFirstToken,totalLatency:e.totalLatency,usage:e.usage})]})]})}),ez=({messages:e,isLoading:s,hasVariables:r,messagesEndRef:l})=>{let a=(0,t.jsx)(eI.LoadingOutlined,{style:{fontSize:24},spin:!0});return(0,t.jsxs)("div",{className:"flex-1 overflow-y-auto p-4 pb-0",children:[0===e.length&&(0,t.jsx)(eO,{hasVariables:r}),e.map((e,s)=>(0,t.jsx)(eR,{message:e},s)),s&&(0,t.jsx)("div",{className:"flex justify-center items-center my-4",children:(0,t.jsx)(eB.Spin,{indicator:a})}),(0,t.jsx)("div",{ref:l,style:{height:"1px"}})]})},eL=({extractedVariables:e,variables:s})=>{let r=e.filter(e=>!s[e]||""===s[e].trim());return 0===r.length?null:(0,t.jsx)("div",{className:"mb-3 p-3 bg-yellow-50 border border-yellow-200 rounded-lg",children:(0,t.jsxs)("div",{className:"flex items-start gap-2",children:[(0,t.jsx)("span",{className:"text-yellow-600 text-sm",children:"⚠️"}),(0,t.jsxs)("div",{className:"flex-1",children:[(0,t.jsx)("p",{className:"text-sm text-yellow-800 font-medium mb-1",children:"Please fill in all template variables above"}),(0,t.jsxs)("p",{className:"text-xs text-yellow-700",children:["Missing: ",r.map(e=>`{{${e}}}`).join(", ")]})]})]})})};var eF=e.i(132104);let{TextArea:eU}=ei.Input,eV=({inputMessage:e,isLoading:s,isDisabled:l,onInputChange:a,onSend:n,onKeyDown:o,onCancel:i})=>(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsxs)("div",{className:"flex items-center flex-1 bg-white border border-gray-300 rounded-xl px-3 py-1 min-h-[44px]",children:[(0,t.jsx)(eU,{value:e,onChange:e=>a(e.target.value),onKeyDown:o,placeholder:"Type your message... (Shift+Enter for new line)",disabled:s,className:"flex-1",autoSize:{minRows:1,maxRows:4},style:{resize:"none",border:"none",boxShadow:"none",background:"transparent",padding:"4px 0",fontSize:"14px",lineHeight:"20px"}}),(0,t.jsx)(r.Button,{onClick:n,disabled:l,className:"flex-shrink-0 ml-2 !w-8 !h-8 !min-w-8 !p-0 !rounded-full !bg-blue-600 hover:!bg-blue-700 disabled:!bg-gray-300 !border-none !text-white disabled:!text-gray-500 !flex !items-center !justify-center",children:(0,t.jsx)(eF.ArrowUpOutlined,{style:{fontSize:"14px"}})})]}),s&&(0,t.jsx)(r.Button,{onClick:i,className:"bg-red-50 hover:bg-red-100 text-red-600 border-red-200",children:"Cancel"})]}),eH=({prompt:e,accessToken:l})=>{let{isLoading:a,messages:o,inputMessage:i,variables:c,variablesFilled:d,extractedVariables:m,allVariablesFilled:p,messagesEndRef:x,setInputMessage:u,handleSendMessage:h,handleCancelRequest:g,handleClearConversation:f,handleKeyDown:v,handleVariableChange:j}=((e,t)=>{let[r,l]=(0,s.useState)(!1),[a,o]=(0,s.useState)([]),[i,c]=(0,s.useState)(""),[d,m]=(0,s.useState)({}),[p,x]=(0,s.useState)(!1),[u,h]=(0,s.useState)(null),g=(0,s.useRef)(null),f=N(e),v=f.every(e=>d[e]&&""!==d[e].trim());(0,s.useEffect)(()=>{g.current&&setTimeout(()=>{g.current?.scrollIntoView({behavior:"smooth",block:"end"})},100)},[a]);let j=async()=>{let s;if(!t)return void W.default.fromBackend("Access token is required");if(f.length>0&&!v)return void W.default.fromBackend("Please fill in all template variables");if(!i.trim())return;!p&&f.length>0&&x(!0);let r={role:"user",content:i};o(e=>[...e,r]),c("");let m=new AbortController;h(m),l(!0);let u=Date.now();try{let r,l,c=w(e),p=(0,n.getProxyBaseUrl)(),x={dotprompt_content:c};0===a.length?x.prompt_variables=d:x.conversation_history=[...a.map(e=>({role:e.role,content:e.content})),{role:"user",content:i}];let h=await fetch(`${p}/prompts/test`,{method:"POST",headers:{[(0,n.getGlobalLitellmHeaderName)()]:`Bearer ${t}`,"Content-Type":"application/json"},body:JSON.stringify(x),signal:m.signal});if(!h.ok){let e=await h.text();throw Error(`HTTP error! status: ${h.status}, ${e}`)}if(!h.body)throw Error("No response body");let g=h.body.getReader(),f=new TextDecoder,v="";for(o(e=>[...e,{role:"assistant",content:""}]);;){let{done:e,value:t}=await g.read();if(e)break;for(let e of f.decode(t).split("\n"))if(e.startsWith("data: ")){let t=e.slice(6);if("[DONE]"===t)continue;try{let e=JSON.parse(t);!r&&e.model&&(r=e.model),e.usage&&(l=e.usage);let a=e.choices?.[0]?.delta?.content;a&&(s||(s=Date.now()-u),v+=a,o(e=>{let t=[...e];return t[t.length-1]={role:"assistant",content:v,model:r,timeToFirstToken:s},t}))}catch(e){console.error("Error parsing chunk:",e)}}}let j=Date.now()-u;o(e=>{let t=[...e];return t[t.length-1]={...t[t.length-1],totalLatency:j,usage:l},t})}catch(e){"AbortError"===e.name?console.log("Request was cancelled"):(console.error("Error testing prompt:",e),o(t=>{let s=t[t.length-1];return s&&"assistant"===s.role&&""===s.content?[...t.slice(0,-1),{role:"assistant",content:`Error: ${e.message}`}]:[...t,{role:"assistant",content:`Error: ${e.message}`}]}))}finally{l(!1),h(null)}};return{isLoading:r,messages:a,inputMessage:i,variables:d,variablesFilled:p,extractedVariables:f,allVariablesFilled:v,messagesEndRef:g,setInputMessage:c,handleSendMessage:j,handleCancelRequest:()=>{u&&(u.abort(),h(null),l(!1),W.default.info("Request cancelled"))},handleClearConversation:()=>{o([]),x(!1),W.default.success("Chat history cleared.")},handleKeyDown:e=>{"Enter"!==e.key||e.shiftKey||(e.preventDefault(),j())},handleVariableChange:(e,t)=>{m({...d,[e]:t})}}})(e,l);return(0,t.jsxs)("div",{className:"flex flex-col h-full bg-white",children:[!d&&(0,t.jsx)(eP,{extractedVariables:m,variables:c,onVariableChange:j}),o.length>0&&(0,t.jsx)("div",{className:"p-3 border-b border-gray-200 bg-white flex justify-end",children:(0,t.jsx)(r.Button,{onClick:f,className:"bg-gray-100 hover:bg-gray-200 text-gray-700 border-gray-300",icon:e$.ClearOutlined,children:"Clear Chat"})}),(0,t.jsx)(ez,{messages:o,isLoading:a,hasVariables:m.length>0,messagesEndRef:x}),(0,t.jsxs)("div",{className:"p-4 border-t border-gray-200 bg-white",children:[(0,t.jsx)(eL,{extractedVariables:m,variables:c}),(0,t.jsx)(eV,{inputMessage:i,isLoading:a,isDisabled:a||!i.trim()||m.length>0&&!p,onInputChange:u,onSend:h,onKeyDown:v,onCancel:g})]})]})},eJ=({visible:e,promptName:s,isSaving:a,onNameChange:n,onPublish:o,onCancel:i})=>(0,t.jsx)(l.Modal,{title:"Publish Prompt",open:e,onCancel:i,footer:[(0,t.jsxs)("div",{className:"flex justify-end gap-2",children:[(0,t.jsx)(r.Button,{variant:"secondary",onClick:i,children:"Cancel"}),(0,t.jsx)(r.Button,{onClick:o,loading:a,children:"Publish"})]},"footer")],children:(0,t.jsxs)("div",{className:"py-4",children:[(0,t.jsx)(B.Text,{className:"mb-2",children:"Name"}),(0,t.jsx)(ei.Input,{value:s,onChange:e=>n(e.target.value),placeholder:"Enter prompt name",onPressEnter:o,autoFocus:!0}),(0,t.jsx)(B.Text,{className:"text-gray-500 text-xs mt-2",children:"Published prompts can be used in API calls and are versioned for easy tracking."})]})}),eW=({prompt:e})=>{let s=w(e);return(0,t.jsxs)("div",{className:"p-6",children:[(0,t.jsxs)("div",{className:"mb-4",children:[(0,t.jsx)("h3",{className:"text-sm font-medium text-gray-700 mb-2",children:"Generated .prompt file"}),(0,t.jsx)("p",{className:"text-xs text-gray-500",children:"This is the dotprompt format that will be saved to the database"})]}),(0,t.jsx)("div",{className:"bg-gray-50 border border-gray-200 rounded-lg p-4 overflow-auto",children:(0,t.jsx)("pre",{className:"text-sm text-gray-900 font-mono whitespace-pre-wrap",children:s})})]})};var eK=e.i(608856),eq=e.i(573421),eG=e.i(981339);let{Text:eX}=e.i(898586).Typography,eY=({isOpen:e,onClose:r,accessToken:l,promptId:a,activeVersionId:o,onSelectVersion:i})=>{let[c,d]=(0,s.useState)([]),[m,p]=(0,s.useState)(!1);(0,s.useEffect)(()=>{e&&l&&a&&x()},[e,l,a]);let x=async()=>{p(!0);try{let e=a.includes(".v")?a.split(".v")[0]:a,t=await (0,n.getPromptVersions)(l,e);d(t.prompts)}catch(e){console.error("Error fetching prompt versions:",e)}finally{p(!1)}},u=e=>{if(e.version)return`v${e.version}`;let t=e.litellm_params?.prompt_id||e.prompt_id;return t.includes(".v")?`v${t.split(".v")[1]}`:t.includes("_v")?`v${t.split("_v")[1]}`:"v1"};return(0,t.jsx)(eK.Drawer,{title:"Version History",placement:"right",onClose:r,open:e,width:400,mask:!1,maskClosable:!1,children:m?(0,t.jsx)(eG.Skeleton,{active:!0,paragraph:{rows:4}}):0===c.length?(0,t.jsx)("div",{className:"text-center py-8 text-gray-500",children:"No version history available."}):(0,t.jsx)(eq.List,{dataSource:c,renderItem:(e,s)=>{var r;let l=e.version||parseInt(u(e).replace("v","")),a=null;o&&(o.includes(".v")?a=parseInt(o.split(".v")[1]):o.includes("_v")&&(a=parseInt(o.split("_v")[1])));let n=a?l===a:0===s;return(0,t.jsxs)("div",{className:`mb-4 p-4 rounded-lg border cursor-pointer transition-all hover:shadow-md ${n?"border-blue-500 bg-blue-50":"border-gray-200 bg-white hover:border-blue-300"}`,onClick:()=>i?.(e),children:[(0,t.jsxs)("div",{className:"flex justify-between items-start mb-2",children:[(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(ey.Tag,{className:"m-0",children:u(e)}),0===s&&(0,t.jsx)(ey.Tag,{color:"blue",className:"m-0",children:"Latest"})]}),n&&(0,t.jsx)(ey.Tag,{color:"green",className:"m-0",children:"Active"})]}),(0,t.jsxs)("div",{className:"flex flex-col gap-1",children:[(0,t.jsx)(eX,{className:"text-sm text-gray-600 font-medium",children:(r=e.created_at)?new Date(r).toLocaleString():"-"}),(0,t.jsx)(eX,{type:"secondary",className:"text-xs",children:e.prompt_info?.prompt_type==="db"?"Saved to Database":"Config Prompt"})]})]},`${e.prompt_id}-v${e.version||l}`)}})})},eZ=({onClose:e,onSuccess:r,accessToken:l,initialPromptData:a})=>{let[o,i]=(0,s.useState)((()=>{if(a)try{return _(a)}catch(e){console.error("Error parsing existing prompt:",e),W.default.fromBackend("Failed to parse prompt data")}return{name:"New prompt",model:"gpt-4o",config:{temperature:1,max_tokens:1e3},tools:[],developerMessage:"",messages:[{role:"user",content:"Enter task specifics. Use {{template_variables}} for dynamic inputs"}],environment:"development"}})()),[c,d]=(0,s.useState)(!!a),[m,p]=(0,s.useState)(!1),[x,u]=(0,s.useState)((()=>{if(!a?.prompt_spec)return;let e=a.prompt_spec.prompt_id,t=a.prompt_spec.version||a.prompt_spec.litellm_params?.prompt_id;return"number"==typeof t?`${e}.v${t}`:"string"==typeof t&&(t.includes(".v")||t.includes("_v"))?t:e})()),[h,g]=(0,s.useState)(!1),[f,v]=(0,s.useState)(!1),[j,b]=(0,s.useState)(null),[y,N]=(0,s.useState)(!1),[C,k]=(0,s.useState)("pretty"),T=e=>{void 0!==e?b(e):b(null),g(!0)},S=async()=>{if(!l)return void W.default.fromBackend("Access token is required");if(!o.name||""===o.name.trim())return void W.default.fromBackend("Please enter a valid prompt name");N(!0);try{let t=o.name.replace(/[^a-zA-Z0-9_-]/g,"_").toLowerCase(),s=w(o),i={prompt_id:t,litellm_params:{prompt_integration:"dotprompt",prompt_id:t,dotprompt_content:s},prompt_info:{prompt_type:"db",environment:o.environment}};c&&a?.prompt_spec?.prompt_id?(await (0,n.updatePromptCall)(l,a.prompt_spec.prompt_id,i),W.default.success("Prompt updated successfully!")):(await (0,n.createPromptCall)(l,i),W.default.success("Prompt created successfully!")),r(),e()}catch(e){console.error("Error saving prompt:",e),W.default.fromBackend(c?"Failed to update prompt":"Failed to save prompt")}finally{N(!1),v(!1)}},$=x&&x.includes(".v")?`v${x.split(".v")[1]}`:null;return(0,t.jsxs)("div",{className:"flex h-full bg-white",children:[(0,t.jsxs)("div",{className:"flex-1 flex flex-col",children:[(0,t.jsx)(ex,{promptName:o.name,onNameChange:e=>i({...o,name:e}),onBack:e,onSave:()=>{o.name&&""!==o.name.trim()&&"New prompt"!==o.name?S():v(!0)},isSaving:y,editMode:c,onShowHistory:()=>p(!0),version:$,promptModel:o.model,promptVariables:(()=>{let e,t={},s=[o.developerMessage,...o.messages.map(e=>e.content)].join(" "),r=/\{\{(\w+)\}\}/g;for(;null!==(e=r.exec(s));){let s=e[1];t[s]||(t[s]=`example_${s}`)}return t})(),accessToken:l,environment:o.environment,onEnvironmentChange:async e=>{if(i({...o,environment:e}),c&&l&&a?.prompt_spec?.prompt_id)try{let t=await (0,n.getPromptInfo)(l,a.prompt_spec.prompt_id,e);if(t?.prompt_spec){let s=_(t);i({...s,environment:e});let r=t.prompt_spec.version||1;u(`${t.prompt_spec.prompt_id}.v${r}`)}}catch{}}}),(0,t.jsxs)("div",{className:"flex-1 flex overflow-hidden",children:[(0,t.jsxs)("div",{className:"w-1/2 overflow-y-auto bg-white border-r border-gray-200 flex-shrink-0",children:[(0,t.jsxs)("div",{className:"border-b border-gray-200 bg-white px-6 py-4 flex items-center gap-3",children:[(0,t.jsx)(eg,{model:o.model,temperature:o.config.temperature,maxTokens:o.config.max_tokens,accessToken:l,onModelChange:e=>i({...o,model:e}),onTemperatureChange:e=>i({...o,config:{...o.config,temperature:e}}),onMaxTokensChange:e=>i({...o,config:{...o.config,max_tokens:e}})}),(0,t.jsxs)("div",{className:"ml-auto inline-flex items-center bg-gray-200 rounded-full p-0.5",children:[(0,t.jsx)("button",{className:`px-3 py-1 text-xs font-medium rounded-full transition-colors ${"pretty"===C?"bg-white text-gray-900 shadow-sm":"text-gray-600"}`,onClick:()=>k("pretty"),children:"PRETTY"}),(0,t.jsx)("button",{className:`px-3 py-1 text-xs font-medium rounded-full transition-colors ${"dotprompt"===C?"bg-white text-gray-900 shadow-sm":"text-gray-600"}`,onClick:()=>k("dotprompt"),children:"DOTPROMPT"})]})]}),"pretty"===C?(0,t.jsxs)("div",{className:"p-6 space-y-4 pb-20",children:[(0,t.jsx)(ej,{tools:o.tools,onAddTool:()=>T(),onEditTool:T,onRemoveTool:e=>{i({...o,tools:o.tools.filter((t,s)=>s!==e)})}}),(0,t.jsx)(e_,{value:o.developerMessage,onChange:e=>i({...o,developerMessage:e})}),(0,t.jsx)(eS,{messages:o.messages,onAddMessage:()=>{i({...o,messages:[...o.messages,{role:"user",content:""}]})},onUpdateMessage:(e,t,s)=>{let r=[...o.messages];r[e][t]=s,i({...o,messages:r})},onRemoveMessage:e=>{o.messages.length>1&&i({...o,messages:o.messages.filter((t,s)=>s!==e)})},onMoveMessage:(e,t)=>{let s=[...o.messages],[r]=s.splice(e,1);s.splice(t,0,r),i({...o,messages:s})}})]}):(0,t.jsx)(eW,{prompt:o})]}),(0,t.jsx)("div",{className:"w-1/2 flex-shrink-0",children:(0,t.jsx)(eH,{prompt:o,accessToken:l})})]})]}),(0,t.jsx)(eJ,{visible:f,promptName:o.name,isSaving:y,onNameChange:e=>i({...o,name:e}),onPublish:S,onCancel:()=>v(!1)}),h&&(0,t.jsx)(eo,{visible:h,initialJson:null!==j?o.tools[j].json:"",onSave:e=>{try{let t=JSON.parse(e),s={name:t.function?.name||"Unnamed Tool",description:t.function?.description||"",json:e};if(null!==j){let e=[...o.tools];e[j]=s,i({...o,tools:e})}else i({...o,tools:[...o.tools,s]});g(!1),b(null)}catch(e){W.default.fromBackend("Invalid JSON format")}},onClose:()=>{g(!1),b(null)}}),(0,t.jsx)(eY,{isOpen:m,onClose:()=>p(!1),accessToken:l,promptId:a?.prompt_spec?.prompt_id||o.name,activeVersionId:x,onSelectVersion:e=>{try{let t=_({prompt_spec:e});i(t);let s=e.version||1;u(`${e.prompt_id}.v${s}`)}catch(e){console.error("Error loading version:",e),W.default.fromBackend("Failed to load prompt version")}}})]})};var eQ=e.i(708347);let e0=({accessToken:e,userRole:o})=>{let[i,c]=(0,s.useState)([]),[d,m]=(0,s.useState)(!1),[p,x]=(0,s.useState)(void 0),[u,h]=(0,s.useState)(null),[g,f]=(0,s.useState)(!1),[v,j]=(0,s.useState)(!1),[b,y]=(0,s.useState)(null),[N,w]=(0,s.useState)(!1),[C,_]=(0,s.useState)(null);o&&(0,eQ.isAdminRole)(o);let k=!!o&&(0,eQ.isProxyAdminRole)(o),T=async()=>{if(e){m(!0);try{let t=await (0,n.getPromptsList)(e,p);console.log(`prompts: ${JSON.stringify(t)}`),c(t.prompts)}catch(e){console.error("Error fetching prompts:",e)}finally{m(!1)}}};(0,s.useEffect)(()=>{T()},[e,p]);let S=()=>{T(),j(!1),y(null),h(null)},P=async()=>{if(C&&e){w(!0);try{await (0,n.deletePromptCall)(e,C.id),W.default.success(`Prompt "${C.name}" deleted successfully`),T()}catch(e){console.error("Error deleting prompt:",e),W.default.fromBackend("Failed to delete prompt")}finally{w(!1),_(null)}}};return(0,t.jsxs)("div",{className:"w-full mx-auto flex-auto overflow-y-auto m-8 p-2",children:[v?(0,t.jsx)(eZ,{onClose:()=>{j(!1),y(null)},onSuccess:S,accessToken:e,initialPromptData:b}):u?(0,t.jsx)(Z,{promptId:u,onClose:()=>h(null),accessToken:e,isAdmin:k,onDelete:T,onEdit:e=>{y(e),j(!0)}}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsxs)("div",{className:"flex justify-between items-center mb-4",children:[(0,t.jsx)("div",{className:"flex gap-2",children:k&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(r.Button,{onClick:()=>{u&&h(null),y(null),j(!0)},disabled:!e,children:"+ Add New Prompt"}),(0,t.jsx)(r.Button,{onClick:()=>{u&&h(null),f(!0)},disabled:!e,variant:"secondary",children:"Upload .prompt File"})]})}),(0,t.jsx)(a.Select,{placeholder:"All Environments",allowClear:!0,value:p,onChange:e=>x(e),style:{width:180},options:[{label:"Development",value:"development"},{label:"Staging",value:"staging"},{label:"Production",value:"production"}]})]}),(0,t.jsx)($,{promptsList:i,isLoading:d,onPromptClick:e=>{h(e)},onDeleteClick:(e,t)=>{_({id:e,name:t})},accessToken:e,isAdmin:k})]}),(0,t.jsx)(ea,{visible:g,onClose:()=>{f(!1)},accessToken:e,onSuccess:S}),C&&(0,t.jsxs)(l.Modal,{title:"Delete Prompt",open:null!==C,onOk:P,onCancel:()=>{_(null)},confirmLoading:N,okText:"Delete",okButtonProps:{danger:!0},children:[(0,t.jsxs)("p",{children:["Are you sure you want to delete prompt: ",C.name," ?"]}),(0,t.jsx)("p",{children:"This action cannot be undone."})]})]})};var e1=e.i(135214);e.s(["default",0,function(){let{accessToken:e,userRole:s}=(0,e1.default)();return(0,t.jsx)(e0,{accessToken:e,userRole:s})}],66899)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/13s0v9siktndj.js b/litellm/proxy/_experimental/out/_next/static/chunks/13s0v9siktndj.js new file mode 100644 index 00000000000..38cf9a0f07f --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/13s0v9siktndj.js @@ -0,0 +1 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,510674,e=>{"use strict";var t=e.i(266027),s=e.i(243652),a=e.i(602869),l=e.i(431703),r=e.i(135214),i=e.i(708347);let n=(0,s.createQueryKeys)("projects"),o=[...i.all_admin_roles,...i.internalUserRoles],d=async e=>{let t=(0,a.getProxyBaseUrl)(),s=`${t}/project/list`,r=await fetch(s,{method:"GET",headers:{[(0,a.getGlobalLitellmHeaderName)()]:`Bearer ${e}`,"Content-Type":"application/json"}});if(!r.ok){let e=await r.json(),t=(0,l.deriveErrorMessage)(e);throw(0,a.handleError)(t),Error(t)}return r.json()};e.s(["projectKeys",0,n,"useProjects",0,()=>{let{accessToken:e,userRole:s}=(0,r.default)();return(0,t.useQuery)({queryKey:n.list({}),queryFn:async()=>d(e),enabled:!!e&&o.includes(s)})}])},207082,e=>{"use strict";var t=e.i(619273),s=e.i(266027),a=e.i(243652),l=e.i(602869),r=e.i(431703),i=e.i(135214);let n=(0,a.createQueryKeys)("keys"),o=async(e,t,s,a={})=>{try{let i=(0,l.getProxyBaseUrl)(),n=new URLSearchParams(Object.entries({team_id:a.teamID,project_id:a.projectID,agent_id:a.agentID,organization_id:a.organizationID,key_alias:a.selectedKeyAlias,key_hash:a.keyHash,user_id:a.userID,page:t,size:s,sort_by:a.sortBy,sort_order:a.sortOrder,expand:a.expand,status:a.status,return_full_object:"true",include_team_keys:"true",include_created_by_keys:"true",substring_matching:"true"}).filter(([,e])=>null!=e).map(([e,t])=>[e,String(t)])),o=`${i?`${i}/key/list`:"/key/list"}?${n}`,d=await fetch(o,{method:"GET",headers:{[(0,l.getGlobalLitellmHeaderName)()]:`Bearer ${e}`,"Content-Type":"application/json"}});if(!d.ok){let e=await d.json(),t=(0,r.deriveErrorMessage)(e);throw(0,l.handleError)(t),Error(t)}let c=await d.json();return console.log("/key/list API Response:",c),c}catch(e){throw console.error("Failed to list keys:",e),e}},d=(0,a.createQueryKeys)("deletedKeys");e.s(["keyKeys",0,n,"useDeletedKeys",0,(e,a,l={})=>{let{accessToken:r}=(0,i.default)();return(0,s.useQuery)({queryKey:d.list({page:e,limit:a,...l}),queryFn:async()=>await o(r,e,a,{...l,status:"deleted"}),enabled:!!r,staleTime:3e4,placeholderData:t.keepPreviousData})},"useKeys",0,(e,a,l={})=>{let{accessToken:r}=(0,i.default)();return(0,s.useQuery)({queryKey:n.list({page:e,limit:a,...l}),queryFn:async()=>await o(r,e,a,l),enabled:!!r,staleTime:3e4,placeholderData:t.keepPreviousData})}])},109034,e=>{"use strict";var t=e.i(266027),s=e.i(243652),a=e.i(602869),l=e.i(135214);let r=(0,s.createQueryKeys)("tags");e.s(["useTags",0,()=>{let{accessToken:e,userId:s,userRole:i}=(0,l.default)();return(0,t.useQuery)({queryKey:r.list({}),queryFn:async()=>await (0,a.tagListCall)(e),enabled:!!(e&&s&&i)})}])},552130,e=>{"use strict";var t=e.i(843476),s=e.i(271645),a=e.i(199133),l=e.i(602869);e.s(["default",0,({onChange:e,value:r,className:i,accessToken:n,placeholder:o="Select agents",disabled:d=!1})=>{let[c,u]=(0,s.useState)([]),[m,p]=(0,s.useState)([]),[g,h]=(0,s.useState)(!1);(0,s.useEffect)(()=>{(async()=>{if(n){h(!0);try{let e=await (0,l.getAgentsList)(n),t=e?.agents||[];u(t);let s=new Set;t.forEach(e=>{let t=e.agent_access_groups;t&&Array.isArray(t)&&t.forEach(e=>s.add(e))}),p(Array.from(s))}catch(e){console.error("Error fetching agents:",e)}finally{h(!1)}}})()},[n]);let x=[...m.map(e=>({label:e,value:`group:${e}`,isAccessGroup:!0,searchText:`${e} Access Group`})),...c.map(e=>({label:`${e.agent_name||e.agent_id}`,value:e.agent_id,isAccessGroup:!1,searchText:`${e.agent_name||e.agent_id} ${e.agent_id} Agent`}))],y=[...r?.agents||[],...(r?.accessGroups||[]).map(e=>`group:${e}`)];return(0,t.jsx)("div",{children:(0,t.jsx)(a.Select,{mode:"multiple",placeholder:o,onChange:t=>{e({agents:t.filter(e=>!e.startsWith("group:")),accessGroups:t.filter(e=>e.startsWith("group:")).map(e=>e.replace("group:",""))})},value:y,loading:g,className:i,allowClear:!0,showSearch:!0,style:{width:"100%"},disabled:d,filterOption:(e,t)=>(x.find(e=>e.value===t?.value)?.searchText||"").toLowerCase().includes(e.toLowerCase()),children:x.map(e=>(0,t.jsx)(a.Select.Option,{value:e.value,label:e.label,children:(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[(0,t.jsx)("span",{style:{display:"inline-block",width:8,height:8,borderRadius:"50%",background:e.isAccessGroup?"#52c41a":"#722ed1",flexShrink:0}}),(0,t.jsx)("span",{style:{flex:1},children:e.label}),(0,t.jsx)("span",{style:{color:e.isAccessGroup?"#52c41a":"#722ed1",fontSize:"12px",fontWeight:500,opacity:.8},children:e.isAccessGroup?"Access Group":"Agent"})]})},e.value))})})}])},557662,e=>{"use strict";let t="/ui/assets/logos/",s=[{id:"arize",displayName:"Arize",logo:`${t}arize.png`,supports_key_team_logging:!0,dynamic_params:{arize_api_key:"password",arize_space_id:"password"},description:"Arize Logging Integration"},{id:"braintrust",displayName:"Braintrust",logo:`${t}braintrust.png`,supports_key_team_logging:!1,dynamic_params:{braintrust_api_key:"password",braintrust_project_name:"text"},description:"Braintrust Logging Integration"},{id:"custom_callback_api",displayName:"Custom Callback API",logo:`${t}custom.svg`,supports_key_team_logging:!0,dynamic_params:{custom_callback_api_url:"text",custom_callback_api_headers:"text"},description:"Custom Callback API Logging Integration"},{id:"galileo",displayName:"Galileo",logo:`${t}galileo.ico`,supports_key_team_logging:!1,dynamic_params:{GALILEO_API_KEY:"password",GALILEO_PROJECT_ID:"text",GALILEO_LOG_STREAM_ID:"text",GALILEO_BASE_URL:"text",GALILEO_USERNAME:"text",GALILEO_PASSWORD:"password"},description:"Galileo AI Observability Integration"},{id:"datadog",displayName:"Datadog",logo:`${t}datadog.png`,supports_key_team_logging:!1,dynamic_params:{dd_api_key:"password",dd_site:"text"},description:"Datadog Logging Integration"},{id:"lago",displayName:"Lago",logo:`${t}lago.svg`,supports_key_team_logging:!1,dynamic_params:{lago_api_url:"text",lago_api_key:"password"},description:"Lago Billing Logging Integration"},{id:"langfuse",displayName:"Langfuse",logo:`${t}langfuse.png`,supports_key_team_logging:!0,dynamic_params:{langfuse_public_key:"text",langfuse_secret_key:"password",langfuse_host:"text"},description:"Langfuse v2 Logging Integration"},{id:"langfuse_otel",displayName:"Langfuse OTEL",logo:`${t}langfuse.png`,supports_key_team_logging:!0,dynamic_params:{langfuse_public_key:"text",langfuse_secret_key:"password",langfuse_host:"text"},description:"Langfuse v3 OTEL Logging Integration"},{id:"langsmith",displayName:"LangSmith",logo:`${t}langsmith.png`,supports_key_team_logging:!0,dynamic_params:{langsmith_api_key:"password",langsmith_project:"text",langsmith_base_url:"text",langsmith_sampling_rate:"number"},description:"Langsmith Logging Integration"},{id:"openmeter",displayName:"OpenMeter",logo:`${t}openmeter.png`,supports_key_team_logging:!1,dynamic_params:{openmeter_api_key:"password",openmeter_base_url:"text"},description:"OpenMeter Logging Integration"},{id:"otel",displayName:"Open Telemetry",logo:`${t}otel.png`,supports_key_team_logging:!1,dynamic_params:{otel_endpoint:"text",otel_headers:"text"},description:"OpenTelemetry Logging Integration"},{id:"s3",displayName:"S3",logo:`${t}aws.svg`,supports_key_team_logging:!1,dynamic_params:{s3_bucket_name:"text",aws_access_key_id:"password",aws_secret_access_key:"password",aws_region:"text"},description:"S3 Bucket (AWS) Logging Integration"},{id:"SQS",displayName:"SQS",logo:`${t}aws.svg`,supports_key_team_logging:!1,dynamic_params:{sqs_queue_url:"text",aws_access_key_id:"password",aws_secret_access_key:"password",aws_region:"text"},description:"SQS Queue (AWS) Logging Integration"}],a=s.reduce((e,t)=>(e[t.displayName]=t,e),{}),l=s.reduce((e,t)=>(e[t.displayName]=t.id,e),{}),r=s.reduce((e,t)=>(e[t.id]=t.displayName,e),{});e.s(["callbackInfo",0,a,"callback_map",0,l,"mapDisplayToInternalNames",0,e=>e.map(e=>l[e]||e),"mapInternalToDisplayNames",0,e=>e.map(e=>r[e]||e),"reverse_callback_map",0,r])},9314,e=>{"use strict";var t=e.i(843476),s=e.i(199133),a=e.i(981339),l=e.i(645526),r=e.i(599724),i=e.i(263147);e.s(["default",0,({value:e,onChange:n,placeholder:o="Select access groups",disabled:d=!1,style:c,className:u,showLabel:m=!1,labelText:p="Access Group",allowClear:g=!0})=>{let{data:h,isLoading:x,isError:y}=(0,i.useAccessGroups)();if(x)return(0,t.jsxs)("div",{children:[m&&(0,t.jsxs)(r.Text,{className:"font-medium block mb-2 text-gray-700 flex items-center",children:[(0,t.jsx)(l.TeamOutlined,{className:"mr-2"})," ",p]}),(0,t.jsx)(a.Skeleton.Input,{active:!0,block:!0,style:{height:32,...c}})]});let _=(h??[]).map(e=>({label:(0,t.jsxs)("span",{children:[(0,t.jsx)("span",{className:"font-medium",children:e.access_group_name})," ",(0,t.jsxs)("span",{className:"text-gray-400 text-xs",children:["(",e.access_group_id,")"]})]}),value:e.access_group_id,selectedLabel:e.access_group_name,searchText:`${e.access_group_name} ${e.access_group_id}`}));return(0,t.jsxs)("div",{children:[m&&(0,t.jsxs)(r.Text,{className:"font-medium block mb-2 text-gray-700 flex items-center",children:[(0,t.jsx)(l.TeamOutlined,{className:"mr-2"})," ",p]}),(0,t.jsx)(s.Select,{mode:"multiple",value:e,placeholder:o,onChange:n,disabled:d,allowClear:g,showSearch:!0,style:{width:"100%",...c},className:`rounded-md ${u??""}`,notFoundContent:y?(0,t.jsx)("span",{className:"text-red-500",children:"Failed to load access groups"}):"No access groups found",filterOption:(e,t)=>(_.find(e=>e.value===t?.value)?.searchText??"").toLowerCase().includes(e.toLowerCase()),optionLabelProp:"selectedLabel",options:_.map(e=>({label:e.label,value:e.value,selectedLabel:e.selectedLabel}))})]})}])},392110,e=>{"use strict";var t=e.i(843476),s=e.i(271645),a=e.i(199133),l=e.i(592968),r=e.i(312361),i=e.i(790848),n=e.i(536916),o=e.i(827252),d=e.i(779241);let{Option:c}=a.Select;e.s(["default",0,({form:e,autoRotationEnabled:u,onAutoRotationChange:m,rotationInterval:p,onRotationIntervalChange:g,isCreateMode:h=!1,neverExpire:x=!1,onNeverExpireChange:y})=>{let _=p&&!["7d","30d","90d","180d","365d"].includes(p),[f,b]=(0,s.useState)(_),[j,v]=(0,s.useState)(_?p:""),[w,N]=(0,s.useState)(e?.getFieldValue?.("duration")||"");return(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsx)("span",{className:"text-sm font-medium text-gray-700",children:"Key Expiry Settings"}),(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsxs)("label",{className:"text-sm font-medium text-gray-700 flex items-center space-x-1",children:[(0,t.jsx)("span",{children:"Expire Key"}),(0,t.jsx)(l.Tooltip,{title:"Set when this key should expire. Format: 30s (seconds), 30m (minutes), 30h (hours), 30d (days). Leave empty to keep the current expiry unchanged.",children:(0,t.jsx)(o.InfoCircleOutlined,{className:"text-gray-400 cursor-help text-xs"})}),!h&&y&&(0,t.jsx)(n.Checkbox,{checked:x,onChange:t=>{let s=t.target.checked;y(s),s&&(N(""),e&&"function"==typeof e.setFieldValue?e.setFieldValue("duration",""):e&&"function"==typeof e.setFieldsValue&&e.setFieldsValue({duration:""}))},className:"ml-2 text-sm font-normal text-gray-600",children:"Never Expire"})]}),(0,t.jsx)(d.TextInput,{name:"duration",placeholder:h?"e.g., 30d or leave empty to never expire":"e.g., 30d",className:"w-full",value:w,onValueChange:t=>{N(t),e&&"function"==typeof e.setFieldValue?e.setFieldValue("duration",t):e&&"function"==typeof e.setFieldsValue&&e.setFieldsValue({duration:t})},disabled:!h&&x})]})]}),(0,t.jsx)(r.Divider,{}),(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsx)("span",{className:"text-sm font-medium text-gray-700",children:"Auto-Rotation Settings"}),(0,t.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsxs)("label",{className:"text-sm font-medium text-gray-700 flex items-center space-x-1",children:[(0,t.jsx)("span",{children:"Enable Auto-Rotation"}),(0,t.jsx)(l.Tooltip,{title:"Key will automatically regenerate at the specified interval for enhanced security.",children:(0,t.jsx)(o.InfoCircleOutlined,{className:"text-gray-400 cursor-help text-xs"})})]}),(0,t.jsx)(i.Switch,{checked:u,onChange:m,size:"default",className:u?"":"bg-gray-400"})]}),u&&(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsxs)("label",{className:"text-sm font-medium text-gray-700 flex items-center space-x-1",children:[(0,t.jsx)("span",{children:"Rotation Interval"}),(0,t.jsx)(l.Tooltip,{title:"How often the key should be automatically rotated. Choose the interval that best fits your security requirements.",children:(0,t.jsx)(o.InfoCircleOutlined,{className:"text-gray-400 cursor-help text-xs"})})]}),(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsxs)(a.Select,{value:f?"custom":p,onChange:e=>{"custom"===e?b(!0):(b(!1),v(""),g(e))},className:"w-full",placeholder:"Select interval",children:[(0,t.jsx)(c,{value:"7d",children:"7 days"}),(0,t.jsx)(c,{value:"30d",children:"30 days"}),(0,t.jsx)(c,{value:"90d",children:"90 days"}),(0,t.jsx)(c,{value:"180d",children:"180 days"}),(0,t.jsx)(c,{value:"365d",children:"365 days"}),(0,t.jsx)(c,{value:"custom",children:"Custom interval"})]}),f&&(0,t.jsxs)("div",{className:"space-y-1",children:[(0,t.jsx)(d.TextInput,{value:j,onChange:e=>{let t=e.target.value;v(t),g(t)},placeholder:"e.g., 1s, 5m, 2h, 14d"}),(0,t.jsx)("div",{className:"text-xs text-gray-500",children:"Supported formats: seconds (s), minutes (m), hours (h), days (d)"})]})]})]})]}),u&&(0,t.jsx)("div",{className:"bg-blue-50 p-3 rounded-md text-sm text-blue-700",children:"When rotation occurs, you'll receive a notification with the new key. The old key will be deactivated after a brief grace period."})]})]})}])},533882,e=>{"use strict";var t=e.i(843476),s=e.i(271645),a=e.i(250980),l=e.i(797672),r=e.i(68155),i=e.i(304967),n=e.i(629569),o=e.i(599724),d=e.i(269200),c=e.i(427612),u=e.i(64848),m=e.i(942232),p=e.i(496020),g=e.i(977572),h=e.i(992619),x=e.i(727749);e.s(["default",0,({accessToken:e,initialModelAliases:y={},onAliasUpdate:_,showExampleConfig:f=!0})=>{let[b,j]=(0,s.useState)([]),[v,w]=(0,s.useState)({aliasName:"",targetModel:""}),[N,k]=(0,s.useState)(null);(0,s.useEffect)(()=>{j(Object.entries(y).map(([e,t],s)=>({id:`${s}-${e}`,aliasName:e,targetModel:t})))},[y]);let S=()=>{if(!N)return;if(!N.aliasName||!N.targetModel)return void x.default.fromBackend("Please provide both alias name and target model");if(b.some(e=>e.id!==N.id&&e.aliasName===N.aliasName))return void x.default.fromBackend("An alias with this name already exists");let e=b.map(e=>e.id===N.id?N:e);j(e),k(null);let t={};e.forEach(e=>{t[e.aliasName]=e.targetModel}),_&&_(t),x.default.success("Alias updated successfully")},C=()=>{k(null)},T=b.reduce((e,t)=>(e[t.aliasName]=t.targetModel,e),{});return(0,t.jsxs)("div",{className:"mt-4",children:[(0,t.jsxs)("div",{className:"mb-6",children:[(0,t.jsx)(o.Text,{className:"text-sm font-medium text-gray-700 mb-2",children:"Add New Alias"}),(0,t.jsxs)("div",{className:"grid grid-cols-3 gap-4",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"block text-xs text-gray-500 mb-1",children:"Alias Name"}),(0,t.jsx)("input",{type:"text",value:v.aliasName,onChange:e=>w({...v,aliasName:e.target.value}),placeholder:"e.g., gpt-4o",className:"w-full px-3 py-2 border border-gray-300 rounded-md text-sm"})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"block text-xs text-gray-500 mb-1",children:"Target Model"}),(0,t.jsx)(h.default,{accessToken:e,value:v.targetModel,placeholder:"Select target model",onChange:e=>w({...v,targetModel:e}),showLabel:!1})]}),(0,t.jsx)("div",{className:"flex items-end",children:(0,t.jsxs)("button",{onClick:()=>{if(!v.aliasName||!v.targetModel)return void x.default.fromBackend("Please provide both alias name and target model");if(b.some(e=>e.aliasName===v.aliasName))return void x.default.fromBackend("An alias with this name already exists");let e=[...b,{id:`${Date.now()}-${v.aliasName}`,aliasName:v.aliasName,targetModel:v.targetModel}];j(e),w({aliasName:"",targetModel:""});let t={};e.forEach(e=>{t[e.aliasName]=e.targetModel}),_&&_(t),x.default.success("Alias added successfully")},disabled:!v.aliasName||!v.targetModel,className:`flex items-center px-4 py-2 rounded-md text-sm ${!v.aliasName||!v.targetModel?"bg-gray-300 text-gray-500 cursor-not-allowed":"bg-green-600 text-white hover:bg-green-700"}`,children:[(0,t.jsx)(a.PlusCircleIcon,{className:"w-4 h-4 mr-1"}),"Add Alias"]})})]})]}),(0,t.jsx)(o.Text,{className:"text-sm font-medium text-gray-700 mb-2",children:"Manage Existing Aliases"}),(0,t.jsx)("div",{className:"rounded-lg custom-border relative mb-6",children:(0,t.jsx)("div",{className:"overflow-x-auto",children:(0,t.jsxs)(d.Table,{className:"[&_td]:py-0.5 [&_th]:py-1",children:[(0,t.jsx)(c.TableHead,{children:(0,t.jsxs)(p.TableRow,{children:[(0,t.jsx)(u.TableHeaderCell,{className:"py-1 h-8",children:"Alias Name"}),(0,t.jsx)(u.TableHeaderCell,{className:"py-1 h-8",children:"Target Model"}),(0,t.jsx)(u.TableHeaderCell,{className:"py-1 h-8",children:"Actions"})]})}),(0,t.jsxs)(m.TableBody,{children:[b.map(s=>(0,t.jsx)(p.TableRow,{className:"h-8",children:N&&N.id===s.id?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(g.TableCell,{className:"py-0.5",children:(0,t.jsx)("input",{type:"text",value:N.aliasName,onChange:e=>k({...N,aliasName:e.target.value}),className:"w-full px-2 py-1 border border-gray-300 rounded-md text-sm"})}),(0,t.jsx)(g.TableCell,{className:"py-0.5",children:(0,t.jsx)(h.default,{accessToken:e,value:N.targetModel,onChange:e=>k({...N,targetModel:e}),showLabel:!1,style:{height:"32px"}})}),(0,t.jsx)(g.TableCell,{className:"py-0.5 whitespace-nowrap",children:(0,t.jsxs)("div",{className:"flex space-x-2",children:[(0,t.jsx)("button",{onClick:S,className:"text-xs bg-blue-50 text-blue-600 px-2 py-1 rounded hover:bg-blue-100",children:"Save"}),(0,t.jsx)("button",{onClick:C,className:"text-xs bg-gray-50 text-gray-600 px-2 py-1 rounded hover:bg-gray-100",children:"Cancel"})]})})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(g.TableCell,{className:"py-0.5 text-sm text-gray-900",children:s.aliasName}),(0,t.jsx)(g.TableCell,{className:"py-0.5 text-sm text-gray-500",children:s.targetModel}),(0,t.jsx)(g.TableCell,{className:"py-0.5 whitespace-nowrap",children:(0,t.jsxs)("div",{className:"flex space-x-2",children:[(0,t.jsx)("button",{onClick:()=>{k({...s})},className:"text-xs bg-blue-50 text-blue-600 px-2 py-1 rounded hover:bg-blue-100",children:(0,t.jsx)(l.PencilIcon,{className:"w-3 h-3"})}),(0,t.jsx)("button",{onClick:()=>{var e;let t,a;return e=s.id,j(t=b.filter(t=>t.id!==e)),a={},void(t.forEach(e=>{a[e.aliasName]=e.targetModel}),_&&_(a),x.default.success("Alias deleted successfully"))},className:"text-xs bg-red-50 text-red-600 px-2 py-1 rounded hover:bg-red-100",children:(0,t.jsx)(r.TrashIcon,{className:"w-3 h-3"})})]})})]})},s.id)),0===b.length&&(0,t.jsx)(p.TableRow,{children:(0,t.jsx)(g.TableCell,{colSpan:3,className:"py-0.5 text-sm text-gray-500 text-center",children:"No aliases added yet. Add a new alias above."})})]})]})})}),f&&(0,t.jsxs)(i.Card,{children:[(0,t.jsx)(n.Title,{className:"mb-4",children:"Configuration Example"}),(0,t.jsx)(o.Text,{className:"text-gray-600 mb-4",children:"Here's how your current aliases would look in the config:"}),(0,t.jsx)("div",{className:"bg-gray-100 rounded-lg p-4 font-mono text-sm",children:(0,t.jsxs)("div",{className:"text-gray-700",children:["model_aliases:",0===Object.keys(T).length?(0,t.jsxs)("span",{className:"text-gray-500",children:[(0,t.jsx)("br",{}),"  # No aliases configured yet"]}):Object.entries(T).map(([e,s])=>(0,t.jsxs)("span",{children:[(0,t.jsx)("br",{}),'  "',e,'": "',s,'"']},e))]})})]})]})}])},844565,e=>{"use strict";var t=e.i(843476),s=e.i(271645),a=e.i(199133),l=e.i(602869);e.s(["default",0,({onChange:e,value:r,className:i,accessToken:n,placeholder:o="Select pass through routes",disabled:d=!1,teamId:c})=>{let[u,m]=(0,s.useState)([]),[p,g]=(0,s.useState)(!1);return(0,s.useEffect)(()=>{(async()=>{if(n){g(!0);try{let e=await (0,l.getPassThroughEndpointsCall)(n,c);if(e.endpoints){let t=e.endpoints.flatMap(e=>{let t=e.path,s=e.methods;return s&&s.length>0?s.map(e=>({label:`${e} ${t}`,value:t})):[{label:t,value:t}]});m(t)}}catch(e){console.error("Error fetching pass through routes:",e)}finally{g(!1)}}})()},[n,c]),(0,t.jsx)(a.Select,{mode:"tags",placeholder:o,onChange:e,value:r,loading:p,className:i,allowClear:!0,options:u,optionFilterProp:"label",showSearch:!0,style:{width:"100%"},disabled:d})}])},810757,477386,e=>{"use strict";var t=e.i(271645);let s=t.forwardRef(function(e,s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z"}),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"}))});e.s(["CogIcon",0,s],810757);let a=t.forwardRef(function(e,s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728A9 9 0 015.636 5.636m12.728 12.728L5.636 5.636"}))});e.s(["BanIcon",0,a],477386)},266484,e=>{"use strict";var t=e.i(843476),s=e.i(199133),a=e.i(592968),l=e.i(312361),r=e.i(827252),i=e.i(994388),n=e.i(304967),o=e.i(779241),d=e.i(988297),c=e.i(68155),u=e.i(810757),m=e.i(477386),p=e.i(557662),g=e.i(555987),h=e.i(435451);let{Option:x}=s.Select;e.s(["default",0,({value:e=[],onChange:y,disabledCallbacks:_=[],onDisabledCallbacksChange:f})=>{let b=Object.entries(p.callbackInfo).filter(([e,t])=>t.supports_key_team_logging).map(([e,t])=>e),j=Object.keys(p.callbackInfo),v=e=>{y?.(e)},w=(t,s,a)=>{let l=[...e];if("callback_name"===s){let e=p.callback_map[a]||a;l[t]={...l[t],[s]:e,callback_vars:{}}}else l[t]={...l[t],[s]:a};v(l)},N=(t,s,a)=>{let l=[...e];l[t]={...l[t],callback_vars:{...l[t].callback_vars,[s]:a}},v(l)};return(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,t.jsx)(m.BanIcon,{className:"w-5 h-5 text-red-500"}),(0,t.jsx)("span",{className:"text-base font-semibold text-gray-800",children:"Disabled Callbacks"}),(0,t.jsx)(a.Tooltip,{title:"Select callbacks to disable for this key. Disabled callbacks will not receive any logging data.",children:(0,t.jsx)(r.InfoCircleOutlined,{className:"text-gray-400 cursor-help"})})]}),(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)("label",{className:"text-sm font-medium text-gray-700",children:"Disabled Callbacks"}),(0,t.jsx)(s.Select,{mode:"multiple",placeholder:"Select callbacks to disable",value:_,onChange:e=>{let t=(0,p.mapDisplayToInternalNames)(e);f?.(t)},style:{width:"100%"},optionLabelProp:"label",children:j.map(e=>{let s=(0,g.resolveLogoSrc)(p.callbackInfo[e]?.logo),l=p.callbackInfo[e]?.description;return(0,t.jsx)(x,{value:e,label:e,children:(0,t.jsx)(a.Tooltip,{title:l,placement:"right",children:(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[s&&(0,t.jsx)("img",{src:s,alt:e,className:"w-4 h-4 object-contain",onError:t=>{let s=t.target,a=s.parentElement;if(a){let t=document.createElement("div");t.className="w-4 h-4 rounded-full bg-gray-200 flex items-center justify-center text-xs",t.textContent=e.charAt(0),a.replaceChild(t,s)}}}),(0,t.jsx)("span",{children:e})]})})},e)})}),(0,t.jsx)("div",{className:"text-xs text-gray-500",children:"Select callbacks that should be disabled for this key. These callbacks will not receive any logging data."})]})]}),(0,t.jsx)(l.Divider,{}),(0,t.jsxs)("div",{className:"flex justify-between items-center",children:[(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,t.jsx)(u.CogIcon,{className:"w-5 h-5 text-blue-500"}),(0,t.jsx)("span",{className:"text-base font-semibold text-gray-800",children:"Logging Integrations"}),(0,t.jsx)(a.Tooltip,{title:"Configure callback logging integrations for this team.",children:(0,t.jsx)(r.InfoCircleOutlined,{className:"text-gray-400 cursor-help"})})]}),(0,t.jsx)(i.Button,{variant:"secondary",onClick:()=>{v([...e,{callback_name:"",callback_type:"success",callback_vars:{}}])},icon:d.PlusIcon,size:"sm",className:"hover:border-blue-400 hover:text-blue-500",type:"button",children:"Add Integration"})]}),(0,t.jsx)("div",{className:"space-y-4",children:e.map((l,d)=>{let u=l.callback_name?Object.entries(p.callback_map).find(([e,t])=>t===l.callback_name)?.[0]:void 0,m=u?(0,g.resolveLogoSrc)(p.callbackInfo[u]?.logo):null;return(0,t.jsxs)(n.Card,{className:"border border-gray-200 shadow-sm hover:shadow-md transition-shadow duration-200",decoration:"top",decorationColor:"blue",children:[(0,t.jsxs)("div",{className:"flex justify-between items-start mb-4",children:[(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[m&&(0,t.jsx)("img",{src:m,alt:u,className:"w-5 h-5 object-contain"}),(0,t.jsxs)("span",{className:"text-sm font-medium",children:[u||"New Integration"," Configuration"]})]}),(0,t.jsx)(i.Button,{variant:"light",onClick:()=>{v(e.filter((e,t)=>t!==d))},icon:c.TrashIcon,size:"xs",color:"red",className:"hover:bg-red-50",type:"button",children:"Remove"})]}),(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)("label",{className:"text-sm font-medium text-gray-700",children:"Integration Type"}),(0,t.jsx)(s.Select,{value:u,placeholder:"Select integration",onChange:e=>w(d,"callback_name",e),className:"w-full",optionLabelProp:"label",children:b.map(e=>{let s=(0,g.resolveLogoSrc)(p.callbackInfo[e]?.logo),l=p.callbackInfo[e]?.description;return(0,t.jsx)(x,{value:e,label:e,children:(0,t.jsx)(a.Tooltip,{title:l,placement:"right",children:(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[s&&(0,t.jsx)("img",{src:s,alt:e,className:"w-4 h-4 object-contain",onError:t=>{let s=t.target,a=s.parentElement;if(a){let t=document.createElement("div");t.className="w-4 h-4 rounded-full bg-gray-200 flex items-center justify-center text-xs",t.textContent=e.charAt(0),a.replaceChild(t,s)}}}),(0,t.jsx)("span",{children:e})]})})},e)})})]}),(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)("label",{className:"text-sm font-medium text-gray-700",children:"Event Type"}),(0,t.jsxs)(s.Select,{value:l.callback_type,onChange:e=>w(d,"callback_type",e),className:"w-full",children:[(0,t.jsx)(x,{value:"success",children:(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,t.jsx)("div",{className:"w-2 h-2 bg-green-500 rounded-full"}),(0,t.jsx)("span",{children:"Success Only"})]})}),(0,t.jsx)(x,{value:"failure",children:(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,t.jsx)("div",{className:"w-2 h-2 bg-red-500 rounded-full"}),(0,t.jsx)("span",{children:"Failure Only"})]})}),(0,t.jsx)(x,{value:"success_and_failure",children:(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,t.jsx)("div",{className:"w-2 h-2 bg-blue-500 rounded-full"}),(0,t.jsx)("span",{children:"Success & Failure"})]})})]})]})]}),((e,s)=>{if(!e.callback_name)return null;let l=Object.entries(p.callback_map).find(([t,s])=>s===e.callback_name)?.[0];if(!l)return null;let i=p.callbackInfo[l]?.dynamic_params||{};return 0===Object.keys(i).length?null:(0,t.jsxs)("div",{className:"mt-6 pt-4 border-t border-gray-100",children:[(0,t.jsxs)("div",{className:"flex items-center space-x-2 mb-4",children:[(0,t.jsx)("div",{className:"w-3 h-3 bg-blue-100 rounded-full flex items-center justify-center",children:(0,t.jsx)("div",{className:"w-1.5 h-1.5 bg-blue-500 rounded-full"})}),(0,t.jsx)("span",{className:"text-sm font-medium text-gray-700",children:"Integration Parameters"})]}),(0,t.jsx)("div",{className:"grid grid-cols-1 gap-4",children:Object.entries(i).map(([l,i])=>(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsxs)("label",{className:"text-sm font-medium text-gray-700 capitalize flex items-center space-x-1",children:[(0,t.jsx)("span",{children:l.replace(/_/g," ")}),(0,t.jsx)(a.Tooltip,{title:`Environment variable reference recommended: os.environ/${l.toUpperCase()}`,children:(0,t.jsx)(r.InfoCircleOutlined,{className:"text-gray-400 cursor-help text-xs"})}),"password"===i&&(0,t.jsx)("span",{className:"inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-yellow-100 text-yellow-800",children:"Sensitive"}),"number"===i&&(0,t.jsx)("span",{className:"inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-yellow-100 text-yellow-800",children:"Number"})]}),"number"===i&&(0,t.jsx)("span",{className:"text-xs text-gray-500",children:"Value must be between 0 and 1"}),"number"===i?(0,t.jsx)(h.default,{step:.01,width:400,placeholder:`os.environ/${l.toUpperCase()}`,value:e.callback_vars[l]||"",onChange:e=>N(s,l,e.target.value)}):(0,t.jsx)(o.TextInput,{type:"password"===i?"password":"text",placeholder:`os.environ/${l.toUpperCase()}`,value:e.callback_vars[l]||"",onChange:e=>N(s,l,e.target.value)})]},l))})]})})(l,d)]})]},d)})}),0===e.length&&(0,t.jsxs)("div",{className:"text-center py-12 text-gray-500 border-2 border-dashed border-gray-200 rounded-lg bg-gray-50/50",children:[(0,t.jsx)(u.CogIcon,{className:"w-12 h-12 text-gray-300 mb-3 mx-auto"}),(0,t.jsx)("div",{className:"text-base font-medium mb-1",children:"No logging integrations configured"}),(0,t.jsx)("div",{className:"text-sm text-gray-400",children:'Click "Add Integration" to configure logging for this team'})]})]})}])},651904,e=>{"use strict";var t=e.i(843476),s=e.i(599724),a=e.i(266484);e.s(["default",0,function({value:e,onChange:l,premiumUser:r=!1,disabledCallbacks:i=[],onDisabledCallbacksChange:n}){return r?(0,t.jsx)(a.default,{value:e,onChange:l,disabledCallbacks:i,onDisabledCallbacksChange:n}):(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"flex flex-wrap gap-2 mb-3",children:[(0,t.jsx)("div",{className:"inline-flex items-center px-3 py-1.5 rounded-lg bg-green-50 border border-green-200 text-green-800 text-sm font-medium opacity-50",children:"✨ langfuse-logging"}),(0,t.jsx)("div",{className:"inline-flex items-center px-3 py-1.5 rounded-lg bg-green-50 border border-green-200 text-green-800 text-sm font-medium opacity-50",children:"✨ datadog-logging"})]}),(0,t.jsx)("div",{className:"p-3 bg-yellow-50 border border-yellow-200 rounded-lg",children:(0,t.jsxs)(s.Text,{className:"text-sm text-yellow-800",children:["Setting Key/Team logging settings is a LiteLLM Enterprise feature. Global Logging Settings are available for all free users. Get a trial key"," ",(0,t.jsx)("a",{href:"https://www.litellm.ai/#pricing",target:"_blank",rel:"noopener noreferrer",className:"underline",children:"here"}),"."]})})]})}])},939510,e=>{"use strict";var t=e.i(843476),s=e.i(808613),a=e.i(199133),l=e.i(592968),r=e.i(827252);let{Option:i}=a.Select;e.s(["default",0,({type:e,name:n,showDetailedDescriptions:o=!0,className:d="",initialValue:c=null,form:u,onChange:m})=>{let p=e.toUpperCase(),g=e.toLowerCase(),h=`Select 'guaranteed_throughput' to prevent overallocating ${p} limit when the key belongs to a Team with specific ${p} limits.`;return(0,t.jsx)(s.Form.Item,{label:(0,t.jsxs)("span",{children:[p," Rate Limit Type"," ",(0,t.jsx)(l.Tooltip,{title:h,children:(0,t.jsx)(r.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:n,initialValue:c,className:d,children:(0,t.jsx)(a.Select,{defaultValue:o?"default":void 0,placeholder:"Select rate limit type",style:{width:"100%"},optionLabelProp:o?"label":void 0,onChange:e=>{u&&u.setFieldValue(n,e),m&&m(e)},children:o?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i,{value:"best_effort_throughput",label:"Default",children:(0,t.jsxs)("div",{style:{padding:"4px 0"},children:[(0,t.jsx)("div",{style:{fontWeight:500},children:"Default"}),(0,t.jsxs)("div",{style:{fontSize:"11px",color:"#6b7280",marginTop:"2px"},children:["Best effort throughput - no error if we're overallocating ",g," (Team/Key Limits checked at runtime)."]})]})}),(0,t.jsx)(i,{value:"guaranteed_throughput",label:"Guaranteed throughput",children:(0,t.jsxs)("div",{style:{padding:"4px 0"},children:[(0,t.jsx)("div",{style:{fontWeight:500},children:"Guaranteed throughput"}),(0,t.jsxs)("div",{style:{fontSize:"11px",color:"#6b7280",marginTop:"2px"},children:["Guaranteed throughput - raise an error if we're overallocating ",g," (also checks model-specific limits)"]})]})}),(0,t.jsx)(i,{value:"dynamic",label:"Dynamic",children:(0,t.jsxs)("div",{style:{padding:"4px 0"},children:[(0,t.jsx)("div",{style:{fontWeight:500},children:"Dynamic"}),(0,t.jsxs)("div",{style:{fontSize:"11px",color:"#6b7280",marginTop:"2px"},children:["If the key has a set ",p," (e.g. 2 ",p,") and there are no 429 errors, it can dynamically exceed the limit when the model being called is not erroring."]})]})})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i,{value:"best_effort_throughput",children:"Best effort throughput"}),(0,t.jsx)(i,{value:"guaranteed_throughput",children:"Guaranteed throughput"}),(0,t.jsx)(i,{value:"dynamic",children:"Dynamic"})]})})})}])},460285,e=>{"use strict";var t=e.i(843476),s=e.i(271645),a=e.i(404206),l=e.i(723731),r=e.i(653824),i=e.i(881073),n=e.i(197647),o=e.i(602869),d=e.i(158392),c=e.i(419470),u=e.i(695411);let m=(0,s.forwardRef)(({accessToken:e,value:m,onChange:p,modelData:g},h)=>{let[x,y]=(0,s.useState)({routerSettings:{},selectedStrategy:null,enableTagFiltering:!1}),[_,f]=(0,s.useState)([]),[b,j]=(0,s.useState)([]),[v,w]=(0,s.useState)([]),[N,k]=(0,s.useState)([]),[S,C]=(0,s.useState)({}),[T,I]=(0,s.useState)({}),A=(0,s.useRef)(!1),L=(0,s.useRef)(null);(0,s.useEffect)(()=>{let e=m?.router_settings?JSON.stringify({routing_strategy:m.router_settings.routing_strategy,fallbacks:m.router_settings.fallbacks,enable_tag_filtering:m.router_settings.enable_tag_filtering}):null;if(A.current&&e===L.current){A.current=!1;return}if(A.current&&e!==L.current&&(A.current=!1),e!==L.current)if(L.current=e,m?.router_settings){let e=m.router_settings,{fallbacks:t,...s}=e;y({routerSettings:s,selectedStrategy:e.routing_strategy||null,enableTagFiltering:e.enable_tag_filtering??!1});let a=e.fallbacks||[];f(a),j(a&&0!==a.length?a.map((e,t)=>{let[s,a]=Object.entries(e)[0];return{id:(t+1).toString(),primaryModel:s||null,fallbackModels:a||[]}}):[{id:"1",primaryModel:null,fallbackModels:[]}])}else y({routerSettings:{},selectedStrategy:null,enableTagFiltering:!1}),f([]),j([{id:"1",primaryModel:null,fallbackModels:[]}])},[m]),(0,s.useEffect)(()=>{e&&(0,o.getRouterSettingsCall)(e).then(e=>{if(e.fields){let t={};e.fields.forEach(e=>{t[e.field_name]={ui_field_name:e.ui_field_name,field_description:e.field_description,options:e.options,link:e.link}}),C(t);let s=e.fields.find(e=>"routing_strategy"===e.field_name);s?.options&&k(s.options),e.routing_strategy_descriptions&&I(e.routing_strategy_descriptions)}})},[e]),(0,s.useEffect)(()=>{e&&(async()=>{try{let t=await (0,u.fetchAvailableModels)(e);w(t)}catch(e){console.error("Error fetching model info for fallbacks:",e)}})()},[e]);let F=()=>{let e=new Set(["allowed_fails","cooldown_time","num_retries","timeout","retry_after"]),t=new Set(["model_group_alias","retry_policy"]),s=Object.fromEntries(Object.entries({...x.routerSettings,enable_tag_filtering:x.enableTagFiltering,routing_strategy:x.selectedStrategy,fallbacks:_.length>0?_:null}).map(([s,a])=>{if("routing_strategy_args"!==s&&"routing_strategy"!==s&&"enable_tag_filtering"!==s&&"fallbacks"!==s){let l=document.querySelector(`input[name="${s}"]`);if(l){if(void 0!==l.value&&""!==l.value){let r=((s,a,l)=>{if(null==a)return l;let r=String(a).trim();if(""===r||"null"===r.toLowerCase())return null;if(e.has(s)){let e=Number(r);return Number.isNaN(e)?l:e}if(t.has(s)){if(""===r)return null;try{return JSON.parse(r)}catch{return l}}return"true"===r.toLowerCase()||"false"!==r.toLowerCase()&&r})(s,l.value,a);return[s,r]}return[s,null]}}else if("routing_strategy"===s)return[s,x.selectedStrategy];else if("enable_tag_filtering"===s)return[s,x.enableTagFiltering];else if("fallbacks"===s)return[s,_.length>0?_:null];else if("routing_strategy_args"===s&&"latency-based-routing"===x.selectedStrategy){let e=document.querySelector('input[name="lowest_latency_buffer"]'),t=document.querySelector('input[name="ttl"]'),s={};return e?.value&&(s.lowest_latency_buffer=Number(e.value)),t?.value&&(s.ttl=Number(t.value)),["routing_strategy_args",Object.keys(s).length>0?s:null]}return[s,a]}).filter(e=>null!=e)),a=(e,t=!1)=>null==e||"object"==typeof e&&!Array.isArray(e)&&0===Object.keys(e).length||t&&("number"!=typeof e||Number.isNaN(e))?null:e;return{routing_strategy:a(s.routing_strategy),allowed_fails:a(s.allowed_fails,!0),cooldown_time:a(s.cooldown_time,!0),num_retries:a(s.num_retries,!0),timeout:a(s.timeout,!0),retry_after:a(s.retry_after,!0),fallbacks:_.length>0?_:null,context_window_fallbacks:a(s.context_window_fallbacks),retry_policy:a(s.retry_policy),model_group_alias:a(s.model_group_alias),enable_tag_filtering:x.enableTagFiltering,routing_strategy_args:a(s.routing_strategy_args)}};(0,s.useEffect)(()=>{if(!p)return;let e=setTimeout(()=>{A.current=!0,p({router_settings:F()})},100);return()=>clearTimeout(e)},[x,_]);let O=Array.from(new Set(v.map(e=>e.model_group))).sort();return((0,s.useImperativeHandle)(h,()=>({getValue:()=>({router_settings:F()})})),e)?(0,t.jsx)("div",{className:"w-full",children:(0,t.jsxs)(r.TabGroup,{className:"w-full",children:[(0,t.jsxs)(i.TabList,{variant:"line",defaultValue:"1",className:"px-8 pt-4",children:[(0,t.jsx)(n.Tab,{value:"1",children:"Loadbalancing"}),(0,t.jsx)(n.Tab,{value:"2",children:"Fallbacks"})]}),(0,t.jsxs)(l.TabPanels,{className:"px-8 py-6",children:[(0,t.jsx)(a.TabPanel,{children:(0,t.jsx)(d.default,{value:x,onChange:y,routerFieldsMetadata:S,availableRoutingStrategies:N,routingStrategyDescriptions:T})}),(0,t.jsx)(a.TabPanel,{children:(0,t.jsx)(c.FallbackSelectionForm,{groups:b,onGroupsChange:e=>{j(e),f(e.filter(e=>e.primaryModel&&e.fallbackModels.length>0).map(e=>({[e.primaryModel]:e.fallbackModels})))},availableModels:O,maxGroups:5})})]})]})}):null});m.displayName="RouterSettingsAccordion",e.s(["default",0,m])},363256,e=>{"use strict";var t=e.i(843476),s=e.i(199133);let{Text:a}=e.i(898586).Typography;e.s(["default",0,({organizations:e,value:l,onChange:r,disabled:i,loading:n,style:o})=>(0,t.jsx)(s.Select,{showSearch:!0,placeholder:"All Organizations",value:l,onChange:r,disabled:i,loading:n,allowClear:!0,style:{minWidth:280,...o},filterOption:(t,s)=>{if(!s)return!1;let a=e?.find(e=>e.organization_id===s.key);if(!a)return!1;let l=t.toLowerCase().trim(),r=(a.organization_alias||"").toLowerCase(),i=(a.organization_id||"").toLowerCase();return r.includes(l)||i.includes(l)},children:e?.map(e=>(0,t.jsxs)(s.Select.Option,{value:e.organization_id,children:[(0,t.jsx)("span",{className:"font-medium",children:e.organization_alias})," ",(0,t.jsxs)(a,{type:"secondary",children:["(",e.organization_id,")"]})]},e.organization_id))})])},575260,e=>{"use strict";var t=e.i(843476),s=e.i(199133),a=e.i(482725),l=e.i(56456);e.s(["default",0,({projects:e,value:r,onChange:i,disabled:n,loading:o,teamId:d})=>{let c=d?e?.filter(e=>e.team_id===d):e;return(0,t.jsx)(s.Select,{showSearch:!0,placeholder:"Search or select a project",value:r,onChange:i,disabled:n,loading:o,allowClear:!0,notFoundContent:o?(0,t.jsx)(a.Spin,{indicator:(0,t.jsx)(l.LoadingOutlined,{spin:!0}),size:"small"}):void 0,filterOption:(e,t)=>{if(!t)return!1;let s=c?.find(e=>e.project_id===t.key);if(!s)return!1;let a=e.toLowerCase().trim(),l=(s.project_alias||"").toLowerCase(),r=(s.project_id||"").toLowerCase();return l.includes(a)||r.includes(a)},optionFilterProp:"children",children:!o&&c?.map(e=>(0,t.jsxs)(s.Select.Option,{value:e.project_id,children:[(0,t.jsx)("span",{className:"font-medium",children:e.project_alias||e.project_id})," ",(0,t.jsxs)("span",{className:"text-gray-500",children:["(",e.project_id,")"]})]},e.project_id))})}])},319312,e=>{"use strict";var t=e.i(843476),s=e.i(464571),a=e.i(28651),l=e.i(199133);let r=[{value:"1h",label:"Hourly",resetHint:"Resets every hour"},{value:"24h",label:"Daily",resetHint:"Resets daily at midnight UTC"},{value:"7d",label:"Weekly",resetHint:"Resets every Sunday at midnight UTC"},{value:"30d",label:"Monthly",resetHint:"Resets on the 1st of every month at midnight UTC"}];e.s(["BudgetWindowsEditor",0,function({value:e,onChange:i}){let n=(t,s,a)=>{i(e.map((e,l)=>l===t?{...e,[s]:a}:e))};return(0,t.jsxs)("div",{children:[e.map((o,d)=>{let c=r.find(e=>e.value===o.budget_duration)?.resetHint;return(0,t.jsxs)("div",{style:{marginBottom:12},children:[(0,t.jsxs)("div",{style:{display:"flex",gap:8,alignItems:"center"},children:[(0,t.jsx)(l.Select,{value:o.budget_duration,onChange:e=>n(d,"budget_duration",e),style:{width:130},options:r.map(e=>({value:e.value,label:e.label}))}),(0,t.jsx)(a.InputNumber,{step:.01,min:0,precision:2,value:o.max_budget??void 0,onChange:e=>n(d,"max_budget",e??null),placeholder:"Max spend ($)",style:{width:160},prefix:"$"}),(0,t.jsx)(s.Button,{type:"text",danger:!0,size:"small",onClick:()=>{i(e.filter((e,t)=>t!==d))},style:{padding:"0 4px"},children:"✕"})]}),c&&(0,t.jsxs)("div",{style:{fontSize:11,color:"#888",marginTop:3,marginLeft:2},children:["↻ ",c]})]},d)}),(0,t.jsx)(s.Button,{size:"small",onClick:t=>{t.preventDefault(),i([...e,{budget_duration:"24h",max_budget:null}])},children:"+ Add Budget Window"})]})}])},390605,e=>{"use strict";var t=e.i(843476),s=e.i(271645),a=e.i(602869),l=e.i(599724),r=e.i(482725),i=e.i(91739),n=e.i(500727),o=e.i(531516),d=e.i(696609);e.s(["default",0,({accessToken:e,selectedServers:c,toolPermissions:u,onChange:m,disabled:p=!1})=>{let{data:g=[]}=(0,n.useMCPServers)(),[h,x]=(0,s.useState)({}),[y,_]=(0,s.useState)({}),[f,b]=(0,s.useState)({}),[j,v]=(0,s.useState)({}),w=(0,s.useRef)(u);(0,s.useEffect)(()=>{w.current=u},[u]);let N=(0,s.useMemo)(()=>0===c.length?[]:g.filter(e=>c.includes(e.server_id)),[g,c]),k=async(e,t)=>{_(t=>({...t,[e]:!0})),b(t=>({...t,[e]:""}));try{let s=await (0,a.listMCPTools)(t,e);if(s.error)b(t=>({...t,[e]:s.message||"Failed to fetch tools"})),x(t=>({...t,[e]:[]}));else{let t=s.tools||[];x(s=>({...s,[e]:t}));let a=w.current;if(!a[e]&&t.length>0){let s=t.filter(e=>"delete"!==(0,d.classifyToolOp)(e.name,e.description||"")).map(e=>e.name);m({...a,[e]:s})}}}catch(t){console.error(`Error fetching tools for server ${e}:`,t),b(t=>({...t,[e]:"Failed to fetch tools"})),x(t=>({...t,[e]:[]}))}finally{_(t=>({...t,[e]:!1}))}};(0,s.useEffect)(()=>{N.forEach(t=>{h[t.server_id]||y[t.server_id]||k(t.server_id,e)})},[N,e]);let S=(e,t)=>{m({...u,[e]:t})};return 0===c.length?null:(0,t.jsx)("div",{className:"space-y-4",children:N.map(e=>{let s=e.server_name||e.alias||e.server_id,a=h[e.server_id]||[],n=u[e.server_id]||[],d=y[e.server_id],c=f[e.server_id],g=j[e.server_id]??"crud";return(0,t.jsxs)("div",{className:"border rounded-lg bg-gray-50",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between p-4 border-b bg-white rounded-t-lg",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)(l.Text,{className:"font-semibold text-gray-900",children:s}),e.description&&(0,t.jsx)(l.Text,{className:"text-sm text-gray-500",children:e.description})]}),(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[!p&&a.length>0&&(0,t.jsx)(i.Radio.Group,{value:g,onChange:t=>v(s=>({...s,[e.server_id]:t.target.value})),size:"small",optionType:"button",buttonStyle:"solid",options:[{label:"Risk Groups",value:"crud"},{label:"Flat List",value:"flat"}]}),!p&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("button",{type:"button",className:"text-sm text-blue-600 hover:text-blue-700 font-medium",onClick:()=>{var t;let s;return s=h[t=e.server_id]||[],void m({...u,[t]:s.map(e=>e.name)})},disabled:d,children:"Select All"}),(0,t.jsx)("button",{type:"button",className:"text-sm text-blue-600 hover:text-blue-700 font-medium",onClick:()=>{var t;return t=e.server_id,void m({...u,[t]:[]})},disabled:d,children:"Deselect All"})]})]})]}),(0,t.jsxs)("div",{className:"p-4",children:[d&&(0,t.jsxs)("div",{className:"flex items-center justify-center py-8",children:[(0,t.jsx)(r.Spin,{size:"large"}),(0,t.jsx)(l.Text,{className:"ml-3 text-gray-500",children:"Loading tools..."})]}),c&&!d&&(0,t.jsxs)("div",{className:"p-4 bg-red-50 border border-red-200 rounded-lg text-center",children:[(0,t.jsx)(l.Text,{className:"text-red-600 font-medium",children:"Unable to load tools"}),(0,t.jsx)(l.Text,{className:"text-sm text-red-500 mt-1",children:c})]}),!d&&!c&&a.length>0&&"crud"===g&&(0,t.jsx)(o.default,{tools:a,value:u[e.server_id]?n:void 0,onChange:t=>S(e.server_id,t),readOnly:p}),!d&&!c&&a.length>0&&"flat"===g&&(0,t.jsx)("div",{className:"space-y-2",children:a.map(s=>{let a=n.includes(s.name);return(0,t.jsxs)("div",{className:"flex items-start gap-2",children:[(0,t.jsx)("input",{type:"checkbox",checked:a,onChange:()=>{if(p)return;let t=a?n.filter(e=>e!==s.name):[...n,s.name];S(e.server_id,t)},disabled:p,className:"mt-0.5"}),(0,t.jsx)("div",{className:"flex-1 min-w-0",children:(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(l.Text,{className:"font-medium text-gray-900",children:s.name}),(0,t.jsxs)(l.Text,{className:"text-sm text-gray-500",children:["- ",s.description||"No description"]})]})})]},s.name)})}),!d&&!c&&0===a.length&&(0,t.jsx)("div",{className:"text-center py-6",children:(0,t.jsx)(l.Text,{className:"text-gray-500",children:"No tools available"})})]})]},e.server_id)})})}])},364769,e=>{"use strict";var t=e.i(843476),s=e.i(271645),a=e.i(237016),l=e.i(464571),r=e.i(888259);e.s(["default",0,({apiKey:e})=>{let[i,n]=(0,s.useState)(!1);return(0,t.jsxs)("div",{children:[(0,t.jsxs)("p",{className:"mb-2",children:["Please save this secret key somewhere safe and accessible. For security reasons,"," ",(0,t.jsx)("b",{children:"you will not be able to view it again"})," through your LiteLLM account. If you lose this secret key, you will need to generate a new one."]}),(0,t.jsx)("p",{className:"text-sm text-gray-600 mt-3 mb-1",children:"Virtual Key:"}),(0,t.jsx)("div",{style:{background:"#f8f8f8",padding:"10px",borderRadius:"5px",marginBottom:"10px"},children:(0,t.jsx)("pre",{style:{wordWrap:"break-word",whiteSpace:"normal",margin:0},children:e})}),(0,t.jsx)(a.CopyToClipboard,{text:e,onCopy:()=>{n(!0),r.default.success("Key copied to clipboard"),setTimeout(()=>n(!1),2e3)},children:(0,t.jsx)(l.Button,{type:"primary",style:{marginTop:12},children:i?"Copied!":"Copy Virtual Key"})})]})}])},702597,e=>{"use strict";var t=e.i(843476),s=e.i(207082),a=e.i(109799),l=e.i(510674),r=e.i(109034),i=e.i(292639),n=e.i(135214),o=e.i(500330),d=e.i(827252),c=e.i(912598),u=e.i(677667),m=e.i(130643),p=e.i(898667),g=e.i(994388),h=e.i(309426),x=e.i(350967),y=e.i(599724),_=e.i(779241),f=e.i(629569),b=e.i(464571),j=e.i(808613),v=e.i(311451),w=e.i(212931),N=e.i(91739),k=e.i(199133),S=e.i(790848),C=e.i(262218),T=e.i(592968),I=e.i(898586),A=e.i(374009),L=e.i(271645),F=e.i(708347),O=e.i(552130),E=e.i(557662),M=e.i(9314),P=e.i(860585),R=e.i(82946),$=e.i(392110),B=e.i(533882),V=e.i(844565),D=e.i(651904),U=e.i(939510),z=e.i(460285),G=e.i(663435),K=e.i(363256),q=e.i(575260),H=e.i(371455),W=e.i(319312),Q=e.i(355619),J=e.i(75921),Y=e.i(234713),X=e.i(390605),Z=e.i(727749),ee=e.i(602869),et=e.i(364769),es=e.i(435451),ea=e.i(916940);let{Option:el}=k.Select,er=async(e,t,s,a)=>{try{if(null===e||null===t)return[];if(null!==s){let l=(await (0,ee.modelAvailableCall)(s,e,t,!0,a,!0)).data.map(e=>e.id);return console.log("available_model_names:",l),l}return[]}catch(e){return console.error("Error fetching user models:",e),[]}},ei=async(e,t,s,a)=>{try{if(null===e||null===t)return;if(null!==s){let l=(await (0,ee.modelAvailableCall)(s,e,t)).data.map(e=>e.id);console.log("available_model_names:",l),a(l)}}catch(e){console.error("Error fetching user models:",e)}};e.s(["default",0,({team:e,teams:en,data:eo,addKey:ed,autoOpenCreate:ec,prefillData:eu})=>{let{accessToken:em,userId:ep,userRole:eg,premiumUser:eh}=(0,n.default)(),ex=eh||null!=eg&&F.rolesWithWriteAccess.includes(eg),{data:ey,isLoading:e_}=(0,a.useOrganizations)(),{data:ef,isLoading:eb}=(0,l.useProjects)(),{data:ej}=(0,i.useUISettings)(),{data:ev}=(0,r.useTags)(),ew=!!ej?.values?.enable_projects_ui,eN=!!ej?.values?.disable_custom_api_keys,ek=ev?Object.values(ev).map(e=>({value:e.name,label:e.name})):[],eS=(0,c.useQueryClient)(),[eC]=j.Form.useForm(),[eT,eI]=(0,L.useState)(!1),[eA,eL]=(0,L.useState)(null),[eF,eO]=(0,L.useState)(null),[eE,eM]=(0,L.useState)([]),[eP,eR]=(0,L.useState)([]),[e$,eB]=(0,L.useState)("you"),[eV,eD]=(0,L.useState)(!1),[eU,ez]=(0,L.useState)(null),[eG,eK]=(0,L.useState)([]),[eq,eH]=(0,L.useState)([]),[eW,eQ]=(0,L.useState)([]),[eJ,eY]=(0,L.useState)([]),[eX,eZ]=(0,L.useState)(e),[e0,e1]=(0,L.useState)(null),[e4,e2]=(0,L.useState)(null),[e5,e3]=(0,L.useState)(!1),[e6,e7]=(0,L.useState)(null),[e9,e8]=(0,L.useState)({}),[te,tt]=(0,L.useState)([]),[ts,ta]=(0,L.useState)(!1),[tl,tr]=(0,L.useState)([]),[ti,tn]=(0,L.useState)([]),[to,td]=(0,L.useState)("llm_api"),[tc,tu]=(0,L.useState)({}),[tm,tp]=(0,L.useState)(!1),[tg,th]=(0,L.useState)("30d"),[tx,ty]=(0,L.useState)(null),[t_,tf]=(0,L.useState)([]),[tb,tj]=(0,L.useState)(0),[tv,tw]=(0,L.useState)([]),[tN,tk]=(0,L.useState)(null),tS=()=>{eI(!1),eC.resetFields(),eY([]),tn([]),td("llm_api"),tu({}),tp(!1),th("30d"),ty(null),tj(e=>e+1),tk(null),e1(null),e2(null),tf([])},tC=()=>{eI(!1),eL(null),eZ(null),eC.resetFields(),eY([]),tn([]),td("llm_api"),tu({}),tp(!1),th("30d"),ty(null),tj(e=>e+1),tk(null),e1(null),e2(null),tf([])};(0,L.useEffect)(()=>{ep&&eg&&em&&ei(ep,eg,em,eM)},[em,ep,eg]),(0,L.useEffect)(()=>{em&&(0,ee.getAgentsList)(em).then(e=>tw(e?.agents||[])).catch(()=>tw([]))},[em]),(0,L.useEffect)(()=>{let e=async()=>{try{let e=(await (0,ee.getPoliciesList)(em)).policies.map(e=>e.policy_name);eH(e)}catch(e){console.error("Failed to fetch policies:",e)}},t=async()=>{try{let e=await (0,ee.getPromptsList)(em);eQ(e.prompts.map(e=>e.prompt_id))}catch(e){console.error("Failed to fetch prompts:",e)}};(async()=>{try{let e=(await (0,ee.getGuardrailsList)(em)).guardrails.map(e=>e.guardrail_name);eK(e)}catch(e){console.error("Failed to fetch guardrails:",e)}})(),e(),t()},[em]),(0,L.useEffect)(()=>{(async()=>{try{if(em){let e=sessionStorage.getItem("possibleUserRoles");if(e)e8(JSON.parse(e));else{let e=await (0,ee.getPossibleUserRoles)(em);sessionStorage.setItem("possibleUserRoles",JSON.stringify(e)),e8(e)}}}catch(e){console.error("Error fetching possible user roles:",e)}})()},[em]),(0,L.useEffect)(()=>{if(ec&&!eV&&en&&eg&&F.rolesWithWriteAccess.includes(eg)&&(eI(!0),eD(!0),eu)){if(eu.owned_by&&("another_user"===eu.owned_by&&"Admin"!==eg?eB("you"):eB(eu.owned_by)),eu.team_id){let e=en?.find(e=>e.team_id===eu.team_id)||null;e&&(eZ(e),eC.setFieldsValue({team_id:eu.team_id}))}eu.key_alias&&eC.setFieldsValue({key_alias:eu.key_alias}),eu.models&&eu.models.length>0&&ez(eu.models),eu.key_type&&(td(eu.key_type),eC.setFieldsValue({key_type:eu.key_type}))}},[ec,eu,en,eV,eC,eg]);let tT=eP.includes("no-default-models")&&!eX,tI=async e=>{try{let t,a=e?.key_alias??"",l=e?.team_id??null;if((eo?.filter(e=>e.team_id===l).map(e=>e.key_alias)??[]).includes(a))throw Error(`Key alias ${a} already exists for team with ID ${l}, please provide another key alias`);if(Z.default.info("Making API Call"),eI(!0),"you"===e$)e.user_id=ep;else if("agent"===e$){if(!tN)return void Z.default.fromBackend("Please select an agent");e.agent_id=tN}let r={};try{r=JSON.parse(e.metadata||"{}")}catch(e){console.error("Error parsing metadata:",e)}if("service_account"===e$&&(r.service_account_id=e.key_alias),eJ.length>0&&(r={...r,logging:eJ.filter(e=>e.callback_name)}),ti.length>0){let e=(0,E.mapDisplayToInternalNames)(ti);r={...r,litellm_disabled_callbacks:e}}if(tm&&(e.auto_rotate=!0,e.rotation_interval=tg),e.duration&&""!==e.duration.trim()||(e.duration=null),e.metadata=JSON.stringify(r),e.disable_global_guardrails||delete e.disable_global_guardrails,e.allowed_vector_store_ids&&e.allowed_vector_store_ids.length>0&&(e.object_permission={vector_stores:e.allowed_vector_store_ids},delete e.allowed_vector_store_ids),e.allowed_mcp_servers_and_groups&&(e.allowed_mcp_servers_and_groups.servers?.length>0||e.allowed_mcp_servers_and_groups.accessGroups?.length>0)){e.object_permission||(e.object_permission={});let{servers:t,accessGroups:s}=e.allowed_mcp_servers_and_groups;t&&t.length>0&&(e.object_permission.mcp_servers=t),s&&s.length>0&&(e.object_permission.mcp_access_groups=s),delete e.allowed_mcp_servers_and_groups}let i=e.mcp_tool_permissions||{};if(Object.keys(i).length>0&&(e.object_permission||(e.object_permission={}),e.object_permission.mcp_tool_permissions=i),delete e.mcp_tool_permissions,e.allowed_mcp_access_groups&&e.allowed_mcp_access_groups.length>0&&(e.object_permission||(e.object_permission={}),e.object_permission.mcp_access_groups=e.allowed_mcp_access_groups,delete e.allowed_mcp_access_groups),e.allowed_agents_and_groups&&(e.allowed_agents_and_groups.agents?.length>0||e.allowed_agents_and_groups.accessGroups?.length>0)){e.object_permission||(e.object_permission={});let{agents:t,accessGroups:s}=e.allowed_agents_and_groups;t&&t.length>0&&(e.object_permission.agents=t),s&&s.length>0&&(e.object_permission.agent_access_groups=s),delete e.allowed_agents_and_groups}Object.keys(tc).length>0&&(e.aliases=JSON.stringify(tc)),tx?.router_settings&&Object.values(tx.router_settings).some(e=>null!=e&&""!==e)&&(e.router_settings=tx.router_settings);let n=t_.filter(e=>e.budget_duration&&null!==e.max_budget&&void 0!==e.max_budget);n.length>0&&(e.budget_limits=n),t="service_account"===e$?await (0,ee.keyCreateServiceAccountCall)(em,e):await (0,ee.keyCreateCall)(em,ep,e),console.log("key create Response:",t),ed(t),eS.invalidateQueries({queryKey:s.keyKeys.lists()}),eL(t.key),eO(t.soft_budget),Z.default.success("Virtual Key Created"),eC.resetFields(),tf([]),localStorage.removeItem("userData"+ep)}catch(t){console.log("error in create key:",t);let e=(e=>{let t;if(!(t=!e||"object"!=typeof e||e instanceof Error?String(e):JSON.stringify(e)).includes("/key/generate")&&!t.includes("KeyManagementRoutes.KEY_GENERATE"))return`Error creating the key: ${e}`;let s=t;try{if(!e||"object"!=typeof e||e instanceof Error){let e=t.match(/\{[\s\S]*\}/);if(e){let t=JSON.parse(e[0]),a=t?.error||t;a?.message&&(s=a.message)}}else{let t=e?.error||e;t?.message&&(s=t.message)}}catch(e){}return t.includes("team_member_permission_error")||s.includes("Team member does not have permissions")?"Team member does not have permission to generate key for this team. Ask your proxy admin to configure the team member permission settings.":`Error creating the key: ${e}`})(t);Z.default.fromBackend(e)}};(0,L.useEffect)(()=>{if(e4){let e=ef?.find(e=>e.project_id===e4);eR(e?.models??[]),eC.setFieldValue("models",[]);return}ep&&eg&&em&&er(ep,eg,em,eX?.team_id??null).then(e=>{eR(Array.from(new Set([...eX?.models??[],...e])))}),eU||eC.setFieldValue("models",[]),eC.setFieldValue("allowed_mcp_servers_and_groups",{servers:[],accessGroups:[]})},[eX,e4,em,ep,eg,eC]),(0,L.useEffect)(()=>{if(!eU||0===eU.length||!eP||0===eP.length)return;let e=eU.filter(e=>eP.includes(e));e.length>0&&eC.setFieldsValue({models:e}),ez(null)},[eU,eP,eC]),(0,L.useEffect)(()=>{if(!e4||!en)return;let e=ef?.find(e=>e.project_id===e4);if(!e?.team_id||eX?.team_id===e.team_id)return;let t=en.find(t=>t.team_id===e.team_id)||null;t&&(eZ(t),eC.setFieldValue("team_id",t.team_id))},[en,e4,ef]);let tA=async e=>{if(!e)return void tt([]);ta(!0);try{let t=new URLSearchParams;if(t.append("user_email",e),null==em)return;let s=(await (0,ee.userFilterUICall)(em,t)).map(e=>({label:`${e.user_email} (${e.user_id})`,value:e.user_id,user:e}));tt(s)}catch(e){console.error("Error fetching users:",e),Z.default.fromBackend("Failed to search for users")}finally{ta(!1)}},tL=(0,L.useCallback)((0,A.default)(e=>tA(e),300),[em]);return(0,t.jsxs)("div",{children:[eg&&F.rolesWithWriteAccess.includes(eg)&&(0,t.jsx)(g.Button,{className:"mx-auto",onClick:()=>eI(!0),"data-testid":"create-key-button",children:"+ Create New Key"}),(0,t.jsx)(w.Modal,{open:eT,width:1e3,footer:null,onOk:tS,onCancel:tC,children:(0,t.jsxs)(j.Form,{form:eC,onFinish:tI,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,t.jsxs)("div",{className:"mb-8",children:[(0,t.jsx)(f.Title,{className:"mb-4",children:"Key Ownership"}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Owned By"," ",(0,t.jsx)(T.Tooltip,{title:"Select who will own this Virtual Key",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),className:"mb-4",children:(0,t.jsxs)(N.Radio.Group,{onChange:e=>eB(e.target.value),value:e$,children:[(0,t.jsx)(N.Radio,{value:"you",children:"You"}),(0,t.jsx)(N.Radio,{value:"service_account",children:"Service Account"}),"Admin"===eg&&(0,t.jsx)(N.Radio,{value:"another_user",children:"Another User"}),(0,t.jsxs)(N.Radio,{value:"agent",children:["Agent ",(0,t.jsx)(C.Tag,{color:"purple",children:"New"})]})]})}),"another_user"===e$&&(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["User ID"," ",(0,t.jsx)(T.Tooltip,{title:"The user who will own this key and be responsible for its usage",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"user_id",className:"mt-4",rules:[{required:"another_user"===e$,message:"Please input the user ID of the user you are assigning the key to"}],children:(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{style:{display:"flex",marginBottom:"8px"},children:[(0,t.jsx)(k.Select,{showSearch:!0,placeholder:"Type email to search for users",filterOption:!1,onSearch:e=>{tL(e)},onSelect:(e,t)=>{let s;return s=t.user,void eC.setFieldsValue({user_id:s.user_id})},options:te,loading:ts,allowClear:!0,style:{width:"100%"},notFoundContent:ts?"Searching...":"No users found"}),(0,t.jsx)(b.Button,{onClick:()=>e3(!0),style:{marginLeft:"8px"},children:"Create User"})]}),(0,t.jsx)("div",{className:"text-xs text-gray-500",children:"Search by email to find users"})]})}),"agent"===e$&&(0,t.jsxs)("div",{className:"mt-4 p-4 bg-purple-50 border border-purple-200 rounded-md",children:[(0,t.jsx)("div",{className:"mb-3",children:(0,t.jsxs)("span",{className:"text-sm font-medium text-gray-700",children:["Select Agent ",(0,t.jsx)("span",{className:"text-red-500",children:"*"})]})}),(0,t.jsx)(k.Select,{showSearch:!0,placeholder:"Select an agent",style:{width:"100%"},value:tN,onChange:e=>tk(e),filterOption:(e,t)=>t?.label?.toLowerCase().includes(e.toLowerCase()),options:tv.map(e=>({label:e.agent_name||e.agent_id,value:e.agent_id}))}),(0,t.jsx)("div",{className:"text-xs text-gray-500 mt-2",children:"This key will be used by the selected agent to make requests to LiteLLM"})]}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Organization"," ",(0,t.jsx)(T.Tooltip,{title:"The organization this key belongs to. Selecting an organization filters the available teams.",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"organization_id",className:"mt-4",children:(0,t.jsx)(K.default,{organizations:ey,loading:e_,disabled:"Admin"!==eg,onChange:e=>{e1(e||null),eZ(null),e2(null),eC.setFieldValue("team_id",void 0),eC.setFieldValue("project_id",void 0)}})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Team"," ",(0,t.jsx)(T.Tooltip,{title:"The team this key belongs to, which determines available models and budget limits",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"team_id",initialValue:e?e.team_id:null,className:"mt-4",rules:[{required:"service_account"===e$,message:"Please select a team for the service account"}],help:"service_account"===e$?"required":"",children:(0,t.jsx)(G.default,{disabled:null!==e4,organizationId:e0,onTeamSelect:e=>{eZ(e),e2(null),eC.setFieldValue("project_id",void 0),e?.organization_id?(e1(e.organization_id),eC.setFieldValue("organization_id",e.organization_id)):e||(e1(null),eC.setFieldValue("organization_id",void 0))}})}),ew&&(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Project"," ",(0,t.jsx)(T.Tooltip,{title:"Assign this key to a project. Selecting a project will lock the team to the project's team.",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"project_id",className:"mt-4",children:(0,t.jsx)(q.default,{projects:ef,teamId:eX?.team_id,loading:eb||!en,onChange:e=>{if(!e){e2(null),eZ(null),eC.setFieldValue("team_id",void 0);return}e2(e)}})})]}),tT&&(0,t.jsx)("div",{className:"mb-8 p-4 bg-blue-50 border border-blue-200 rounded-md",children:(0,t.jsx)(y.Text,{className:"text-blue-800 text-sm",children:"Please select a team to continue configuring your Virtual Key. If you do not see any teams, please contact your Proxy Admin to either provide you with access to models or to add you to a team."})}),!tT&&(0,t.jsxs)("div",{className:"mb-8",children:[(0,t.jsx)(f.Title,{className:"mb-4",children:"Key Details"}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["you"===e$||"another_user"===e$?"Key Name":"Service Account ID"," ",(0,t.jsx)(T.Tooltip,{title:"you"===e$||"another_user"===e$?"A descriptive name to identify this key":"Unique identifier for this service account",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"key_alias",rules:[{required:!0,message:`Please input a ${"you"===e$?"key name":"service account ID"}`}],help:"required",children:(0,t.jsx)(_.TextInput,{placeholder:""})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Models"," ",(0,t.jsx)(T.Tooltip,{title:"Select which models this key can access. Choose 'All Team Models' to grant access to all models available to the team. Leave empty to allow access to all models.",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"models",rules:[],help:"management"===to||"read_only"===to?"Models field is disabled for this key type":"optional - leave empty to allow access to all models",className:"mt-4",children:(0,t.jsxs)(k.Select,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},disabled:"management"===to||"read_only"===to,onChange:e=>{e.includes("all-team-models")&&eC.setFieldsValue({models:["all-team-models"]})},children:[!e4&&(0,t.jsx)(el,{value:"all-team-models",children:"All Team Models"},"all-team-models"),eP.map(e=>(0,t.jsx)(el,{value:e,children:(0,Q.getModelDisplayName)(e)},e))]})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Key Type"," ",(0,t.jsx)(T.Tooltip,{title:"Select the type of key to determine what routes and operations this key can access",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"key_type",initialValue:"llm_api",className:"mt-4",children:(0,t.jsxs)(k.Select,{defaultValue:"llm_api",placeholder:"Select key type",style:{width:"100%"},optionLabelProp:"label",onChange:e=>{td(e),("management"===e||"read_only"===e)&&eC.setFieldsValue({models:[]})},children:[(0,t.jsx)(el,{value:"llm_api",label:"AI APIs",children:(0,t.jsxs)("div",{style:{padding:"4px 0"},children:[(0,t.jsx)(I.Typography.Text,{strong:!0,children:"AI APIs"}),(0,t.jsx)(I.Typography.Paragraph,{type:"secondary",style:{fontSize:11,margin:"2px 0 0"},children:"Can call only AI API routes (chat/completions, embeddings, etc.)"})]})}),(0,t.jsx)(el,{value:"management",label:"Management",children:(0,t.jsxs)("div",{style:{padding:"4px 0"},children:[(0,t.jsx)(I.Typography.Text,{strong:!0,children:"Management"}),(0,t.jsx)(I.Typography.Paragraph,{type:"secondary",style:{fontSize:11,margin:"2px 0 0"},children:"Can call only management routes (user/team/key management)"})]})}),(0,t.jsx)(el,{value:"default",label:"Full Access",children:(0,t.jsxs)("div",{style:{padding:"4px 0"},children:[(0,t.jsx)(I.Typography.Text,{strong:!0,children:"Full Access"}),(0,t.jsx)(I.Typography.Paragraph,{type:"secondary",style:{fontSize:11,margin:"2px 0 0"},children:"Can call all routes (AI APIs, Management, and read-only)"})]})})]})})]}),!tT&&(0,t.jsx)("div",{className:"mb-8",children:(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)(f.Title,{className:"m-0",children:"Optional Settings"})}),(0,t.jsxs)(m.AccordionBody,{children:[(0,t.jsx)(j.Form.Item,{className:"mt-4",label:(0,t.jsxs)("span",{children:["Max Budget (USD)"," ",(0,t.jsx)(T.Tooltip,{title:"Maximum amount in USD this key can spend. When reached, the key will be blocked from making further requests",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"max_budget",help:`Budget cannot exceed team max budget: $${e?.max_budget!==null&&e?.max_budget!==void 0?e?.max_budget:"unlimited"}`,rules:[{validator:async(t,s)=>{if(s&&e&&null!==e.max_budget&&s>e.max_budget)throw Error(`Budget cannot exceed team max budget: $${(0,o.formatNumberWithCommas)(e.max_budget,4)}`)}}],children:(0,t.jsx)(es.default,{step:.01,precision:2,width:200})}),(0,t.jsx)(j.Form.Item,{className:"mt-4",label:(0,t.jsxs)("span",{children:["Reset Budget"," ",(0,t.jsx)(T.Tooltip,{title:"How often the budget should reset. For example, setting 'daily' will reset the budget every 24 hours",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"budget_duration",help:`Team Reset Budget: ${e?.budget_duration!==null&&e?.budget_duration!==void 0?e?.budget_duration:"None"}`,children:(0,t.jsx)(P.default,{onChange:e=>eC.setFieldValue("budget_duration",e)})}),(0,t.jsx)(j.Form.Item,{className:"mt-4",label:(0,t.jsxs)("span",{children:["Budget Windows"," ",(0,t.jsx)(T.Tooltip,{title:"Set multiple independent budget windows (e.g., hourly $10 AND monthly $200). Each window tracks spend separately and resets on its own schedule.",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),children:(0,t.jsx)(W.BudgetWindowsEditor,{value:t_,onChange:tf})}),(0,t.jsx)(j.Form.Item,{className:"mt-4",label:(0,t.jsxs)("span",{children:["Tokens per minute Limit (TPM)"," ",(0,t.jsx)(T.Tooltip,{title:"Maximum number of tokens this key can process per minute. Helps control usage and costs",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"tpm_limit",help:`TPM cannot exceed team TPM limit: ${e?.tpm_limit!==null&&e?.tpm_limit!==void 0?e?.tpm_limit:"unlimited"}`,rules:[{validator:async(t,s)=>{if(s&&e&&null!==e.tpm_limit&&s>e.tpm_limit)throw Error(`TPM limit cannot exceed team TPM limit: ${e.tpm_limit}`)}}],children:(0,t.jsx)(es.default,{step:1,width:400})}),(0,t.jsx)(U.default,{type:"tpm",name:"tpm_limit_type",className:"mt-4",initialValue:null,form:eC,showDetailedDescriptions:!0}),(0,t.jsx)(j.Form.Item,{className:"mt-4",label:(0,t.jsxs)("span",{children:["Requests per minute Limit (RPM)"," ",(0,t.jsx)(T.Tooltip,{title:"Maximum number of API requests this key can make per minute. Helps prevent abuse and manage load",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"rpm_limit",help:`RPM cannot exceed team RPM limit: ${e?.rpm_limit!==null&&e?.rpm_limit!==void 0?e?.rpm_limit:"unlimited"}`,rules:[{validator:async(t,s)=>{if(s&&e&&null!==e.rpm_limit&&s>e.rpm_limit)throw Error(`RPM limit cannot exceed team RPM limit: ${e.rpm_limit}`)}}],children:(0,t.jsx)(es.default,{step:1,width:400})}),(0,t.jsx)(U.default,{type:"rpm",name:"rpm_limit_type",className:"mt-4",initialValue:null,form:eC,showDetailedDescriptions:!0}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Guardrails"," ",(0,t.jsx)(T.Tooltip,{title:"Apply safety guardrails to this key to filter content or enforce policies",children:(0,t.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/guardrails/quick_start",target:"_blank",rel:"noopener noreferrer",onClick:e=>e.stopPropagation(),children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})})]}),name:"guardrails",className:"mt-4",help:ex?"Select existing guardrails or enter new ones":"Premium feature - Upgrade to set guardrails by key",children:(0,t.jsx)(k.Select,{mode:"tags",style:{width:"100%"},disabled:!ex,placeholder:ex?"Select or enter guardrails":"Premium feature - Upgrade to set guardrails by key",options:eG.map(e=>({value:e,label:e}))})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Disable Global Guardrails"," ",(0,t.jsx)(T.Tooltip,{title:"When enabled, this key will bypass any guardrails configured to run on every request (global guardrails)",children:(0,t.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/guardrails/quick_start",target:"_blank",rel:"noopener noreferrer",onClick:e=>e.stopPropagation(),children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})})]}),name:"disable_global_guardrails",className:"mt-4",valuePropName:"checked",help:ex?"Bypass global guardrails for this key":"Premium feature - Upgrade to disable global guardrails by key",children:(0,t.jsx)(S.Switch,{disabled:!ex,checkedChildren:"Yes",unCheckedChildren:"No"})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Policies"," ",(0,t.jsx)(T.Tooltip,{title:"Apply policies to this key to control guardrails and other settings",children:(0,t.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/guardrails/guardrail_policies",target:"_blank",rel:"noopener noreferrer",onClick:e=>e.stopPropagation(),children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})})]}),name:"policies",className:"mt-4",help:eh?"Select existing policies or enter new ones":"Premium feature - Upgrade to set policies by key",children:(0,t.jsx)(k.Select,{mode:"tags",style:{width:"100%"},disabled:!eh,placeholder:eh?"Select or enter policies":"Premium feature - Upgrade to set policies by key",options:eq.map(e=>({value:e,label:e}))})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Prompts"," ",(0,t.jsx)(T.Tooltip,{title:"Allow this key to use specific prompt templates",children:(0,t.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/prompt_management",target:"_blank",rel:"noopener noreferrer",onClick:e=>e.stopPropagation(),children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})})]}),name:"prompts",className:"mt-4",help:eh?"Select existing prompts or enter new ones":"Premium feature - Upgrade to set prompts by key",children:(0,t.jsx)(k.Select,{mode:"tags",style:{width:"100%"},disabled:!eh,placeholder:eh?"Select or enter prompts":"Premium feature - Upgrade to set prompts by key",options:eW.map(e=>({value:e,label:e}))})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Access Groups"," ",(0,t.jsx)(T.Tooltip,{title:"Assign access groups to this key. Access groups control which models, MCP servers, and agents this key can use",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"access_group_ids",className:"mt-4",help:"Select access groups to assign to this key",children:(0,t.jsx)(M.default,{placeholder:"Select access groups (optional)"})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Allowed Pass Through Routes"," ",(0,t.jsx)(T.Tooltip,{title:"Allow this key to use specific pass through routes",children:(0,t.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/pass_through",target:"_blank",rel:"noopener noreferrer",onClick:e=>e.stopPropagation(),children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})})]}),name:"allowed_passthrough_routes",className:"mt-4",help:eh?"Select existing pass through routes or enter new ones":"Premium feature - Upgrade to set pass through routes by key",children:(0,t.jsx)(V.default,{onChange:e=>eC.setFieldValue("allowed_passthrough_routes",e),value:eC.getFieldValue("allowed_passthrough_routes"),accessToken:em,placeholder:eh?"Select or enter pass through routes":"Premium feature - Upgrade to set pass through routes by key",disabled:!eh,teamId:eX?eX.team_id:null})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Allowed Vector Stores"," ",(0,t.jsx)(T.Tooltip,{title:"Select which vector stores this key can access. If none selected, the key will have access to all available vector stores",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"allowed_vector_store_ids",className:"mt-4",help:"Select vector stores this key can access. Leave empty for access to all vector stores",children:(0,t.jsx)(ea.default,{onChange:e=>eC.setFieldValue("allowed_vector_store_ids",e),value:eC.getFieldValue("allowed_vector_store_ids"),accessToken:em,placeholder:"Select vector stores (optional)"})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Metadata"," ",(0,t.jsx)(T.Tooltip,{title:"JSON object with additional information about this key. Used for tracking or custom logic",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"metadata",className:"mt-4",children:(0,t.jsx)(v.Input.TextArea,{rows:4,placeholder:"Enter metadata as JSON"})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Tags"," ",(0,t.jsx)(T.Tooltip,{title:"Tags for tracking spend and/or doing tag-based routing. Used for analytics and filtering",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"tags",className:"mt-4",help:"Tags for tracking spend and/or doing tag-based routing.",children:(0,t.jsx)(k.Select,{mode:"tags",style:{width:"100%"},placeholder:"Select or enter tags",tokenSeparators:[","],options:ek})}),(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)("b",{children:"MCP Settings"})}),(0,t.jsxs)(m.AccordionBody,{children:[(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Allowed MCP Servers"," ",(0,t.jsx)(T.Tooltip,{title:"Select which MCP servers or access groups this key can access",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"allowed_mcp_servers_and_groups",help:"Select MCP servers or access groups this key can access",children:(0,t.jsx)(J.default,{onChange:e=>eC.setFieldValue("allowed_mcp_servers_and_groups",e),value:eC.getFieldValue("allowed_mcp_servers_and_groups"),accessToken:em,teamId:eX?.team_id??null,placeholder:"Select MCP servers or access groups (optional)",allowNoMcpServers:!0})}),(0,t.jsx)(j.Form.Item,{name:"mcp_tool_permissions",initialValue:{},hidden:!0,children:(0,t.jsx)(v.Input,{type:"hidden"})}),(0,t.jsx)(j.Form.Item,{noStyle:!0,shouldUpdate:(e,t)=>e.allowed_mcp_servers_and_groups!==t.allowed_mcp_servers_and_groups||e.mcp_tool_permissions!==t.mcp_tool_permissions,children:()=>(0,t.jsx)("div",{className:"mt-6",children:(0,t.jsx)(X.default,{accessToken:em,selectedServers:(eC.getFieldValue("allowed_mcp_servers_and_groups")?.servers||[]).filter(e=>e!==Y.NO_MCP_SERVERS_SENTINEL),toolPermissions:eC.getFieldValue("mcp_tool_permissions")||{},onChange:e=>eC.setFieldsValue({mcp_tool_permissions:e})})})})]})]}),(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)("b",{children:"Agent Settings"})}),(0,t.jsx)(m.AccordionBody,{children:(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Allowed Agents"," ",(0,t.jsx)(T.Tooltip,{title:"Select which agents or access groups this key can access",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"allowed_agents_and_groups",help:"Select agents or access groups this key can access",children:(0,t.jsx)(O.default,{onChange:e=>eC.setFieldValue("allowed_agents_and_groups",e),value:eC.getFieldValue("allowed_agents_and_groups"),accessToken:em,placeholder:"Select agents or access groups (optional)"})})})]}),eh?(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)("b",{children:"Logging Settings"})}),(0,t.jsx)(m.AccordionBody,{children:(0,t.jsx)("div",{className:"mt-4",children:(0,t.jsx)(D.default,{value:eJ,onChange:eY,premiumUser:!0,disabledCallbacks:ti,onDisabledCallbacksChange:tn})})})]}):(0,t.jsx)(T.Tooltip,{title:(0,t.jsxs)("span",{children:["Key-level logging settings is an enterprise feature, get in touch -",(0,t.jsx)("a",{href:"https://www.litellm.ai/enterprise",target:"_blank",children:"https://www.litellm.ai/enterprise"})]}),placement:"top",children:(0,t.jsxs)("div",{style:{position:"relative"},children:[(0,t.jsx)("div",{style:{opacity:.5},children:(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)("b",{children:"Logging Settings"})}),(0,t.jsx)(m.AccordionBody,{children:(0,t.jsx)("div",{className:"mt-4",children:(0,t.jsx)(D.default,{value:eJ,onChange:eY,premiumUser:!1,disabledCallbacks:ti,onDisabledCallbacksChange:tn})})})]})}),(0,t.jsx)("div",{style:{position:"absolute",inset:0,cursor:"not-allowed"}})]})}),(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)("b",{children:"Router Settings"})}),(0,t.jsx)(m.AccordionBody,{children:(0,t.jsx)("div",{className:"mt-4 w-full",children:(0,t.jsx)(z.default,{accessToken:em||"",value:tx||void 0,onChange:ty,modelData:eE.length>0?{data:eE.map(e=>({model_name:e}))}:void 0},tb)})})]},`router-settings-accordion-${tb}`),(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)("b",{children:"Model Aliases"})}),(0,t.jsx)(m.AccordionBody,{children:(0,t.jsxs)("div",{className:"mt-4",children:[(0,t.jsx)(y.Text,{className:"text-sm text-gray-600 mb-4",children:"Create custom aliases for models that can be used in API calls. This allows you to create shortcuts for specific models."}),(0,t.jsx)(B.default,{accessToken:em,initialModelAliases:tc,onAliasUpdate:tu,showExampleConfig:!1})]})})]}),(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)("b",{children:"Key Lifecycle"})}),(0,t.jsx)(m.AccordionBody,{children:(0,t.jsx)("div",{className:"mt-4",children:(0,t.jsx)($.default,{form:eC,autoRotationEnabled:tm,onAutoRotationChange:tp,rotationInterval:tg,onRotationIntervalChange:th,isCreateMode:!0})})}),(0,t.jsx)(j.Form.Item,{name:"duration",hidden:!0,initialValue:null,children:(0,t.jsx)(v.Input,{})})]}),(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("b",{children:"Advanced Settings"}),(0,t.jsx)(T.Tooltip,{title:(0,t.jsxs)("span",{children:["Learn more about advanced settings in our"," ",(0,t.jsx)("a",{href:ee.proxyBaseUrl?`${ee.proxyBaseUrl}/#/key%20management/generate_key_fn_key_generate_post`:"/#/key%20management/generate_key_fn_key_generate_post",target:"_blank",rel:"noopener noreferrer",className:"text-blue-400 hover:text-blue-300",children:"documentation"})]}),children:(0,t.jsx)(d.InfoCircleOutlined,{className:"text-gray-400 hover:text-gray-300 cursor-help"})})]})}),(0,t.jsx)(m.AccordionBody,{children:(0,t.jsx)(R.default,{schemaComponent:"GenerateKeyRequest",form:eC,excludedFields:["key_alias","team_id","organization_id","models","duration","metadata","tags","guardrails","max_budget","budget_duration","tpm_limit","rpm_limit",...eN?["key"]:[]]})})]})]})]})}),(0,t.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,t.jsx)(b.Button,{htmlType:"submit",disabled:tT,style:{opacity:tT?.5:1},children:"Create Key"})})]})}),e5&&(0,t.jsx)(w.Modal,{title:"Create New User",open:e5,onCancel:()=>e3(!1),footer:null,width:800,children:(0,t.jsx)(H.CreateUserButton,{userID:ep,accessToken:em,teams:en,possibleUIRoles:e9,onUserCreated:e=>{e7(e),eC.setFieldsValue({user_id:e}),e3(!1)},isEmbedded:!0})}),eA&&(0,t.jsx)(w.Modal,{open:eT,onOk:tS,onCancel:tC,footer:null,children:(0,t.jsxs)(x.Grid,{numItems:1,className:"gap-2 w-full",children:[(0,t.jsx)(f.Title,{children:"Save your Key"}),(0,t.jsx)(h.Col,{numColSpan:1,children:null!=eA?(0,t.jsx)(et.default,{apiKey:eA}):(0,t.jsx)(y.Text,{children:"Key being created, this might take 30s"})})]})})]})},"fetchTeamModels",0,er,"fetchUserModels",0,ei],702597)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/142-5lmjc6wc~.js b/litellm/proxy/_experimental/out/_next/static/chunks/142-5lmjc6wc~.js new file mode 100644 index 00000000000..0d7d2909305 --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/142-5lmjc6wc~.js @@ -0,0 +1 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,9314,e=>{"use strict";var t=e.i(843476),s=e.i(199133),a=e.i(981339),l=e.i(645526),r=e.i(599724),i=e.i(263147);e.s(["default",0,({value:e,onChange:n,placeholder:o="Select access groups",disabled:d=!1,style:c,className:u,showLabel:m=!1,labelText:p="Access Group",allowClear:g=!0})=>{let{data:h,isLoading:x,isError:y}=(0,i.useAccessGroups)();if(x)return(0,t.jsxs)("div",{children:[m&&(0,t.jsxs)(r.Text,{className:"font-medium block mb-2 text-gray-700 flex items-center",children:[(0,t.jsx)(l.TeamOutlined,{className:"mr-2"})," ",p]}),(0,t.jsx)(a.Skeleton.Input,{active:!0,block:!0,style:{height:32,...c}})]});let _=(h??[]).map(e=>({label:(0,t.jsxs)("span",{children:[(0,t.jsx)("span",{className:"font-medium",children:e.access_group_name})," ",(0,t.jsxs)("span",{className:"text-gray-400 text-xs",children:["(",e.access_group_id,")"]})]}),value:e.access_group_id,selectedLabel:e.access_group_name,searchText:`${e.access_group_name} ${e.access_group_id}`}));return(0,t.jsxs)("div",{children:[m&&(0,t.jsxs)(r.Text,{className:"font-medium block mb-2 text-gray-700 flex items-center",children:[(0,t.jsx)(l.TeamOutlined,{className:"mr-2"})," ",p]}),(0,t.jsx)(s.Select,{mode:"multiple",value:e,placeholder:o,onChange:n,disabled:d,allowClear:g,showSearch:!0,style:{width:"100%",...c},className:`rounded-md ${u??""}`,notFoundContent:y?(0,t.jsx)("span",{className:"text-red-500",children:"Failed to load access groups"}):"No access groups found",filterOption:(e,t)=>(_.find(e=>e.value===t?.value)?.searchText??"").toLowerCase().includes(e.toLowerCase()),optionLabelProp:"selectedLabel",options:_.map(e=>({label:e.label,value:e.value,selectedLabel:e.selectedLabel}))})]})}])},552130,e=>{"use strict";var t=e.i(843476),s=e.i(271645),a=e.i(199133),l=e.i(602869);e.s(["default",0,({onChange:e,value:r,className:i,accessToken:n,placeholder:o="Select agents",disabled:d=!1})=>{let[c,u]=(0,s.useState)([]),[m,p]=(0,s.useState)([]),[g,h]=(0,s.useState)(!1);(0,s.useEffect)(()=>{(async()=>{if(n){h(!0);try{let e=await (0,l.getAgentsList)(n),t=e?.agents||[];u(t);let s=new Set;t.forEach(e=>{let t=e.agent_access_groups;t&&Array.isArray(t)&&t.forEach(e=>s.add(e))}),p(Array.from(s))}catch(e){console.error("Error fetching agents:",e)}finally{h(!1)}}})()},[n]);let x=[...m.map(e=>({label:e,value:`group:${e}`,isAccessGroup:!0,searchText:`${e} Access Group`})),...c.map(e=>({label:`${e.agent_name||e.agent_id}`,value:e.agent_id,isAccessGroup:!1,searchText:`${e.agent_name||e.agent_id} ${e.agent_id} Agent`}))],y=[...r?.agents||[],...(r?.accessGroups||[]).map(e=>`group:${e}`)];return(0,t.jsx)("div",{children:(0,t.jsx)(a.Select,{mode:"multiple",placeholder:o,onChange:t=>{e({agents:t.filter(e=>!e.startsWith("group:")),accessGroups:t.filter(e=>e.startsWith("group:")).map(e=>e.replace("group:",""))})},value:y,loading:g,className:i,allowClear:!0,showSearch:!0,style:{width:"100%"},disabled:d,filterOption:(e,t)=>(x.find(e=>e.value===t?.value)?.searchText||"").toLowerCase().includes(e.toLowerCase()),children:x.map(e=>(0,t.jsx)(a.Select.Option,{value:e.value,label:e.label,children:(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[(0,t.jsx)("span",{style:{display:"inline-block",width:8,height:8,borderRadius:"50%",background:e.isAccessGroup?"#52c41a":"#722ed1",flexShrink:0}}),(0,t.jsx)("span",{style:{flex:1},children:e.label}),(0,t.jsx)("span",{style:{color:e.isAccessGroup?"#52c41a":"#722ed1",fontSize:"12px",fontWeight:500,opacity:.8},children:e.isAccessGroup?"Access Group":"Agent"})]})},e.value))})})}])},844565,e=>{"use strict";var t=e.i(843476),s=e.i(271645),a=e.i(199133),l=e.i(602869);e.s(["default",0,({onChange:e,value:r,className:i,accessToken:n,placeholder:o="Select pass through routes",disabled:d=!1,teamId:c})=>{let[u,m]=(0,s.useState)([]),[p,g]=(0,s.useState)(!1);return(0,s.useEffect)(()=>{(async()=>{if(n){g(!0);try{let e=await (0,l.getPassThroughEndpointsCall)(n,c);if(e.endpoints){let t=e.endpoints.flatMap(e=>{let t=e.path,s=e.methods;return s&&s.length>0?s.map(e=>({label:`${e} ${t}`,value:t})):[{label:t,value:t}]});m(t)}}catch(e){console.error("Error fetching pass through routes:",e)}finally{g(!1)}}})()},[n,c]),(0,t.jsx)(a.Select,{mode:"tags",placeholder:o,onChange:e,value:r,loading:p,className:i,allowClear:!0,options:u,optionFilterProp:"label",showSearch:!0,style:{width:"100%"},disabled:d})}])},810757,477386,e=>{"use strict";var t=e.i(271645);let s=t.forwardRef(function(e,s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z"}),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"}))});e.s(["CogIcon",0,s],810757);let a=t.forwardRef(function(e,s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728A9 9 0 015.636 5.636m12.728 12.728L5.636 5.636"}))});e.s(["BanIcon",0,a],477386)},557662,e=>{"use strict";let t="/ui/assets/logos/",s=[{id:"arize",displayName:"Arize",logo:`${t}arize.png`,supports_key_team_logging:!0,dynamic_params:{arize_api_key:"password",arize_space_id:"password"},description:"Arize Logging Integration"},{id:"braintrust",displayName:"Braintrust",logo:`${t}braintrust.png`,supports_key_team_logging:!1,dynamic_params:{braintrust_api_key:"password",braintrust_project_name:"text"},description:"Braintrust Logging Integration"},{id:"custom_callback_api",displayName:"Custom Callback API",logo:`${t}custom.svg`,supports_key_team_logging:!0,dynamic_params:{custom_callback_api_url:"text",custom_callback_api_headers:"text"},description:"Custom Callback API Logging Integration"},{id:"galileo",displayName:"Galileo",logo:`${t}galileo.ico`,supports_key_team_logging:!1,dynamic_params:{GALILEO_API_KEY:"password",GALILEO_PROJECT_ID:"text",GALILEO_LOG_STREAM_ID:"text",GALILEO_BASE_URL:"text",GALILEO_USERNAME:"text",GALILEO_PASSWORD:"password"},description:"Galileo AI Observability Integration"},{id:"datadog",displayName:"Datadog",logo:`${t}datadog.png`,supports_key_team_logging:!1,dynamic_params:{dd_api_key:"password",dd_site:"text"},description:"Datadog Logging Integration"},{id:"lago",displayName:"Lago",logo:`${t}lago.svg`,supports_key_team_logging:!1,dynamic_params:{lago_api_url:"text",lago_api_key:"password"},description:"Lago Billing Logging Integration"},{id:"langfuse",displayName:"Langfuse",logo:`${t}langfuse.png`,supports_key_team_logging:!0,dynamic_params:{langfuse_public_key:"text",langfuse_secret_key:"password",langfuse_host:"text"},description:"Langfuse v2 Logging Integration"},{id:"langfuse_otel",displayName:"Langfuse OTEL",logo:`${t}langfuse.png`,supports_key_team_logging:!0,dynamic_params:{langfuse_public_key:"text",langfuse_secret_key:"password",langfuse_host:"text"},description:"Langfuse v3 OTEL Logging Integration"},{id:"langsmith",displayName:"LangSmith",logo:`${t}langsmith.png`,supports_key_team_logging:!0,dynamic_params:{langsmith_api_key:"password",langsmith_project:"text",langsmith_base_url:"text",langsmith_sampling_rate:"number"},description:"Langsmith Logging Integration"},{id:"openmeter",displayName:"OpenMeter",logo:`${t}openmeter.png`,supports_key_team_logging:!1,dynamic_params:{openmeter_api_key:"password",openmeter_base_url:"text"},description:"OpenMeter Logging Integration"},{id:"otel",displayName:"Open Telemetry",logo:`${t}otel.png`,supports_key_team_logging:!1,dynamic_params:{otel_endpoint:"text",otel_headers:"text"},description:"OpenTelemetry Logging Integration"},{id:"s3",displayName:"S3",logo:`${t}aws.svg`,supports_key_team_logging:!1,dynamic_params:{s3_bucket_name:"text",aws_access_key_id:"password",aws_secret_access_key:"password",aws_region:"text"},description:"S3 Bucket (AWS) Logging Integration"},{id:"SQS",displayName:"SQS",logo:`${t}aws.svg`,supports_key_team_logging:!1,dynamic_params:{sqs_queue_url:"text",aws_access_key_id:"password",aws_secret_access_key:"password",aws_region:"text"},description:"SQS Queue (AWS) Logging Integration"}],a=s.reduce((e,t)=>(e[t.displayName]=t,e),{}),l=s.reduce((e,t)=>(e[t.displayName]=t.id,e),{}),r=s.reduce((e,t)=>(e[t.id]=t.displayName,e),{});e.s(["callbackInfo",0,a,"callback_map",0,l,"mapDisplayToInternalNames",0,e=>e.map(e=>l[e]||e),"mapInternalToDisplayNames",0,e=>e.map(e=>r[e]||e),"reverse_callback_map",0,r])},390605,e=>{"use strict";var t=e.i(843476),s=e.i(271645),a=e.i(602869),l=e.i(599724),r=e.i(482725),i=e.i(91739),n=e.i(500727),o=e.i(531516),d=e.i(696609);e.s(["default",0,({accessToken:e,selectedServers:c,toolPermissions:u,onChange:m,disabled:p=!1})=>{let{data:g=[]}=(0,n.useMCPServers)(),[h,x]=(0,s.useState)({}),[y,_]=(0,s.useState)({}),[f,b]=(0,s.useState)({}),[j,v]=(0,s.useState)({}),w=(0,s.useRef)(u);(0,s.useEffect)(()=>{w.current=u},[u]);let N=(0,s.useMemo)(()=>0===c.length?[]:g.filter(e=>c.includes(e.server_id)),[g,c]),k=async(e,t)=>{_(t=>({...t,[e]:!0})),b(t=>({...t,[e]:""}));try{let s=await (0,a.listMCPTools)(t,e);if(s.error)b(t=>({...t,[e]:s.message||"Failed to fetch tools"})),x(t=>({...t,[e]:[]}));else{let t=s.tools||[];x(s=>({...s,[e]:t}));let a=w.current;if(!a[e]&&t.length>0){let s=t.filter(e=>"delete"!==(0,d.classifyToolOp)(e.name,e.description||"")).map(e=>e.name);m({...a,[e]:s})}}}catch(t){console.error(`Error fetching tools for server ${e}:`,t),b(t=>({...t,[e]:"Failed to fetch tools"})),x(t=>({...t,[e]:[]}))}finally{_(t=>({...t,[e]:!1}))}};(0,s.useEffect)(()=>{N.forEach(t=>{h[t.server_id]||y[t.server_id]||k(t.server_id,e)})},[N,e]);let S=(e,t)=>{m({...u,[e]:t})};return 0===c.length?null:(0,t.jsx)("div",{className:"space-y-4",children:N.map(e=>{let s=e.server_name||e.alias||e.server_id,a=h[e.server_id]||[],n=u[e.server_id]||[],d=y[e.server_id],c=f[e.server_id],g=j[e.server_id]??"crud";return(0,t.jsxs)("div",{className:"border rounded-lg bg-gray-50",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between p-4 border-b bg-white rounded-t-lg",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)(l.Text,{className:"font-semibold text-gray-900",children:s}),e.description&&(0,t.jsx)(l.Text,{className:"text-sm text-gray-500",children:e.description})]}),(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[!p&&a.length>0&&(0,t.jsx)(i.Radio.Group,{value:g,onChange:t=>v(s=>({...s,[e.server_id]:t.target.value})),size:"small",optionType:"button",buttonStyle:"solid",options:[{label:"Risk Groups",value:"crud"},{label:"Flat List",value:"flat"}]}),!p&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("button",{type:"button",className:"text-sm text-blue-600 hover:text-blue-700 font-medium",onClick:()=>{var t;let s;return s=h[t=e.server_id]||[],void m({...u,[t]:s.map(e=>e.name)})},disabled:d,children:"Select All"}),(0,t.jsx)("button",{type:"button",className:"text-sm text-blue-600 hover:text-blue-700 font-medium",onClick:()=>{var t;return t=e.server_id,void m({...u,[t]:[]})},disabled:d,children:"Deselect All"})]})]})]}),(0,t.jsxs)("div",{className:"p-4",children:[d&&(0,t.jsxs)("div",{className:"flex items-center justify-center py-8",children:[(0,t.jsx)(r.Spin,{size:"large"}),(0,t.jsx)(l.Text,{className:"ml-3 text-gray-500",children:"Loading tools..."})]}),c&&!d&&(0,t.jsxs)("div",{className:"p-4 bg-red-50 border border-red-200 rounded-lg text-center",children:[(0,t.jsx)(l.Text,{className:"text-red-600 font-medium",children:"Unable to load tools"}),(0,t.jsx)(l.Text,{className:"text-sm text-red-500 mt-1",children:c})]}),!d&&!c&&a.length>0&&"crud"===g&&(0,t.jsx)(o.default,{tools:a,value:u[e.server_id]?n:void 0,onChange:t=>S(e.server_id,t),readOnly:p}),!d&&!c&&a.length>0&&"flat"===g&&(0,t.jsx)("div",{className:"space-y-2",children:a.map(s=>{let a=n.includes(s.name);return(0,t.jsxs)("div",{className:"flex items-start gap-2",children:[(0,t.jsx)("input",{type:"checkbox",checked:a,onChange:()=>{if(p)return;let t=a?n.filter(e=>e!==s.name):[...n,s.name];S(e.server_id,t)},disabled:p,className:"mt-0.5"}),(0,t.jsx)("div",{className:"flex-1 min-w-0",children:(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(l.Text,{className:"font-medium text-gray-900",children:s.name}),(0,t.jsxs)(l.Text,{className:"text-sm text-gray-500",children:["- ",s.description||"No description"]})]})})]},s.name)})}),!d&&!c&&0===a.length&&(0,t.jsx)("div",{className:"text-center py-6",children:(0,t.jsx)(l.Text,{className:"text-gray-500",children:"No tools available"})})]})]},e.server_id)})})}])},266484,e=>{"use strict";var t=e.i(843476),s=e.i(199133),a=e.i(592968),l=e.i(312361),r=e.i(827252),i=e.i(994388),n=e.i(304967),o=e.i(779241),d=e.i(988297),c=e.i(68155),u=e.i(810757),m=e.i(477386),p=e.i(557662),g=e.i(555987),h=e.i(435451);let{Option:x}=s.Select;e.s(["default",0,({value:e=[],onChange:y,disabledCallbacks:_=[],onDisabledCallbacksChange:f})=>{let b=Object.entries(p.callbackInfo).filter(([e,t])=>t.supports_key_team_logging).map(([e,t])=>e),j=Object.keys(p.callbackInfo),v=e=>{y?.(e)},w=(t,s,a)=>{let l=[...e];if("callback_name"===s){let e=p.callback_map[a]||a;l[t]={...l[t],[s]:e,callback_vars:{}}}else l[t]={...l[t],[s]:a};v(l)},N=(t,s,a)=>{let l=[...e];l[t]={...l[t],callback_vars:{...l[t].callback_vars,[s]:a}},v(l)};return(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,t.jsx)(m.BanIcon,{className:"w-5 h-5 text-red-500"}),(0,t.jsx)("span",{className:"text-base font-semibold text-gray-800",children:"Disabled Callbacks"}),(0,t.jsx)(a.Tooltip,{title:"Select callbacks to disable for this key. Disabled callbacks will not receive any logging data.",children:(0,t.jsx)(r.InfoCircleOutlined,{className:"text-gray-400 cursor-help"})})]}),(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)("label",{className:"text-sm font-medium text-gray-700",children:"Disabled Callbacks"}),(0,t.jsx)(s.Select,{mode:"multiple",placeholder:"Select callbacks to disable",value:_,onChange:e=>{let t=(0,p.mapDisplayToInternalNames)(e);f?.(t)},style:{width:"100%"},optionLabelProp:"label",children:j.map(e=>{let s=(0,g.resolveLogoSrc)(p.callbackInfo[e]?.logo),l=p.callbackInfo[e]?.description;return(0,t.jsx)(x,{value:e,label:e,children:(0,t.jsx)(a.Tooltip,{title:l,placement:"right",children:(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[s&&(0,t.jsx)("img",{src:s,alt:e,className:"w-4 h-4 object-contain",onError:t=>{let s=t.target,a=s.parentElement;if(a){let t=document.createElement("div");t.className="w-4 h-4 rounded-full bg-gray-200 flex items-center justify-center text-xs",t.textContent=e.charAt(0),a.replaceChild(t,s)}}}),(0,t.jsx)("span",{children:e})]})})},e)})}),(0,t.jsx)("div",{className:"text-xs text-gray-500",children:"Select callbacks that should be disabled for this key. These callbacks will not receive any logging data."})]})]}),(0,t.jsx)(l.Divider,{}),(0,t.jsxs)("div",{className:"flex justify-between items-center",children:[(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,t.jsx)(u.CogIcon,{className:"w-5 h-5 text-blue-500"}),(0,t.jsx)("span",{className:"text-base font-semibold text-gray-800",children:"Logging Integrations"}),(0,t.jsx)(a.Tooltip,{title:"Configure callback logging integrations for this team.",children:(0,t.jsx)(r.InfoCircleOutlined,{className:"text-gray-400 cursor-help"})})]}),(0,t.jsx)(i.Button,{variant:"secondary",onClick:()=>{v([...e,{callback_name:"",callback_type:"success",callback_vars:{}}])},icon:d.PlusIcon,size:"sm",className:"hover:border-blue-400 hover:text-blue-500",type:"button",children:"Add Integration"})]}),(0,t.jsx)("div",{className:"space-y-4",children:e.map((l,d)=>{let u=l.callback_name?Object.entries(p.callback_map).find(([e,t])=>t===l.callback_name)?.[0]:void 0,m=u?(0,g.resolveLogoSrc)(p.callbackInfo[u]?.logo):null;return(0,t.jsxs)(n.Card,{className:"border border-gray-200 shadow-sm hover:shadow-md transition-shadow duration-200",decoration:"top",decorationColor:"blue",children:[(0,t.jsxs)("div",{className:"flex justify-between items-start mb-4",children:[(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[m&&(0,t.jsx)("img",{src:m,alt:u,className:"w-5 h-5 object-contain"}),(0,t.jsxs)("span",{className:"text-sm font-medium",children:[u||"New Integration"," Configuration"]})]}),(0,t.jsx)(i.Button,{variant:"light",onClick:()=>{v(e.filter((e,t)=>t!==d))},icon:c.TrashIcon,size:"xs",color:"red",className:"hover:bg-red-50",type:"button",children:"Remove"})]}),(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)("label",{className:"text-sm font-medium text-gray-700",children:"Integration Type"}),(0,t.jsx)(s.Select,{value:u,placeholder:"Select integration",onChange:e=>w(d,"callback_name",e),className:"w-full",optionLabelProp:"label",children:b.map(e=>{let s=(0,g.resolveLogoSrc)(p.callbackInfo[e]?.logo),l=p.callbackInfo[e]?.description;return(0,t.jsx)(x,{value:e,label:e,children:(0,t.jsx)(a.Tooltip,{title:l,placement:"right",children:(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[s&&(0,t.jsx)("img",{src:s,alt:e,className:"w-4 h-4 object-contain",onError:t=>{let s=t.target,a=s.parentElement;if(a){let t=document.createElement("div");t.className="w-4 h-4 rounded-full bg-gray-200 flex items-center justify-center text-xs",t.textContent=e.charAt(0),a.replaceChild(t,s)}}}),(0,t.jsx)("span",{children:e})]})})},e)})})]}),(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)("label",{className:"text-sm font-medium text-gray-700",children:"Event Type"}),(0,t.jsxs)(s.Select,{value:l.callback_type,onChange:e=>w(d,"callback_type",e),className:"w-full",children:[(0,t.jsx)(x,{value:"success",children:(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,t.jsx)("div",{className:"w-2 h-2 bg-green-500 rounded-full"}),(0,t.jsx)("span",{children:"Success Only"})]})}),(0,t.jsx)(x,{value:"failure",children:(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,t.jsx)("div",{className:"w-2 h-2 bg-red-500 rounded-full"}),(0,t.jsx)("span",{children:"Failure Only"})]})}),(0,t.jsx)(x,{value:"success_and_failure",children:(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,t.jsx)("div",{className:"w-2 h-2 bg-blue-500 rounded-full"}),(0,t.jsx)("span",{children:"Success & Failure"})]})})]})]})]}),((e,s)=>{if(!e.callback_name)return null;let l=Object.entries(p.callback_map).find(([t,s])=>s===e.callback_name)?.[0];if(!l)return null;let i=p.callbackInfo[l]?.dynamic_params||{};return 0===Object.keys(i).length?null:(0,t.jsxs)("div",{className:"mt-6 pt-4 border-t border-gray-100",children:[(0,t.jsxs)("div",{className:"flex items-center space-x-2 mb-4",children:[(0,t.jsx)("div",{className:"w-3 h-3 bg-blue-100 rounded-full flex items-center justify-center",children:(0,t.jsx)("div",{className:"w-1.5 h-1.5 bg-blue-500 rounded-full"})}),(0,t.jsx)("span",{className:"text-sm font-medium text-gray-700",children:"Integration Parameters"})]}),(0,t.jsx)("div",{className:"grid grid-cols-1 gap-4",children:Object.entries(i).map(([l,i])=>(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsxs)("label",{className:"text-sm font-medium text-gray-700 capitalize flex items-center space-x-1",children:[(0,t.jsx)("span",{children:l.replace(/_/g," ")}),(0,t.jsx)(a.Tooltip,{title:`Environment variable reference recommended: os.environ/${l.toUpperCase()}`,children:(0,t.jsx)(r.InfoCircleOutlined,{className:"text-gray-400 cursor-help text-xs"})}),"password"===i&&(0,t.jsx)("span",{className:"inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-yellow-100 text-yellow-800",children:"Sensitive"}),"number"===i&&(0,t.jsx)("span",{className:"inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-yellow-100 text-yellow-800",children:"Number"})]}),"number"===i&&(0,t.jsx)("span",{className:"text-xs text-gray-500",children:"Value must be between 0 and 1"}),"number"===i?(0,t.jsx)(h.default,{step:.01,width:400,placeholder:`os.environ/${l.toUpperCase()}`,value:e.callback_vars[l]||"",onChange:e=>N(s,l,e.target.value)}):(0,t.jsx)(o.TextInput,{type:"password"===i?"password":"text",placeholder:`os.environ/${l.toUpperCase()}`,value:e.callback_vars[l]||"",onChange:e=>N(s,l,e.target.value)})]},l))})]})})(l,d)]})]},d)})}),0===e.length&&(0,t.jsxs)("div",{className:"text-center py-12 text-gray-500 border-2 border-dashed border-gray-200 rounded-lg bg-gray-50/50",children:[(0,t.jsx)(u.CogIcon,{className:"w-12 h-12 text-gray-300 mb-3 mx-auto"}),(0,t.jsx)("div",{className:"text-base font-medium mb-1",children:"No logging integrations configured"}),(0,t.jsx)("div",{className:"text-sm text-gray-400",children:'Click "Add Integration" to configure logging for this team'})]})]})}])},460285,e=>{"use strict";var t=e.i(843476),s=e.i(271645),a=e.i(404206),l=e.i(723731),r=e.i(653824),i=e.i(881073),n=e.i(197647),o=e.i(602869),d=e.i(158392),c=e.i(419470),u=e.i(695411);let m=(0,s.forwardRef)(({accessToken:e,value:m,onChange:p,modelData:g},h)=>{let[x,y]=(0,s.useState)({routerSettings:{},selectedStrategy:null,enableTagFiltering:!1}),[_,f]=(0,s.useState)([]),[b,j]=(0,s.useState)([]),[v,w]=(0,s.useState)([]),[N,k]=(0,s.useState)([]),[S,C]=(0,s.useState)({}),[T,I]=(0,s.useState)({}),A=(0,s.useRef)(!1),L=(0,s.useRef)(null);(0,s.useEffect)(()=>{let e=m?.router_settings?JSON.stringify({routing_strategy:m.router_settings.routing_strategy,fallbacks:m.router_settings.fallbacks,enable_tag_filtering:m.router_settings.enable_tag_filtering}):null;if(A.current&&e===L.current){A.current=!1;return}if(A.current&&e!==L.current&&(A.current=!1),e!==L.current)if(L.current=e,m?.router_settings){let e=m.router_settings,{fallbacks:t,...s}=e;y({routerSettings:s,selectedStrategy:e.routing_strategy||null,enableTagFiltering:e.enable_tag_filtering??!1});let a=e.fallbacks||[];f(a),j(a&&0!==a.length?a.map((e,t)=>{let[s,a]=Object.entries(e)[0];return{id:(t+1).toString(),primaryModel:s||null,fallbackModels:a||[]}}):[{id:"1",primaryModel:null,fallbackModels:[]}])}else y({routerSettings:{},selectedStrategy:null,enableTagFiltering:!1}),f([]),j([{id:"1",primaryModel:null,fallbackModels:[]}])},[m]),(0,s.useEffect)(()=>{e&&(0,o.getRouterSettingsCall)(e).then(e=>{if(e.fields){let t={};e.fields.forEach(e=>{t[e.field_name]={ui_field_name:e.ui_field_name,field_description:e.field_description,options:e.options,link:e.link}}),C(t);let s=e.fields.find(e=>"routing_strategy"===e.field_name);s?.options&&k(s.options),e.routing_strategy_descriptions&&I(e.routing_strategy_descriptions)}})},[e]),(0,s.useEffect)(()=>{e&&(async()=>{try{let t=await (0,u.fetchAvailableModels)(e);w(t)}catch(e){console.error("Error fetching model info for fallbacks:",e)}})()},[e]);let F=()=>{let e=new Set(["allowed_fails","cooldown_time","num_retries","timeout","retry_after"]),t=new Set(["model_group_alias","retry_policy"]),s=Object.fromEntries(Object.entries({...x.routerSettings,enable_tag_filtering:x.enableTagFiltering,routing_strategy:x.selectedStrategy,fallbacks:_.length>0?_:null}).map(([s,a])=>{if("routing_strategy_args"!==s&&"routing_strategy"!==s&&"enable_tag_filtering"!==s&&"fallbacks"!==s){let l=document.querySelector(`input[name="${s}"]`);if(l){if(void 0!==l.value&&""!==l.value){let r=((s,a,l)=>{if(null==a)return l;let r=String(a).trim();if(""===r||"null"===r.toLowerCase())return null;if(e.has(s)){let e=Number(r);return Number.isNaN(e)?l:e}if(t.has(s)){if(""===r)return null;try{return JSON.parse(r)}catch{return l}}return"true"===r.toLowerCase()||"false"!==r.toLowerCase()&&r})(s,l.value,a);return[s,r]}return[s,null]}}else if("routing_strategy"===s)return[s,x.selectedStrategy];else if("enable_tag_filtering"===s)return[s,x.enableTagFiltering];else if("fallbacks"===s)return[s,_.length>0?_:null];else if("routing_strategy_args"===s&&"latency-based-routing"===x.selectedStrategy){let e=document.querySelector('input[name="lowest_latency_buffer"]'),t=document.querySelector('input[name="ttl"]'),s={};return e?.value&&(s.lowest_latency_buffer=Number(e.value)),t?.value&&(s.ttl=Number(t.value)),["routing_strategy_args",Object.keys(s).length>0?s:null]}return[s,a]}).filter(e=>null!=e)),a=(e,t=!1)=>null==e||"object"==typeof e&&!Array.isArray(e)&&0===Object.keys(e).length||t&&("number"!=typeof e||Number.isNaN(e))?null:e;return{routing_strategy:a(s.routing_strategy),allowed_fails:a(s.allowed_fails,!0),cooldown_time:a(s.cooldown_time,!0),num_retries:a(s.num_retries,!0),timeout:a(s.timeout,!0),retry_after:a(s.retry_after,!0),fallbacks:_.length>0?_:null,context_window_fallbacks:a(s.context_window_fallbacks),retry_policy:a(s.retry_policy),model_group_alias:a(s.model_group_alias),enable_tag_filtering:x.enableTagFiltering,routing_strategy_args:a(s.routing_strategy_args)}};(0,s.useEffect)(()=>{if(!p)return;let e=setTimeout(()=>{A.current=!0,p({router_settings:F()})},100);return()=>clearTimeout(e)},[x,_]);let O=Array.from(new Set(v.map(e=>e.model_group))).sort();return((0,s.useImperativeHandle)(h,()=>({getValue:()=>({router_settings:F()})})),e)?(0,t.jsx)("div",{className:"w-full",children:(0,t.jsxs)(r.TabGroup,{className:"w-full",children:[(0,t.jsxs)(i.TabList,{variant:"line",defaultValue:"1",className:"px-8 pt-4",children:[(0,t.jsx)(n.Tab,{value:"1",children:"Loadbalancing"}),(0,t.jsx)(n.Tab,{value:"2",children:"Fallbacks"})]}),(0,t.jsxs)(l.TabPanels,{className:"px-8 py-6",children:[(0,t.jsx)(a.TabPanel,{children:(0,t.jsx)(d.default,{value:x,onChange:y,routerFieldsMetadata:S,availableRoutingStrategies:N,routingStrategyDescriptions:T})}),(0,t.jsx)(a.TabPanel,{children:(0,t.jsx)(c.FallbackSelectionForm,{groups:b,onGroupsChange:e=>{j(e),f(e.filter(e=>e.primaryModel&&e.fallbackModels.length>0).map(e=>({[e.primaryModel]:e.fallbackModels})))},availableModels:O,maxGroups:5})})]})]})}):null});m.displayName="RouterSettingsAccordion",e.s(["default",0,m])},207082,e=>{"use strict";var t=e.i(619273),s=e.i(266027),a=e.i(243652),l=e.i(602869),r=e.i(431703),i=e.i(135214);let n=(0,a.createQueryKeys)("keys"),o=async(e,t,s,a={})=>{try{let i=(0,l.getProxyBaseUrl)(),n=new URLSearchParams(Object.entries({team_id:a.teamID,project_id:a.projectID,agent_id:a.agentID,organization_id:a.organizationID,key_alias:a.selectedKeyAlias,key_hash:a.keyHash,user_id:a.userID,page:t,size:s,sort_by:a.sortBy,sort_order:a.sortOrder,expand:a.expand,status:a.status,return_full_object:"true",include_team_keys:"true",include_created_by_keys:"true",substring_matching:"true"}).filter(([,e])=>null!=e).map(([e,t])=>[e,String(t)])),o=`${i?`${i}/key/list`:"/key/list"}?${n}`,d=await fetch(o,{method:"GET",headers:{[(0,l.getGlobalLitellmHeaderName)()]:`Bearer ${e}`,"Content-Type":"application/json"}});if(!d.ok){let e=await d.json(),t=(0,r.deriveErrorMessage)(e);throw(0,l.handleError)(t),Error(t)}let c=await d.json();return console.log("/key/list API Response:",c),c}catch(e){throw console.error("Failed to list keys:",e),e}},d=(0,a.createQueryKeys)("deletedKeys");e.s(["keyKeys",0,n,"useDeletedKeys",0,(e,a,l={})=>{let{accessToken:r}=(0,i.default)();return(0,s.useQuery)({queryKey:d.list({page:e,limit:a,...l}),queryFn:async()=>await o(r,e,a,{...l,status:"deleted"}),enabled:!!r,staleTime:3e4,placeholderData:t.keepPreviousData})},"useKeys",0,(e,a,l={})=>{let{accessToken:r}=(0,i.default)();return(0,s.useQuery)({queryKey:n.list({page:e,limit:a,...l}),queryFn:async()=>await o(r,e,a,l),enabled:!!r,staleTime:3e4,placeholderData:t.keepPreviousData})}])},510674,e=>{"use strict";var t=e.i(266027),s=e.i(243652),a=e.i(602869),l=e.i(431703),r=e.i(135214),i=e.i(708347);let n=(0,s.createQueryKeys)("projects"),o=[...i.all_admin_roles,...i.internalUserRoles],d=async e=>{let t=(0,a.getProxyBaseUrl)(),s=`${t}/project/list`,r=await fetch(s,{method:"GET",headers:{[(0,a.getGlobalLitellmHeaderName)()]:`Bearer ${e}`,"Content-Type":"application/json"}});if(!r.ok){let e=await r.json(),t=(0,l.deriveErrorMessage)(e);throw(0,a.handleError)(t),Error(t)}return r.json()};e.s(["projectKeys",0,n,"useProjects",0,()=>{let{accessToken:e,userRole:s}=(0,r.default)();return(0,t.useQuery)({queryKey:n.list({}),queryFn:async()=>d(e),enabled:!!e&&o.includes(s)})}])},392110,e=>{"use strict";var t=e.i(843476),s=e.i(271645),a=e.i(199133),l=e.i(592968),r=e.i(312361),i=e.i(790848),n=e.i(536916),o=e.i(827252),d=e.i(779241);let{Option:c}=a.Select;e.s(["default",0,({form:e,autoRotationEnabled:u,onAutoRotationChange:m,rotationInterval:p,onRotationIntervalChange:g,isCreateMode:h=!1,neverExpire:x=!1,onNeverExpireChange:y})=>{let _=p&&!["7d","30d","90d","180d","365d"].includes(p),[f,b]=(0,s.useState)(_),[j,v]=(0,s.useState)(_?p:""),[w,N]=(0,s.useState)(e?.getFieldValue?.("duration")||"");return(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsx)("span",{className:"text-sm font-medium text-gray-700",children:"Key Expiry Settings"}),(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsxs)("label",{className:"text-sm font-medium text-gray-700 flex items-center space-x-1",children:[(0,t.jsx)("span",{children:"Expire Key"}),(0,t.jsx)(l.Tooltip,{title:"Set when this key should expire. Format: 30s (seconds), 30m (minutes), 30h (hours), 30d (days). Leave empty to keep the current expiry unchanged.",children:(0,t.jsx)(o.InfoCircleOutlined,{className:"text-gray-400 cursor-help text-xs"})}),!h&&y&&(0,t.jsx)(n.Checkbox,{checked:x,onChange:t=>{let s=t.target.checked;y(s),s&&(N(""),e&&"function"==typeof e.setFieldValue?e.setFieldValue("duration",""):e&&"function"==typeof e.setFieldsValue&&e.setFieldsValue({duration:""}))},className:"ml-2 text-sm font-normal text-gray-600",children:"Never Expire"})]}),(0,t.jsx)(d.TextInput,{name:"duration",placeholder:h?"e.g., 30d or leave empty to never expire":"e.g., 30d",className:"w-full",value:w,onValueChange:t=>{N(t),e&&"function"==typeof e.setFieldValue?e.setFieldValue("duration",t):e&&"function"==typeof e.setFieldsValue&&e.setFieldsValue({duration:t})},disabled:!h&&x})]})]}),(0,t.jsx)(r.Divider,{}),(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsx)("span",{className:"text-sm font-medium text-gray-700",children:"Auto-Rotation Settings"}),(0,t.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsxs)("label",{className:"text-sm font-medium text-gray-700 flex items-center space-x-1",children:[(0,t.jsx)("span",{children:"Enable Auto-Rotation"}),(0,t.jsx)(l.Tooltip,{title:"Key will automatically regenerate at the specified interval for enhanced security.",children:(0,t.jsx)(o.InfoCircleOutlined,{className:"text-gray-400 cursor-help text-xs"})})]}),(0,t.jsx)(i.Switch,{checked:u,onChange:m,size:"default",className:u?"":"bg-gray-400"})]}),u&&(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsxs)("label",{className:"text-sm font-medium text-gray-700 flex items-center space-x-1",children:[(0,t.jsx)("span",{children:"Rotation Interval"}),(0,t.jsx)(l.Tooltip,{title:"How often the key should be automatically rotated. Choose the interval that best fits your security requirements.",children:(0,t.jsx)(o.InfoCircleOutlined,{className:"text-gray-400 cursor-help text-xs"})})]}),(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsxs)(a.Select,{value:f?"custom":p,onChange:e=>{"custom"===e?b(!0):(b(!1),v(""),g(e))},className:"w-full",placeholder:"Select interval",children:[(0,t.jsx)(c,{value:"7d",children:"7 days"}),(0,t.jsx)(c,{value:"30d",children:"30 days"}),(0,t.jsx)(c,{value:"90d",children:"90 days"}),(0,t.jsx)(c,{value:"180d",children:"180 days"}),(0,t.jsx)(c,{value:"365d",children:"365 days"}),(0,t.jsx)(c,{value:"custom",children:"Custom interval"})]}),f&&(0,t.jsxs)("div",{className:"space-y-1",children:[(0,t.jsx)(d.TextInput,{value:j,onChange:e=>{let t=e.target.value;v(t),g(t)},placeholder:"e.g., 1s, 5m, 2h, 14d"}),(0,t.jsx)("div",{className:"text-xs text-gray-500",children:"Supported formats: seconds (s), minutes (m), hours (h), days (d)"})]})]})]})]}),u&&(0,t.jsx)("div",{className:"bg-blue-50 p-3 rounded-md text-sm text-blue-700",children:"When rotation occurs, you'll receive a notification with the new key. The old key will be deactivated after a brief grace period."})]})]})}])},939510,e=>{"use strict";var t=e.i(843476),s=e.i(808613),a=e.i(199133),l=e.i(592968),r=e.i(827252);let{Option:i}=a.Select;e.s(["default",0,({type:e,name:n,showDetailedDescriptions:o=!0,className:d="",initialValue:c=null,form:u,onChange:m})=>{let p=e.toUpperCase(),g=e.toLowerCase(),h=`Select 'guaranteed_throughput' to prevent overallocating ${p} limit when the key belongs to a Team with specific ${p} limits.`;return(0,t.jsx)(s.Form.Item,{label:(0,t.jsxs)("span",{children:[p," Rate Limit Type"," ",(0,t.jsx)(l.Tooltip,{title:h,children:(0,t.jsx)(r.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:n,initialValue:c,className:d,children:(0,t.jsx)(a.Select,{defaultValue:o?"default":void 0,placeholder:"Select rate limit type",style:{width:"100%"},optionLabelProp:o?"label":void 0,onChange:e=>{u&&u.setFieldValue(n,e),m&&m(e)},children:o?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i,{value:"best_effort_throughput",label:"Default",children:(0,t.jsxs)("div",{style:{padding:"4px 0"},children:[(0,t.jsx)("div",{style:{fontWeight:500},children:"Default"}),(0,t.jsxs)("div",{style:{fontSize:"11px",color:"#6b7280",marginTop:"2px"},children:["Best effort throughput - no error if we're overallocating ",g," (Team/Key Limits checked at runtime)."]})]})}),(0,t.jsx)(i,{value:"guaranteed_throughput",label:"Guaranteed throughput",children:(0,t.jsxs)("div",{style:{padding:"4px 0"},children:[(0,t.jsx)("div",{style:{fontWeight:500},children:"Guaranteed throughput"}),(0,t.jsxs)("div",{style:{fontSize:"11px",color:"#6b7280",marginTop:"2px"},children:["Guaranteed throughput - raise an error if we're overallocating ",g," (also checks model-specific limits)"]})]})}),(0,t.jsx)(i,{value:"dynamic",label:"Dynamic",children:(0,t.jsxs)("div",{style:{padding:"4px 0"},children:[(0,t.jsx)("div",{style:{fontWeight:500},children:"Dynamic"}),(0,t.jsxs)("div",{style:{fontSize:"11px",color:"#6b7280",marginTop:"2px"},children:["If the key has a set ",p," (e.g. 2 ",p,") and there are no 429 errors, it can dynamically exceed the limit when the model being called is not erroring."]})]})})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i,{value:"best_effort_throughput",children:"Best effort throughput"}),(0,t.jsx)(i,{value:"guaranteed_throughput",children:"Guaranteed throughput"}),(0,t.jsx)(i,{value:"dynamic",children:"Dynamic"})]})})})}])},363256,e=>{"use strict";var t=e.i(843476),s=e.i(199133);let{Text:a}=e.i(898586).Typography;e.s(["default",0,({organizations:e,value:l,onChange:r,disabled:i,loading:n,style:o})=>(0,t.jsx)(s.Select,{showSearch:!0,placeholder:"All Organizations",value:l,onChange:r,disabled:i,loading:n,allowClear:!0,style:{minWidth:280,...o},filterOption:(t,s)=>{if(!s)return!1;let a=e?.find(e=>e.organization_id===s.key);if(!a)return!1;let l=t.toLowerCase().trim(),r=(a.organization_alias||"").toLowerCase(),i=(a.organization_id||"").toLowerCase();return r.includes(l)||i.includes(l)},children:e?.map(e=>(0,t.jsxs)(s.Select.Option,{value:e.organization_id,children:[(0,t.jsx)("span",{className:"font-medium",children:e.organization_alias})," ",(0,t.jsxs)(a,{type:"secondary",children:["(",e.organization_id,")"]})]},e.organization_id))})])},319312,e=>{"use strict";var t=e.i(843476),s=e.i(464571),a=e.i(28651),l=e.i(199133);let r=[{value:"1h",label:"Hourly",resetHint:"Resets every hour"},{value:"24h",label:"Daily",resetHint:"Resets daily at midnight UTC"},{value:"7d",label:"Weekly",resetHint:"Resets every Sunday at midnight UTC"},{value:"30d",label:"Monthly",resetHint:"Resets on the 1st of every month at midnight UTC"}];e.s(["BudgetWindowsEditor",0,function({value:e,onChange:i}){let n=(t,s,a)=>{i(e.map((e,l)=>l===t?{...e,[s]:a}:e))};return(0,t.jsxs)("div",{children:[e.map((o,d)=>{let c=r.find(e=>e.value===o.budget_duration)?.resetHint;return(0,t.jsxs)("div",{style:{marginBottom:12},children:[(0,t.jsxs)("div",{style:{display:"flex",gap:8,alignItems:"center"},children:[(0,t.jsx)(l.Select,{value:o.budget_duration,onChange:e=>n(d,"budget_duration",e),style:{width:130},options:r.map(e=>({value:e.value,label:e.label}))}),(0,t.jsx)(a.InputNumber,{step:.01,min:0,precision:2,value:o.max_budget??void 0,onChange:e=>n(d,"max_budget",e??null),placeholder:"Max spend ($)",style:{width:160},prefix:"$"}),(0,t.jsx)(s.Button,{type:"text",danger:!0,size:"small",onClick:()=>{i(e.filter((e,t)=>t!==d))},style:{padding:"0 4px"},children:"✕"})]}),c&&(0,t.jsxs)("div",{style:{fontSize:11,color:"#888",marginTop:3,marginLeft:2},children:["↻ ",c]})]},d)}),(0,t.jsx)(s.Button,{size:"small",onClick:t=>{t.preventDefault(),i([...e,{budget_duration:"24h",max_budget:null}])},children:"+ Add Budget Window"})]})}])},109034,e=>{"use strict";var t=e.i(266027),s=e.i(243652),a=e.i(602869),l=e.i(135214);let r=(0,s.createQueryKeys)("tags");e.s(["useTags",0,()=>{let{accessToken:e,userId:s,userRole:i}=(0,l.default)();return(0,t.useQuery)({queryKey:r.list({}),queryFn:async()=>await (0,a.tagListCall)(e),enabled:!!(e&&s&&i)})}])},533882,e=>{"use strict";var t=e.i(843476),s=e.i(271645),a=e.i(250980),l=e.i(797672),r=e.i(68155),i=e.i(304967),n=e.i(629569),o=e.i(599724),d=e.i(269200),c=e.i(427612),u=e.i(64848),m=e.i(942232),p=e.i(496020),g=e.i(977572),h=e.i(992619),x=e.i(727749);e.s(["default",0,({accessToken:e,initialModelAliases:y={},onAliasUpdate:_,showExampleConfig:f=!0})=>{let[b,j]=(0,s.useState)([]),[v,w]=(0,s.useState)({aliasName:"",targetModel:""}),[N,k]=(0,s.useState)(null);(0,s.useEffect)(()=>{j(Object.entries(y).map(([e,t],s)=>({id:`${s}-${e}`,aliasName:e,targetModel:t})))},[y]);let S=()=>{if(!N)return;if(!N.aliasName||!N.targetModel)return void x.default.fromBackend("Please provide both alias name and target model");if(b.some(e=>e.id!==N.id&&e.aliasName===N.aliasName))return void x.default.fromBackend("An alias with this name already exists");let e=b.map(e=>e.id===N.id?N:e);j(e),k(null);let t={};e.forEach(e=>{t[e.aliasName]=e.targetModel}),_&&_(t),x.default.success("Alias updated successfully")},C=()=>{k(null)},T=b.reduce((e,t)=>(e[t.aliasName]=t.targetModel,e),{});return(0,t.jsxs)("div",{className:"mt-4",children:[(0,t.jsxs)("div",{className:"mb-6",children:[(0,t.jsx)(o.Text,{className:"text-sm font-medium text-gray-700 mb-2",children:"Add New Alias"}),(0,t.jsxs)("div",{className:"grid grid-cols-3 gap-4",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"block text-xs text-gray-500 mb-1",children:"Alias Name"}),(0,t.jsx)("input",{type:"text",value:v.aliasName,onChange:e=>w({...v,aliasName:e.target.value}),placeholder:"e.g., gpt-4o",className:"w-full px-3 py-2 border border-gray-300 rounded-md text-sm"})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"block text-xs text-gray-500 mb-1",children:"Target Model"}),(0,t.jsx)(h.default,{accessToken:e,value:v.targetModel,placeholder:"Select target model",onChange:e=>w({...v,targetModel:e}),showLabel:!1})]}),(0,t.jsx)("div",{className:"flex items-end",children:(0,t.jsxs)("button",{onClick:()=>{if(!v.aliasName||!v.targetModel)return void x.default.fromBackend("Please provide both alias name and target model");if(b.some(e=>e.aliasName===v.aliasName))return void x.default.fromBackend("An alias with this name already exists");let e=[...b,{id:`${Date.now()}-${v.aliasName}`,aliasName:v.aliasName,targetModel:v.targetModel}];j(e),w({aliasName:"",targetModel:""});let t={};e.forEach(e=>{t[e.aliasName]=e.targetModel}),_&&_(t),x.default.success("Alias added successfully")},disabled:!v.aliasName||!v.targetModel,className:`flex items-center px-4 py-2 rounded-md text-sm ${!v.aliasName||!v.targetModel?"bg-gray-300 text-gray-500 cursor-not-allowed":"bg-green-600 text-white hover:bg-green-700"}`,children:[(0,t.jsx)(a.PlusCircleIcon,{className:"w-4 h-4 mr-1"}),"Add Alias"]})})]})]}),(0,t.jsx)(o.Text,{className:"text-sm font-medium text-gray-700 mb-2",children:"Manage Existing Aliases"}),(0,t.jsx)("div",{className:"rounded-lg custom-border relative mb-6",children:(0,t.jsx)("div",{className:"overflow-x-auto",children:(0,t.jsxs)(d.Table,{className:"[&_td]:py-0.5 [&_th]:py-1",children:[(0,t.jsx)(c.TableHead,{children:(0,t.jsxs)(p.TableRow,{children:[(0,t.jsx)(u.TableHeaderCell,{className:"py-1 h-8",children:"Alias Name"}),(0,t.jsx)(u.TableHeaderCell,{className:"py-1 h-8",children:"Target Model"}),(0,t.jsx)(u.TableHeaderCell,{className:"py-1 h-8",children:"Actions"})]})}),(0,t.jsxs)(m.TableBody,{children:[b.map(s=>(0,t.jsx)(p.TableRow,{className:"h-8",children:N&&N.id===s.id?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(g.TableCell,{className:"py-0.5",children:(0,t.jsx)("input",{type:"text",value:N.aliasName,onChange:e=>k({...N,aliasName:e.target.value}),className:"w-full px-2 py-1 border border-gray-300 rounded-md text-sm"})}),(0,t.jsx)(g.TableCell,{className:"py-0.5",children:(0,t.jsx)(h.default,{accessToken:e,value:N.targetModel,onChange:e=>k({...N,targetModel:e}),showLabel:!1,style:{height:"32px"}})}),(0,t.jsx)(g.TableCell,{className:"py-0.5 whitespace-nowrap",children:(0,t.jsxs)("div",{className:"flex space-x-2",children:[(0,t.jsx)("button",{onClick:S,className:"text-xs bg-blue-50 text-blue-600 px-2 py-1 rounded hover:bg-blue-100",children:"Save"}),(0,t.jsx)("button",{onClick:C,className:"text-xs bg-gray-50 text-gray-600 px-2 py-1 rounded hover:bg-gray-100",children:"Cancel"})]})})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(g.TableCell,{className:"py-0.5 text-sm text-gray-900",children:s.aliasName}),(0,t.jsx)(g.TableCell,{className:"py-0.5 text-sm text-gray-500",children:s.targetModel}),(0,t.jsx)(g.TableCell,{className:"py-0.5 whitespace-nowrap",children:(0,t.jsxs)("div",{className:"flex space-x-2",children:[(0,t.jsx)("button",{onClick:()=>{k({...s})},className:"text-xs bg-blue-50 text-blue-600 px-2 py-1 rounded hover:bg-blue-100",children:(0,t.jsx)(l.PencilIcon,{className:"w-3 h-3"})}),(0,t.jsx)("button",{onClick:()=>{var e;let t,a;return e=s.id,j(t=b.filter(t=>t.id!==e)),a={},void(t.forEach(e=>{a[e.aliasName]=e.targetModel}),_&&_(a),x.default.success("Alias deleted successfully"))},className:"text-xs bg-red-50 text-red-600 px-2 py-1 rounded hover:bg-red-100",children:(0,t.jsx)(r.TrashIcon,{className:"w-3 h-3"})})]})})]})},s.id)),0===b.length&&(0,t.jsx)(p.TableRow,{children:(0,t.jsx)(g.TableCell,{colSpan:3,className:"py-0.5 text-sm text-gray-500 text-center",children:"No aliases added yet. Add a new alias above."})})]})]})})}),f&&(0,t.jsxs)(i.Card,{children:[(0,t.jsx)(n.Title,{className:"mb-4",children:"Configuration Example"}),(0,t.jsx)(o.Text,{className:"text-gray-600 mb-4",children:"Here's how your current aliases would look in the config:"}),(0,t.jsx)("div",{className:"bg-gray-100 rounded-lg p-4 font-mono text-sm",children:(0,t.jsxs)("div",{className:"text-gray-700",children:["model_aliases:",0===Object.keys(T).length?(0,t.jsxs)("span",{className:"text-gray-500",children:[(0,t.jsx)("br",{}),"  # No aliases configured yet"]}):Object.entries(T).map(([e,s])=>(0,t.jsxs)("span",{children:[(0,t.jsx)("br",{}),'  "',e,'": "',s,'"']},e))]})})]})]})}])},651904,e=>{"use strict";var t=e.i(843476),s=e.i(599724),a=e.i(266484);e.s(["default",0,function({value:e,onChange:l,premiumUser:r=!1,disabledCallbacks:i=[],onDisabledCallbacksChange:n}){return r?(0,t.jsx)(a.default,{value:e,onChange:l,disabledCallbacks:i,onDisabledCallbacksChange:n}):(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"flex flex-wrap gap-2 mb-3",children:[(0,t.jsx)("div",{className:"inline-flex items-center px-3 py-1.5 rounded-lg bg-green-50 border border-green-200 text-green-800 text-sm font-medium opacity-50",children:"✨ langfuse-logging"}),(0,t.jsx)("div",{className:"inline-flex items-center px-3 py-1.5 rounded-lg bg-green-50 border border-green-200 text-green-800 text-sm font-medium opacity-50",children:"✨ datadog-logging"})]}),(0,t.jsx)("div",{className:"p-3 bg-yellow-50 border border-yellow-200 rounded-lg",children:(0,t.jsxs)(s.Text,{className:"text-sm text-yellow-800",children:["Setting Key/Team logging settings is a LiteLLM Enterprise feature. Global Logging Settings are available for all free users. Get a trial key"," ",(0,t.jsx)("a",{href:"https://www.litellm.ai/#pricing",target:"_blank",rel:"noopener noreferrer",className:"underline",children:"here"}),"."]})})]})}])},575260,e=>{"use strict";var t=e.i(843476),s=e.i(199133),a=e.i(482725),l=e.i(56456);e.s(["default",0,({projects:e,value:r,onChange:i,disabled:n,loading:o,teamId:d})=>{let c=d?e?.filter(e=>e.team_id===d):e;return(0,t.jsx)(s.Select,{showSearch:!0,placeholder:"Search or select a project",value:r,onChange:i,disabled:n,loading:o,allowClear:!0,notFoundContent:o?(0,t.jsx)(a.Spin,{indicator:(0,t.jsx)(l.LoadingOutlined,{spin:!0}),size:"small"}):void 0,filterOption:(e,t)=>{if(!t)return!1;let s=c?.find(e=>e.project_id===t.key);if(!s)return!1;let a=e.toLowerCase().trim(),l=(s.project_alias||"").toLowerCase(),r=(s.project_id||"").toLowerCase();return l.includes(a)||r.includes(a)},optionFilterProp:"children",children:!o&&c?.map(e=>(0,t.jsxs)(s.Select.Option,{value:e.project_id,children:[(0,t.jsx)("span",{className:"font-medium",children:e.project_alias||e.project_id})," ",(0,t.jsxs)("span",{className:"text-gray-500",children:["(",e.project_id,")"]})]},e.project_id))})}])},364769,e=>{"use strict";var t=e.i(843476),s=e.i(271645),a=e.i(237016),l=e.i(464571),r=e.i(888259);e.s(["default",0,({apiKey:e})=>{let[i,n]=(0,s.useState)(!1);return(0,t.jsxs)("div",{children:[(0,t.jsxs)("p",{className:"mb-2",children:["Please save this secret key somewhere safe and accessible. For security reasons,"," ",(0,t.jsx)("b",{children:"you will not be able to view it again"})," through your LiteLLM account. If you lose this secret key, you will need to generate a new one."]}),(0,t.jsx)("p",{className:"text-sm text-gray-600 mt-3 mb-1",children:"Virtual Key:"}),(0,t.jsx)("div",{style:{background:"#f8f8f8",padding:"10px",borderRadius:"5px",marginBottom:"10px"},children:(0,t.jsx)("pre",{style:{wordWrap:"break-word",whiteSpace:"normal",margin:0},children:e})}),(0,t.jsx)(a.CopyToClipboard,{text:e,onCopy:()=>{n(!0),r.default.success("Key copied to clipboard"),setTimeout(()=>n(!1),2e3)},children:(0,t.jsx)(l.Button,{type:"primary",style:{marginTop:12},children:i?"Copied!":"Copy Virtual Key"})})]})}])},702597,e=>{"use strict";var t=e.i(843476),s=e.i(207082),a=e.i(109799),l=e.i(510674),r=e.i(109034),i=e.i(292639),n=e.i(135214),o=e.i(500330),d=e.i(827252),c=e.i(912598),u=e.i(677667),m=e.i(130643),p=e.i(898667),g=e.i(994388),h=e.i(309426),x=e.i(350967),y=e.i(599724),_=e.i(779241),f=e.i(629569),b=e.i(464571),j=e.i(808613),v=e.i(311451),w=e.i(212931),N=e.i(91739),k=e.i(199133),S=e.i(790848),C=e.i(262218),T=e.i(592968),I=e.i(898586),A=e.i(374009),L=e.i(271645),F=e.i(708347),O=e.i(552130),E=e.i(557662),M=e.i(9314),P=e.i(860585),R=e.i(82946),$=e.i(392110),B=e.i(533882),V=e.i(844565),D=e.i(651904),U=e.i(939510),z=e.i(460285),G=e.i(663435),K=e.i(363256),q=e.i(575260),H=e.i(371455),W=e.i(319312),Q=e.i(355619),J=e.i(75921),Y=e.i(234713),X=e.i(390605),Z=e.i(727749),ee=e.i(602869),et=e.i(364769),es=e.i(435451),ea=e.i(916940);let{Option:el}=k.Select,er=async(e,t,s,a)=>{try{if(null===e||null===t)return[];if(null!==s){let l=(await (0,ee.modelAvailableCall)(s,e,t,!0,a,!0)).data.map(e=>e.id);return console.log("available_model_names:",l),l}return[]}catch(e){return console.error("Error fetching user models:",e),[]}},ei=async(e,t,s,a)=>{try{if(null===e||null===t)return;if(null!==s){let l=(await (0,ee.modelAvailableCall)(s,e,t)).data.map(e=>e.id);console.log("available_model_names:",l),a(l)}}catch(e){console.error("Error fetching user models:",e)}};e.s(["default",0,({team:e,teams:en,data:eo,addKey:ed,autoOpenCreate:ec,prefillData:eu})=>{let{accessToken:em,userId:ep,userRole:eg,premiumUser:eh}=(0,n.default)(),ex=eh||null!=eg&&F.rolesWithWriteAccess.includes(eg),{data:ey,isLoading:e_}=(0,a.useOrganizations)(),{data:ef,isLoading:eb}=(0,l.useProjects)(),{data:ej}=(0,i.useUISettings)(),{data:ev}=(0,r.useTags)(),ew=!!ej?.values?.enable_projects_ui,eN=!!ej?.values?.disable_custom_api_keys,ek=ev?Object.values(ev).map(e=>({value:e.name,label:e.name})):[],eS=(0,c.useQueryClient)(),[eC]=j.Form.useForm(),[eT,eI]=(0,L.useState)(!1),[eA,eL]=(0,L.useState)(null),[eF,eO]=(0,L.useState)(null),[eE,eM]=(0,L.useState)([]),[eP,eR]=(0,L.useState)([]),[e$,eB]=(0,L.useState)("you"),[eV,eD]=(0,L.useState)(!1),[eU,ez]=(0,L.useState)(null),[eG,eK]=(0,L.useState)([]),[eq,eH]=(0,L.useState)([]),[eW,eQ]=(0,L.useState)([]),[eJ,eY]=(0,L.useState)([]),[eX,eZ]=(0,L.useState)(e),[e0,e1]=(0,L.useState)(null),[e4,e2]=(0,L.useState)(null),[e5,e3]=(0,L.useState)(!1),[e6,e7]=(0,L.useState)(null),[e9,e8]=(0,L.useState)({}),[te,tt]=(0,L.useState)([]),[ts,ta]=(0,L.useState)(!1),[tl,tr]=(0,L.useState)([]),[ti,tn]=(0,L.useState)([]),[to,td]=(0,L.useState)("llm_api"),[tc,tu]=(0,L.useState)({}),[tm,tp]=(0,L.useState)(!1),[tg,th]=(0,L.useState)("30d"),[tx,ty]=(0,L.useState)(null),[t_,tf]=(0,L.useState)([]),[tb,tj]=(0,L.useState)(0),[tv,tw]=(0,L.useState)([]),[tN,tk]=(0,L.useState)(null),tS=()=>{eI(!1),eC.resetFields(),eY([]),tn([]),td("llm_api"),tu({}),tp(!1),th("30d"),ty(null),tj(e=>e+1),tk(null),e1(null),e2(null),tf([])},tC=()=>{eI(!1),eL(null),eZ(null),eC.resetFields(),eY([]),tn([]),td("llm_api"),tu({}),tp(!1),th("30d"),ty(null),tj(e=>e+1),tk(null),e1(null),e2(null),tf([])};(0,L.useEffect)(()=>{ep&&eg&&em&&ei(ep,eg,em,eM)},[em,ep,eg]),(0,L.useEffect)(()=>{em&&(0,ee.getAgentsList)(em).then(e=>tw(e?.agents||[])).catch(()=>tw([]))},[em]),(0,L.useEffect)(()=>{let e=async()=>{try{let e=(await (0,ee.getPoliciesList)(em)).policies.map(e=>e.policy_name);eH(e)}catch(e){console.error("Failed to fetch policies:",e)}},t=async()=>{try{let e=await (0,ee.getPromptsList)(em);eQ(e.prompts.map(e=>e.prompt_id))}catch(e){console.error("Failed to fetch prompts:",e)}};(async()=>{try{let e=(await (0,ee.getGuardrailsList)(em)).guardrails.map(e=>e.guardrail_name);eK(e)}catch(e){console.error("Failed to fetch guardrails:",e)}})(),e(),t()},[em]),(0,L.useEffect)(()=>{(async()=>{try{if(em){let e=sessionStorage.getItem("possibleUserRoles");if(e)e8(JSON.parse(e));else{let e=await (0,ee.getPossibleUserRoles)(em);sessionStorage.setItem("possibleUserRoles",JSON.stringify(e)),e8(e)}}}catch(e){console.error("Error fetching possible user roles:",e)}})()},[em]),(0,L.useEffect)(()=>{if(ec&&!eV&&en&&eg&&F.rolesWithWriteAccess.includes(eg)&&(eI(!0),eD(!0),eu)){if(eu.owned_by&&("another_user"===eu.owned_by&&"Admin"!==eg?eB("you"):eB(eu.owned_by)),eu.team_id){let e=en?.find(e=>e.team_id===eu.team_id)||null;e&&(eZ(e),eC.setFieldsValue({team_id:eu.team_id}))}eu.key_alias&&eC.setFieldsValue({key_alias:eu.key_alias}),eu.models&&eu.models.length>0&&ez(eu.models),eu.key_type&&(td(eu.key_type),eC.setFieldsValue({key_type:eu.key_type}))}},[ec,eu,en,eV,eC,eg]);let tT=eP.includes("no-default-models")&&!eX,tI=async e=>{try{let t,a=e?.key_alias??"",l=e?.team_id??null;if((eo?.filter(e=>e.team_id===l).map(e=>e.key_alias)??[]).includes(a))throw Error(`Key alias ${a} already exists for team with ID ${l}, please provide another key alias`);if(Z.default.info("Making API Call"),eI(!0),"you"===e$)e.user_id=ep;else if("agent"===e$){if(!tN)return void Z.default.fromBackend("Please select an agent");e.agent_id=tN}let r={};try{r=JSON.parse(e.metadata||"{}")}catch(e){console.error("Error parsing metadata:",e)}if("service_account"===e$&&(r.service_account_id=e.key_alias),eJ.length>0&&(r={...r,logging:eJ.filter(e=>e.callback_name)}),ti.length>0){let e=(0,E.mapDisplayToInternalNames)(ti);r={...r,litellm_disabled_callbacks:e}}if(tm&&(e.auto_rotate=!0,e.rotation_interval=tg),e.duration&&""!==e.duration.trim()||(e.duration=null),e.metadata=JSON.stringify(r),e.disable_global_guardrails||delete e.disable_global_guardrails,e.allowed_vector_store_ids&&e.allowed_vector_store_ids.length>0&&(e.object_permission={vector_stores:e.allowed_vector_store_ids},delete e.allowed_vector_store_ids),e.allowed_mcp_servers_and_groups&&(e.allowed_mcp_servers_and_groups.servers?.length>0||e.allowed_mcp_servers_and_groups.accessGroups?.length>0)){e.object_permission||(e.object_permission={});let{servers:t,accessGroups:s}=e.allowed_mcp_servers_and_groups;t&&t.length>0&&(e.object_permission.mcp_servers=t),s&&s.length>0&&(e.object_permission.mcp_access_groups=s),delete e.allowed_mcp_servers_and_groups}let i=e.mcp_tool_permissions||{};if(Object.keys(i).length>0&&(e.object_permission||(e.object_permission={}),e.object_permission.mcp_tool_permissions=i),delete e.mcp_tool_permissions,e.allowed_mcp_access_groups&&e.allowed_mcp_access_groups.length>0&&(e.object_permission||(e.object_permission={}),e.object_permission.mcp_access_groups=e.allowed_mcp_access_groups,delete e.allowed_mcp_access_groups),e.allowed_agents_and_groups&&(e.allowed_agents_and_groups.agents?.length>0||e.allowed_agents_and_groups.accessGroups?.length>0)){e.object_permission||(e.object_permission={});let{agents:t,accessGroups:s}=e.allowed_agents_and_groups;t&&t.length>0&&(e.object_permission.agents=t),s&&s.length>0&&(e.object_permission.agent_access_groups=s),delete e.allowed_agents_and_groups}Object.keys(tc).length>0&&(e.aliases=JSON.stringify(tc)),tx?.router_settings&&Object.values(tx.router_settings).some(e=>null!=e&&""!==e)&&(e.router_settings=tx.router_settings);let n=t_.filter(e=>e.budget_duration&&null!==e.max_budget&&void 0!==e.max_budget);n.length>0&&(e.budget_limits=n),t="service_account"===e$?await (0,ee.keyCreateServiceAccountCall)(em,e):await (0,ee.keyCreateCall)(em,ep,e),console.log("key create Response:",t),ed(t),eS.invalidateQueries({queryKey:s.keyKeys.lists()}),eL(t.key),eO(t.soft_budget),Z.default.success("Virtual Key Created"),eC.resetFields(),tf([]),localStorage.removeItem("userData"+ep)}catch(t){console.log("error in create key:",t);let e=(e=>{let t;if(!(t=!e||"object"!=typeof e||e instanceof Error?String(e):JSON.stringify(e)).includes("/key/generate")&&!t.includes("KeyManagementRoutes.KEY_GENERATE"))return`Error creating the key: ${e}`;let s=t;try{if(!e||"object"!=typeof e||e instanceof Error){let e=t.match(/\{[\s\S]*\}/);if(e){let t=JSON.parse(e[0]),a=t?.error||t;a?.message&&(s=a.message)}}else{let t=e?.error||e;t?.message&&(s=t.message)}}catch(e){}return t.includes("team_member_permission_error")||s.includes("Team member does not have permissions")?"Team member does not have permission to generate key for this team. Ask your proxy admin to configure the team member permission settings.":`Error creating the key: ${e}`})(t);Z.default.fromBackend(e)}};(0,L.useEffect)(()=>{if(e4){let e=ef?.find(e=>e.project_id===e4);eR(e?.models??[]),eC.setFieldValue("models",[]);return}ep&&eg&&em&&er(ep,eg,em,eX?.team_id??null).then(e=>{eR(Array.from(new Set([...eX?.models??[],...e])))}),eU||eC.setFieldValue("models",[]),eC.setFieldValue("allowed_mcp_servers_and_groups",{servers:[],accessGroups:[]})},[eX,e4,em,ep,eg,eC]),(0,L.useEffect)(()=>{if(!eU||0===eU.length||!eP||0===eP.length)return;let e=eU.filter(e=>eP.includes(e));e.length>0&&eC.setFieldsValue({models:e}),ez(null)},[eU,eP,eC]),(0,L.useEffect)(()=>{if(!e4||!en)return;let e=ef?.find(e=>e.project_id===e4);if(!e?.team_id||eX?.team_id===e.team_id)return;let t=en.find(t=>t.team_id===e.team_id)||null;t&&(eZ(t),eC.setFieldValue("team_id",t.team_id))},[en,e4,ef]);let tA=async e=>{if(!e)return void tt([]);ta(!0);try{let t=new URLSearchParams;if(t.append("user_email",e),null==em)return;let s=(await (0,ee.userFilterUICall)(em,t)).map(e=>({label:`${e.user_email} (${e.user_id})`,value:e.user_id,user:e}));tt(s)}catch(e){console.error("Error fetching users:",e),Z.default.fromBackend("Failed to search for users")}finally{ta(!1)}},tL=(0,L.useCallback)((0,A.default)(e=>tA(e),300),[em]);return(0,t.jsxs)("div",{children:[eg&&F.rolesWithWriteAccess.includes(eg)&&(0,t.jsx)(g.Button,{className:"mx-auto",onClick:()=>eI(!0),"data-testid":"create-key-button",children:"+ Create New Key"}),(0,t.jsx)(w.Modal,{open:eT,width:1e3,footer:null,onOk:tS,onCancel:tC,children:(0,t.jsxs)(j.Form,{form:eC,onFinish:tI,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,t.jsxs)("div",{className:"mb-8",children:[(0,t.jsx)(f.Title,{className:"mb-4",children:"Key Ownership"}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Owned By"," ",(0,t.jsx)(T.Tooltip,{title:"Select who will own this Virtual Key",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),className:"mb-4",children:(0,t.jsxs)(N.Radio.Group,{onChange:e=>eB(e.target.value),value:e$,children:[(0,t.jsx)(N.Radio,{value:"you",children:"You"}),(0,t.jsx)(N.Radio,{value:"service_account",children:"Service Account"}),"Admin"===eg&&(0,t.jsx)(N.Radio,{value:"another_user",children:"Another User"}),(0,t.jsxs)(N.Radio,{value:"agent",children:["Agent ",(0,t.jsx)(C.Tag,{color:"purple",children:"New"})]})]})}),"another_user"===e$&&(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["User ID"," ",(0,t.jsx)(T.Tooltip,{title:"The user who will own this key and be responsible for its usage",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"user_id",className:"mt-4",rules:[{required:"another_user"===e$,message:"Please input the user ID of the user you are assigning the key to"}],children:(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{style:{display:"flex",marginBottom:"8px"},children:[(0,t.jsx)(k.Select,{showSearch:!0,placeholder:"Type email to search for users",filterOption:!1,onSearch:e=>{tL(e)},onSelect:(e,t)=>{let s;return s=t.user,void eC.setFieldsValue({user_id:s.user_id})},options:te,loading:ts,allowClear:!0,style:{width:"100%"},notFoundContent:ts?"Searching...":"No users found"}),(0,t.jsx)(b.Button,{onClick:()=>e3(!0),style:{marginLeft:"8px"},children:"Create User"})]}),(0,t.jsx)("div",{className:"text-xs text-gray-500",children:"Search by email to find users"})]})}),"agent"===e$&&(0,t.jsxs)("div",{className:"mt-4 p-4 bg-purple-50 border border-purple-200 rounded-md",children:[(0,t.jsx)("div",{className:"mb-3",children:(0,t.jsxs)("span",{className:"text-sm font-medium text-gray-700",children:["Select Agent ",(0,t.jsx)("span",{className:"text-red-500",children:"*"})]})}),(0,t.jsx)(k.Select,{showSearch:!0,placeholder:"Select an agent",style:{width:"100%"},value:tN,onChange:e=>tk(e),filterOption:(e,t)=>t?.label?.toLowerCase().includes(e.toLowerCase()),options:tv.map(e=>({label:e.agent_name||e.agent_id,value:e.agent_id}))}),(0,t.jsx)("div",{className:"text-xs text-gray-500 mt-2",children:"This key will be used by the selected agent to make requests to LiteLLM"})]}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Organization"," ",(0,t.jsx)(T.Tooltip,{title:"The organization this key belongs to. Selecting an organization filters the available teams.",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"organization_id",className:"mt-4",children:(0,t.jsx)(K.default,{organizations:ey,loading:e_,disabled:"Admin"!==eg,onChange:e=>{e1(e||null),eZ(null),e2(null),eC.setFieldValue("team_id",void 0),eC.setFieldValue("project_id",void 0)}})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Team"," ",(0,t.jsx)(T.Tooltip,{title:"The team this key belongs to, which determines available models and budget limits",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"team_id",initialValue:e?e.team_id:null,className:"mt-4",rules:[{required:"service_account"===e$,message:"Please select a team for the service account"}],help:"service_account"===e$?"required":"",children:(0,t.jsx)(G.default,{disabled:null!==e4,organizationId:e0,onTeamSelect:e=>{eZ(e),e2(null),eC.setFieldValue("project_id",void 0),e?.organization_id?(e1(e.organization_id),eC.setFieldValue("organization_id",e.organization_id)):e||(e1(null),eC.setFieldValue("organization_id",void 0))}})}),ew&&(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Project"," ",(0,t.jsx)(T.Tooltip,{title:"Assign this key to a project. Selecting a project will lock the team to the project's team.",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"project_id",className:"mt-4",children:(0,t.jsx)(q.default,{projects:ef,teamId:eX?.team_id,loading:eb||!en,onChange:e=>{if(!e){e2(null),eZ(null),eC.setFieldValue("team_id",void 0);return}e2(e)}})})]}),tT&&(0,t.jsx)("div",{className:"mb-8 p-4 bg-blue-50 border border-blue-200 rounded-md",children:(0,t.jsx)(y.Text,{className:"text-blue-800 text-sm",children:"Please select a team to continue configuring your Virtual Key. If you do not see any teams, please contact your Proxy Admin to either provide you with access to models or to add you to a team."})}),!tT&&(0,t.jsxs)("div",{className:"mb-8",children:[(0,t.jsx)(f.Title,{className:"mb-4",children:"Key Details"}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["you"===e$||"another_user"===e$?"Key Name":"Service Account ID"," ",(0,t.jsx)(T.Tooltip,{title:"you"===e$||"another_user"===e$?"A descriptive name to identify this key":"Unique identifier for this service account",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"key_alias",rules:[{required:!0,message:`Please input a ${"you"===e$?"key name":"service account ID"}`}],help:"required",children:(0,t.jsx)(_.TextInput,{placeholder:""})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Models"," ",(0,t.jsx)(T.Tooltip,{title:"Select which models this key can access. Choose 'All Team Models' to grant access to all models available to the team. Leave empty to allow access to all models.",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"models",rules:[],help:"management"===to||"read_only"===to?"Models field is disabled for this key type":"optional - leave empty to allow access to all models",className:"mt-4",children:(0,t.jsxs)(k.Select,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},disabled:"management"===to||"read_only"===to,onChange:e=>{e.includes("all-team-models")&&eC.setFieldsValue({models:["all-team-models"]})},children:[!e4&&(0,t.jsx)(el,{value:"all-team-models",children:"All Team Models"},"all-team-models"),eP.map(e=>(0,t.jsx)(el,{value:e,children:(0,Q.getModelDisplayName)(e)},e))]})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Key Type"," ",(0,t.jsx)(T.Tooltip,{title:"Select the type of key to determine what routes and operations this key can access",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"key_type",initialValue:"llm_api",className:"mt-4",children:(0,t.jsxs)(k.Select,{defaultValue:"llm_api",placeholder:"Select key type",style:{width:"100%"},optionLabelProp:"label",onChange:e=>{td(e),("management"===e||"read_only"===e)&&eC.setFieldsValue({models:[]})},children:[(0,t.jsx)(el,{value:"llm_api",label:"AI APIs",children:(0,t.jsxs)("div",{style:{padding:"4px 0"},children:[(0,t.jsx)(I.Typography.Text,{strong:!0,children:"AI APIs"}),(0,t.jsx)(I.Typography.Paragraph,{type:"secondary",style:{fontSize:11,margin:"2px 0 0"},children:"Can call only AI API routes (chat/completions, embeddings, etc.)"})]})}),(0,t.jsx)(el,{value:"management",label:"Management",children:(0,t.jsxs)("div",{style:{padding:"4px 0"},children:[(0,t.jsx)(I.Typography.Text,{strong:!0,children:"Management"}),(0,t.jsx)(I.Typography.Paragraph,{type:"secondary",style:{fontSize:11,margin:"2px 0 0"},children:"Can call only management routes (user/team/key management)"})]})}),(0,t.jsx)(el,{value:"default",label:"Full Access",children:(0,t.jsxs)("div",{style:{padding:"4px 0"},children:[(0,t.jsx)(I.Typography.Text,{strong:!0,children:"Full Access"}),(0,t.jsx)(I.Typography.Paragraph,{type:"secondary",style:{fontSize:11,margin:"2px 0 0"},children:"Can call all routes (AI APIs, Management, and read-only)"})]})})]})})]}),!tT&&(0,t.jsx)("div",{className:"mb-8",children:(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)(f.Title,{className:"m-0",children:"Optional Settings"})}),(0,t.jsxs)(m.AccordionBody,{children:[(0,t.jsx)(j.Form.Item,{className:"mt-4",label:(0,t.jsxs)("span",{children:["Max Budget (USD)"," ",(0,t.jsx)(T.Tooltip,{title:"Maximum amount in USD this key can spend. When reached, the key will be blocked from making further requests",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"max_budget",help:`Budget cannot exceed team max budget: $${e?.max_budget!==null&&e?.max_budget!==void 0?e?.max_budget:"unlimited"}`,rules:[{validator:async(t,s)=>{if(s&&e&&null!==e.max_budget&&s>e.max_budget)throw Error(`Budget cannot exceed team max budget: $${(0,o.formatNumberWithCommas)(e.max_budget,4)}`)}}],children:(0,t.jsx)(es.default,{step:.01,precision:2,width:200})}),(0,t.jsx)(j.Form.Item,{className:"mt-4",label:(0,t.jsxs)("span",{children:["Reset Budget"," ",(0,t.jsx)(T.Tooltip,{title:"How often the budget should reset. For example, setting 'daily' will reset the budget every 24 hours",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"budget_duration",help:`Team Reset Budget: ${e?.budget_duration!==null&&e?.budget_duration!==void 0?e?.budget_duration:"None"}`,children:(0,t.jsx)(P.default,{onChange:e=>eC.setFieldValue("budget_duration",e)})}),(0,t.jsx)(j.Form.Item,{className:"mt-4",label:(0,t.jsxs)("span",{children:["Budget Windows"," ",(0,t.jsx)(T.Tooltip,{title:"Set multiple independent budget windows (e.g., hourly $10 AND monthly $200). Each window tracks spend separately and resets on its own schedule.",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),children:(0,t.jsx)(W.BudgetWindowsEditor,{value:t_,onChange:tf})}),(0,t.jsx)(j.Form.Item,{className:"mt-4",label:(0,t.jsxs)("span",{children:["Tokens per minute Limit (TPM)"," ",(0,t.jsx)(T.Tooltip,{title:"Maximum number of tokens this key can process per minute. Helps control usage and costs",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"tpm_limit",help:`TPM cannot exceed team TPM limit: ${e?.tpm_limit!==null&&e?.tpm_limit!==void 0?e?.tpm_limit:"unlimited"}`,rules:[{validator:async(t,s)=>{if(s&&e&&null!==e.tpm_limit&&s>e.tpm_limit)throw Error(`TPM limit cannot exceed team TPM limit: ${e.tpm_limit}`)}}],children:(0,t.jsx)(es.default,{step:1,width:400})}),(0,t.jsx)(U.default,{type:"tpm",name:"tpm_limit_type",className:"mt-4",initialValue:null,form:eC,showDetailedDescriptions:!0}),(0,t.jsx)(j.Form.Item,{className:"mt-4",label:(0,t.jsxs)("span",{children:["Requests per minute Limit (RPM)"," ",(0,t.jsx)(T.Tooltip,{title:"Maximum number of API requests this key can make per minute. Helps prevent abuse and manage load",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"rpm_limit",help:`RPM cannot exceed team RPM limit: ${e?.rpm_limit!==null&&e?.rpm_limit!==void 0?e?.rpm_limit:"unlimited"}`,rules:[{validator:async(t,s)=>{if(s&&e&&null!==e.rpm_limit&&s>e.rpm_limit)throw Error(`RPM limit cannot exceed team RPM limit: ${e.rpm_limit}`)}}],children:(0,t.jsx)(es.default,{step:1,width:400})}),(0,t.jsx)(U.default,{type:"rpm",name:"rpm_limit_type",className:"mt-4",initialValue:null,form:eC,showDetailedDescriptions:!0}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Guardrails"," ",(0,t.jsx)(T.Tooltip,{title:"Apply safety guardrails to this key to filter content or enforce policies",children:(0,t.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/guardrails/quick_start",target:"_blank",rel:"noopener noreferrer",onClick:e=>e.stopPropagation(),children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})})]}),name:"guardrails",className:"mt-4",help:ex?"Select existing guardrails or enter new ones":"Premium feature - Upgrade to set guardrails by key",children:(0,t.jsx)(k.Select,{mode:"tags",style:{width:"100%"},disabled:!ex,placeholder:ex?"Select or enter guardrails":"Premium feature - Upgrade to set guardrails by key",options:eG.map(e=>({value:e,label:e}))})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Disable Global Guardrails"," ",(0,t.jsx)(T.Tooltip,{title:"When enabled, this key will bypass any guardrails configured to run on every request (global guardrails)",children:(0,t.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/guardrails/quick_start",target:"_blank",rel:"noopener noreferrer",onClick:e=>e.stopPropagation(),children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})})]}),name:"disable_global_guardrails",className:"mt-4",valuePropName:"checked",help:ex?"Bypass global guardrails for this key":"Premium feature - Upgrade to disable global guardrails by key",children:(0,t.jsx)(S.Switch,{disabled:!ex,checkedChildren:"Yes",unCheckedChildren:"No"})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Policies"," ",(0,t.jsx)(T.Tooltip,{title:"Apply policies to this key to control guardrails and other settings",children:(0,t.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/guardrails/guardrail_policies",target:"_blank",rel:"noopener noreferrer",onClick:e=>e.stopPropagation(),children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})})]}),name:"policies",className:"mt-4",help:eh?"Select existing policies or enter new ones":"Premium feature - Upgrade to set policies by key",children:(0,t.jsx)(k.Select,{mode:"tags",style:{width:"100%"},disabled:!eh,placeholder:eh?"Select or enter policies":"Premium feature - Upgrade to set policies by key",options:eq.map(e=>({value:e,label:e}))})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Prompts"," ",(0,t.jsx)(T.Tooltip,{title:"Allow this key to use specific prompt templates",children:(0,t.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/prompt_management",target:"_blank",rel:"noopener noreferrer",onClick:e=>e.stopPropagation(),children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})})]}),name:"prompts",className:"mt-4",help:eh?"Select existing prompts or enter new ones":"Premium feature - Upgrade to set prompts by key",children:(0,t.jsx)(k.Select,{mode:"tags",style:{width:"100%"},disabled:!eh,placeholder:eh?"Select or enter prompts":"Premium feature - Upgrade to set prompts by key",options:eW.map(e=>({value:e,label:e}))})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Access Groups"," ",(0,t.jsx)(T.Tooltip,{title:"Assign access groups to this key. Access groups control which models, MCP servers, and agents this key can use",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"access_group_ids",className:"mt-4",help:"Select access groups to assign to this key",children:(0,t.jsx)(M.default,{placeholder:"Select access groups (optional)"})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Allowed Pass Through Routes"," ",(0,t.jsx)(T.Tooltip,{title:"Allow this key to use specific pass through routes",children:(0,t.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/pass_through",target:"_blank",rel:"noopener noreferrer",onClick:e=>e.stopPropagation(),children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})})]}),name:"allowed_passthrough_routes",className:"mt-4",help:eh?"Select existing pass through routes or enter new ones":"Premium feature - Upgrade to set pass through routes by key",children:(0,t.jsx)(V.default,{onChange:e=>eC.setFieldValue("allowed_passthrough_routes",e),value:eC.getFieldValue("allowed_passthrough_routes"),accessToken:em,placeholder:eh?"Select or enter pass through routes":"Premium feature - Upgrade to set pass through routes by key",disabled:!eh,teamId:eX?eX.team_id:null})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Allowed Vector Stores"," ",(0,t.jsx)(T.Tooltip,{title:"Select which vector stores this key can access. If none selected, the key will have access to all available vector stores",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"allowed_vector_store_ids",className:"mt-4",help:"Select vector stores this key can access. Leave empty for access to all vector stores",children:(0,t.jsx)(ea.default,{onChange:e=>eC.setFieldValue("allowed_vector_store_ids",e),value:eC.getFieldValue("allowed_vector_store_ids"),accessToken:em,placeholder:"Select vector stores (optional)"})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Metadata"," ",(0,t.jsx)(T.Tooltip,{title:"JSON object with additional information about this key. Used for tracking or custom logic",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"metadata",className:"mt-4",children:(0,t.jsx)(v.Input.TextArea,{rows:4,placeholder:"Enter metadata as JSON"})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Tags"," ",(0,t.jsx)(T.Tooltip,{title:"Tags for tracking spend and/or doing tag-based routing. Used for analytics and filtering",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"tags",className:"mt-4",help:"Tags for tracking spend and/or doing tag-based routing.",children:(0,t.jsx)(k.Select,{mode:"tags",style:{width:"100%"},placeholder:"Select or enter tags",tokenSeparators:[","],options:ek})}),(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)("b",{children:"MCP Settings"})}),(0,t.jsxs)(m.AccordionBody,{children:[(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Allowed MCP Servers"," ",(0,t.jsx)(T.Tooltip,{title:"Select which MCP servers or access groups this key can access",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"allowed_mcp_servers_and_groups",help:"Select MCP servers or access groups this key can access",children:(0,t.jsx)(J.default,{onChange:e=>eC.setFieldValue("allowed_mcp_servers_and_groups",e),value:eC.getFieldValue("allowed_mcp_servers_and_groups"),accessToken:em,teamId:eX?.team_id??null,placeholder:"Select MCP servers or access groups (optional)",allowNoMcpServers:!0})}),(0,t.jsx)(j.Form.Item,{name:"mcp_tool_permissions",initialValue:{},hidden:!0,children:(0,t.jsx)(v.Input,{type:"hidden"})}),(0,t.jsx)(j.Form.Item,{noStyle:!0,shouldUpdate:(e,t)=>e.allowed_mcp_servers_and_groups!==t.allowed_mcp_servers_and_groups||e.mcp_tool_permissions!==t.mcp_tool_permissions,children:()=>(0,t.jsx)("div",{className:"mt-6",children:(0,t.jsx)(X.default,{accessToken:em,selectedServers:(eC.getFieldValue("allowed_mcp_servers_and_groups")?.servers||[]).filter(e=>e!==Y.NO_MCP_SERVERS_SENTINEL),toolPermissions:eC.getFieldValue("mcp_tool_permissions")||{},onChange:e=>eC.setFieldsValue({mcp_tool_permissions:e})})})})]})]}),(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)("b",{children:"Agent Settings"})}),(0,t.jsx)(m.AccordionBody,{children:(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Allowed Agents"," ",(0,t.jsx)(T.Tooltip,{title:"Select which agents or access groups this key can access",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"allowed_agents_and_groups",help:"Select agents or access groups this key can access",children:(0,t.jsx)(O.default,{onChange:e=>eC.setFieldValue("allowed_agents_and_groups",e),value:eC.getFieldValue("allowed_agents_and_groups"),accessToken:em,placeholder:"Select agents or access groups (optional)"})})})]}),eh?(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)("b",{children:"Logging Settings"})}),(0,t.jsx)(m.AccordionBody,{children:(0,t.jsx)("div",{className:"mt-4",children:(0,t.jsx)(D.default,{value:eJ,onChange:eY,premiumUser:!0,disabledCallbacks:ti,onDisabledCallbacksChange:tn})})})]}):(0,t.jsx)(T.Tooltip,{title:(0,t.jsxs)("span",{children:["Key-level logging settings is an enterprise feature, get in touch -",(0,t.jsx)("a",{href:"https://www.litellm.ai/enterprise",target:"_blank",children:"https://www.litellm.ai/enterprise"})]}),placement:"top",children:(0,t.jsxs)("div",{style:{position:"relative"},children:[(0,t.jsx)("div",{style:{opacity:.5},children:(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)("b",{children:"Logging Settings"})}),(0,t.jsx)(m.AccordionBody,{children:(0,t.jsx)("div",{className:"mt-4",children:(0,t.jsx)(D.default,{value:eJ,onChange:eY,premiumUser:!1,disabledCallbacks:ti,onDisabledCallbacksChange:tn})})})]})}),(0,t.jsx)("div",{style:{position:"absolute",inset:0,cursor:"not-allowed"}})]})}),(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)("b",{children:"Router Settings"})}),(0,t.jsx)(m.AccordionBody,{children:(0,t.jsx)("div",{className:"mt-4 w-full",children:(0,t.jsx)(z.default,{accessToken:em||"",value:tx||void 0,onChange:ty,modelData:eE.length>0?{data:eE.map(e=>({model_name:e}))}:void 0},tb)})})]},`router-settings-accordion-${tb}`),(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)("b",{children:"Model Aliases"})}),(0,t.jsx)(m.AccordionBody,{children:(0,t.jsxs)("div",{className:"mt-4",children:[(0,t.jsx)(y.Text,{className:"text-sm text-gray-600 mb-4",children:"Create custom aliases for models that can be used in API calls. This allows you to create shortcuts for specific models."}),(0,t.jsx)(B.default,{accessToken:em,initialModelAliases:tc,onAliasUpdate:tu,showExampleConfig:!1})]})})]}),(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)("b",{children:"Key Lifecycle"})}),(0,t.jsx)(m.AccordionBody,{children:(0,t.jsx)("div",{className:"mt-4",children:(0,t.jsx)($.default,{form:eC,autoRotationEnabled:tm,onAutoRotationChange:tp,rotationInterval:tg,onRotationIntervalChange:th,isCreateMode:!0})})}),(0,t.jsx)(j.Form.Item,{name:"duration",hidden:!0,initialValue:null,children:(0,t.jsx)(v.Input,{})})]}),(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("b",{children:"Advanced Settings"}),(0,t.jsx)(T.Tooltip,{title:(0,t.jsxs)("span",{children:["Learn more about advanced settings in our"," ",(0,t.jsx)("a",{href:ee.proxyBaseUrl?`${ee.proxyBaseUrl}/#/key%20management/generate_key_fn_key_generate_post`:"/#/key%20management/generate_key_fn_key_generate_post",target:"_blank",rel:"noopener noreferrer",className:"text-blue-400 hover:text-blue-300",children:"documentation"})]}),children:(0,t.jsx)(d.InfoCircleOutlined,{className:"text-gray-400 hover:text-gray-300 cursor-help"})})]})}),(0,t.jsx)(m.AccordionBody,{children:(0,t.jsx)(R.default,{schemaComponent:"GenerateKeyRequest",form:eC,excludedFields:["key_alias","team_id","organization_id","models","duration","metadata","tags","guardrails","max_budget","budget_duration","tpm_limit","rpm_limit",...eN?["key"]:[]]})})]})]})]})}),(0,t.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,t.jsx)(b.Button,{htmlType:"submit",disabled:tT,style:{opacity:tT?.5:1},children:"Create Key"})})]})}),e5&&(0,t.jsx)(w.Modal,{title:"Create New User",open:e5,onCancel:()=>e3(!1),footer:null,width:800,children:(0,t.jsx)(H.CreateUserButton,{userID:ep,accessToken:em,teams:en,possibleUIRoles:e9,onUserCreated:e=>{e7(e),eC.setFieldsValue({user_id:e}),e3(!1)},isEmbedded:!0})}),eA&&(0,t.jsx)(w.Modal,{open:eT,onOk:tS,onCancel:tC,footer:null,children:(0,t.jsxs)(x.Grid,{numItems:1,className:"gap-2 w-full",children:[(0,t.jsx)(f.Title,{children:"Save your Key"}),(0,t.jsx)(h.Col,{numColSpan:1,children:null!=eA?(0,t.jsx)(et.default,{apiKey:eA}):(0,t.jsx)(y.Text,{children:"Key being created, this might take 30s"})})]})})]})},"fetchTeamModels",0,er,"fetchUserModels",0,ei],702597)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/14566-_ogh-19.js b/litellm/proxy/_experimental/out/_next/static/chunks/14566-_ogh-19.js new file mode 100644 index 00000000000..1a52e3a7f13 --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/14566-_ogh-19.js @@ -0,0 +1 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,207082,e=>{"use strict";var t=e.i(619273),s=e.i(266027),a=e.i(243652),l=e.i(602869),r=e.i(431703),i=e.i(135214);let n=(0,a.createQueryKeys)("keys"),o=async(e,t,s,a={})=>{try{let i=(0,l.getProxyBaseUrl)(),n=new URLSearchParams(Object.entries({team_id:a.teamID,project_id:a.projectID,agent_id:a.agentID,organization_id:a.organizationID,key_alias:a.selectedKeyAlias,key_hash:a.keyHash,user_id:a.userID,page:t,size:s,sort_by:a.sortBy,sort_order:a.sortOrder,expand:a.expand,status:a.status,return_full_object:"true",include_team_keys:"true",include_created_by_keys:"true",substring_matching:"true"}).filter(([,e])=>null!=e).map(([e,t])=>[e,String(t)])),o=`${i?`${i}/key/list`:"/key/list"}?${n}`,d=await fetch(o,{method:"GET",headers:{[(0,l.getGlobalLitellmHeaderName)()]:`Bearer ${e}`,"Content-Type":"application/json"}});if(!d.ok){let e=await d.json(),t=(0,r.deriveErrorMessage)(e);throw(0,l.handleError)(t),Error(t)}let c=await d.json();return console.log("/key/list API Response:",c),c}catch(e){throw console.error("Failed to list keys:",e),e}},d=(0,a.createQueryKeys)("deletedKeys");e.s(["keyKeys",0,n,"useDeletedKeys",0,(e,a,l={})=>{let{accessToken:r}=(0,i.default)();return(0,s.useQuery)({queryKey:d.list({page:e,limit:a,...l}),queryFn:async()=>await o(r,e,a,{...l,status:"deleted"}),enabled:!!r,staleTime:3e4,placeholderData:t.keepPreviousData})},"useKeys",0,(e,a,l={})=>{let{accessToken:r}=(0,i.default)();return(0,s.useQuery)({queryKey:n.list({page:e,limit:a,...l}),queryFn:async()=>await o(r,e,a,l),enabled:!!r,staleTime:3e4,placeholderData:t.keepPreviousData})}])},510674,e=>{"use strict";var t=e.i(266027),s=e.i(243652),a=e.i(602869),l=e.i(431703),r=e.i(135214),i=e.i(708347);let n=(0,s.createQueryKeys)("projects"),o=[...i.all_admin_roles,...i.internalUserRoles],d=async e=>{let t=(0,a.getProxyBaseUrl)(),s=`${t}/project/list`,r=await fetch(s,{method:"GET",headers:{[(0,a.getGlobalLitellmHeaderName)()]:`Bearer ${e}`,"Content-Type":"application/json"}});if(!r.ok){let e=await r.json(),t=(0,l.deriveErrorMessage)(e);throw(0,a.handleError)(t),Error(t)}return r.json()};e.s(["projectKeys",0,n,"useProjects",0,()=>{let{accessToken:e,userRole:s}=(0,r.default)();return(0,t.useQuery)({queryKey:n.list({}),queryFn:async()=>d(e),enabled:!!e&&o.includes(s)})}])},109034,e=>{"use strict";var t=e.i(266027),s=e.i(243652),a=e.i(602869),l=e.i(135214);let r=(0,s.createQueryKeys)("tags");e.s(["useTags",0,()=>{let{accessToken:e,userId:s,userRole:i}=(0,l.default)();return(0,t.useQuery)({queryKey:r.list({}),queryFn:async()=>await (0,a.tagListCall)(e),enabled:!!(e&&s&&i)})}])},552130,e=>{"use strict";var t=e.i(843476),s=e.i(271645),a=e.i(199133),l=e.i(602869);e.s(["default",0,({onChange:e,value:r,className:i,accessToken:n,placeholder:o="Select agents",disabled:d=!1})=>{let[c,u]=(0,s.useState)([]),[m,p]=(0,s.useState)([]),[g,h]=(0,s.useState)(!1);(0,s.useEffect)(()=>{(async()=>{if(n){h(!0);try{let e=await (0,l.getAgentsList)(n),t=e?.agents||[];u(t);let s=new Set;t.forEach(e=>{let t=e.agent_access_groups;t&&Array.isArray(t)&&t.forEach(e=>s.add(e))}),p(Array.from(s))}catch(e){console.error("Error fetching agents:",e)}finally{h(!1)}}})()},[n]);let x=[...m.map(e=>({label:e,value:`group:${e}`,isAccessGroup:!0,searchText:`${e} Access Group`})),...c.map(e=>({label:`${e.agent_name||e.agent_id}`,value:e.agent_id,isAccessGroup:!1,searchText:`${e.agent_name||e.agent_id} ${e.agent_id} Agent`}))],y=[...r?.agents||[],...(r?.accessGroups||[]).map(e=>`group:${e}`)];return(0,t.jsx)("div",{children:(0,t.jsx)(a.Select,{mode:"multiple",placeholder:o,onChange:t=>{e({agents:t.filter(e=>!e.startsWith("group:")),accessGroups:t.filter(e=>e.startsWith("group:")).map(e=>e.replace("group:",""))})},value:y,loading:g,className:i,allowClear:!0,showSearch:!0,style:{width:"100%"},disabled:d,filterOption:(e,t)=>(x.find(e=>e.value===t?.value)?.searchText||"").toLowerCase().includes(e.toLowerCase()),children:x.map(e=>(0,t.jsx)(a.Select.Option,{value:e.value,label:e.label,children:(0,t.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:"8px"},children:[(0,t.jsx)("span",{style:{display:"inline-block",width:8,height:8,borderRadius:"50%",background:e.isAccessGroup?"#52c41a":"#722ed1",flexShrink:0}}),(0,t.jsx)("span",{style:{flex:1},children:e.label}),(0,t.jsx)("span",{style:{color:e.isAccessGroup?"#52c41a":"#722ed1",fontSize:"12px",fontWeight:500,opacity:.8},children:e.isAccessGroup?"Access Group":"Agent"})]})},e.value))})})}])},557662,e=>{"use strict";let t="/ui/assets/logos/",s=[{id:"arize",displayName:"Arize",logo:`${t}arize.png`,supports_key_team_logging:!0,dynamic_params:{arize_api_key:"password",arize_space_id:"password"},description:"Arize Logging Integration"},{id:"braintrust",displayName:"Braintrust",logo:`${t}braintrust.png`,supports_key_team_logging:!1,dynamic_params:{braintrust_api_key:"password",braintrust_project_name:"text"},description:"Braintrust Logging Integration"},{id:"custom_callback_api",displayName:"Custom Callback API",logo:`${t}custom.svg`,supports_key_team_logging:!0,dynamic_params:{custom_callback_api_url:"text",custom_callback_api_headers:"text"},description:"Custom Callback API Logging Integration"},{id:"galileo",displayName:"Galileo",logo:`${t}galileo.ico`,supports_key_team_logging:!1,dynamic_params:{GALILEO_API_KEY:"password",GALILEO_PROJECT_ID:"text",GALILEO_LOG_STREAM_ID:"text",GALILEO_BASE_URL:"text",GALILEO_USERNAME:"text",GALILEO_PASSWORD:"password"},description:"Galileo AI Observability Integration"},{id:"datadog",displayName:"Datadog",logo:`${t}datadog.png`,supports_key_team_logging:!1,dynamic_params:{dd_api_key:"password",dd_site:"text"},description:"Datadog Logging Integration"},{id:"lago",displayName:"Lago",logo:`${t}lago.svg`,supports_key_team_logging:!1,dynamic_params:{lago_api_url:"text",lago_api_key:"password"},description:"Lago Billing Logging Integration"},{id:"langfuse",displayName:"Langfuse",logo:`${t}langfuse.png`,supports_key_team_logging:!0,dynamic_params:{langfuse_public_key:"text",langfuse_secret_key:"password",langfuse_host:"text"},description:"Langfuse v2 Logging Integration"},{id:"langfuse_otel",displayName:"Langfuse OTEL",logo:`${t}langfuse.png`,supports_key_team_logging:!0,dynamic_params:{langfuse_public_key:"text",langfuse_secret_key:"password",langfuse_host:"text"},description:"Langfuse v3 OTEL Logging Integration"},{id:"langsmith",displayName:"LangSmith",logo:`${t}langsmith.png`,supports_key_team_logging:!0,dynamic_params:{langsmith_api_key:"password",langsmith_project:"text",langsmith_base_url:"text",langsmith_sampling_rate:"number"},description:"Langsmith Logging Integration"},{id:"openmeter",displayName:"OpenMeter",logo:`${t}openmeter.png`,supports_key_team_logging:!1,dynamic_params:{openmeter_api_key:"password",openmeter_base_url:"text"},description:"OpenMeter Logging Integration"},{id:"otel",displayName:"Open Telemetry",logo:`${t}otel.png`,supports_key_team_logging:!1,dynamic_params:{otel_endpoint:"text",otel_headers:"text"},description:"OpenTelemetry Logging Integration"},{id:"s3",displayName:"S3",logo:`${t}aws.svg`,supports_key_team_logging:!1,dynamic_params:{s3_bucket_name:"text",aws_access_key_id:"password",aws_secret_access_key:"password",aws_region:"text"},description:"S3 Bucket (AWS) Logging Integration"},{id:"SQS",displayName:"SQS",logo:`${t}aws.svg`,supports_key_team_logging:!1,dynamic_params:{sqs_queue_url:"text",aws_access_key_id:"password",aws_secret_access_key:"password",aws_region:"text"},description:"SQS Queue (AWS) Logging Integration"}],a=s.reduce((e,t)=>(e[t.displayName]=t,e),{}),l=s.reduce((e,t)=>(e[t.displayName]=t.id,e),{}),r=s.reduce((e,t)=>(e[t.id]=t.displayName,e),{});e.s(["callbackInfo",0,a,"callback_map",0,l,"mapDisplayToInternalNames",0,e=>e.map(e=>l[e]||e),"mapInternalToDisplayNames",0,e=>e.map(e=>r[e]||e),"reverse_callback_map",0,r])},9314,e=>{"use strict";var t=e.i(843476),s=e.i(199133),a=e.i(981339),l=e.i(645526),r=e.i(599724),i=e.i(263147);e.s(["default",0,({value:e,onChange:n,placeholder:o="Select access groups",disabled:d=!1,style:c,className:u,showLabel:m=!1,labelText:p="Access Group",allowClear:g=!0})=>{let{data:h,isLoading:x,isError:y}=(0,i.useAccessGroups)();if(x)return(0,t.jsxs)("div",{children:[m&&(0,t.jsxs)(r.Text,{className:"font-medium block mb-2 text-gray-700 flex items-center",children:[(0,t.jsx)(l.TeamOutlined,{className:"mr-2"})," ",p]}),(0,t.jsx)(a.Skeleton.Input,{active:!0,block:!0,style:{height:32,...c}})]});let _=(h??[]).map(e=>({label:(0,t.jsxs)("span",{children:[(0,t.jsx)("span",{className:"font-medium",children:e.access_group_name})," ",(0,t.jsxs)("span",{className:"text-gray-400 text-xs",children:["(",e.access_group_id,")"]})]}),value:e.access_group_id,selectedLabel:e.access_group_name,searchText:`${e.access_group_name} ${e.access_group_id}`}));return(0,t.jsxs)("div",{children:[m&&(0,t.jsxs)(r.Text,{className:"font-medium block mb-2 text-gray-700 flex items-center",children:[(0,t.jsx)(l.TeamOutlined,{className:"mr-2"})," ",p]}),(0,t.jsx)(s.Select,{mode:"multiple",value:e,placeholder:o,onChange:n,disabled:d,allowClear:g,showSearch:!0,style:{width:"100%",...c},className:`rounded-md ${u??""}`,notFoundContent:y?(0,t.jsx)("span",{className:"text-red-500",children:"Failed to load access groups"}):"No access groups found",filterOption:(e,t)=>(_.find(e=>e.value===t?.value)?.searchText??"").toLowerCase().includes(e.toLowerCase()),optionLabelProp:"selectedLabel",options:_.map(e=>({label:e.label,value:e.value,selectedLabel:e.selectedLabel}))})]})}])},392110,e=>{"use strict";var t=e.i(843476),s=e.i(271645),a=e.i(199133),l=e.i(592968),r=e.i(312361),i=e.i(790848),n=e.i(536916),o=e.i(827252),d=e.i(779241);let{Option:c}=a.Select;e.s(["default",0,({form:e,autoRotationEnabled:u,onAutoRotationChange:m,rotationInterval:p,onRotationIntervalChange:g,isCreateMode:h=!1,neverExpire:x=!1,onNeverExpireChange:y})=>{let _=p&&!["7d","30d","90d","180d","365d"].includes(p),[f,b]=(0,s.useState)(_),[j,v]=(0,s.useState)(_?p:""),[w,N]=(0,s.useState)(e?.getFieldValue?.("duration")||"");return(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsx)("span",{className:"text-sm font-medium text-gray-700",children:"Key Expiry Settings"}),(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsxs)("label",{className:"text-sm font-medium text-gray-700 flex items-center space-x-1",children:[(0,t.jsx)("span",{children:"Expire Key"}),(0,t.jsx)(l.Tooltip,{title:"Set when this key should expire. Format: 30s (seconds), 30m (minutes), 30h (hours), 30d (days). Leave empty to keep the current expiry unchanged.",children:(0,t.jsx)(o.InfoCircleOutlined,{className:"text-gray-400 cursor-help text-xs"})}),!h&&y&&(0,t.jsx)(n.Checkbox,{checked:x,onChange:t=>{let s=t.target.checked;y(s),s&&(N(""),e&&"function"==typeof e.setFieldValue?e.setFieldValue("duration",""):e&&"function"==typeof e.setFieldsValue&&e.setFieldsValue({duration:""}))},className:"ml-2 text-sm font-normal text-gray-600",children:"Never Expire"})]}),(0,t.jsx)(d.TextInput,{name:"duration",placeholder:h?"e.g., 30d or leave empty to never expire":"e.g., 30d",className:"w-full",value:w,onValueChange:t=>{N(t),e&&"function"==typeof e.setFieldValue?e.setFieldValue("duration",t):e&&"function"==typeof e.setFieldsValue&&e.setFieldsValue({duration:t})},disabled:!h&&x})]})]}),(0,t.jsx)(r.Divider,{}),(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsx)("span",{className:"text-sm font-medium text-gray-700",children:"Auto-Rotation Settings"}),(0,t.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsxs)("label",{className:"text-sm font-medium text-gray-700 flex items-center space-x-1",children:[(0,t.jsx)("span",{children:"Enable Auto-Rotation"}),(0,t.jsx)(l.Tooltip,{title:"Key will automatically regenerate at the specified interval for enhanced security.",children:(0,t.jsx)(o.InfoCircleOutlined,{className:"text-gray-400 cursor-help text-xs"})})]}),(0,t.jsx)(i.Switch,{checked:u,onChange:m,size:"default",className:u?"":"bg-gray-400"})]}),u&&(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsxs)("label",{className:"text-sm font-medium text-gray-700 flex items-center space-x-1",children:[(0,t.jsx)("span",{children:"Rotation Interval"}),(0,t.jsx)(l.Tooltip,{title:"How often the key should be automatically rotated. Choose the interval that best fits your security requirements.",children:(0,t.jsx)(o.InfoCircleOutlined,{className:"text-gray-400 cursor-help text-xs"})})]}),(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsxs)(a.Select,{value:f?"custom":p,onChange:e=>{"custom"===e?b(!0):(b(!1),v(""),g(e))},className:"w-full",placeholder:"Select interval",children:[(0,t.jsx)(c,{value:"7d",children:"7 days"}),(0,t.jsx)(c,{value:"30d",children:"30 days"}),(0,t.jsx)(c,{value:"90d",children:"90 days"}),(0,t.jsx)(c,{value:"180d",children:"180 days"}),(0,t.jsx)(c,{value:"365d",children:"365 days"}),(0,t.jsx)(c,{value:"custom",children:"Custom interval"})]}),f&&(0,t.jsxs)("div",{className:"space-y-1",children:[(0,t.jsx)(d.TextInput,{value:j,onChange:e=>{let t=e.target.value;v(t),g(t)},placeholder:"e.g., 1s, 5m, 2h, 14d"}),(0,t.jsx)("div",{className:"text-xs text-gray-500",children:"Supported formats: seconds (s), minutes (m), hours (h), days (d)"})]})]})]})]}),u&&(0,t.jsx)("div",{className:"bg-blue-50 p-3 rounded-md text-sm text-blue-700",children:"When rotation occurs, you'll receive a notification with the new key. The old key will be deactivated after a brief grace period."})]})]})}])},533882,e=>{"use strict";var t=e.i(843476),s=e.i(271645),a=e.i(250980),l=e.i(797672),r=e.i(68155),i=e.i(304967),n=e.i(629569),o=e.i(599724),d=e.i(269200),c=e.i(427612),u=e.i(64848),m=e.i(942232),p=e.i(496020),g=e.i(977572),h=e.i(992619),x=e.i(727749);e.s(["default",0,({accessToken:e,initialModelAliases:y={},onAliasUpdate:_,showExampleConfig:f=!0})=>{let[b,j]=(0,s.useState)([]),[v,w]=(0,s.useState)({aliasName:"",targetModel:""}),[N,k]=(0,s.useState)(null);(0,s.useEffect)(()=>{j(Object.entries(y).map(([e,t],s)=>({id:`${s}-${e}`,aliasName:e,targetModel:t})))},[y]);let S=()=>{if(!N)return;if(!N.aliasName||!N.targetModel)return void x.default.fromBackend("Please provide both alias name and target model");if(b.some(e=>e.id!==N.id&&e.aliasName===N.aliasName))return void x.default.fromBackend("An alias with this name already exists");let e=b.map(e=>e.id===N.id?N:e);j(e),k(null);let t={};e.forEach(e=>{t[e.aliasName]=e.targetModel}),_&&_(t),x.default.success("Alias updated successfully")},C=()=>{k(null)},T=b.reduce((e,t)=>(e[t.aliasName]=t.targetModel,e),{});return(0,t.jsxs)("div",{className:"mt-4",children:[(0,t.jsxs)("div",{className:"mb-6",children:[(0,t.jsx)(o.Text,{className:"text-sm font-medium text-gray-700 mb-2",children:"Add New Alias"}),(0,t.jsxs)("div",{className:"grid grid-cols-3 gap-4",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"block text-xs text-gray-500 mb-1",children:"Alias Name"}),(0,t.jsx)("input",{type:"text",value:v.aliasName,onChange:e=>w({...v,aliasName:e.target.value}),placeholder:"e.g., gpt-4o",className:"w-full px-3 py-2 border border-gray-300 rounded-md text-sm"})]}),(0,t.jsxs)("div",{children:[(0,t.jsx)("label",{className:"block text-xs text-gray-500 mb-1",children:"Target Model"}),(0,t.jsx)(h.default,{accessToken:e,value:v.targetModel,placeholder:"Select target model",onChange:e=>w({...v,targetModel:e}),showLabel:!1})]}),(0,t.jsx)("div",{className:"flex items-end",children:(0,t.jsxs)("button",{onClick:()=>{if(!v.aliasName||!v.targetModel)return void x.default.fromBackend("Please provide both alias name and target model");if(b.some(e=>e.aliasName===v.aliasName))return void x.default.fromBackend("An alias with this name already exists");let e=[...b,{id:`${Date.now()}-${v.aliasName}`,aliasName:v.aliasName,targetModel:v.targetModel}];j(e),w({aliasName:"",targetModel:""});let t={};e.forEach(e=>{t[e.aliasName]=e.targetModel}),_&&_(t),x.default.success("Alias added successfully")},disabled:!v.aliasName||!v.targetModel,className:`flex items-center px-4 py-2 rounded-md text-sm ${!v.aliasName||!v.targetModel?"bg-gray-300 text-gray-500 cursor-not-allowed":"bg-green-600 text-white hover:bg-green-700"}`,children:[(0,t.jsx)(a.PlusCircleIcon,{className:"w-4 h-4 mr-1"}),"Add Alias"]})})]})]}),(0,t.jsx)(o.Text,{className:"text-sm font-medium text-gray-700 mb-2",children:"Manage Existing Aliases"}),(0,t.jsx)("div",{className:"rounded-lg custom-border relative mb-6",children:(0,t.jsx)("div",{className:"overflow-x-auto",children:(0,t.jsxs)(d.Table,{className:"[&_td]:py-0.5 [&_th]:py-1",children:[(0,t.jsx)(c.TableHead,{children:(0,t.jsxs)(p.TableRow,{children:[(0,t.jsx)(u.TableHeaderCell,{className:"py-1 h-8",children:"Alias Name"}),(0,t.jsx)(u.TableHeaderCell,{className:"py-1 h-8",children:"Target Model"}),(0,t.jsx)(u.TableHeaderCell,{className:"py-1 h-8",children:"Actions"})]})}),(0,t.jsxs)(m.TableBody,{children:[b.map(s=>(0,t.jsx)(p.TableRow,{className:"h-8",children:N&&N.id===s.id?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(g.TableCell,{className:"py-0.5",children:(0,t.jsx)("input",{type:"text",value:N.aliasName,onChange:e=>k({...N,aliasName:e.target.value}),className:"w-full px-2 py-1 border border-gray-300 rounded-md text-sm"})}),(0,t.jsx)(g.TableCell,{className:"py-0.5",children:(0,t.jsx)(h.default,{accessToken:e,value:N.targetModel,onChange:e=>k({...N,targetModel:e}),showLabel:!1,style:{height:"32px"}})}),(0,t.jsx)(g.TableCell,{className:"py-0.5 whitespace-nowrap",children:(0,t.jsxs)("div",{className:"flex space-x-2",children:[(0,t.jsx)("button",{onClick:S,className:"text-xs bg-blue-50 text-blue-600 px-2 py-1 rounded hover:bg-blue-100",children:"Save"}),(0,t.jsx)("button",{onClick:C,className:"text-xs bg-gray-50 text-gray-600 px-2 py-1 rounded hover:bg-gray-100",children:"Cancel"})]})})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(g.TableCell,{className:"py-0.5 text-sm text-gray-900",children:s.aliasName}),(0,t.jsx)(g.TableCell,{className:"py-0.5 text-sm text-gray-500",children:s.targetModel}),(0,t.jsx)(g.TableCell,{className:"py-0.5 whitespace-nowrap",children:(0,t.jsxs)("div",{className:"flex space-x-2",children:[(0,t.jsx)("button",{onClick:()=>{k({...s})},className:"text-xs bg-blue-50 text-blue-600 px-2 py-1 rounded hover:bg-blue-100",children:(0,t.jsx)(l.PencilIcon,{className:"w-3 h-3"})}),(0,t.jsx)("button",{onClick:()=>{var e;let t,a;return e=s.id,j(t=b.filter(t=>t.id!==e)),a={},void(t.forEach(e=>{a[e.aliasName]=e.targetModel}),_&&_(a),x.default.success("Alias deleted successfully"))},className:"text-xs bg-red-50 text-red-600 px-2 py-1 rounded hover:bg-red-100",children:(0,t.jsx)(r.TrashIcon,{className:"w-3 h-3"})})]})})]})},s.id)),0===b.length&&(0,t.jsx)(p.TableRow,{children:(0,t.jsx)(g.TableCell,{colSpan:3,className:"py-0.5 text-sm text-gray-500 text-center",children:"No aliases added yet. Add a new alias above."})})]})]})})}),f&&(0,t.jsxs)(i.Card,{children:[(0,t.jsx)(n.Title,{className:"mb-4",children:"Configuration Example"}),(0,t.jsx)(o.Text,{className:"text-gray-600 mb-4",children:"Here's how your current aliases would look in the config:"}),(0,t.jsx)("div",{className:"bg-gray-100 rounded-lg p-4 font-mono text-sm",children:(0,t.jsxs)("div",{className:"text-gray-700",children:["model_aliases:",0===Object.keys(T).length?(0,t.jsxs)("span",{className:"text-gray-500",children:[(0,t.jsx)("br",{}),"  # No aliases configured yet"]}):Object.entries(T).map(([e,s])=>(0,t.jsxs)("span",{children:[(0,t.jsx)("br",{}),'  "',e,'": "',s,'"']},e))]})})]})]})}])},844565,e=>{"use strict";var t=e.i(843476),s=e.i(271645),a=e.i(199133),l=e.i(602869);e.s(["default",0,({onChange:e,value:r,className:i,accessToken:n,placeholder:o="Select pass through routes",disabled:d=!1,teamId:c})=>{let[u,m]=(0,s.useState)([]),[p,g]=(0,s.useState)(!1);return(0,s.useEffect)(()=>{(async()=>{if(n){g(!0);try{let e=await (0,l.getPassThroughEndpointsCall)(n,c);if(e.endpoints){let t=e.endpoints.flatMap(e=>{let t=e.path,s=e.methods;return s&&s.length>0?s.map(e=>({label:`${e} ${t}`,value:t})):[{label:t,value:t}]});m(t)}}catch(e){console.error("Error fetching pass through routes:",e)}finally{g(!1)}}})()},[n,c]),(0,t.jsx)(a.Select,{mode:"tags",placeholder:o,onChange:e,value:r,loading:p,className:i,allowClear:!0,options:u,optionFilterProp:"label",showSearch:!0,style:{width:"100%"},disabled:d})}])},810757,477386,e=>{"use strict";var t=e.i(271645);let s=t.forwardRef(function(e,s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z"}),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M15 12a3 3 0 11-6 0 3 3 0 016 0z"}))});e.s(["CogIcon",0,s],810757);let a=t.forwardRef(function(e,s){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:s},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728A9 9 0 015.636 5.636m12.728 12.728L5.636 5.636"}))});e.s(["BanIcon",0,a],477386)},266484,e=>{"use strict";var t=e.i(843476),s=e.i(199133),a=e.i(592968),l=e.i(312361),r=e.i(827252),i=e.i(994388),n=e.i(304967),o=e.i(779241),d=e.i(988297),c=e.i(68155),u=e.i(810757),m=e.i(477386),p=e.i(557662),g=e.i(555987),h=e.i(435451);let{Option:x}=s.Select;e.s(["default",0,({value:e=[],onChange:y,disabledCallbacks:_=[],onDisabledCallbacksChange:f})=>{let b=Object.entries(p.callbackInfo).filter(([e,t])=>t.supports_key_team_logging).map(([e,t])=>e),j=Object.keys(p.callbackInfo),v=e=>{y?.(e)},w=(t,s,a)=>{let l=[...e];if("callback_name"===s){let e=p.callback_map[a]||a;l[t]={...l[t],[s]:e,callback_vars:{}}}else l[t]={...l[t],[s]:a};v(l)},N=(t,s,a)=>{let l=[...e];l[t]={...l[t],callback_vars:{...l[t].callback_vars,[s]:a}},v(l)};return(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,t.jsx)(m.BanIcon,{className:"w-5 h-5 text-red-500"}),(0,t.jsx)("span",{className:"text-base font-semibold text-gray-800",children:"Disabled Callbacks"}),(0,t.jsx)(a.Tooltip,{title:"Select callbacks to disable for this key. Disabled callbacks will not receive any logging data.",children:(0,t.jsx)(r.InfoCircleOutlined,{className:"text-gray-400 cursor-help"})})]}),(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)("label",{className:"text-sm font-medium text-gray-700",children:"Disabled Callbacks"}),(0,t.jsx)(s.Select,{mode:"multiple",placeholder:"Select callbacks to disable",value:_,onChange:e=>{let t=(0,p.mapDisplayToInternalNames)(e);f?.(t)},style:{width:"100%"},optionLabelProp:"label",children:j.map(e=>{let s=(0,g.resolveLogoSrc)(p.callbackInfo[e]?.logo),l=p.callbackInfo[e]?.description;return(0,t.jsx)(x,{value:e,label:e,children:(0,t.jsx)(a.Tooltip,{title:l,placement:"right",children:(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[s&&(0,t.jsx)("img",{src:s,alt:e,className:"w-4 h-4 object-contain",onError:t=>{let s=t.target,a=s.parentElement;if(a){let t=document.createElement("div");t.className="w-4 h-4 rounded-full bg-gray-200 flex items-center justify-center text-xs",t.textContent=e.charAt(0),a.replaceChild(t,s)}}}),(0,t.jsx)("span",{children:e})]})})},e)})}),(0,t.jsx)("div",{className:"text-xs text-gray-500",children:"Select callbacks that should be disabled for this key. These callbacks will not receive any logging data."})]})]}),(0,t.jsx)(l.Divider,{}),(0,t.jsxs)("div",{className:"flex justify-between items-center",children:[(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,t.jsx)(u.CogIcon,{className:"w-5 h-5 text-blue-500"}),(0,t.jsx)("span",{className:"text-base font-semibold text-gray-800",children:"Logging Integrations"}),(0,t.jsx)(a.Tooltip,{title:"Configure callback logging integrations for this team.",children:(0,t.jsx)(r.InfoCircleOutlined,{className:"text-gray-400 cursor-help"})})]}),(0,t.jsx)(i.Button,{variant:"secondary",onClick:()=>{v([...e,{callback_name:"",callback_type:"success",callback_vars:{}}])},icon:d.PlusIcon,size:"sm",className:"hover:border-blue-400 hover:text-blue-500",type:"button",children:"Add Integration"})]}),(0,t.jsx)("div",{className:"space-y-4",children:e.map((l,d)=>{let u=l.callback_name?Object.entries(p.callback_map).find(([e,t])=>t===l.callback_name)?.[0]:void 0,m=u?(0,g.resolveLogoSrc)(p.callbackInfo[u]?.logo):null;return(0,t.jsxs)(n.Card,{className:"border border-gray-200 shadow-sm hover:shadow-md transition-shadow duration-200",decoration:"top",decorationColor:"blue",children:[(0,t.jsxs)("div",{className:"flex justify-between items-start mb-4",children:[(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[m&&(0,t.jsx)("img",{src:m,alt:u,className:"w-5 h-5 object-contain"}),(0,t.jsxs)("span",{className:"text-sm font-medium",children:[u||"New Integration"," Configuration"]})]}),(0,t.jsx)(i.Button,{variant:"light",onClick:()=>{v(e.filter((e,t)=>t!==d))},icon:c.TrashIcon,size:"xs",color:"red",className:"hover:bg-red-50",type:"button",children:"Remove"})]}),(0,t.jsxs)("div",{className:"space-y-4",children:[(0,t.jsxs)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)("label",{className:"text-sm font-medium text-gray-700",children:"Integration Type"}),(0,t.jsx)(s.Select,{value:u,placeholder:"Select integration",onChange:e=>w(d,"callback_name",e),className:"w-full",optionLabelProp:"label",children:b.map(e=>{let s=(0,g.resolveLogoSrc)(p.callbackInfo[e]?.logo),l=p.callbackInfo[e]?.description;return(0,t.jsx)(x,{value:e,label:e,children:(0,t.jsx)(a.Tooltip,{title:l,placement:"right",children:(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[s&&(0,t.jsx)("img",{src:s,alt:e,className:"w-4 h-4 object-contain",onError:t=>{let s=t.target,a=s.parentElement;if(a){let t=document.createElement("div");t.className="w-4 h-4 rounded-full bg-gray-200 flex items-center justify-center text-xs",t.textContent=e.charAt(0),a.replaceChild(t,s)}}}),(0,t.jsx)("span",{children:e})]})})},e)})})]}),(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsx)("label",{className:"text-sm font-medium text-gray-700",children:"Event Type"}),(0,t.jsxs)(s.Select,{value:l.callback_type,onChange:e=>w(d,"callback_type",e),className:"w-full",children:[(0,t.jsx)(x,{value:"success",children:(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,t.jsx)("div",{className:"w-2 h-2 bg-green-500 rounded-full"}),(0,t.jsx)("span",{children:"Success Only"})]})}),(0,t.jsx)(x,{value:"failure",children:(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,t.jsx)("div",{className:"w-2 h-2 bg-red-500 rounded-full"}),(0,t.jsx)("span",{children:"Failure Only"})]})}),(0,t.jsx)(x,{value:"success_and_failure",children:(0,t.jsxs)("div",{className:"flex items-center space-x-2",children:[(0,t.jsx)("div",{className:"w-2 h-2 bg-blue-500 rounded-full"}),(0,t.jsx)("span",{children:"Success & Failure"})]})})]})]})]}),((e,s)=>{if(!e.callback_name)return null;let l=Object.entries(p.callback_map).find(([t,s])=>s===e.callback_name)?.[0];if(!l)return null;let i=p.callbackInfo[l]?.dynamic_params||{};return 0===Object.keys(i).length?null:(0,t.jsxs)("div",{className:"mt-6 pt-4 border-t border-gray-100",children:[(0,t.jsxs)("div",{className:"flex items-center space-x-2 mb-4",children:[(0,t.jsx)("div",{className:"w-3 h-3 bg-blue-100 rounded-full flex items-center justify-center",children:(0,t.jsx)("div",{className:"w-1.5 h-1.5 bg-blue-500 rounded-full"})}),(0,t.jsx)("span",{className:"text-sm font-medium text-gray-700",children:"Integration Parameters"})]}),(0,t.jsx)("div",{className:"grid grid-cols-1 gap-4",children:Object.entries(i).map(([l,i])=>(0,t.jsxs)("div",{className:"space-y-2",children:[(0,t.jsxs)("label",{className:"text-sm font-medium text-gray-700 capitalize flex items-center space-x-1",children:[(0,t.jsx)("span",{children:l.replace(/_/g," ")}),(0,t.jsx)(a.Tooltip,{title:`Environment variable reference recommended: os.environ/${l.toUpperCase()}`,children:(0,t.jsx)(r.InfoCircleOutlined,{className:"text-gray-400 cursor-help text-xs"})}),"password"===i&&(0,t.jsx)("span",{className:"inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-yellow-100 text-yellow-800",children:"Sensitive"}),"number"===i&&(0,t.jsx)("span",{className:"inline-flex items-center px-2 py-0.5 rounded text-xs font-medium bg-yellow-100 text-yellow-800",children:"Number"})]}),"number"===i&&(0,t.jsx)("span",{className:"text-xs text-gray-500",children:"Value must be between 0 and 1"}),"number"===i?(0,t.jsx)(h.default,{step:.01,width:400,placeholder:`os.environ/${l.toUpperCase()}`,value:e.callback_vars[l]||"",onChange:e=>N(s,l,e.target.value)}):(0,t.jsx)(o.TextInput,{type:"password"===i?"password":"text",placeholder:`os.environ/${l.toUpperCase()}`,value:e.callback_vars[l]||"",onChange:e=>N(s,l,e.target.value)})]},l))})]})})(l,d)]})]},d)})}),0===e.length&&(0,t.jsxs)("div",{className:"text-center py-12 text-gray-500 border-2 border-dashed border-gray-200 rounded-lg bg-gray-50/50",children:[(0,t.jsx)(u.CogIcon,{className:"w-12 h-12 text-gray-300 mb-3 mx-auto"}),(0,t.jsx)("div",{className:"text-base font-medium mb-1",children:"No logging integrations configured"}),(0,t.jsx)("div",{className:"text-sm text-gray-400",children:'Click "Add Integration" to configure logging for this team'})]})]})}])},651904,e=>{"use strict";var t=e.i(843476),s=e.i(599724),a=e.i(266484);e.s(["default",0,function({value:e,onChange:l,premiumUser:r=!1,disabledCallbacks:i=[],onDisabledCallbacksChange:n}){return r?(0,t.jsx)(a.default,{value:e,onChange:l,disabledCallbacks:i,onDisabledCallbacksChange:n}):(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{className:"flex flex-wrap gap-2 mb-3",children:[(0,t.jsx)("div",{className:"inline-flex items-center px-3 py-1.5 rounded-lg bg-green-50 border border-green-200 text-green-800 text-sm font-medium opacity-50",children:"✨ langfuse-logging"}),(0,t.jsx)("div",{className:"inline-flex items-center px-3 py-1.5 rounded-lg bg-green-50 border border-green-200 text-green-800 text-sm font-medium opacity-50",children:"✨ datadog-logging"})]}),(0,t.jsx)("div",{className:"p-3 bg-yellow-50 border border-yellow-200 rounded-lg",children:(0,t.jsxs)(s.Text,{className:"text-sm text-yellow-800",children:["Setting Key/Team logging settings is a LiteLLM Enterprise feature. Global Logging Settings are available for all free users. Get a trial key"," ",(0,t.jsx)("a",{href:"https://www.litellm.ai/#pricing",target:"_blank",rel:"noopener noreferrer",className:"underline",children:"here"}),"."]})})]})}])},939510,e=>{"use strict";var t=e.i(843476),s=e.i(808613),a=e.i(199133),l=e.i(592968),r=e.i(827252);let{Option:i}=a.Select;e.s(["default",0,({type:e,name:n,showDetailedDescriptions:o=!0,className:d="",initialValue:c=null,form:u,onChange:m})=>{let p=e.toUpperCase(),g=e.toLowerCase(),h=`Select 'guaranteed_throughput' to prevent overallocating ${p} limit when the key belongs to a Team with specific ${p} limits.`;return(0,t.jsx)(s.Form.Item,{label:(0,t.jsxs)("span",{children:[p," Rate Limit Type"," ",(0,t.jsx)(l.Tooltip,{title:h,children:(0,t.jsx)(r.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:n,initialValue:c,className:d,children:(0,t.jsx)(a.Select,{defaultValue:o?"default":void 0,placeholder:"Select rate limit type",style:{width:"100%"},optionLabelProp:o?"label":void 0,onChange:e=>{u&&u.setFieldValue(n,e),m&&m(e)},children:o?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i,{value:"best_effort_throughput",label:"Default",children:(0,t.jsxs)("div",{style:{padding:"4px 0"},children:[(0,t.jsx)("div",{style:{fontWeight:500},children:"Default"}),(0,t.jsxs)("div",{style:{fontSize:"11px",color:"#6b7280",marginTop:"2px"},children:["Best effort throughput - no error if we're overallocating ",g," (Team/Key Limits checked at runtime)."]})]})}),(0,t.jsx)(i,{value:"guaranteed_throughput",label:"Guaranteed throughput",children:(0,t.jsxs)("div",{style:{padding:"4px 0"},children:[(0,t.jsx)("div",{style:{fontWeight:500},children:"Guaranteed throughput"}),(0,t.jsxs)("div",{style:{fontSize:"11px",color:"#6b7280",marginTop:"2px"},children:["Guaranteed throughput - raise an error if we're overallocating ",g," (also checks model-specific limits)"]})]})}),(0,t.jsx)(i,{value:"dynamic",label:"Dynamic",children:(0,t.jsxs)("div",{style:{padding:"4px 0"},children:[(0,t.jsx)("div",{style:{fontWeight:500},children:"Dynamic"}),(0,t.jsxs)("div",{style:{fontSize:"11px",color:"#6b7280",marginTop:"2px"},children:["If the key has a set ",p," (e.g. 2 ",p,") and there are no 429 errors, it can dynamically exceed the limit when the model being called is not erroring."]})]})})]}):(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i,{value:"best_effort_throughput",children:"Best effort throughput"}),(0,t.jsx)(i,{value:"guaranteed_throughput",children:"Guaranteed throughput"}),(0,t.jsx)(i,{value:"dynamic",children:"Dynamic"})]})})})}])},460285,e=>{"use strict";var t=e.i(843476),s=e.i(271645),a=e.i(404206),l=e.i(723731),r=e.i(653824),i=e.i(881073),n=e.i(197647),o=e.i(602869),d=e.i(158392),c=e.i(419470),u=e.i(695411);let m=(0,s.forwardRef)(({accessToken:e,value:m,onChange:p,modelData:g},h)=>{let[x,y]=(0,s.useState)({routerSettings:{},selectedStrategy:null,enableTagFiltering:!1}),[_,f]=(0,s.useState)([]),[b,j]=(0,s.useState)([]),[v,w]=(0,s.useState)([]),[N,k]=(0,s.useState)([]),[S,C]=(0,s.useState)({}),[T,I]=(0,s.useState)({}),A=(0,s.useRef)(!1),L=(0,s.useRef)(null);(0,s.useEffect)(()=>{let e=m?.router_settings?JSON.stringify({routing_strategy:m.router_settings.routing_strategy,fallbacks:m.router_settings.fallbacks,enable_tag_filtering:m.router_settings.enable_tag_filtering}):null;if(A.current&&e===L.current){A.current=!1;return}if(A.current&&e!==L.current&&(A.current=!1),e!==L.current)if(L.current=e,m?.router_settings){let e=m.router_settings,{fallbacks:t,...s}=e;y({routerSettings:s,selectedStrategy:e.routing_strategy||null,enableTagFiltering:e.enable_tag_filtering??!1});let a=e.fallbacks||[];f(a),j(a&&0!==a.length?a.map((e,t)=>{let[s,a]=Object.entries(e)[0];return{id:(t+1).toString(),primaryModel:s||null,fallbackModels:a||[]}}):[{id:"1",primaryModel:null,fallbackModels:[]}])}else y({routerSettings:{},selectedStrategy:null,enableTagFiltering:!1}),f([]),j([{id:"1",primaryModel:null,fallbackModels:[]}])},[m]),(0,s.useEffect)(()=>{e&&(0,o.getRouterSettingsCall)(e).then(e=>{if(e.fields){let t={};e.fields.forEach(e=>{t[e.field_name]={ui_field_name:e.ui_field_name,field_description:e.field_description,options:e.options,link:e.link}}),C(t);let s=e.fields.find(e=>"routing_strategy"===e.field_name);s?.options&&k(s.options),e.routing_strategy_descriptions&&I(e.routing_strategy_descriptions)}})},[e]),(0,s.useEffect)(()=>{e&&(async()=>{try{let t=await (0,u.fetchAvailableModels)(e);w(t)}catch(e){console.error("Error fetching model info for fallbacks:",e)}})()},[e]);let F=()=>{let e=new Set(["allowed_fails","cooldown_time","num_retries","timeout","retry_after"]),t=new Set(["model_group_alias","retry_policy"]),s=Object.fromEntries(Object.entries({...x.routerSettings,enable_tag_filtering:x.enableTagFiltering,routing_strategy:x.selectedStrategy,fallbacks:_.length>0?_:null}).map(([s,a])=>{if("routing_strategy_args"!==s&&"routing_strategy"!==s&&"enable_tag_filtering"!==s&&"fallbacks"!==s){let l=document.querySelector(`input[name="${s}"]`);if(l){if(void 0!==l.value&&""!==l.value){let r=((s,a,l)=>{if(null==a)return l;let r=String(a).trim();if(""===r||"null"===r.toLowerCase())return null;if(e.has(s)){let e=Number(r);return Number.isNaN(e)?l:e}if(t.has(s)){if(""===r)return null;try{return JSON.parse(r)}catch{return l}}return"true"===r.toLowerCase()||"false"!==r.toLowerCase()&&r})(s,l.value,a);return[s,r]}return[s,null]}}else if("routing_strategy"===s)return[s,x.selectedStrategy];else if("enable_tag_filtering"===s)return[s,x.enableTagFiltering];else if("fallbacks"===s)return[s,_.length>0?_:null];else if("routing_strategy_args"===s&&"latency-based-routing"===x.selectedStrategy){let e=document.querySelector('input[name="lowest_latency_buffer"]'),t=document.querySelector('input[name="ttl"]'),s={};return e?.value&&(s.lowest_latency_buffer=Number(e.value)),t?.value&&(s.ttl=Number(t.value)),["routing_strategy_args",Object.keys(s).length>0?s:null]}return[s,a]}).filter(e=>null!=e)),a=(e,t=!1)=>null==e||"object"==typeof e&&!Array.isArray(e)&&0===Object.keys(e).length||t&&("number"!=typeof e||Number.isNaN(e))?null:e;return{routing_strategy:a(s.routing_strategy),allowed_fails:a(s.allowed_fails,!0),cooldown_time:a(s.cooldown_time,!0),num_retries:a(s.num_retries,!0),timeout:a(s.timeout,!0),retry_after:a(s.retry_after,!0),fallbacks:_.length>0?_:null,context_window_fallbacks:a(s.context_window_fallbacks),retry_policy:a(s.retry_policy),model_group_alias:a(s.model_group_alias),enable_tag_filtering:x.enableTagFiltering,routing_strategy_args:a(s.routing_strategy_args)}};(0,s.useEffect)(()=>{if(!p)return;let e=setTimeout(()=>{A.current=!0,p({router_settings:F()})},100);return()=>clearTimeout(e)},[x,_]);let O=Array.from(new Set(v.map(e=>e.model_group))).sort();return((0,s.useImperativeHandle)(h,()=>({getValue:()=>({router_settings:F()})})),e)?(0,t.jsx)("div",{className:"w-full",children:(0,t.jsxs)(r.TabGroup,{className:"w-full",children:[(0,t.jsxs)(i.TabList,{variant:"line",defaultValue:"1",className:"px-8 pt-4",children:[(0,t.jsx)(n.Tab,{value:"1",children:"Loadbalancing"}),(0,t.jsx)(n.Tab,{value:"2",children:"Fallbacks"})]}),(0,t.jsxs)(l.TabPanels,{className:"px-8 py-6",children:[(0,t.jsx)(a.TabPanel,{children:(0,t.jsx)(d.default,{value:x,onChange:y,routerFieldsMetadata:S,availableRoutingStrategies:N,routingStrategyDescriptions:T})}),(0,t.jsx)(a.TabPanel,{children:(0,t.jsx)(c.FallbackSelectionForm,{groups:b,onGroupsChange:e=>{j(e),f(e.filter(e=>e.primaryModel&&e.fallbackModels.length>0).map(e=>({[e.primaryModel]:e.fallbackModels})))},availableModels:O,maxGroups:5})})]})]})}):null});m.displayName="RouterSettingsAccordion",e.s(["default",0,m])},363256,e=>{"use strict";var t=e.i(843476),s=e.i(199133);let{Text:a}=e.i(898586).Typography;e.s(["default",0,({organizations:e,value:l,onChange:r,disabled:i,loading:n,style:o})=>(0,t.jsx)(s.Select,{showSearch:!0,placeholder:"All Organizations",value:l,onChange:r,disabled:i,loading:n,allowClear:!0,style:{minWidth:280,...o},filterOption:(t,s)=>{if(!s)return!1;let a=e?.find(e=>e.organization_id===s.key);if(!a)return!1;let l=t.toLowerCase().trim(),r=(a.organization_alias||"").toLowerCase(),i=(a.organization_id||"").toLowerCase();return r.includes(l)||i.includes(l)},children:e?.map(e=>(0,t.jsxs)(s.Select.Option,{value:e.organization_id,children:[(0,t.jsx)("span",{className:"font-medium",children:e.organization_alias})," ",(0,t.jsxs)(a,{type:"secondary",children:["(",e.organization_id,")"]})]},e.organization_id))})])},575260,e=>{"use strict";var t=e.i(843476),s=e.i(199133),a=e.i(482725),l=e.i(56456);e.s(["default",0,({projects:e,value:r,onChange:i,disabled:n,loading:o,teamId:d})=>{let c=d?e?.filter(e=>e.team_id===d):e;return(0,t.jsx)(s.Select,{showSearch:!0,placeholder:"Search or select a project",value:r,onChange:i,disabled:n,loading:o,allowClear:!0,notFoundContent:o?(0,t.jsx)(a.Spin,{indicator:(0,t.jsx)(l.LoadingOutlined,{spin:!0}),size:"small"}):void 0,filterOption:(e,t)=>{if(!t)return!1;let s=c?.find(e=>e.project_id===t.key);if(!s)return!1;let a=e.toLowerCase().trim(),l=(s.project_alias||"").toLowerCase(),r=(s.project_id||"").toLowerCase();return l.includes(a)||r.includes(a)},optionFilterProp:"children",children:!o&&c?.map(e=>(0,t.jsxs)(s.Select.Option,{value:e.project_id,children:[(0,t.jsx)("span",{className:"font-medium",children:e.project_alias||e.project_id})," ",(0,t.jsxs)("span",{className:"text-gray-500",children:["(",e.project_id,")"]})]},e.project_id))})}])},319312,e=>{"use strict";var t=e.i(843476),s=e.i(464571),a=e.i(28651),l=e.i(199133);let r=[{value:"1h",label:"Hourly",resetHint:"Resets every hour"},{value:"24h",label:"Daily",resetHint:"Resets daily at midnight UTC"},{value:"7d",label:"Weekly",resetHint:"Resets every Sunday at midnight UTC"},{value:"30d",label:"Monthly",resetHint:"Resets on the 1st of every month at midnight UTC"}];e.s(["BudgetWindowsEditor",0,function({value:e,onChange:i}){let n=(t,s,a)=>{i(e.map((e,l)=>l===t?{...e,[s]:a}:e))};return(0,t.jsxs)("div",{children:[e.map((o,d)=>{let c=r.find(e=>e.value===o.budget_duration)?.resetHint;return(0,t.jsxs)("div",{style:{marginBottom:12},children:[(0,t.jsxs)("div",{style:{display:"flex",gap:8,alignItems:"center"},children:[(0,t.jsx)(l.Select,{value:o.budget_duration,onChange:e=>n(d,"budget_duration",e),style:{width:130},options:r.map(e=>({value:e.value,label:e.label}))}),(0,t.jsx)(a.InputNumber,{step:.01,min:0,precision:2,value:o.max_budget??void 0,onChange:e=>n(d,"max_budget",e??null),placeholder:"Max spend ($)",style:{width:160},prefix:"$"}),(0,t.jsx)(s.Button,{type:"text",danger:!0,size:"small",onClick:()=>{i(e.filter((e,t)=>t!==d))},style:{padding:"0 4px"},children:"✕"})]}),c&&(0,t.jsxs)("div",{style:{fontSize:11,color:"#888",marginTop:3,marginLeft:2},children:["↻ ",c]})]},d)}),(0,t.jsx)(s.Button,{size:"small",onClick:t=>{t.preventDefault(),i([...e,{budget_duration:"24h",max_budget:null}])},children:"+ Add Budget Window"})]})}])},390605,e=>{"use strict";var t=e.i(843476),s=e.i(271645),a=e.i(602869),l=e.i(599724),r=e.i(482725),i=e.i(91739),n=e.i(500727),o=e.i(531516),d=e.i(696609);e.s(["default",0,({accessToken:e,selectedServers:c,toolPermissions:u,onChange:m,disabled:p=!1})=>{let{data:g=[]}=(0,n.useMCPServers)(),[h,x]=(0,s.useState)({}),[y,_]=(0,s.useState)({}),[f,b]=(0,s.useState)({}),[j,v]=(0,s.useState)({}),w=(0,s.useRef)(u);(0,s.useEffect)(()=>{w.current=u},[u]);let N=(0,s.useMemo)(()=>0===c.length?[]:g.filter(e=>c.includes(e.server_id)),[g,c]),k=async(e,t)=>{_(t=>({...t,[e]:!0})),b(t=>({...t,[e]:""}));try{let s=await (0,a.listMCPTools)(t,e);if(s.error)b(t=>({...t,[e]:s.message||"Failed to fetch tools"})),x(t=>({...t,[e]:[]}));else{let t=s.tools||[];x(s=>({...s,[e]:t}));let a=w.current;if(!a[e]&&t.length>0){let s=t.filter(e=>"delete"!==(0,d.classifyToolOp)(e.name,e.description||"")).map(e=>e.name);m({...a,[e]:s})}}}catch(t){console.error(`Error fetching tools for server ${e}:`,t),b(t=>({...t,[e]:"Failed to fetch tools"})),x(t=>({...t,[e]:[]}))}finally{_(t=>({...t,[e]:!1}))}};(0,s.useEffect)(()=>{N.forEach(t=>{h[t.server_id]||y[t.server_id]||k(t.server_id,e)})},[N,e]);let S=(e,t)=>{m({...u,[e]:t})};return 0===c.length?null:(0,t.jsx)("div",{className:"space-y-4",children:N.map(e=>{let s=e.server_name||e.alias||e.server_id,a=h[e.server_id]||[],n=u[e.server_id]||[],d=y[e.server_id],c=f[e.server_id],g=j[e.server_id]??"crud";return(0,t.jsxs)("div",{className:"border rounded-lg bg-gray-50",children:[(0,t.jsxs)("div",{className:"flex items-center justify-between p-4 border-b bg-white rounded-t-lg",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)(l.Text,{className:"font-semibold text-gray-900",children:s}),e.description&&(0,t.jsx)(l.Text,{className:"text-sm text-gray-500",children:e.description})]}),(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[!p&&a.length>0&&(0,t.jsx)(i.Radio.Group,{value:g,onChange:t=>v(s=>({...s,[e.server_id]:t.target.value})),size:"small",optionType:"button",buttonStyle:"solid",options:[{label:"Risk Groups",value:"crud"},{label:"Flat List",value:"flat"}]}),!p&&(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)("button",{type:"button",className:"text-sm text-blue-600 hover:text-blue-700 font-medium",onClick:()=>{var t;let s;return s=h[t=e.server_id]||[],void m({...u,[t]:s.map(e=>e.name)})},disabled:d,children:"Select All"}),(0,t.jsx)("button",{type:"button",className:"text-sm text-blue-600 hover:text-blue-700 font-medium",onClick:()=>{var t;return t=e.server_id,void m({...u,[t]:[]})},disabled:d,children:"Deselect All"})]})]})]}),(0,t.jsxs)("div",{className:"p-4",children:[d&&(0,t.jsxs)("div",{className:"flex items-center justify-center py-8",children:[(0,t.jsx)(r.Spin,{size:"large"}),(0,t.jsx)(l.Text,{className:"ml-3 text-gray-500",children:"Loading tools..."})]}),c&&!d&&(0,t.jsxs)("div",{className:"p-4 bg-red-50 border border-red-200 rounded-lg text-center",children:[(0,t.jsx)(l.Text,{className:"text-red-600 font-medium",children:"Unable to load tools"}),(0,t.jsx)(l.Text,{className:"text-sm text-red-500 mt-1",children:c})]}),!d&&!c&&a.length>0&&"crud"===g&&(0,t.jsx)(o.default,{tools:a,value:u[e.server_id]?n:void 0,onChange:t=>S(e.server_id,t),readOnly:p}),!d&&!c&&a.length>0&&"flat"===g&&(0,t.jsx)("div",{className:"space-y-2",children:a.map(s=>{let a=n.includes(s.name);return(0,t.jsxs)("div",{className:"flex items-start gap-2",children:[(0,t.jsx)("input",{type:"checkbox",checked:a,onChange:()=>{if(p)return;let t=a?n.filter(e=>e!==s.name):[...n,s.name];S(e.server_id,t)},disabled:p,className:"mt-0.5"}),(0,t.jsx)("div",{className:"flex-1 min-w-0",children:(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)(l.Text,{className:"font-medium text-gray-900",children:s.name}),(0,t.jsxs)(l.Text,{className:"text-sm text-gray-500",children:["- ",s.description||"No description"]})]})})]},s.name)})}),!d&&!c&&0===a.length&&(0,t.jsx)("div",{className:"text-center py-6",children:(0,t.jsx)(l.Text,{className:"text-gray-500",children:"No tools available"})})]})]},e.server_id)})})}])},364769,e=>{"use strict";var t=e.i(843476),s=e.i(271645),a=e.i(237016),l=e.i(464571),r=e.i(888259);e.s(["default",0,({apiKey:e})=>{let[i,n]=(0,s.useState)(!1);return(0,t.jsxs)("div",{children:[(0,t.jsxs)("p",{className:"mb-2",children:["Please save this secret key somewhere safe and accessible. For security reasons,"," ",(0,t.jsx)("b",{children:"you will not be able to view it again"})," through your LiteLLM account. If you lose this secret key, you will need to generate a new one."]}),(0,t.jsx)("p",{className:"text-sm text-gray-600 mt-3 mb-1",children:"Virtual Key:"}),(0,t.jsx)("div",{style:{background:"#f8f8f8",padding:"10px",borderRadius:"5px",marginBottom:"10px"},children:(0,t.jsx)("pre",{style:{wordWrap:"break-word",whiteSpace:"normal",margin:0},children:e})}),(0,t.jsx)(a.CopyToClipboard,{text:e,onCopy:()=>{n(!0),r.default.success("Key copied to clipboard"),setTimeout(()=>n(!1),2e3)},children:(0,t.jsx)(l.Button,{type:"primary",style:{marginTop:12},children:i?"Copied!":"Copy Virtual Key"})})]})}])},702597,e=>{"use strict";var t=e.i(843476),s=e.i(207082),a=e.i(109799),l=e.i(510674),r=e.i(109034),i=e.i(292639),n=e.i(135214),o=e.i(500330),d=e.i(827252),c=e.i(912598),u=e.i(677667),m=e.i(130643),p=e.i(898667),g=e.i(994388),h=e.i(309426),x=e.i(350967),y=e.i(599724),_=e.i(779241),f=e.i(629569),b=e.i(464571),j=e.i(808613),v=e.i(311451),w=e.i(212931),N=e.i(91739),k=e.i(199133),S=e.i(790848),C=e.i(262218),T=e.i(592968),I=e.i(898586),A=e.i(374009),L=e.i(271645),F=e.i(708347),O=e.i(552130),E=e.i(557662),M=e.i(9314),P=e.i(860585),R=e.i(82946),$=e.i(392110),B=e.i(533882),V=e.i(844565),D=e.i(651904),U=e.i(939510),z=e.i(460285),G=e.i(663435),K=e.i(363256),q=e.i(575260),H=e.i(371455),W=e.i(319312),Q=e.i(355619),J=e.i(75921),Y=e.i(234713),X=e.i(390605),Z=e.i(727749),ee=e.i(602869),et=e.i(364769),es=e.i(435451),ea=e.i(916940);let{Option:el}=k.Select,er=async(e,t,s,a)=>{try{if(null===e||null===t)return[];if(null!==s){let l=(await (0,ee.modelAvailableCall)(s,e,t,!0,a,!0)).data.map(e=>e.id);return console.log("available_model_names:",l),l}return[]}catch(e){return console.error("Error fetching user models:",e),[]}},ei=async(e,t,s,a)=>{try{if(null===e||null===t)return;if(null!==s){let l=(await (0,ee.modelAvailableCall)(s,e,t)).data.map(e=>e.id);console.log("available_model_names:",l),a(l)}}catch(e){console.error("Error fetching user models:",e)}};e.s(["default",0,({team:e,teams:en,data:eo,addKey:ed,autoOpenCreate:ec,prefillData:eu})=>{let{accessToken:em,userId:ep,userRole:eg,premiumUser:eh}=(0,n.default)(),ex=eh||null!=eg&&F.rolesWithWriteAccess.includes(eg),{data:ey,isLoading:e_}=(0,a.useOrganizations)(),{data:ef,isLoading:eb}=(0,l.useProjects)(),{data:ej}=(0,i.useUISettings)(),{data:ev}=(0,r.useTags)(),ew=!!ej?.values?.enable_projects_ui,eN=!!ej?.values?.disable_custom_api_keys,ek=ev?Object.values(ev).map(e=>({value:e.name,label:e.name})):[],eS=(0,c.useQueryClient)(),[eC]=j.Form.useForm(),[eT,eI]=(0,L.useState)(!1),[eA,eL]=(0,L.useState)(null),[eF,eO]=(0,L.useState)(null),[eE,eM]=(0,L.useState)([]),[eP,eR]=(0,L.useState)([]),[e$,eB]=(0,L.useState)("you"),[eV,eD]=(0,L.useState)(!1),[eU,ez]=(0,L.useState)(null),[eG,eK]=(0,L.useState)([]),[eq,eH]=(0,L.useState)([]),[eW,eQ]=(0,L.useState)([]),[eJ,eY]=(0,L.useState)([]),[eX,eZ]=(0,L.useState)(e),[e0,e1]=(0,L.useState)(null),[e4,e2]=(0,L.useState)(null),[e5,e3]=(0,L.useState)(!1),[e6,e7]=(0,L.useState)(null),[e9,e8]=(0,L.useState)({}),[te,tt]=(0,L.useState)([]),[ts,ta]=(0,L.useState)(!1),[tl,tr]=(0,L.useState)([]),[ti,tn]=(0,L.useState)([]),[to,td]=(0,L.useState)("llm_api"),[tc,tu]=(0,L.useState)({}),[tm,tp]=(0,L.useState)(!1),[tg,th]=(0,L.useState)("30d"),[tx,ty]=(0,L.useState)(null),[t_,tf]=(0,L.useState)([]),[tb,tj]=(0,L.useState)(0),[tv,tw]=(0,L.useState)([]),[tN,tk]=(0,L.useState)(null),tS=()=>{eI(!1),eC.resetFields(),eY([]),tn([]),td("llm_api"),tu({}),tp(!1),th("30d"),ty(null),tj(e=>e+1),tk(null),e1(null),e2(null),tf([])},tC=()=>{eI(!1),eL(null),eZ(null),eC.resetFields(),eY([]),tn([]),td("llm_api"),tu({}),tp(!1),th("30d"),ty(null),tj(e=>e+1),tk(null),e1(null),e2(null),tf([])};(0,L.useEffect)(()=>{ep&&eg&&em&&ei(ep,eg,em,eM)},[em,ep,eg]),(0,L.useEffect)(()=>{em&&(0,ee.getAgentsList)(em).then(e=>tw(e?.agents||[])).catch(()=>tw([]))},[em]),(0,L.useEffect)(()=>{let e=async()=>{try{let e=(await (0,ee.getPoliciesList)(em)).policies.map(e=>e.policy_name);eH(e)}catch(e){console.error("Failed to fetch policies:",e)}},t=async()=>{try{let e=await (0,ee.getPromptsList)(em);eQ(e.prompts.map(e=>e.prompt_id))}catch(e){console.error("Failed to fetch prompts:",e)}};(async()=>{try{let e=(await (0,ee.getGuardrailsList)(em)).guardrails.map(e=>e.guardrail_name);eK(e)}catch(e){console.error("Failed to fetch guardrails:",e)}})(),e(),t()},[em]),(0,L.useEffect)(()=>{(async()=>{try{if(em){let e=sessionStorage.getItem("possibleUserRoles");if(e)e8(JSON.parse(e));else{let e=await (0,ee.getPossibleUserRoles)(em);sessionStorage.setItem("possibleUserRoles",JSON.stringify(e)),e8(e)}}}catch(e){console.error("Error fetching possible user roles:",e)}})()},[em]),(0,L.useEffect)(()=>{if(ec&&!eV&&en&&eg&&F.rolesWithWriteAccess.includes(eg)&&(eI(!0),eD(!0),eu)){if(eu.owned_by&&("another_user"===eu.owned_by&&"Admin"!==eg?eB("you"):eB(eu.owned_by)),eu.team_id){let e=en?.find(e=>e.team_id===eu.team_id)||null;e&&(eZ(e),eC.setFieldsValue({team_id:eu.team_id}))}eu.key_alias&&eC.setFieldsValue({key_alias:eu.key_alias}),eu.models&&eu.models.length>0&&ez(eu.models),eu.key_type&&(td(eu.key_type),eC.setFieldsValue({key_type:eu.key_type}))}},[ec,eu,en,eV,eC,eg]);let tT=eP.includes("no-default-models")&&!eX,tI=async e=>{try{let t,a=e?.key_alias??"",l=e?.team_id??null;if((eo?.filter(e=>e.team_id===l).map(e=>e.key_alias)??[]).includes(a))throw Error(`Key alias ${a} already exists for team with ID ${l}, please provide another key alias`);if(Z.default.info("Making API Call"),eI(!0),"you"===e$)e.user_id=ep;else if("agent"===e$){if(!tN)return void Z.default.fromBackend("Please select an agent");e.agent_id=tN}let r={};try{r=JSON.parse(e.metadata||"{}")}catch(e){console.error("Error parsing metadata:",e)}if("service_account"===e$&&(r.service_account_id=e.key_alias),eJ.length>0&&(r={...r,logging:eJ.filter(e=>e.callback_name)}),ti.length>0){let e=(0,E.mapDisplayToInternalNames)(ti);r={...r,litellm_disabled_callbacks:e}}if(tm&&(e.auto_rotate=!0,e.rotation_interval=tg),e.duration&&""!==e.duration.trim()||(e.duration=null),e.metadata=JSON.stringify(r),e.disable_global_guardrails||delete e.disable_global_guardrails,e.allowed_vector_store_ids&&e.allowed_vector_store_ids.length>0&&(e.object_permission={vector_stores:e.allowed_vector_store_ids},delete e.allowed_vector_store_ids),e.allowed_mcp_servers_and_groups&&(e.allowed_mcp_servers_and_groups.servers?.length>0||e.allowed_mcp_servers_and_groups.accessGroups?.length>0)){e.object_permission||(e.object_permission={});let{servers:t,accessGroups:s}=e.allowed_mcp_servers_and_groups;t&&t.length>0&&(e.object_permission.mcp_servers=t),s&&s.length>0&&(e.object_permission.mcp_access_groups=s),delete e.allowed_mcp_servers_and_groups}let i=e.mcp_tool_permissions||{};if(Object.keys(i).length>0&&(e.object_permission||(e.object_permission={}),e.object_permission.mcp_tool_permissions=i),delete e.mcp_tool_permissions,e.allowed_mcp_access_groups&&e.allowed_mcp_access_groups.length>0&&(e.object_permission||(e.object_permission={}),e.object_permission.mcp_access_groups=e.allowed_mcp_access_groups,delete e.allowed_mcp_access_groups),e.allowed_agents_and_groups&&(e.allowed_agents_and_groups.agents?.length>0||e.allowed_agents_and_groups.accessGroups?.length>0)){e.object_permission||(e.object_permission={});let{agents:t,accessGroups:s}=e.allowed_agents_and_groups;t&&t.length>0&&(e.object_permission.agents=t),s&&s.length>0&&(e.object_permission.agent_access_groups=s),delete e.allowed_agents_and_groups}Object.keys(tc).length>0&&(e.aliases=JSON.stringify(tc)),tx?.router_settings&&Object.values(tx.router_settings).some(e=>null!=e&&""!==e)&&(e.router_settings=tx.router_settings);let n=t_.filter(e=>e.budget_duration&&null!==e.max_budget&&void 0!==e.max_budget);n.length>0&&(e.budget_limits=n),t="service_account"===e$?await (0,ee.keyCreateServiceAccountCall)(em,e):await (0,ee.keyCreateCall)(em,ep,e),console.log("key create Response:",t),ed(t),eS.invalidateQueries({queryKey:s.keyKeys.lists()}),eL(t.key),eO(t.soft_budget),Z.default.success("Virtual Key Created"),eC.resetFields(),tf([]),localStorage.removeItem("userData"+ep)}catch(t){console.log("error in create key:",t);let e=(e=>{let t;if(!(t=!e||"object"!=typeof e||e instanceof Error?String(e):JSON.stringify(e)).includes("/key/generate")&&!t.includes("KeyManagementRoutes.KEY_GENERATE"))return`Error creating the key: ${e}`;let s=t;try{if(!e||"object"!=typeof e||e instanceof Error){let e=t.match(/\{[\s\S]*\}/);if(e){let t=JSON.parse(e[0]),a=t?.error||t;a?.message&&(s=a.message)}}else{let t=e?.error||e;t?.message&&(s=t.message)}}catch(e){}return t.includes("team_member_permission_error")||s.includes("Team member does not have permissions")?"Team member does not have permission to generate key for this team. Ask your proxy admin to configure the team member permission settings.":`Error creating the key: ${e}`})(t);Z.default.fromBackend(e)}};(0,L.useEffect)(()=>{if(e4){let e=ef?.find(e=>e.project_id===e4);eR(e?.models??[]),eC.setFieldValue("models",[]);return}ep&&eg&&em&&er(ep,eg,em,eX?.team_id??null).then(e=>{eR(Array.from(new Set([...eX?.models??[],...e])))}),eU||eC.setFieldValue("models",[]),eC.setFieldValue("allowed_mcp_servers_and_groups",{servers:[],accessGroups:[]})},[eX,e4,em,ep,eg,eC]),(0,L.useEffect)(()=>{if(!eU||0===eU.length||!eP||0===eP.length)return;let e=eU.filter(e=>eP.includes(e));e.length>0&&eC.setFieldsValue({models:e}),ez(null)},[eU,eP,eC]),(0,L.useEffect)(()=>{if(!e4||!en)return;let e=ef?.find(e=>e.project_id===e4);if(!e?.team_id||eX?.team_id===e.team_id)return;let t=en.find(t=>t.team_id===e.team_id)||null;t&&(eZ(t),eC.setFieldValue("team_id",t.team_id))},[en,e4,ef]);let tA=async e=>{if(!e)return void tt([]);ta(!0);try{let t=new URLSearchParams;if(t.append("user_email",e),null==em)return;let s=(await (0,ee.userFilterUICall)(em,t)).map(e=>({label:`${e.user_email} (${e.user_id})`,value:e.user_id,user:e}));tt(s)}catch(e){console.error("Error fetching users:",e),Z.default.fromBackend("Failed to search for users")}finally{ta(!1)}},tL=(0,L.useCallback)((0,A.default)(e=>tA(e),300),[em]);return(0,t.jsxs)("div",{children:[eg&&F.rolesWithWriteAccess.includes(eg)&&(0,t.jsx)(g.Button,{className:"mx-auto",onClick:()=>eI(!0),"data-testid":"create-key-button",children:"+ Create New Key"}),(0,t.jsx)(w.Modal,{open:eT,width:1e3,footer:null,onOk:tS,onCancel:tC,children:(0,t.jsxs)(j.Form,{form:eC,onFinish:tI,labelCol:{span:8},wrapperCol:{span:16},labelAlign:"left",children:[(0,t.jsxs)("div",{className:"mb-8",children:[(0,t.jsx)(f.Title,{className:"mb-4",children:"Key Ownership"}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Owned By"," ",(0,t.jsx)(T.Tooltip,{title:"Select who will own this Virtual Key",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),className:"mb-4",children:(0,t.jsxs)(N.Radio.Group,{onChange:e=>eB(e.target.value),value:e$,children:[(0,t.jsx)(N.Radio,{value:"you",children:"You"}),(0,t.jsx)(N.Radio,{value:"service_account",children:"Service Account"}),"Admin"===eg&&(0,t.jsx)(N.Radio,{value:"another_user",children:"Another User"}),(0,t.jsxs)(N.Radio,{value:"agent",children:["Agent ",(0,t.jsx)(C.Tag,{color:"purple",children:"New"})]})]})}),"another_user"===e$&&(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["User ID"," ",(0,t.jsx)(T.Tooltip,{title:"The user who will own this key and be responsible for its usage",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"user_id",className:"mt-4",rules:[{required:"another_user"===e$,message:"Please input the user ID of the user you are assigning the key to"}],children:(0,t.jsxs)("div",{children:[(0,t.jsxs)("div",{style:{display:"flex",marginBottom:"8px"},children:[(0,t.jsx)(k.Select,{showSearch:!0,placeholder:"Type email to search for users",filterOption:!1,onSearch:e=>{tL(e)},onSelect:(e,t)=>{let s;return s=t.user,void eC.setFieldsValue({user_id:s.user_id})},options:te,loading:ts,allowClear:!0,style:{width:"100%"},notFoundContent:ts?"Searching...":"No users found"}),(0,t.jsx)(b.Button,{onClick:()=>e3(!0),style:{marginLeft:"8px"},children:"Create User"})]}),(0,t.jsx)("div",{className:"text-xs text-gray-500",children:"Search by email to find users"})]})}),"agent"===e$&&(0,t.jsxs)("div",{className:"mt-4 p-4 bg-purple-50 border border-purple-200 rounded-md",children:[(0,t.jsx)("div",{className:"mb-3",children:(0,t.jsxs)("span",{className:"text-sm font-medium text-gray-700",children:["Select Agent ",(0,t.jsx)("span",{className:"text-red-500",children:"*"})]})}),(0,t.jsx)(k.Select,{showSearch:!0,placeholder:"Select an agent",style:{width:"100%"},value:tN,onChange:e=>tk(e),filterOption:(e,t)=>t?.label?.toLowerCase().includes(e.toLowerCase()),options:tv.map(e=>({label:e.agent_name||e.agent_id,value:e.agent_id}))}),(0,t.jsx)("div",{className:"text-xs text-gray-500 mt-2",children:"This key will be used by the selected agent to make requests to LiteLLM"})]}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Organization"," ",(0,t.jsx)(T.Tooltip,{title:"The organization this key belongs to. Selecting an organization filters the available teams.",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"organization_id",className:"mt-4",children:(0,t.jsx)(K.default,{organizations:ey,loading:e_,disabled:"Admin"!==eg,onChange:e=>{e1(e||null),eZ(null),e2(null),eC.setFieldValue("team_id",void 0),eC.setFieldValue("project_id",void 0)}})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Team"," ",(0,t.jsx)(T.Tooltip,{title:"The team this key belongs to, which determines available models and budget limits",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"team_id",initialValue:e?e.team_id:null,className:"mt-4",rules:[{required:"service_account"===e$,message:"Please select a team for the service account"}],help:"service_account"===e$?"required":"",children:(0,t.jsx)(G.default,{disabled:null!==e4,organizationId:e0,onTeamSelect:e=>{eZ(e),e2(null),eC.setFieldValue("project_id",void 0),e?.organization_id?(e1(e.organization_id),eC.setFieldValue("organization_id",e.organization_id)):e||(e1(null),eC.setFieldValue("organization_id",void 0))}})}),ew&&(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Project"," ",(0,t.jsx)(T.Tooltip,{title:"Assign this key to a project. Selecting a project will lock the team to the project's team.",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"project_id",className:"mt-4",children:(0,t.jsx)(q.default,{projects:ef,teamId:eX?.team_id,loading:eb||!en,onChange:e=>{if(!e){e2(null),eZ(null),eC.setFieldValue("team_id",void 0);return}e2(e)}})})]}),tT&&(0,t.jsx)("div",{className:"mb-8 p-4 bg-blue-50 border border-blue-200 rounded-md",children:(0,t.jsx)(y.Text,{className:"text-blue-800 text-sm",children:"Please select a team to continue configuring your Virtual Key. If you do not see any teams, please contact your Proxy Admin to either provide you with access to models or to add you to a team."})}),!tT&&(0,t.jsxs)("div",{className:"mb-8",children:[(0,t.jsx)(f.Title,{className:"mb-4",children:"Key Details"}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["you"===e$||"another_user"===e$?"Key Name":"Service Account ID"," ",(0,t.jsx)(T.Tooltip,{title:"you"===e$||"another_user"===e$?"A descriptive name to identify this key":"Unique identifier for this service account",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"key_alias",rules:[{required:!0,message:`Please input a ${"you"===e$?"key name":"service account ID"}`}],help:"required",children:(0,t.jsx)(_.TextInput,{placeholder:""})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Models"," ",(0,t.jsx)(T.Tooltip,{title:"Select which models this key can access. Choose 'All Team Models' to grant access to all models available to the team. Leave empty to allow access to all models.",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"models",rules:[],help:"management"===to||"read_only"===to?"Models field is disabled for this key type":"optional - leave empty to allow access to all models",className:"mt-4",children:(0,t.jsxs)(k.Select,{mode:"multiple",placeholder:"Select models",style:{width:"100%"},disabled:"management"===to||"read_only"===to,onChange:e=>{e.includes("all-team-models")&&eC.setFieldsValue({models:["all-team-models"]})},children:[!e4&&(0,t.jsx)(el,{value:"all-team-models",children:"All Team Models"},"all-team-models"),eP.map(e=>(0,t.jsx)(el,{value:e,children:(0,Q.getModelDisplayName)(e)},e))]})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Key Type"," ",(0,t.jsx)(T.Tooltip,{title:"Select the type of key to determine what routes and operations this key can access",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"key_type",initialValue:"llm_api",className:"mt-4",children:(0,t.jsxs)(k.Select,{defaultValue:"llm_api",placeholder:"Select key type",style:{width:"100%"},optionLabelProp:"label",onChange:e=>{td(e),("management"===e||"read_only"===e)&&eC.setFieldsValue({models:[]})},children:[(0,t.jsx)(el,{value:"llm_api",label:"AI APIs",children:(0,t.jsxs)("div",{style:{padding:"4px 0"},children:[(0,t.jsx)(I.Typography.Text,{strong:!0,children:"AI APIs"}),(0,t.jsx)(I.Typography.Paragraph,{type:"secondary",style:{fontSize:11,margin:"2px 0 0"},children:"Can call only AI API routes (chat/completions, embeddings, etc.)"})]})}),(0,t.jsx)(el,{value:"management",label:"Management",children:(0,t.jsxs)("div",{style:{padding:"4px 0"},children:[(0,t.jsx)(I.Typography.Text,{strong:!0,children:"Management"}),(0,t.jsx)(I.Typography.Paragraph,{type:"secondary",style:{fontSize:11,margin:"2px 0 0"},children:"Can call only management routes (user/team/key management)"})]})}),(0,t.jsx)(el,{value:"default",label:"Full Access",children:(0,t.jsxs)("div",{style:{padding:"4px 0"},children:[(0,t.jsx)(I.Typography.Text,{strong:!0,children:"Full Access"}),(0,t.jsx)(I.Typography.Paragraph,{type:"secondary",style:{fontSize:11,margin:"2px 0 0"},children:"Can call all routes (AI APIs, Management, and read-only)"})]})})]})})]}),!tT&&(0,t.jsx)("div",{className:"mb-8",children:(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)(f.Title,{className:"m-0",children:"Optional Settings"})}),(0,t.jsxs)(m.AccordionBody,{children:[(0,t.jsx)(j.Form.Item,{className:"mt-4",label:(0,t.jsxs)("span",{children:["Max Budget (USD)"," ",(0,t.jsx)(T.Tooltip,{title:"Maximum amount in USD this key can spend. When reached, the key will be blocked from making further requests",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"max_budget",help:`Budget cannot exceed team max budget: $${e?.max_budget!==null&&e?.max_budget!==void 0?e?.max_budget:"unlimited"}`,rules:[{validator:async(t,s)=>{if(s&&e&&null!==e.max_budget&&s>e.max_budget)throw Error(`Budget cannot exceed team max budget: $${(0,o.formatNumberWithCommas)(e.max_budget,4)}`)}}],children:(0,t.jsx)(es.default,{step:.01,precision:2,width:200})}),(0,t.jsx)(j.Form.Item,{className:"mt-4",label:(0,t.jsxs)("span",{children:["Reset Budget"," ",(0,t.jsx)(T.Tooltip,{title:"How often the budget should reset. For example, setting 'daily' will reset the budget every 24 hours",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"budget_duration",help:`Team Reset Budget: ${e?.budget_duration!==null&&e?.budget_duration!==void 0?e?.budget_duration:"None"}`,children:(0,t.jsx)(P.default,{onChange:e=>eC.setFieldValue("budget_duration",e)})}),(0,t.jsx)(j.Form.Item,{className:"mt-4",label:(0,t.jsxs)("span",{children:["Budget Windows"," ",(0,t.jsx)(T.Tooltip,{title:"Set multiple independent budget windows (e.g., hourly $10 AND monthly $200). Each window tracks spend separately and resets on its own schedule.",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),children:(0,t.jsx)(W.BudgetWindowsEditor,{value:t_,onChange:tf})}),(0,t.jsx)(j.Form.Item,{className:"mt-4",label:(0,t.jsxs)("span",{children:["Tokens per minute Limit (TPM)"," ",(0,t.jsx)(T.Tooltip,{title:"Maximum number of tokens this key can process per minute. Helps control usage and costs",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"tpm_limit",help:`TPM cannot exceed team TPM limit: ${e?.tpm_limit!==null&&e?.tpm_limit!==void 0?e?.tpm_limit:"unlimited"}`,rules:[{validator:async(t,s)=>{if(s&&e&&null!==e.tpm_limit&&s>e.tpm_limit)throw Error(`TPM limit cannot exceed team TPM limit: ${e.tpm_limit}`)}}],children:(0,t.jsx)(es.default,{step:1,width:400})}),(0,t.jsx)(U.default,{type:"tpm",name:"tpm_limit_type",className:"mt-4",initialValue:null,form:eC,showDetailedDescriptions:!0}),(0,t.jsx)(j.Form.Item,{className:"mt-4",label:(0,t.jsxs)("span",{children:["Requests per minute Limit (RPM)"," ",(0,t.jsx)(T.Tooltip,{title:"Maximum number of API requests this key can make per minute. Helps prevent abuse and manage load",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"rpm_limit",help:`RPM cannot exceed team RPM limit: ${e?.rpm_limit!==null&&e?.rpm_limit!==void 0?e?.rpm_limit:"unlimited"}`,rules:[{validator:async(t,s)=>{if(s&&e&&null!==e.rpm_limit&&s>e.rpm_limit)throw Error(`RPM limit cannot exceed team RPM limit: ${e.rpm_limit}`)}}],children:(0,t.jsx)(es.default,{step:1,width:400})}),(0,t.jsx)(U.default,{type:"rpm",name:"rpm_limit_type",className:"mt-4",initialValue:null,form:eC,showDetailedDescriptions:!0}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Guardrails"," ",(0,t.jsx)(T.Tooltip,{title:"Apply safety guardrails to this key to filter content or enforce policies",children:(0,t.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/guardrails/quick_start",target:"_blank",rel:"noopener noreferrer",onClick:e=>e.stopPropagation(),children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})})]}),name:"guardrails",className:"mt-4",help:ex?"Select existing guardrails or enter new ones":"Premium feature - Upgrade to set guardrails by key",children:(0,t.jsx)(k.Select,{mode:"tags",style:{width:"100%"},disabled:!ex,placeholder:ex?"Select or enter guardrails":"Premium feature - Upgrade to set guardrails by key",options:eG.map(e=>({value:e,label:e}))})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Disable Global Guardrails"," ",(0,t.jsx)(T.Tooltip,{title:"When enabled, this key will bypass any guardrails configured to run on every request (global guardrails)",children:(0,t.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/guardrails/quick_start",target:"_blank",rel:"noopener noreferrer",onClick:e=>e.stopPropagation(),children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})})]}),name:"disable_global_guardrails",className:"mt-4",valuePropName:"checked",help:ex?"Bypass global guardrails for this key":"Premium feature - Upgrade to disable global guardrails by key",children:(0,t.jsx)(S.Switch,{disabled:!ex,checkedChildren:"Yes",unCheckedChildren:"No"})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Policies"," ",(0,t.jsx)(T.Tooltip,{title:"Apply policies to this key to control guardrails and other settings",children:(0,t.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/guardrails/guardrail_policies",target:"_blank",rel:"noopener noreferrer",onClick:e=>e.stopPropagation(),children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})})]}),name:"policies",className:"mt-4",help:eh?"Select existing policies or enter new ones":"Premium feature - Upgrade to set policies by key",children:(0,t.jsx)(k.Select,{mode:"tags",style:{width:"100%"},disabled:!eh,placeholder:eh?"Select or enter policies":"Premium feature - Upgrade to set policies by key",options:eq.map(e=>({value:e,label:e}))})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Prompts"," ",(0,t.jsx)(T.Tooltip,{title:"Allow this key to use specific prompt templates",children:(0,t.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/prompt_management",target:"_blank",rel:"noopener noreferrer",onClick:e=>e.stopPropagation(),children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})})]}),name:"prompts",className:"mt-4",help:eh?"Select existing prompts or enter new ones":"Premium feature - Upgrade to set prompts by key",children:(0,t.jsx)(k.Select,{mode:"tags",style:{width:"100%"},disabled:!eh,placeholder:eh?"Select or enter prompts":"Premium feature - Upgrade to set prompts by key",options:eW.map(e=>({value:e,label:e}))})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Access Groups"," ",(0,t.jsx)(T.Tooltip,{title:"Assign access groups to this key. Access groups control which models, MCP servers, and agents this key can use",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"access_group_ids",className:"mt-4",help:"Select access groups to assign to this key",children:(0,t.jsx)(M.default,{placeholder:"Select access groups (optional)"})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Allowed Pass Through Routes"," ",(0,t.jsx)(T.Tooltip,{title:"Allow this key to use specific pass through routes",children:(0,t.jsx)("a",{href:"https://docs.litellm.ai/docs/proxy/pass_through",target:"_blank",rel:"noopener noreferrer",onClick:e=>e.stopPropagation(),children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})})]}),name:"allowed_passthrough_routes",className:"mt-4",help:eh?"Select existing pass through routes or enter new ones":"Premium feature - Upgrade to set pass through routes by key",children:(0,t.jsx)(V.default,{onChange:e=>eC.setFieldValue("allowed_passthrough_routes",e),value:eC.getFieldValue("allowed_passthrough_routes"),accessToken:em,placeholder:eh?"Select or enter pass through routes":"Premium feature - Upgrade to set pass through routes by key",disabled:!eh,teamId:eX?eX.team_id:null})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Allowed Vector Stores"," ",(0,t.jsx)(T.Tooltip,{title:"Select which vector stores this key can access. If none selected, the key will have access to all available vector stores",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"allowed_vector_store_ids",className:"mt-4",help:"Select vector stores this key can access. Leave empty for access to all vector stores",children:(0,t.jsx)(ea.default,{onChange:e=>eC.setFieldValue("allowed_vector_store_ids",e),value:eC.getFieldValue("allowed_vector_store_ids"),accessToken:em,placeholder:"Select vector stores (optional)"})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Metadata"," ",(0,t.jsx)(T.Tooltip,{title:"JSON object with additional information about this key. Used for tracking or custom logic",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"metadata",className:"mt-4",children:(0,t.jsx)(v.Input.TextArea,{rows:4,placeholder:"Enter metadata as JSON"})}),(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Tags"," ",(0,t.jsx)(T.Tooltip,{title:"Tags for tracking spend and/or doing tag-based routing. Used for analytics and filtering",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"tags",className:"mt-4",help:"Tags for tracking spend and/or doing tag-based routing.",children:(0,t.jsx)(k.Select,{mode:"tags",style:{width:"100%"},placeholder:"Select or enter tags",tokenSeparators:[","],options:ek})}),(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)("b",{children:"MCP Settings"})}),(0,t.jsxs)(m.AccordionBody,{children:[(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Allowed MCP Servers"," ",(0,t.jsx)(T.Tooltip,{title:"Select which MCP servers or access groups this key can access",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"allowed_mcp_servers_and_groups",help:"Select MCP servers or access groups this key can access",children:(0,t.jsx)(J.default,{onChange:e=>eC.setFieldValue("allowed_mcp_servers_and_groups",e),value:eC.getFieldValue("allowed_mcp_servers_and_groups"),accessToken:em,teamId:eX?.team_id??null,placeholder:"Select MCP servers or access groups (optional)",allowNoMcpServers:!0})}),(0,t.jsx)(j.Form.Item,{name:"mcp_tool_permissions",initialValue:{},hidden:!0,children:(0,t.jsx)(v.Input,{type:"hidden"})}),(0,t.jsx)(j.Form.Item,{noStyle:!0,shouldUpdate:(e,t)=>e.allowed_mcp_servers_and_groups!==t.allowed_mcp_servers_and_groups||e.mcp_tool_permissions!==t.mcp_tool_permissions,children:()=>(0,t.jsx)("div",{className:"mt-6",children:(0,t.jsx)(X.default,{accessToken:em,selectedServers:(eC.getFieldValue("allowed_mcp_servers_and_groups")?.servers||[]).filter(e=>e!==Y.NO_MCP_SERVERS_SENTINEL),toolPermissions:eC.getFieldValue("mcp_tool_permissions")||{},onChange:e=>eC.setFieldsValue({mcp_tool_permissions:e})})})})]})]}),(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)("b",{children:"Agent Settings"})}),(0,t.jsx)(m.AccordionBody,{children:(0,t.jsx)(j.Form.Item,{label:(0,t.jsxs)("span",{children:["Allowed Agents"," ",(0,t.jsx)(T.Tooltip,{title:"Select which agents or access groups this key can access",children:(0,t.jsx)(d.InfoCircleOutlined,{style:{marginLeft:"4px"}})})]}),name:"allowed_agents_and_groups",help:"Select agents or access groups this key can access",children:(0,t.jsx)(O.default,{onChange:e=>eC.setFieldValue("allowed_agents_and_groups",e),value:eC.getFieldValue("allowed_agents_and_groups"),accessToken:em,placeholder:"Select agents or access groups (optional)"})})})]}),eh?(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)("b",{children:"Logging Settings"})}),(0,t.jsx)(m.AccordionBody,{children:(0,t.jsx)("div",{className:"mt-4",children:(0,t.jsx)(D.default,{value:eJ,onChange:eY,premiumUser:!0,disabledCallbacks:ti,onDisabledCallbacksChange:tn})})})]}):(0,t.jsx)(T.Tooltip,{title:(0,t.jsxs)("span",{children:["Key-level logging settings is an enterprise feature, get in touch -",(0,t.jsx)("a",{href:"https://www.litellm.ai/enterprise",target:"_blank",children:"https://www.litellm.ai/enterprise"})]}),placement:"top",children:(0,t.jsxs)("div",{style:{position:"relative"},children:[(0,t.jsx)("div",{style:{opacity:.5},children:(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)("b",{children:"Logging Settings"})}),(0,t.jsx)(m.AccordionBody,{children:(0,t.jsx)("div",{className:"mt-4",children:(0,t.jsx)(D.default,{value:eJ,onChange:eY,premiumUser:!1,disabledCallbacks:ti,onDisabledCallbacksChange:tn})})})]})}),(0,t.jsx)("div",{style:{position:"absolute",inset:0,cursor:"not-allowed"}})]})}),(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)("b",{children:"Router Settings"})}),(0,t.jsx)(m.AccordionBody,{children:(0,t.jsx)("div",{className:"mt-4 w-full",children:(0,t.jsx)(z.default,{accessToken:em||"",value:tx||void 0,onChange:ty,modelData:eE.length>0?{data:eE.map(e=>({model_name:e}))}:void 0},tb)})})]},`router-settings-accordion-${tb}`),(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)("b",{children:"Model Aliases"})}),(0,t.jsx)(m.AccordionBody,{children:(0,t.jsxs)("div",{className:"mt-4",children:[(0,t.jsx)(y.Text,{className:"text-sm text-gray-600 mb-4",children:"Create custom aliases for models that can be used in API calls. This allows you to create shortcuts for specific models."}),(0,t.jsx)(B.default,{accessToken:em,initialModelAliases:tc,onAliasUpdate:tu,showExampleConfig:!1})]})})]}),(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsx)("b",{children:"Key Lifecycle"})}),(0,t.jsx)(m.AccordionBody,{children:(0,t.jsx)("div",{className:"mt-4",children:(0,t.jsx)($.default,{form:eC,autoRotationEnabled:tm,onAutoRotationChange:tp,rotationInterval:tg,onRotationIntervalChange:th,isCreateMode:!0})})}),(0,t.jsx)(j.Form.Item,{name:"duration",hidden:!0,initialValue:null,children:(0,t.jsx)(v.Input,{})})]}),(0,t.jsxs)(u.Accordion,{className:"mt-4 mb-4",children:[(0,t.jsx)(p.AccordionHeader,{children:(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsx)("b",{children:"Advanced Settings"}),(0,t.jsx)(T.Tooltip,{title:(0,t.jsxs)("span",{children:["Learn more about advanced settings in our"," ",(0,t.jsx)("a",{href:ee.proxyBaseUrl?`${ee.proxyBaseUrl}/#/key%20management/generate_key_fn_key_generate_post`:"/#/key%20management/generate_key_fn_key_generate_post",target:"_blank",rel:"noopener noreferrer",className:"text-blue-400 hover:text-blue-300",children:"documentation"})]}),children:(0,t.jsx)(d.InfoCircleOutlined,{className:"text-gray-400 hover:text-gray-300 cursor-help"})})]})}),(0,t.jsx)(m.AccordionBody,{children:(0,t.jsx)(R.default,{schemaComponent:"GenerateKeyRequest",form:eC,excludedFields:["key_alias","team_id","organization_id","models","duration","metadata","tags","guardrails","max_budget","budget_duration","tpm_limit","rpm_limit",...eN?["key"]:[]]})})]})]})]})}),(0,t.jsx)("div",{style:{textAlign:"right",marginTop:"10px"},children:(0,t.jsx)(b.Button,{htmlType:"submit",disabled:tT,style:{opacity:tT?.5:1},children:"Create Key"})})]})}),e5&&(0,t.jsx)(w.Modal,{title:"Create New User",open:e5,onCancel:()=>e3(!1),footer:null,width:800,children:(0,t.jsx)(H.CreateUserButton,{userID:ep,accessToken:em,teams:en,possibleUIRoles:e9,onUserCreated:e=>{e7(e),eC.setFieldsValue({user_id:e}),e3(!1)},isEmbedded:!0})}),eA&&(0,t.jsx)(w.Modal,{open:eT,onOk:tS,onCancel:tC,footer:null,children:(0,t.jsxs)(x.Grid,{numItems:1,className:"gap-2 w-full",children:[(0,t.jsx)(f.Title,{children:"Save your Key"}),(0,t.jsx)(h.Col,{numColSpan:1,children:null!=eA?(0,t.jsx)(et.default,{apiKey:eA}):(0,t.jsx)(y.Text,{children:"Key being created, this might take 30s"})})]})})]})},"fetchTeamModels",0,er,"fetchUserModels",0,ei],702597)}]); \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_next/static/chunks/14_9gq.6yjjih.js b/litellm/proxy/_experimental/out/_next/static/chunks/14_9gq.6yjjih.js new file mode 100644 index 00000000000..2f3c70fc6ba --- /dev/null +++ b/litellm/proxy/_experimental/out/_next/static/chunks/14_9gq.6yjjih.js @@ -0,0 +1,2 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,184163,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let n={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M505.7 661a8 8 0 0012.6 0l112-141.7c4.1-5.2.4-12.9-6.3-12.9h-74.1V168c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v338.3H400c-6.7 0-10.4 7.7-6.3 12.9l112 141.8zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"}}]},name:"download",theme:"outlined"};var l=e.i(9583),s=r.forwardRef(function(e,s){return r.createElement(l.default,(0,t.default)({},e,{ref:s,icon:n}))});e.s(["default",0,s],184163)},309821,e=>{"use strict";e.i(247167);var t=e.i(271645),r=e.i(135551),n=e.i(201072),l=e.i(121229),s=e.i(726289),i=e.i(864517),a=e.i(343794),o=e.i(529681),c=e.i(242064),u=e.i(931067),d=e.i(209428),m=e.i(703923),p={percent:0,prefixCls:"rc-progress",strokeColor:"#2db7f5",strokeLinecap:"round",strokeWidth:1,trailColor:"#D9D9D9",trailWidth:1,gapPosition:"bottom"},f=function(){var e=(0,t.useRef)([]),r=(0,t.useRef)(null);return(0,t.useEffect)(function(){var t=Date.now(),n=!1;e.current.forEach(function(e){if(e){n=!0;var l=e.style;l.transitionDuration=".3s, .3s, .3s, .06s",r.current&&t-r.current<100&&(l.transitionDuration="0s, 0s")}}),n&&(r.current=Date.now())}),e.current},h=e.i(410160),x=e.i(392221),g=e.i(654310),v=0,b=(0,g.default)();let y=function(e){var r=t.useState(),n=(0,x.default)(r,2),l=n[0],s=n[1];return t.useEffect(function(){var e;s("rc_progress_".concat((b?(e=v,v+=1):e="TEST_OR_SSR",e)))},[]),e||l};var j=function(e){var r=e.bg,n=e.children;return t.createElement("div",{style:{width:"100%",height:"100%",background:r}},n)};function w(e,t){return Object.keys(e).map(function(r){var n=parseFloat(r),l="".concat(Math.floor(n*t),"%");return"".concat(e[r]," ").concat(l)})}var C=t.forwardRef(function(e,r){var n=e.prefixCls,l=e.color,s=e.gradientId,i=e.radius,a=e.style,o=e.ptg,c=e.strokeLinecap,u=e.strokeWidth,d=e.size,m=e.gapDegree,p=l&&"object"===(0,h.default)(l),f=d/2,x=t.createElement("circle",{className:"".concat(n,"-circle-path"),r:i,cx:f,cy:f,stroke:p?"#FFF":void 0,strokeLinecap:c,strokeWidth:u,opacity:+(0!==o),style:a,ref:r});if(!p)return x;var g="".concat(s,"-conic"),v=w(l,(360-m)/360),b=w(l,1),y="conic-gradient(from ".concat(m?"".concat(180+m/2,"deg"):"0deg",", ").concat(v.join(", "),")"),C="linear-gradient(to ".concat(m?"bottom":"top",", ").concat(b.join(", "),")");return t.createElement(t.Fragment,null,t.createElement("mask",{id:g},x),t.createElement("foreignObject",{x:0,y:0,width:d,height:d,mask:"url(#".concat(g,")")},t.createElement(j,{bg:C},t.createElement(j,{bg:y}))))}),k=function(e,t,r,n,l,s,i,a,o,c){var u=arguments.length>10&&void 0!==arguments[10]?arguments[10]:0,d=(100-n)/100*t;return"round"===o&&100!==n&&(d+=c/2)>=t&&(d=t-.01),{stroke:"string"==typeof a?a:void 0,strokeDasharray:"".concat(t,"px ").concat(e),strokeDashoffset:d+u,transform:"rotate(".concat(l+r/100*360*((360-s)/360)+(0===s?0:({bottom:0,top:180,left:90,right:-90})[i]),"deg)"),transformOrigin:"".concat(50,"px ").concat(50,"px"),transition:"stroke-dashoffset .3s ease 0s, stroke-dasharray .3s ease 0s, stroke .3s, stroke-width .06s ease .3s, opacity .3s ease 0s",fillOpacity:0}},S=["id","prefixCls","steps","strokeWidth","trailWidth","gapDegree","gapPosition","trailColor","strokeLinecap","style","className","strokeColor","percent"];function N(e){var t=null!=e?e:[];return Array.isArray(t)?t:[t]}let E=function(e){var r,n,l,s,i=(0,d.default)((0,d.default)({},p),e),o=i.id,c=i.prefixCls,x=i.steps,g=i.strokeWidth,v=i.trailWidth,b=i.gapDegree,j=void 0===b?0:b,w=i.gapPosition,E=i.trailColor,_=i.strokeLinecap,O=i.style,I=i.className,$=i.strokeColor,T=i.percent,P=(0,m.default)(i,S),D=y(o),F="".concat(D,"-gradient"),M=50-g/2,R=2*Math.PI*M,A=j>0?90+j/2:-90,L=(360-j)/360*R,B="object"===(0,h.default)(x)?x:{count:x,gap:2},U=B.count,V=B.gap,z=N(T),H=N($),W=H.find(function(e){return e&&"object"===(0,h.default)(e)}),K=W&&"object"===(0,h.default)(W)?"butt":_,X=k(R,L,0,100,A,j,w,E,K,g),q=f();return t.createElement("svg",(0,u.default)({className:(0,a.default)("".concat(c,"-circle"),I),viewBox:"0 0 ".concat(100," ").concat(100),style:O,id:o,role:"presentation"},P),!U&&t.createElement("circle",{className:"".concat(c,"-circle-trail"),r:M,cx:50,cy:50,stroke:E,strokeLinecap:K,strokeWidth:v||g,style:X}),U?(r=Math.round(U*(z[0]/100)),n=100/U,l=0,Array(U).fill(null).map(function(e,s){var i=s<=r-1?H[0]:E,a=i&&"object"===(0,h.default)(i)?"url(#".concat(F,")"):void 0,o=k(R,L,l,n,A,j,w,i,"butt",g,V);return l+=(L-o.strokeDashoffset+V)*100/L,t.createElement("circle",{key:s,className:"".concat(c,"-circle-path"),r:M,cx:50,cy:50,stroke:a,strokeWidth:g,opacity:1,style:o,ref:function(e){q[s]=e}})})):(s=0,z.map(function(e,r){var n=H[r]||H[H.length-1],l=k(R,L,s,e,A,j,w,n,K,g);return s+=e,t.createElement(C,{key:r,color:n,ptg:e,radius:M,prefixCls:c,gradientId:F,style:l,strokeLinecap:K,strokeWidth:g,gapDegree:j,ref:function(e){q[r]=e},size:100})}).reverse()))};var _=e.i(491816);e.i(765846);var O=e.i(896091);function I(e){return!e||e<0?0:e>100?100:e}function $({success:e,successPercent:t}){let r=t;return e&&"progress"in e&&(r=e.progress),e&&"percent"in e&&(r=e.percent),r}let T=(e,t,r)=>{var n,l,s,i;let a=-1,o=-1;if("step"===t){let t=r.steps,n=r.strokeWidth;"string"==typeof e||void 0===e?(a="small"===e?2:14,o=null!=n?n:8):"number"==typeof e?[a,o]=[e,e]:[a=14,o=8]=Array.isArray(e)?e:[e.width,e.height],a*=t}else if("line"===t){let t=null==r?void 0:r.strokeWidth;"string"==typeof e||void 0===e?o=t||("small"===e?6:8):"number"==typeof e?[a,o]=[e,e]:[a=-1,o=8]=Array.isArray(e)?e:[e.width,e.height]}else("circle"===t||"dashboard"===t)&&("string"==typeof e||void 0===e?[a,o]="small"===e?[60,60]:[120,120]:"number"==typeof e?[a,o]=[e,e]:Array.isArray(e)&&(a=null!=(l=null!=(n=e[0])?n:e[1])?l:120,o=null!=(i=null!=(s=e[0])?s:e[1])?i:120));return[a,o]},P=e=>{let{prefixCls:r,trailColor:n=null,strokeLinecap:l="round",gapPosition:s,gapDegree:i,width:o=120,type:c,children:u,success:d,size:m=o,steps:p}=e,[f,h]=T(m,"circle"),{strokeWidth:x}=e;void 0===x&&(x=Math.max(3/f*100,6));let g=t.useMemo(()=>i||0===i?i:"dashboard"===c?75:void 0,[i,c]),v=(({percent:e,success:t,successPercent:r})=>{let n=I($({success:t,successPercent:r}));return[n,I(I(e)-n)]})(e),b="[object Object]"===Object.prototype.toString.call(e.strokeColor),y=(({success:e={},strokeColor:t})=>{let{strokeColor:r}=e;return[r||O.presetPrimaryColors.green,t||null]})({success:d,strokeColor:e.strokeColor}),j=(0,a.default)(`${r}-inner`,{[`${r}-circle-gradient`]:b}),w=t.createElement(E,{steps:p,percent:p?v[1]:v,strokeWidth:x,trailWidth:x,strokeColor:p?y[1]:y,strokeLinecap:l,trailColor:n,prefixCls:r,gapDegree:g,gapPosition:s||"dashboard"===c&&"bottom"||void 0}),C=f<=20,k=t.createElement("div",{className:j,style:{width:f,height:h,fontSize:.15*f+6}},w,!C&&u);return C?t.createElement(_.default,{title:u},k):k};e.i(296059);var D=e.i(694758),F=e.i(915654),M=e.i(183293),R=e.i(246422),A=e.i(838378);let L="--progress-line-stroke-color",B="--progress-percent",U=e=>{let t=e?"100%":"-100%";return new D.Keyframes(`antProgress${e?"RTL":"LTR"}Active`,{"0%":{transform:`translateX(${t}) scaleX(0)`,opacity:.1},"20%":{transform:`translateX(${t}) scaleX(0)`,opacity:.5},to:{transform:"translateX(0) scaleX(1)",opacity:0}})},V=(0,R.genStyleHooks)("Progress",e=>{let t=e.calc(e.marginXXS).div(2).equal(),r=(0,A.mergeToken)(e,{progressStepMarginInlineEnd:t,progressStepMinWidth:t,progressActiveMotionDuration:"2.4s"});return[(e=>{let{componentCls:t,iconCls:r}=e;return{[t]:Object.assign(Object.assign({},(0,M.resetComponent)(e)),{display:"inline-block","&-rtl":{direction:"rtl"},"&-line":{position:"relative",width:"100%",fontSize:e.fontSize},[`${t}-outer`]:{display:"inline-flex",alignItems:"center",width:"100%"},[`${t}-inner`]:{position:"relative",display:"inline-block",width:"100%",flex:1,overflow:"hidden",verticalAlign:"middle",backgroundColor:e.remainingColor,borderRadius:e.lineBorderRadius},[`${t}-inner:not(${t}-circle-gradient)`]:{[`${t}-circle-path`]:{stroke:e.defaultColor}},[`${t}-success-bg, ${t}-bg`]:{position:"relative",background:e.defaultColor,borderRadius:e.lineBorderRadius,transition:`all ${e.motionDurationSlow} ${e.motionEaseInOutCirc}`},[`${t}-layout-bottom`]:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",[`${t}-text`]:{width:"max-content",marginInlineStart:0,marginTop:e.marginXXS}},[`${t}-bg`]:{overflow:"hidden","&::after":{content:'""',background:{_multi_value_:!0,value:["inherit",`var(${L})`]},height:"100%",width:`calc(1 / var(${B}) * 100%)`,display:"block"},[`&${t}-bg-inner`]:{minWidth:"max-content","&::after":{content:"none"},[`${t}-text-inner`]:{color:e.colorWhite,[`&${t}-text-bright`]:{color:"rgba(0, 0, 0, 0.45)"}}}},[`${t}-success-bg`]:{position:"absolute",insetBlockStart:0,insetInlineStart:0,backgroundColor:e.colorSuccess},[`${t}-text`]:{display:"inline-block",marginInlineStart:e.marginXS,color:e.colorText,lineHeight:1,width:"2em",whiteSpace:"nowrap",textAlign:"start",verticalAlign:"middle",wordBreak:"normal",[r]:{fontSize:e.fontSize},[`&${t}-text-outer`]:{width:"max-content"},[`&${t}-text-outer${t}-text-start`]:{width:"max-content",marginInlineStart:0,marginInlineEnd:e.marginXS}},[`${t}-text-inner`]:{display:"flex",justifyContent:"center",alignItems:"center",width:"100%",height:"100%",marginInlineStart:0,padding:`0 ${(0,F.unit)(e.paddingXXS)}`,[`&${t}-text-start`]:{justifyContent:"start"},[`&${t}-text-end`]:{justifyContent:"end"}},[`&${t}-status-active`]:{[`${t}-bg::before`]:{position:"absolute",inset:0,backgroundColor:e.colorBgContainer,borderRadius:e.lineBorderRadius,opacity:0,animationName:U(),animationDuration:e.progressActiveMotionDuration,animationTimingFunction:e.motionEaseOutQuint,animationIterationCount:"infinite",content:'""'}},[`&${t}-rtl${t}-status-active`]:{[`${t}-bg::before`]:{animationName:U(!0)}},[`&${t}-status-exception`]:{[`${t}-bg`]:{backgroundColor:e.colorError},[`${t}-text`]:{color:e.colorError}},[`&${t}-status-exception ${t}-inner:not(${t}-circle-gradient)`]:{[`${t}-circle-path`]:{stroke:e.colorError}},[`&${t}-status-success`]:{[`${t}-bg`]:{backgroundColor:e.colorSuccess},[`${t}-text`]:{color:e.colorSuccess}},[`&${t}-status-success ${t}-inner:not(${t}-circle-gradient)`]:{[`${t}-circle-path`]:{stroke:e.colorSuccess}}})}})(r),(e=>{let{componentCls:t,iconCls:r}=e;return{[t]:{[`${t}-circle-trail`]:{stroke:e.remainingColor},[`&${t}-circle ${t}-inner`]:{position:"relative",lineHeight:1,backgroundColor:"transparent"},[`&${t}-circle ${t}-text`]:{position:"absolute",insetBlockStart:"50%",insetInlineStart:0,width:"100%",margin:0,padding:0,color:e.circleTextColor,fontSize:e.circleTextFontSize,lineHeight:1,whiteSpace:"normal",textAlign:"center",transform:"translateY(-50%)",[r]:{fontSize:e.circleIconFontSize}},[`${t}-circle&-status-exception`]:{[`${t}-text`]:{color:e.colorError}},[`${t}-circle&-status-success`]:{[`${t}-text`]:{color:e.colorSuccess}}},[`${t}-inline-circle`]:{lineHeight:1,[`${t}-inner`]:{verticalAlign:"bottom"}}}})(r),(e=>{let{componentCls:t}=e;return{[t]:{[`${t}-steps`]:{display:"inline-block","&-outer":{display:"flex",flexDirection:"row",alignItems:"center"},"&-item":{flexShrink:0,minWidth:e.progressStepMinWidth,marginInlineEnd:e.progressStepMarginInlineEnd,backgroundColor:e.remainingColor,transition:`all ${e.motionDurationSlow}`,"&-active":{backgroundColor:e.defaultColor}}}}}})(r),(e=>{let{componentCls:t,iconCls:r}=e;return{[t]:{[`${t}-small&-line, ${t}-small&-line ${t}-text ${r}`]:{fontSize:e.fontSizeSM}}}})(r)]},e=>({circleTextColor:e.colorText,defaultColor:e.colorInfo,remainingColor:e.colorFillSecondary,lineBorderRadius:100,circleTextFontSize:"1em",circleIconFontSize:`${e.fontSize/e.fontSizeSM}em`}));var z=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&0>t.indexOf(n)&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var l=0,n=Object.getOwnPropertySymbols(e);lt.indexOf(n[l])&&Object.prototype.propertyIsEnumerable.call(e,n[l])&&(r[n[l]]=e[n[l]]);return r};let H=e=>{let{prefixCls:r,direction:n,percent:l,size:s,strokeWidth:i,strokeColor:o,strokeLinecap:c="round",children:u,trailColor:d=null,percentPosition:m,success:p}=e,{align:f,type:h}=m,x=o&&"string"!=typeof o?((e,t)=>{let{from:r=O.presetPrimaryColors.blue,to:n=O.presetPrimaryColors.blue,direction:l="rtl"===t?"to left":"to right"}=e,s=z(e,["from","to","direction"]);if(0!==Object.keys(s).length){let e,t=(e=[],Object.keys(s).forEach(t=>{let r=Number.parseFloat(t.replace(/%/g,""));Number.isNaN(r)||e.push({key:r,value:s[t]})}),(e=e.sort((e,t)=>e.key-t.key)).map(({key:e,value:t})=>`${t} ${e}%`).join(", ")),r=`linear-gradient(${l}, ${t})`;return{background:r,[L]:r}}let i=`linear-gradient(${l}, ${r}, ${n})`;return{background:i,[L]:i}})(o,n):{[L]:o,background:o},g="square"===c||"butt"===c?0:void 0,[v,b]=T(null!=s?s:[-1,i||("small"===s?6:8)],"line",{strokeWidth:i}),y=Object.assign(Object.assign({width:`${I(l)}%`,height:b,borderRadius:g},x),{[B]:I(l)/100}),j=$(e),w={width:`${I(j)}%`,height:b,borderRadius:g,backgroundColor:null==p?void 0:p.strokeColor},C=t.createElement("div",{className:`${r}-inner`,style:{backgroundColor:d||void 0,borderRadius:g}},t.createElement("div",{className:(0,a.default)(`${r}-bg`,`${r}-bg-${h}`),style:y},"inner"===h&&u),void 0!==j&&t.createElement("div",{className:`${r}-success-bg`,style:w})),k="outer"===h&&"start"===f,S="outer"===h&&"end"===f;return"outer"===h&&"center"===f?t.createElement("div",{className:`${r}-layout-bottom`},C,u):t.createElement("div",{className:`${r}-outer`,style:{width:v<0?"100%":v}},k&&u,C,S&&u)},W=e=>{let{size:r,steps:n,rounding:l=Math.round,percent:s=0,strokeWidth:i=8,strokeColor:o,trailColor:c=null,prefixCls:u,children:d}=e,m=l(s/100*n),[p,f]=T(null!=r?r:["small"===r?2:14,i],"step",{steps:n,strokeWidth:i}),h=p/n,x=Array.from({length:n});for(let e=0;et.indexOf(n)&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols)for(var l=0,n=Object.getOwnPropertySymbols(e);lt.indexOf(n[l])&&Object.prototype.propertyIsEnumerable.call(e,n[l])&&(r[n[l]]=e[n[l]]);return r};let X=["normal","exception","active","success"],q=t.forwardRef((e,u)=>{let d,{prefixCls:m,className:p,rootClassName:f,steps:h,strokeColor:x,percent:g=0,size:v="default",showInfo:b=!0,type:y="line",status:j,format:w,style:C,percentPosition:k={}}=e,S=K(e,["prefixCls","className","rootClassName","steps","strokeColor","percent","size","showInfo","type","status","format","style","percentPosition"]),{align:N="end",type:E="outer"}=k,_=Array.isArray(x)?x[0]:x,O="string"==typeof x||Array.isArray(x)?x:void 0,D=t.useMemo(()=>{if(_){let e="string"==typeof _?_:Object.values(_)[0];return new r.FastColor(e).isLight()}return!1},[x]),F=t.useMemo(()=>{var t,r;let n=$(e);return Number.parseInt(void 0!==n?null==(t=null!=n?n:0)?void 0:t.toString():null==(r=null!=g?g:0)?void 0:r.toString(),10)},[g,e.success,e.successPercent]),M=t.useMemo(()=>!X.includes(j)&&F>=100?"success":j||"normal",[j,F]),{getPrefixCls:R,direction:A,progress:L}=t.useContext(c.ConfigContext),B=R("progress",m),[U,z,q]=V(B),Y="line"===y,G=Y&&!h,J=t.useMemo(()=>{let r;if(!b)return null;let o=$(e),c=w||(e=>`${e}%`),u=Y&&D&&"inner"===E;return"inner"===E||w||"exception"!==M&&"success"!==M?r=c(I(g),I(o)):"exception"===M?r=Y?t.createElement(s.default,null):t.createElement(i.default,null):"success"===M&&(r=Y?t.createElement(n.default,null):t.createElement(l.default,null)),t.createElement("span",{className:(0,a.default)(`${B}-text`,{[`${B}-text-bright`]:u,[`${B}-text-${N}`]:G,[`${B}-text-${E}`]:G}),title:"string"==typeof r?r:void 0},r)},[b,g,F,M,y,B,w]);"line"===y?d=h?t.createElement(W,Object.assign({},e,{strokeColor:O,prefixCls:B,steps:"object"==typeof h?h.count:h}),J):t.createElement(H,Object.assign({},e,{strokeColor:_,prefixCls:B,direction:A,percentPosition:{align:N,type:E}}),J):("circle"===y||"dashboard"===y)&&(d=t.createElement(P,Object.assign({},e,{strokeColor:_,prefixCls:B,progressStatus:M}),J));let Q=(0,a.default)(B,`${B}-status-${M}`,{[`${B}-${"dashboard"===y&&"circle"||y}`]:"line"!==y,[`${B}-inline-circle`]:"circle"===y&&T(v,"circle")[0]<=20,[`${B}-line`]:G,[`${B}-line-align-${N}`]:G,[`${B}-line-position-${E}`]:G,[`${B}-steps`]:h,[`${B}-show-info`]:b,[`${B}-${v}`]:"string"==typeof v,[`${B}-rtl`]:"rtl"===A},null==L?void 0:L.className,p,f,z,q);return U(t.createElement("div",Object.assign({ref:u,style:Object.assign(Object.assign({},null==L?void 0:L.style),C),className:Q,role:"progressbar","aria-valuenow":F,"aria-valuemin":0,"aria-valuemax":100},(0,o.default)(S,["trailColor","strokeWidth","width","gapDegree","gapPosition","strokeLinecap","success","successPercent"])),d))});e.s(["default",0,q],309821)},519756,e=>{"use strict";e.i(247167);var t=e.i(931067),r=e.i(271645);let n={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M400 317.7h73.9V656c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V317.7H624c6.7 0 10.4-7.7 6.3-12.9L518.3 163a8 8 0 00-12.6 0l-112 141.7c-4.1 5.3-.4 13 6.3 13zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"}}]},name:"upload",theme:"outlined"};var l=e.i(9583),s=r.forwardRef(function(e,s){return r.createElement(l.default,(0,t.default)({},e,{ref:s,icon:n}))});e.s(["UploadOutlined",0,s],519756)},233538,e=>{"use strict";e.s(["isDisabledReactIssue7711",0,function(e){let t=e.parentElement,r=null;for(;t&&!(t instanceof HTMLFieldSetElement);)t instanceof HTMLLegendElement&&(r=t),t=t.parentElement;let n=(null==t?void 0:t.getAttribute("disabled"))==="";return!(n&&function(e){if(!e)return!1;let t=e.previousElementSibling;for(;null!==t;){if(t instanceof HTMLLegendElement)return!1;t=t.previousElementSibling}return!0}(r))&&n}])},83733,233137,e=>{"use strict";let t,r;var n,l,s=e.i(247167),i=e.i(271645),a=e.i(544508),o=e.i(746725),c=e.i(835696);void 0!==s.default&&"u">typeof globalThis&&"u">typeof Element&&(null==(n=null==s.default?void 0:s.default.env)?void 0:n.NODE_ENV)==="test"&&void 0===(null==(l=null==Element?void 0:Element.prototype)?void 0:l.getAnimations)&&(Element.prototype.getAnimations=function(){return console.warn(["Headless UI has polyfilled `Element.prototype.getAnimations` for your tests.","Please install a proper polyfill e.g. `jsdom-testing-mocks`, to silence these warnings.","","Example usage:","```js","import { mockAnimationsApi } from 'jsdom-testing-mocks'","mockAnimationsApi()","```"].join(` +`)),[]});var u=((t=u||{})[t.None=0]="None",t[t.Closed=1]="Closed",t[t.Enter=2]="Enter",t[t.Leave=4]="Leave",t);e.s(["transitionDataAttributes",0,function(e){let t={};for(let r in e)!0===e[r]&&(t[`data-${r}`]="");return t},"useTransition",0,function(e,t,r,n){let[l,s]=(0,i.useState)(r),{hasFlag:u,addFlag:d,removeFlag:m}=function(e=0){let[t,r]=(0,i.useState)(e),n=(0,i.useCallback)(e=>r(e),[t]),l=(0,i.useCallback)(e=>r(t=>t|e),[t]),s=(0,i.useCallback)(e=>(t&e)===e,[t]);return{flags:t,setFlag:n,addFlag:l,hasFlag:s,removeFlag:(0,i.useCallback)(e=>r(t=>t&~e),[r]),toggleFlag:(0,i.useCallback)(e=>r(t=>t^e),[r])}}(e&&l?3:0),p=(0,i.useRef)(!1),f=(0,i.useRef)(!1),h=(0,o.useDisposables)();return(0,c.useIsoMorphicEffect)(()=>{var l;if(e){if(r&&s(!0),!t){r&&d(3);return}return null==(l=null==n?void 0:n.start)||l.call(n,r),function(e,{prepare:t,run:r,done:n,inFlight:l}){let s=(0,a.disposables)();return function(e,{inFlight:t,prepare:r}){if(null!=t&&t.current)return r();let n=e.style.transition;e.style.transition="none",r(),e.offsetHeight,e.style.transition=n}(e,{prepare:t,inFlight:l}),s.nextFrame(()=>{r(),s.requestAnimationFrame(()=>{s.add(function(e,t){var r,n;let l=(0,a.disposables)();if(!e)return l.dispose;let s=!1;l.add(()=>{s=!0});let i=null!=(n=null==(r=e.getAnimations)?void 0:r.call(e).filter(e=>e instanceof CSSTransition))?n:[];return 0===i.length?t():Promise.allSettled(i.map(e=>e.finished)).then(()=>{s||t()}),l.dispose}(e,n))})}),s.dispose}(t,{inFlight:p,prepare(){f.current?f.current=!1:f.current=p.current,p.current=!0,f.current||(r?(d(3),m(4)):(d(4),m(2)))},run(){f.current?r?(m(3),d(4)):(m(4),d(3)):r?m(1):d(1)},done(){var e;f.current&&"function"==typeof t.getAnimations&&t.getAnimations().length>0||(p.current=!1,m(7),r||s(!1),null==(e=null==n?void 0:n.end)||e.call(n,r))}})}},[e,r,t,h]),e?[l,{closed:u(1),enter:u(2),leave:u(4),transition:u(2)||u(4)}]:[r,{closed:void 0,enter:void 0,leave:void 0,transition:void 0}]}],83733);let d=(0,i.createContext)(null);d.displayName="OpenClosedContext";var m=((r=m||{})[r.Open=1]="Open",r[r.Closed=2]="Closed",r[r.Closing=4]="Closing",r[r.Opening=8]="Opening",r);e.s(["OpenClosedProvider",0,function({value:e,children:t}){return i.default.createElement(d.Provider,{value:e},t)},"ResetOpenClosedProvider",0,function({children:e}){return i.default.createElement(d.Provider,{value:null},e)},"State",0,m,"useOpenClosed",0,function(){return(0,i.useContext)(d)}],233137)},677667,674175,886148,543086,e=>{"use strict";let t,r;var n,l=e.i(290571),s=e.i(783222),i=e.i(433336),a=e.i(271645),o=e.i(394487),c=e.i(914189),u=e.i(144279),d=e.i(294316),m=e.i(83733);let p=(0,a.createContext)(()=>{});function f({value:e,children:t}){return a.default.createElement(p.Provider,{value:e},t)}e.s(["CloseProvider",0,f],674175);var h=e.i(233137),x=e.i(233538),g=e.i(397701),v=e.i(402155),b=e.i(700020);let y=null!=(n=a.default.startTransition)?n:function(e){e()};var j=e.i(998348),w=((t=w||{})[t.Open=0]="Open",t[t.Closed=1]="Closed",t),C=((r=C||{})[r.ToggleDisclosure=0]="ToggleDisclosure",r[r.CloseDisclosure=1]="CloseDisclosure",r[r.SetButtonId=2]="SetButtonId",r[r.SetPanelId=3]="SetPanelId",r[r.SetButtonElement=4]="SetButtonElement",r[r.SetPanelElement=5]="SetPanelElement",r);let k={0:e=>({...e,disclosureState:(0,g.match)(e.disclosureState,{0:1,1:0})}),1:e=>1===e.disclosureState?e:{...e,disclosureState:1},2:(e,t)=>e.buttonId===t.buttonId?e:{...e,buttonId:t.buttonId},3:(e,t)=>e.panelId===t.panelId?e:{...e,panelId:t.panelId},4:(e,t)=>e.buttonElement===t.element?e:{...e,buttonElement:t.element},5:(e,t)=>e.panelElement===t.element?e:{...e,panelElement:t.element}},S=(0,a.createContext)(null);function N(e){let t=(0,a.useContext)(S);if(null===t){let t=Error(`<${e} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(t,N),t}return t}S.displayName="DisclosureContext";let E=(0,a.createContext)(null);E.displayName="DisclosureAPIContext";let _=(0,a.createContext)(null);function O(e,t){return(0,g.match)(t.type,k,e,t)}_.displayName="DisclosurePanelContext";let I=a.Fragment,$=b.RenderFeatures.RenderStrategy|b.RenderFeatures.Static,T=Object.assign((0,b.forwardRefWithAs)(function(e,t){let{defaultOpen:r=!1,...n}=e,l=(0,a.useRef)(null),s=(0,d.useSyncRefs)(t,(0,d.optionalRef)(e=>{l.current=e},void 0===e.as||e.as===a.Fragment)),i=(0,a.useReducer)(O,{disclosureState:+!r,buttonElement:null,panelElement:null,buttonId:null,panelId:null}),[{disclosureState:o,buttonId:u},m]=i,p=(0,c.useEvent)(e=>{m({type:1});let t=(0,v.getOwnerDocument)(l);if(!t||!u)return;let r=e?e instanceof HTMLElement?e:e.current instanceof HTMLElement?e.current:t.getElementById(u):t.getElementById(u);null==r||r.focus()}),x=(0,a.useMemo)(()=>({close:p}),[p]),y=(0,a.useMemo)(()=>({open:0===o,close:p}),[o,p]),j=(0,b.useRender)();return a.default.createElement(S.Provider,{value:i},a.default.createElement(E.Provider,{value:x},a.default.createElement(f,{value:p},a.default.createElement(h.OpenClosedProvider,{value:(0,g.match)(o,{0:h.State.Open,1:h.State.Closed})},j({ourProps:{ref:s},theirProps:n,slot:y,defaultTag:I,name:"Disclosure"})))))}),{Button:(0,b.forwardRefWithAs)(function(e,t){let r=(0,a.useId)(),{id:n=`headlessui-disclosure-button-${r}`,disabled:l=!1,autoFocus:m=!1,...p}=e,[f,h]=N("Disclosure.Button"),g=(0,a.useContext)(_),v=null!==g&&g===f.panelId,y=(0,a.useRef)(null),w=(0,d.useSyncRefs)(y,t,(0,c.useEvent)(e=>{if(!v)return h({type:4,element:e})}));(0,a.useEffect)(()=>{if(!v)return h({type:2,buttonId:n}),()=>{h({type:2,buttonId:null})}},[n,h,v]);let C=(0,c.useEvent)(e=>{var t;if(v){if(1===f.disclosureState)return;switch(e.key){case j.Keys.Space:case j.Keys.Enter:e.preventDefault(),e.stopPropagation(),h({type:0}),null==(t=f.buttonElement)||t.focus()}}else switch(e.key){case j.Keys.Space:case j.Keys.Enter:e.preventDefault(),e.stopPropagation(),h({type:0})}}),k=(0,c.useEvent)(e=>{e.key===j.Keys.Space&&e.preventDefault()}),S=(0,c.useEvent)(e=>{var t;(0,x.isDisabledReactIssue7711)(e.currentTarget)||l||(v?(h({type:0}),null==(t=f.buttonElement)||t.focus()):h({type:0}))}),{isFocusVisible:E,focusProps:O}=(0,s.useFocusRing)({autoFocus:m}),{isHovered:I,hoverProps:$}=(0,i.useHover)({isDisabled:l}),{pressed:T,pressProps:P}=(0,o.useActivePress)({disabled:l}),D=(0,a.useMemo)(()=>({open:0===f.disclosureState,hover:I,active:T,disabled:l,focus:E,autofocus:m}),[f,I,T,E,l,m]),F=(0,u.useResolveButtonType)(e,f.buttonElement),M=v?(0,b.mergeProps)({ref:w,type:F,disabled:l||void 0,autoFocus:m,onKeyDown:C,onClick:S},O,$,P):(0,b.mergeProps)({ref:w,id:n,type:F,"aria-expanded":0===f.disclosureState,"aria-controls":f.panelElement?f.panelId:void 0,disabled:l||void 0,autoFocus:m,onKeyDown:C,onKeyUp:k,onClick:S},O,$,P);return(0,b.useRender)()({ourProps:M,theirProps:p,slot:D,defaultTag:"button",name:"Disclosure.Button"})}),Panel:(0,b.forwardRefWithAs)(function(e,t){let r=(0,a.useId)(),{id:n=`headlessui-disclosure-panel-${r}`,transition:l=!1,...s}=e,[i,o]=N("Disclosure.Panel"),{close:u}=function e(t){let r=(0,a.useContext)(E);if(null===r){let r=Error(`<${t} /> is missing a parent component.`);throw Error.captureStackTrace&&Error.captureStackTrace(r,e),r}return r}("Disclosure.Panel"),[p,f]=(0,a.useState)(null),x=(0,d.useSyncRefs)(t,(0,c.useEvent)(e=>{y(()=>o({type:5,element:e}))}),f);(0,a.useEffect)(()=>(o({type:3,panelId:n}),()=>{o({type:3,panelId:null})}),[n,o]);let g=(0,h.useOpenClosed)(),[v,j]=(0,m.useTransition)(l,p,null!==g?(g&h.State.Open)===h.State.Open:0===i.disclosureState),w=(0,a.useMemo)(()=>({open:0===i.disclosureState,close:u}),[i.disclosureState,u]),C={ref:x,id:n,...(0,m.transitionDataAttributes)(j)},k=(0,b.useRender)();return a.default.createElement(h.ResetOpenClosedProvider,null,a.default.createElement(_.Provider,{value:i.panelId},k({ourProps:C,theirProps:s,slot:w,defaultTag:"div",features:$,visible:v,name:"Disclosure.Panel"})))})});e.s(["Disclosure",0,T],886148);let P=(0,a.createContext)(void 0);var D=e.i(444755);let F=(0,e.i(673706).makeClassName)("Accordion"),M=(0,a.createContext)({isOpen:!1}),R=a.default.forwardRef((e,t)=>{var r;let{defaultOpen:n=!1,children:s,className:i}=e,o=(0,l.__rest)(e,["defaultOpen","children","className"]),c=null!=(r=(0,a.useContext)(P))?r:(0,D.tremorTwMerge)("rounded-tremor-default border");return a.default.createElement(T,Object.assign({as:"div",ref:t,className:(0,D.tremorTwMerge)(F("root"),"overflow-hidden","bg-tremor-background border-tremor-border","dark:bg-dark-tremor-background dark:border-dark-tremor-border",c,i),defaultOpen:n},o),({open:e})=>a.default.createElement(M.Provider,{value:{isOpen:e}},s))});R.displayName="Accordion",e.s(["OpenContext",0,M,"default",0,R],543086),e.s(["Accordion",0,R],677667)},898667,e=>{"use strict";var t=e.i(290571),r=e.i(271645),n=e.i(886148);let l=e=>{var n=(0,t.__rest)(e,[]);return r.default.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"},n),r.default.createElement("path",{d:"M11.9999 10.8284L7.0502 15.7782L5.63599 14.364L11.9999 8L18.3639 14.364L16.9497 15.7782L11.9999 10.8284Z"}))};var s=e.i(543086),i=e.i(444755);let a=(0,e.i(673706).makeClassName)("AccordionHeader"),o=r.default.forwardRef((e,o)=>{let{children:c,className:u}=e,d=(0,t.__rest)(e,["children","className"]),{isOpen:m}=(0,r.useContext)(s.OpenContext);return r.default.createElement(n.Disclosure.Button,Object.assign({ref:o,className:(0,i.tremorTwMerge)(a("root"),"w-full flex items-center justify-between px-4 py-3","text-tremor-content-emphasis","dark:text-dark-tremor-content-emphasis",u)},d),r.default.createElement("div",{className:(0,i.tremorTwMerge)(a("children"),"flex flex-1 text-inherit mr-4")},c),r.default.createElement("div",null,r.default.createElement(l,{className:(0,i.tremorTwMerge)(a("arrowIcon"),"h-5 w-5 -mr-1","text-tremor-content-subtle","dark:text-dark-tremor-content-subtle",m?"transition-all":"transition-all -rotate-180")})))});o.displayName="AccordionHeader",e.s(["AccordionHeader",0,o],898667)},130643,e=>{"use strict";var t=e.i(290571),r=e.i(271645),n=e.i(886148),l=e.i(444755);let s=(0,e.i(673706).makeClassName)("AccordionBody"),i=r.default.forwardRef((e,i)=>{let{children:a,className:o}=e,c=(0,t.__rest)(e,["children","className"]);return r.default.createElement(n.Disclosure.Panel,Object.assign({ref:i,className:(0,l.tremorTwMerge)(s("root"),"w-full text-tremor-default px-4 pb-3","text-tremor-content","dark:text-dark-tremor-content",o)},c),a)});i.displayName="AccordionBody",e.s(["AccordionBody",0,i],130643)},220508,e=>{"use strict";var t=e.i(271645);let r=t.forwardRef(function(e,r){return t.createElement("svg",Object.assign({xmlns:"http://www.w3.org/2000/svg",fill:"none",viewBox:"0 0 24 24",strokeWidth:2,stroke:"currentColor","aria-hidden":"true",ref:r},e),t.createElement("path",{strokeLinecap:"round",strokeLinejoin:"round",d:"M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z"}))});e.s(["CheckCircleIcon",0,r],220508)},503269,214520,601893,694421,140721,942803,35889,722678,e=>{"use strict";var t=e.i(271645),r=e.i(914189);e.s(["useControllable",0,function(e,n,l){let[s,i]=(0,t.useState)(l),a=void 0!==e,o=(0,t.useRef)(a),c=(0,t.useRef)(!1),u=(0,t.useRef)(!1);return!a||o.current||c.current?a||!o.current||u.current||(u.current=!0,o.current=a,console.error("A component is changing from controlled to uncontrolled. This may be caused by the value changing from a defined value to undefined, which should not happen.")):(c.current=!0,o.current=a,console.error("A component is changing from uncontrolled to controlled. This may be caused by the value changing from undefined to a defined value, which should not happen.")),[a?e:s,(0,r.useEvent)(e=>(a||i(e),null==n?void 0:n(e)))]}],503269),e.s(["useDefaultValue",0,function(e){let[r]=(0,t.useState)(e);return r}],214520);let n=(0,t.createContext)(void 0);function l(){return(0,t.useContext)(n)}e.s(["useDisabled",0,l],601893);var s=e.i(174080),i=e.i(746725);function a(e={},t=null,r=[]){for(let[n,l]of Object.entries(e))!function e(t,r,n){if(Array.isArray(n))for(let[l,s]of n.entries())e(t,o(r,l.toString()),s);else n instanceof Date?t.push([r,n.toISOString()]):"boolean"==typeof n?t.push([r,n?"1":"0"]):"string"==typeof n?t.push([r,n]):"number"==typeof n?t.push([r,`${n}`]):null==n?t.push([r,""]):a(n,r,t)}(r,o(t,n),l);return r}function o(e,t){return e?e+"["+t+"]":t}e.s(["attemptSubmit",0,function(e){var t,r;let n=null!=(t=null==e?void 0:e.form)?t:e.closest("form");if(n){for(let t of n.elements)if(t!==e&&("INPUT"===t.tagName&&"submit"===t.type||"BUTTON"===t.tagName&&"submit"===t.type||"INPUT"===t.nodeName&&"image"===t.type))return void t.click();null==(r=n.requestSubmit)||r.call(n)}},"objectToFormEntries",0,a],694421);var c=e.i(700020),u=e.i(2788);let d=(0,t.createContext)(null);function m({children:e}){let r=(0,t.useContext)(d);if(!r)return t.default.createElement(t.default.Fragment,null,e);let{target:n}=r;return n?(0,s.createPortal)(t.default.createElement(t.default.Fragment,null,e),n):null}function p({setForm:e,formId:r}){return(0,t.useEffect)(()=>{if(r){let t=document.getElementById(r);t&&e(t)}},[e,r]),r?null:t.default.createElement(u.Hidden,{features:u.HiddenFeatures.Hidden,as:"input",type:"hidden",hidden:!0,readOnly:!0,ref:t=>{if(!t)return;let r=t.closest("form");r&&e(r)}})}e.s(["FormFields",0,function({data:e,form:r,disabled:n,onReset:l,overrides:s}){let[o,d]=(0,t.useState)(null),f=(0,i.useDisposables)();return(0,t.useEffect)(()=>{if(l&&o)return f.addEventListener(o,"reset",l)},[o,r,l]),t.default.createElement(m,null,t.default.createElement(p,{setForm:d,formId:r}),a(e).map(([e,l])=>t.default.createElement(u.Hidden,{features:u.HiddenFeatures.Hidden,...(0,c.compact)({key:e,as:"input",type:"hidden",hidden:!0,readOnly:!0,form:r,disabled:n,name:e,value:l,...s})})))}],140721);let f=(0,t.createContext)(void 0);function h(){return(0,t.useContext)(f)}e.s(["useProvidedId",0,h],942803);var x=e.i(835696),g=e.i(294316);let v=(0,t.createContext)(null);v.displayName="DescriptionContext";let b=Object.assign((0,c.forwardRefWithAs)(function(e,r){let n=(0,t.useId)(),s=l(),{id:i=`headlessui-description-${n}`,...a}=e,o=function e(){let r=(0,t.useContext)(v);if(null===r){let t=Error("You used a component, but it is not inside a relevant parent.");throw Error.captureStackTrace&&Error.captureStackTrace(t,e),t}return r}(),u=(0,g.useSyncRefs)(r);(0,x.useIsoMorphicEffect)(()=>o.register(i),[i,o.register]);let d=s||!1,m=(0,t.useMemo)(()=>({...o.slot,disabled:d}),[o.slot,d]),p={ref:u,...o.props,id:i};return(0,c.useRender)()({ourProps:p,theirProps:a,slot:m,defaultTag:"p",name:o.name||"Description"})}),{});e.s(["Description",0,b,"useDescribedBy",0,function(){var e,r;return null!=(r=null==(e=(0,t.useContext)(v))?void 0:e.value)?r:void 0},"useDescriptions",0,function(){let[e,n]=(0,t.useState)([]);return[e.length>0?e.join(" "):void 0,(0,t.useMemo)(()=>function(e){let l=(0,r.useEvent)(e=>(n(t=>[...t,e]),()=>n(t=>{let r=t.slice(),n=r.indexOf(e);return -1!==n&&r.splice(n,1),r}))),s=(0,t.useMemo)(()=>({register:l,slot:e.slot,name:e.name,props:e.props,value:e.value}),[l,e.slot,e.name,e.props,e.value]);return t.default.createElement(v.Provider,{value:s},e.children)},[n])]}],35889);let y=(0,t.createContext)(null);function j(e){var r,n,l;let s=null!=(n=null==(r=(0,t.useContext)(y))?void 0:r.value)?n:void 0;return(null!=(l=null==e?void 0:e.length)?l:0)>0?[s,...e].filter(Boolean).join(" "):s}y.displayName="LabelContext";let w=Object.assign((0,c.forwardRefWithAs)(function(e,n){var s;let i=(0,t.useId)(),a=function e(){let r=(0,t.useContext)(y);if(null===r){let t=Error("You used a

uw6FG`p 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 literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/_next/static/media/2c55a0e60120577a-s.0bjc5tiuqdqro.woff2 b/litellm/proxy/_experimental/out/_next/static/media/2c55a0e60120577a-s.0bjc5tiuqdqro.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..2cd45edf43e09cc2a636223245f0563655d0cc0d GIT binary patch literal 25844 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 P#+t~*HNku1{Iy>IQ=4P} literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/_next/static/media/5476f68d60460930-s.0wxq9webf.ew4.woff2 b/litellm/proxy/_experimental/out/_next/static/media/5476f68d60460930-s.0wxq9webf.ew4.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..9c71603a56134495cb3ace105a0928e9cc29a860 GIT binary patch literal 19044 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 Tp~gD%=1~4;zp%;UV+#NP+I>lo literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/_next/static/media/9c72aa0f40e4eef8-s.0m6w47a4e5dy9.woff2 b/litellm/proxy/_experimental/out/_next/static/media/9c72aa0f40e4eef8-s.0m6w47a4e5dy9.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..bc0e0ab261be55e60502e8f0ab104faeb84c3888 GIT binary patch literal 18744 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


v9OW5GIC=qo>qH$Tj1ceN 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 literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/_next/static/media/favicon.0~dgapwhi~75y.ico b/litellm/proxy/_experimental/out/_next/static/media/favicon.0~dgapwhi~75y.ico new file mode 100644 index 0000000000000000000000000000000000000000..7c45601d5c311b44348e70790527de8a3c5ed655 GIT binary patch literal 6387 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 Xadfe~z7{PT;m&vW(j5K2x4-`Z=U(*D literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/_not-found/__next._full.txt b/litellm/proxy/_experimental/out/_not-found/__next._full.txt new file mode 100644 index 00000000000..18a712c8ab1 --- /dev/null +++ b/litellm/proxy/_experimental/out/_not-found/__next._full.txt @@ -0,0 +1,20 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +8:"$Sreact.suspense" +b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +d:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +f:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"P":null,"c":["","_not-found",""],"q":"","i":false,"f":[[["",{"children":["/_not-found",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],null,["$","$L7",null,{"children":["$","$8",null,{"name":"Next.MetadataOutlet","children":"$@9"}]}]]}],{},null,false,null]},null,false,"$@a"]},null,false,null],["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],["$","$Lb",null,{"children":"$Lc"}],["$","div",null,{"hidden":true,"children":["$","$Ld",null,{"children":["$","$8",null,{"name":"Next.Metadata","children":"$Le"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$f",[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +10:[] +a:"$W10" +c:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +11:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +9:null +e:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L11","4",{}]] diff --git a/litellm/proxy/_experimental/out/_not-found/__next._head.txt b/litellm/proxy/_experimental/out/_not-found/__next._head.txt new file mode 100644 index 00000000000..a6baada4e7f --- /dev/null +++ b/litellm/proxy/_experimental/out/_not-found/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/_not-found/__next._index.txt b/litellm/proxy/_experimental/out/_not-found/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/_not-found/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/_not-found/__next._not-found.__PAGE__.txt b/litellm/proxy/_experimental/out/_not-found/__next._not-found.__PAGE__.txt new file mode 100644 index 00000000000..21c2170cb58 --- /dev/null +++ b/litellm/proxy/_experimental/out/_not-found/__next._not-found.__PAGE__.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +3:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],null,["$","$L2",null,{"children":["$","$3",null,{"name":"Next.MetadataOutlet","children":"$@4"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:null diff --git a/litellm/proxy/_experimental/out/_not-found/__next._not-found.txt b/litellm/proxy/_experimental/out/_not-found/__next._not-found.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/_not-found/__next._not-found.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/_not-found/__next._tree.txt b/litellm/proxy/_experimental/out/_not-found/__next._tree.txt new file mode 100644 index 00000000000..293e598fc95 --- /dev/null +++ b/litellm/proxy/_experimental/out/_not-found/__next._tree.txt @@ -0,0 +1,3 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"/_not-found","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/_not-found/index.html b/litellm/proxy/_experimental/out/_not-found/index.html new file mode 100644 index 00000000000..dd2a01991de --- /dev/null +++ b/litellm/proxy/_experimental/out/_not-found/index.html @@ -0,0 +1 @@ +404: This page could not be found.LiteLLM Dashboard

404

This page could not be found.

\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/_not-found/index.txt b/litellm/proxy/_experimental/out/_not-found/index.txt new file mode 100644 index 00000000000..18a712c8ab1 --- /dev/null +++ b/litellm/proxy/_experimental/out/_not-found/index.txt @@ -0,0 +1,20 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +8:"$Sreact.suspense" +b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +d:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +f:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"P":null,"c":["","_not-found",""],"q":"","i":false,"f":[[["",{"children":["/_not-found",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],null,["$","$L7",null,{"children":["$","$8",null,{"name":"Next.MetadataOutlet","children":"$@9"}]}]]}],{},null,false,null]},null,false,"$@a"]},null,false,null],["$","$1","h",{"children":[["$","meta",null,{"name":"robots","content":"noindex"}],["$","$Lb",null,{"children":"$Lc"}],["$","div",null,{"hidden":true,"children":["$","$Ld",null,{"children":["$","$8",null,{"name":"Next.Metadata","children":"$Le"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$f",[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +10:[] +a:"$W10" +c:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +11:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +9:null +e:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L11","4",{}]] diff --git a/litellm/proxy/_experimental/out/access-groups/__next.!KGRhc2hib2FyZCk.access-groups.__PAGE__.txt b/litellm/proxy/_experimental/out/access-groups/__next.!KGRhc2hib2FyZCk.access-groups.__PAGE__.txt new file mode 100644 index 00000000000..7b4b4c0b2c6 --- /dev/null +++ b/litellm/proxy/_experimental/out/access-groups/__next.!KGRhc2hib2FyZCk.access-groups.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[852119,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0scfmfivwcppe.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/03iznh0~x-p5x.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0scfmfivwcppe.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/03iznh0~x-p5x.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/access-groups/__next.!KGRhc2hib2FyZCk.access-groups.txt b/litellm/proxy/_experimental/out/access-groups/__next.!KGRhc2hib2FyZCk.access-groups.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/access-groups/__next.!KGRhc2hib2FyZCk.access-groups.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/access-groups/__next.!KGRhc2hib2FyZCk.txt b/litellm/proxy/_experimental/out/access-groups/__next.!KGRhc2hib2FyZCk.txt new file mode 100644 index 00000000000..55176f9118b --- /dev/null +++ b/litellm/proxy/_experimental/out/access-groups/__next.!KGRhc2hib2FyZCk.txt @@ -0,0 +1,7 @@ +1:"$Sreact.fragment" +2:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +3:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +4:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +5:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +0:{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true}]],["$","$L2",null,{"Component":"$3","slots":{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@6"]}}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +6:"$0:rsc:props:children:1:props:serverProvidedParams:params" diff --git a/litellm/proxy/_experimental/out/access-groups/__next._full.txt b/litellm/proxy/_experimental/out/access-groups/__next._full.txt new file mode 100644 index 00000000000..af9e6ea2e9e --- /dev/null +++ b/litellm/proxy/_experimental/out/access-groups/__next._full.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","access-groups",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["access-groups",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[852119,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0scfmfivwcppe.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/03iznh0~x-p5x.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0scfmfivwcppe.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/03iznh0~x-p5x.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/access-groups/__next._head.txt b/litellm/proxy/_experimental/out/access-groups/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/access-groups/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/access-groups/__next._index.txt b/litellm/proxy/_experimental/out/access-groups/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/access-groups/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/access-groups/__next._tree.txt b/litellm/proxy/_experimental/out/access-groups/__next._tree.txt new file mode 100644 index 00000000000..ac75f6a7ae0 --- /dev/null +++ b/litellm/proxy/_experimental/out/access-groups/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"(dashboard)","param":null,"prefetchHints":0,"slots":{"children":{"name":"access-groups","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/access-groups/index.html b/litellm/proxy/_experimental/out/access-groups/index.html new file mode 100644 index 00000000000..8139bcc04b3 --- /dev/null +++ b/litellm/proxy/_experimental/out/access-groups/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
🚅 LiteLLM
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/access-groups/index.txt b/litellm/proxy/_experimental/out/access-groups/index.txt new file mode 100644 index 00000000000..af9e6ea2e9e --- /dev/null +++ b/litellm/proxy/_experimental/out/access-groups/index.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","access-groups",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["access-groups",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[852119,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0scfmfivwcppe.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/03iznh0~x-p5x.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0scfmfivwcppe.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/03iznh0~x-p5x.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/admin-panel/__next.!KGRhc2hib2FyZCk.admin-panel.__PAGE__.txt b/litellm/proxy/_experimental/out/admin-panel/__next.!KGRhc2hib2FyZCk.admin-panel.__PAGE__.txt new file mode 100644 index 00000000000..66a1d4184d7 --- /dev/null +++ b/litellm/proxy/_experimental/out/admin-panel/__next.!KGRhc2hib2FyZCk.admin-panel.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[648214,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","/litellm-asset-prefix/_next/static/chunks/0us_9w7qaihte.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0t4ig3ibz46ga.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0us_9w7qaihte.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0t4ig3ibz46ga.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/admin-panel/__next.!KGRhc2hib2FyZCk.admin-panel.txt b/litellm/proxy/_experimental/out/admin-panel/__next.!KGRhc2hib2FyZCk.admin-panel.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/admin-panel/__next.!KGRhc2hib2FyZCk.admin-panel.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/admin-panel/__next.!KGRhc2hib2FyZCk.txt b/litellm/proxy/_experimental/out/admin-panel/__next.!KGRhc2hib2FyZCk.txt new file mode 100644 index 00000000000..55176f9118b --- /dev/null +++ b/litellm/proxy/_experimental/out/admin-panel/__next.!KGRhc2hib2FyZCk.txt @@ -0,0 +1,7 @@ +1:"$Sreact.fragment" +2:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +3:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +4:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +5:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +0:{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true}]],["$","$L2",null,{"Component":"$3","slots":{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@6"]}}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +6:"$0:rsc:props:children:1:props:serverProvidedParams:params" diff --git a/litellm/proxy/_experimental/out/admin-panel/__next._full.txt b/litellm/proxy/_experimental/out/admin-panel/__next._full.txt new file mode 100644 index 00000000000..15ea625b91f --- /dev/null +++ b/litellm/proxy/_experimental/out/admin-panel/__next._full.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","admin-panel",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["admin-panel",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[648214,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","/litellm-asset-prefix/_next/static/chunks/0us_9w7qaihte.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0t4ig3ibz46ga.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0us_9w7qaihte.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0t4ig3ibz46ga.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/admin-panel/__next._head.txt b/litellm/proxy/_experimental/out/admin-panel/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/admin-panel/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/admin-panel/__next._index.txt b/litellm/proxy/_experimental/out/admin-panel/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/admin-panel/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/admin-panel/__next._tree.txt b/litellm/proxy/_experimental/out/admin-panel/__next._tree.txt new file mode 100644 index 00000000000..1e7ea1cec8b --- /dev/null +++ b/litellm/proxy/_experimental/out/admin-panel/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"(dashboard)","param":null,"prefetchHints":0,"slots":{"children":{"name":"admin-panel","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/admin-panel/index.html b/litellm/proxy/_experimental/out/admin-panel/index.html new file mode 100644 index 00000000000..99a4eff4b4a --- /dev/null +++ b/litellm/proxy/_experimental/out/admin-panel/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
🚅 LiteLLM
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/admin-panel/index.txt b/litellm/proxy/_experimental/out/admin-panel/index.txt new file mode 100644 index 00000000000..15ea625b91f --- /dev/null +++ b/litellm/proxy/_experimental/out/admin-panel/index.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","admin-panel",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["admin-panel",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[648214,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","/litellm-asset-prefix/_next/static/chunks/0us_9w7qaihte.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0t4ig3ibz46ga.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0us_9w7qaihte.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0t4ig3ibz46ga.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/agents/__next.!KGRhc2hib2FyZCk.agents.__PAGE__.txt b/litellm/proxy/_experimental/out/agents/__next.!KGRhc2hib2FyZCk.agents.__PAGE__.txt new file mode 100644 index 00000000000..d064a626dcf --- /dev/null +++ b/litellm/proxy/_experimental/out/agents/__next.!KGRhc2hib2FyZCk.agents.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[298805,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","/litellm-asset-prefix/_next/static/chunks/0gtegjaljim2a.js","/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","/litellm-asset-prefix/_next/static/chunks/0_rk9sxkapt-r.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","/litellm-asset-prefix/_next/static/chunks/10e9lx.nawttb.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","/litellm-asset-prefix/_next/static/chunks/10sdqywhhhn7i.js","/litellm-asset-prefix/_next/static/chunks/00cy3g~l27g1y.js","/litellm-asset-prefix/_next/static/chunks/0jr8wo_7ak~7n.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0gtegjaljim2a.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0_rk9sxkapt-r.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/10e9lx.nawttb.js","async":true}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","async":true}],["$","script","script-13",{"src":"/litellm-asset-prefix/_next/static/chunks/10sdqywhhhn7i.js","async":true}],["$","script","script-14",{"src":"/litellm-asset-prefix/_next/static/chunks/00cy3g~l27g1y.js","async":true}],["$","script","script-15",{"src":"/litellm-asset-prefix/_next/static/chunks/0jr8wo_7ak~7n.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/agents/__next.!KGRhc2hib2FyZCk.agents.txt b/litellm/proxy/_experimental/out/agents/__next.!KGRhc2hib2FyZCk.agents.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/agents/__next.!KGRhc2hib2FyZCk.agents.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/agents/__next.!KGRhc2hib2FyZCk.txt b/litellm/proxy/_experimental/out/agents/__next.!KGRhc2hib2FyZCk.txt new file mode 100644 index 00000000000..55176f9118b --- /dev/null +++ b/litellm/proxy/_experimental/out/agents/__next.!KGRhc2hib2FyZCk.txt @@ -0,0 +1,7 @@ +1:"$Sreact.fragment" +2:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +3:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +4:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +5:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +0:{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true}]],["$","$L2",null,{"Component":"$3","slots":{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@6"]}}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +6:"$0:rsc:props:children:1:props:serverProvidedParams:params" diff --git a/litellm/proxy/_experimental/out/agents/__next._full.txt b/litellm/proxy/_experimental/out/agents/__next._full.txt new file mode 100644 index 00000000000..e23fcddd1cf --- /dev/null +++ b/litellm/proxy/_experimental/out/agents/__next._full.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","agents",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["agents",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[298805,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","/litellm-asset-prefix/_next/static/chunks/0gtegjaljim2a.js","/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","/litellm-asset-prefix/_next/static/chunks/0_rk9sxkapt-r.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","/litellm-asset-prefix/_next/static/chunks/10e9lx.nawttb.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","/litellm-asset-prefix/_next/static/chunks/10sdqywhhhn7i.js","/litellm-asset-prefix/_next/static/chunks/00cy3g~l27g1y.js","/litellm-asset-prefix/_next/static/chunks/0jr8wo_7ak~7n.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0gtegjaljim2a.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0_rk9sxkapt-r.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/10e9lx.nawttb.js","async":true,"nonce":"$undefined"}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","async":true,"nonce":"$undefined"}],["$","script","script-13",{"src":"/litellm-asset-prefix/_next/static/chunks/10sdqywhhhn7i.js","async":true,"nonce":"$undefined"}],["$","script","script-14",{"src":"/litellm-asset-prefix/_next/static/chunks/00cy3g~l27g1y.js","async":true,"nonce":"$undefined"}],["$","script","script-15",{"src":"/litellm-asset-prefix/_next/static/chunks/0jr8wo_7ak~7n.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/agents/__next._head.txt b/litellm/proxy/_experimental/out/agents/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/agents/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/agents/__next._index.txt b/litellm/proxy/_experimental/out/agents/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/agents/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/agents/__next._tree.txt b/litellm/proxy/_experimental/out/agents/__next._tree.txt new file mode 100644 index 00000000000..f2a82238c3b --- /dev/null +++ b/litellm/proxy/_experimental/out/agents/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"(dashboard)","param":null,"prefetchHints":0,"slots":{"children":{"name":"agents","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/agents/index.html b/litellm/proxy/_experimental/out/agents/index.html new file mode 100644 index 00000000000..048e6d87e8d --- /dev/null +++ b/litellm/proxy/_experimental/out/agents/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
🚅 LiteLLM
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/agents/index.txt b/litellm/proxy/_experimental/out/agents/index.txt new file mode 100644 index 00000000000..e23fcddd1cf --- /dev/null +++ b/litellm/proxy/_experimental/out/agents/index.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","agents",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["agents",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[298805,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","/litellm-asset-prefix/_next/static/chunks/0gtegjaljim2a.js","/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","/litellm-asset-prefix/_next/static/chunks/0_rk9sxkapt-r.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","/litellm-asset-prefix/_next/static/chunks/10e9lx.nawttb.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","/litellm-asset-prefix/_next/static/chunks/10sdqywhhhn7i.js","/litellm-asset-prefix/_next/static/chunks/00cy3g~l27g1y.js","/litellm-asset-prefix/_next/static/chunks/0jr8wo_7ak~7n.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0gtegjaljim2a.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0_rk9sxkapt-r.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/10e9lx.nawttb.js","async":true,"nonce":"$undefined"}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","async":true,"nonce":"$undefined"}],["$","script","script-13",{"src":"/litellm-asset-prefix/_next/static/chunks/10sdqywhhhn7i.js","async":true,"nonce":"$undefined"}],["$","script","script-14",{"src":"/litellm-asset-prefix/_next/static/chunks/00cy3g~l27g1y.js","async":true,"nonce":"$undefined"}],["$","script","script-15",{"src":"/litellm-asset-prefix/_next/static/chunks/0jr8wo_7ak~7n.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/api-keys/__next.!KGRhc2hib2FyZCk.api-keys.__PAGE__.txt b/litellm/proxy/_experimental/out/api-keys/__next.!KGRhc2hib2FyZCk.api-keys.__PAGE__.txt new file mode 100644 index 00000000000..7031ce41293 --- /dev/null +++ b/litellm/proxy/_experimental/out/api-keys/__next.!KGRhc2hib2FyZCk.api-keys.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[973095,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0~tp1mbr_st8h.js","/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0ldurpg4iqx04.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/17n.qg70cy9.9.js","/litellm-asset-prefix/_next/static/chunks/0ngre0.s4-ej6.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/05t1k89l9tc3s.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","/litellm-asset-prefix/_next/static/chunks/14566-_ogh-19.js","/litellm-asset-prefix/_next/static/chunks/0w39dn9x3dp9g.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0~tp1mbr_st8h.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0ldurpg4iqx04.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/17n.qg70cy9.9.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0ngre0.s4-ej6.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/05t1k89l9tc3s.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","async":true}],["$","script","script-13",{"src":"/litellm-asset-prefix/_next/static/chunks/14566-_ogh-19.js","async":true}],["$","script","script-14",{"src":"/litellm-asset-prefix/_next/static/chunks/0w39dn9x3dp9g.js","async":true}],["$","script","script-15",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true}],["$","script","script-16",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true}],["$","script","script-17",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/api-keys/__next.!KGRhc2hib2FyZCk.api-keys.txt b/litellm/proxy/_experimental/out/api-keys/__next.!KGRhc2hib2FyZCk.api-keys.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/api-keys/__next.!KGRhc2hib2FyZCk.api-keys.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/api-keys/__next.!KGRhc2hib2FyZCk.txt b/litellm/proxy/_experimental/out/api-keys/__next.!KGRhc2hib2FyZCk.txt new file mode 100644 index 00000000000..55176f9118b --- /dev/null +++ b/litellm/proxy/_experimental/out/api-keys/__next.!KGRhc2hib2FyZCk.txt @@ -0,0 +1,7 @@ +1:"$Sreact.fragment" +2:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +3:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +4:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +5:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +0:{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true}]],["$","$L2",null,{"Component":"$3","slots":{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@6"]}}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +6:"$0:rsc:props:children:1:props:serverProvidedParams:params" diff --git a/litellm/proxy/_experimental/out/api-keys/__next._full.txt b/litellm/proxy/_experimental/out/api-keys/__next._full.txt new file mode 100644 index 00000000000..e5b0fba1ff4 --- /dev/null +++ b/litellm/proxy/_experimental/out/api-keys/__next._full.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","api-keys",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["api-keys",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[973095,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0~tp1mbr_st8h.js","/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0ldurpg4iqx04.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/17n.qg70cy9.9.js","/litellm-asset-prefix/_next/static/chunks/0ngre0.s4-ej6.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/05t1k89l9tc3s.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","/litellm-asset-prefix/_next/static/chunks/14566-_ogh-19.js","/litellm-asset-prefix/_next/static/chunks/0w39dn9x3dp9g.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0~tp1mbr_st8h.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0ldurpg4iqx04.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/17n.qg70cy9.9.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0ngre0.s4-ej6.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/05t1k89l9tc3s.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true,"nonce":"$undefined"}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","async":true,"nonce":"$undefined"}],["$","script","script-13",{"src":"/litellm-asset-prefix/_next/static/chunks/14566-_ogh-19.js","async":true,"nonce":"$undefined"}],["$","script","script-14",{"src":"/litellm-asset-prefix/_next/static/chunks/0w39dn9x3dp9g.js","async":true,"nonce":"$undefined"}],["$","script","script-15",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true,"nonce":"$undefined"}],["$","script","script-16",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-17",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/api-keys/__next._head.txt b/litellm/proxy/_experimental/out/api-keys/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/api-keys/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/api-keys/__next._index.txt b/litellm/proxy/_experimental/out/api-keys/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/api-keys/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/api-keys/__next._tree.txt b/litellm/proxy/_experimental/out/api-keys/__next._tree.txt new file mode 100644 index 00000000000..a91f496fe02 --- /dev/null +++ b/litellm/proxy/_experimental/out/api-keys/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"(dashboard)","param":null,"prefetchHints":0,"slots":{"children":{"name":"api-keys","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/api-keys/index.html b/litellm/proxy/_experimental/out/api-keys/index.html new file mode 100644 index 00000000000..182d254a0ba --- /dev/null +++ b/litellm/proxy/_experimental/out/api-keys/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
🚅 LiteLLM
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/api-keys/index.txt b/litellm/proxy/_experimental/out/api-keys/index.txt new file mode 100644 index 00000000000..e5b0fba1ff4 --- /dev/null +++ b/litellm/proxy/_experimental/out/api-keys/index.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","api-keys",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["api-keys",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[973095,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0~tp1mbr_st8h.js","/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0ldurpg4iqx04.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/17n.qg70cy9.9.js","/litellm-asset-prefix/_next/static/chunks/0ngre0.s4-ej6.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/05t1k89l9tc3s.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","/litellm-asset-prefix/_next/static/chunks/14566-_ogh-19.js","/litellm-asset-prefix/_next/static/chunks/0w39dn9x3dp9g.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0~tp1mbr_st8h.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0ldurpg4iqx04.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/17n.qg70cy9.9.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0ngre0.s4-ej6.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/05t1k89l9tc3s.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true,"nonce":"$undefined"}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","async":true,"nonce":"$undefined"}],["$","script","script-13",{"src":"/litellm-asset-prefix/_next/static/chunks/14566-_ogh-19.js","async":true,"nonce":"$undefined"}],["$","script","script-14",{"src":"/litellm-asset-prefix/_next/static/chunks/0w39dn9x3dp9g.js","async":true,"nonce":"$undefined"}],["$","script","script-15",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true,"nonce":"$undefined"}],["$","script","script-16",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-17",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/api-reference/__next.!KGRhc2hib2FyZCk.api-reference.__PAGE__.txt b/litellm/proxy/_experimental/out/api-reference/__next.!KGRhc2hib2FyZCk.api-reference.__PAGE__.txt new file mode 100644 index 00000000000..b750e902818 --- /dev/null +++ b/litellm/proxy/_experimental/out/api-reference/__next.!KGRhc2hib2FyZCk.api-reference.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[191905,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0r8_z31ow7vw9.js","/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0r8_z31ow7vw9.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/api-reference/__next.!KGRhc2hib2FyZCk.api-reference.txt b/litellm/proxy/_experimental/out/api-reference/__next.!KGRhc2hib2FyZCk.api-reference.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/api-reference/__next.!KGRhc2hib2FyZCk.api-reference.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/api-reference/__next.!KGRhc2hib2FyZCk.txt b/litellm/proxy/_experimental/out/api-reference/__next.!KGRhc2hib2FyZCk.txt new file mode 100644 index 00000000000..55176f9118b --- /dev/null +++ b/litellm/proxy/_experimental/out/api-reference/__next.!KGRhc2hib2FyZCk.txt @@ -0,0 +1,7 @@ +1:"$Sreact.fragment" +2:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +3:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +4:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +5:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +0:{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true}]],["$","$L2",null,{"Component":"$3","slots":{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@6"]}}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +6:"$0:rsc:props:children:1:props:serverProvidedParams:params" diff --git a/litellm/proxy/_experimental/out/api-reference/__next._full.txt b/litellm/proxy/_experimental/out/api-reference/__next._full.txt new file mode 100644 index 00000000000..2609ad520bc --- /dev/null +++ b/litellm/proxy/_experimental/out/api-reference/__next._full.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","api-reference",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["api-reference",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[191905,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0r8_z31ow7vw9.js","/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0r8_z31ow7vw9.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/api-reference/__next._head.txt b/litellm/proxy/_experimental/out/api-reference/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/api-reference/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/api-reference/__next._index.txt b/litellm/proxy/_experimental/out/api-reference/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/api-reference/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/api-reference/__next._tree.txt b/litellm/proxy/_experimental/out/api-reference/__next._tree.txt new file mode 100644 index 00000000000..320050770f0 --- /dev/null +++ b/litellm/proxy/_experimental/out/api-reference/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"(dashboard)","param":null,"prefetchHints":0,"slots":{"children":{"name":"api-reference","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/api-reference/index.html b/litellm/proxy/_experimental/out/api-reference/index.html new file mode 100644 index 00000000000..30eecf30768 --- /dev/null +++ b/litellm/proxy/_experimental/out/api-reference/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
🚅 LiteLLM
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/api-reference/index.txt b/litellm/proxy/_experimental/out/api-reference/index.txt new file mode 100644 index 00000000000..2609ad520bc --- /dev/null +++ b/litellm/proxy/_experimental/out/api-reference/index.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","api-reference",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["api-reference",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[191905,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0r8_z31ow7vw9.js","/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0r8_z31ow7vw9.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/assets/audit-logs-preview.png b/litellm/proxy/_experimental/out/assets/audit-logs-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..4e97c291d245dc48e0ba4e8c6b65edd84f75f890 GIT binary patch literal 240654 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 literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/assets/logos/ai21.svg b/litellm/proxy/_experimental/out/assets/logos/ai21.svg new file mode 100644 index 00000000000..7e62a9517af --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/ai21.svg @@ -0,0 +1 @@ +AI21 \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/aim_logo.jpeg b/litellm/proxy/_experimental/out/assets/logos/aim_logo.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..60fc2a9295c8e1b3556f98a6d859e302acb0cea1 GIT binary patch literal 3754 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 \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/akto.svg b/litellm/proxy/_experimental/out/assets/logos/akto.svg new file mode 100644 index 00000000000..cdea32535f2 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/akto.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/litellm/proxy/_experimental/out/assets/logos/anthropic.svg b/litellm/proxy/_experimental/out/assets/logos/anthropic.svg new file mode 100644 index 00000000000..a37f591fb76 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/anthropic.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/litellm/proxy/_experimental/out/assets/logos/aporia.png b/litellm/proxy/_experimental/out/assets/logos/aporia.png new file mode 100644 index 0000000000000000000000000000000000000000..34bc17679184ce92b1732f528740a4f2bf00e285 GIT binary patch literal 2472 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 IM6N<$g7_BBdH?_b literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/assets/logos/aws.svg b/litellm/proxy/_experimental/out/assets/logos/aws.svg new file mode 100644 index 00000000000..53896fa05f4 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/aws.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + diff --git a/litellm/proxy/_experimental/out/assets/logos/azure_ai_foundry.png b/litellm/proxy/_experimental/out/assets/logos/azure_ai_foundry.png new file mode 100644 index 0000000000000000000000000000000000000000..9f19b52e0bca454a75a12cd7fdc82d1efe5ee92b GIT binary patch literal 26316 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 vp<|9dc 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

Q8DihK4X*Wy{OMZSvDb4Y(% z)I-Wsh)s-DW^mz8@|%_6-#k9c+ox3Zy%*6&8U7-Wq=(05?G>8=dF~JZ&TtQMecmXE$f=MQ)i04ls)u9918bY1YKQxoT zb4Bo6=;eBpUP;u|4|%5O49Y|yotnTn>JasM`tIg?0OfHWq zcw}Br(rnqYjUT?JP^$gm0YIh#vpVlqnh5JsRyD>&=42A{81m>;Wd*!IzQ z%8T`)>Z1H@hIkD2)q`*EmV$LU-EInI>w)QGp?hXT?cKd9MUL(!7@r>UKq7wFAu#n6 z_u|=dj*Z}i^N=3RY+>g#@B(6Uu+VLJlRTpg)w=U3) zUi$<)Q3@8qq4RU#{$126NldQ1A zSYjBTKD2<%W3oSjDR{iZ1j&RjszM-8;SM^8WZePXiB>~wF|V2fxJd)i*EPOUr0o#; EKlrEFfdBvi literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/assets/logos/baseten.svg b/litellm/proxy/_experimental/out/assets/logos/baseten.svg new file mode 100644 index 00000000000..6e98ffbc315 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/baseten.svg @@ -0,0 +1 @@ +Baseten \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/bedrock.svg b/litellm/proxy/_experimental/out/assets/logos/bedrock.svg new file mode 100644 index 00000000000..e0f929a7a97 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/bedrock.svg @@ -0,0 +1 @@ +Bedrock \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/braintrust.png b/litellm/proxy/_experimental/out/assets/logos/braintrust.png new file mode 100644 index 0000000000000000000000000000000000000000..8da739b697117ee9cc2f295d23ab180713f18a8f GIT binary patch literal 10428 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%0Aabau^*NSSIhk@BkO3BFdiVB$ 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 kB4^V2w9 + + + \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/cerebras.svg b/litellm/proxy/_experimental/out/assets/logos/cerebras.svg new file mode 100644 index 00000000000..426f6430c23 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/cerebras.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/litellm/proxy/_experimental/out/assets/logos/cisco.png b/litellm/proxy/_experimental/out/assets/logos/cisco.png new file mode 100644 index 0000000000000000000000000000000000000000..034e2fa72eb1c877d51643da3ba0fc9e2f8dca52 GIT binary patch literal 1964 zcmZ{ldpHw}9>-UmTq@T$q$YP6lOz^P%x&h9OU#Ha^Ww~{gM)JGBoz_ydhNKhQCeZi z+Kfof%a(g{YfR=I)^3=4W^d1Vdd^?x{XL)O_x=9y`{VaKzu)tGv%N0Cgliu50r{ZhE=)3Xwh)dm-&^JUa&BVH8O8hh z+7)ORX!;<%XGM%(`3FKv7WQIDl{r4uW^lum`p!M_z(sqE1 z3A&DP(uMe89dxE5RkJs!C(G&mI%>hdIpWH}tLO3>#*AMV3{vpN+;kj0s721 zVB~Lea9ZHwkmxu&;=cdK)d|KqZ?{~u6IQ%&e;Rgc^4dszVE|E&-M1W-wi?xb_C=Ro zu^Xrow%Zp7Jlg+C=bkqas!L7U+6$J*DVemi*Tt0}h!tQm9`|5)2q>Fc-KEEDFbav! zaSXyh46Z9i215?xN)CT>3srGP^SNP*n*#Bu)u<6~{;f26JE!x#A+s(fF5r_5F* z^7}%+#8NR5@RM3KNN-Zj+-@Ff??yxOtJPLrrb#bZ_V#)mTxO-{L^7PHqMKQb+dhF- zj}drwBRa{c4&axG9W8l#n>1@A1be48#MTb=^?-?|VC4il4Y?4dpCEpK@=G4nx!k?x z83=Au?ZuU%R>gM2lUhu`|END9ucg<3ieuT4=EJao#GIfF=PF8iZsgf?zhy8~aR*)X7NmTq@QP>Wp~mP06AM?z40<(_V9k;i23q z4Kh{{g!Up!0yqbwO{{9Ap6MM@m(rn9I8Tf9Cw*0@U?%JG@yL9R6|Fe(b5KHRcuzyI z2c>Fgjb;8qI-efb@UaGUDp)RnXyI+#J3|lK2t?H+NJuCo^Znd?HuIjE5^?99T=w%SRV2DuoH+mapJW#|sYEH5u^_grM+)0zEVtc7^YmJt8 zcUAEA^2Jua0|r4;Sv@Yf*2(VA>`_UkmWQAg>Sa356f#}%H7K?TcogAC#Z;dc25mv` zIV~4`(z7}H?s;T8zjJ#YYQwpeucATv1|I+?^QktXyG|ZCUS0m6?NE2pEMp;>Sw3}> zfg4eB%W`W|7QgB^MY)Y!c?=V0GJjVKBN!9lF57y%5?Kur6U_nb3cm(?=uv1AeC(`k z>iQOPWu1G99#szCSl^g$#pi8@v{uPY}@^GyXKV~%n)Ej&I|>kwuL zFDJE-Ga~7sKfb7%pPwfr1{>#u{fg1N-}EWsS31GNwcU`}?ujH0x}~NSL8Zg)_%#7> z%|-Exkp_{)H*Ln-cW6dgRJZ_X!PVHb@9UWNZA1nerC&_m8((*vZt-Qf4x1taIvd+e z_aK@E3!P)zv#(n5FwOo6&R`Q;3Y)ruB09x@a;P#c$25Xw?z0Nd$V;Z8PRB~eR*>I2 zh|1u6$7DmKjZs-agJP^2s2B+OJ^|Y`axhahVTlnLxpYLfSqlbQg5_VcQ>d}cD-!U0hWF1{D~{(ibQzR_w*UUb zyBDDSOS0dhmA^^%G720lZ{Vo|hv?^gosx@CvQ~IV(H@kdDUv8cE;P``-sYcSPhmtF zaPbdoe`gvOtt5O_@<`|!=nbvJSFg4xCgL9o>k8*D=m!&fsiT4iAo5{7#9MTzsvM~Q zNPJg-Pj`{(r!0sn!yk(^U7WqnA=I2zl=4=8;u zs*AYs+H&-gm)QrwHwhWahzJ!Lvg254wm29{lTw0sxkcccpDouaxa9 R9{%qf!s(J@o&EKUKLNuD#s&ZY literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/assets/logos/cloudflare.svg b/litellm/proxy/_experimental/out/assets/logos/cloudflare.svg new file mode 100644 index 00000000000..d555b6f2c08 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/cloudflare.svg @@ -0,0 +1 @@ +Cloudflare \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/cohere.svg b/litellm/proxy/_experimental/out/assets/logos/cohere.svg new file mode 100644 index 00000000000..cb1b2a5919e --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/cohere.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/cometapi.svg b/litellm/proxy/_experimental/out/assets/logos/cometapi.svg new file mode 100644 index 00000000000..c7469e4f643 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/cometapi.svg @@ -0,0 +1 @@ +CometAPI \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/cursor.svg b/litellm/proxy/_experimental/out/assets/logos/cursor.svg new file mode 100644 index 00000000000..79b44c5e83b --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/cursor.svg @@ -0,0 +1 @@ +Cursor diff --git a/litellm/proxy/_experimental/out/assets/logos/databricks.svg b/litellm/proxy/_experimental/out/assets/logos/databricks.svg new file mode 100644 index 00000000000..cd079ceb224 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/databricks.svg @@ -0,0 +1 @@ +DBRX \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/datadog.png b/litellm/proxy/_experimental/out/assets/logos/datadog.png new file mode 100644 index 0000000000000000000000000000000000000000..0f66cbe2e6afc2ebd58cd8893d2c90976dfb064a GIT binary patch literal 5213 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 ofY+;hd+a!kw_CkqZW`vL((n literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/assets/logos/dataforseo.png b/litellm/proxy/_experimental/out/assets/logos/dataforseo.png new file mode 100644 index 0000000000000000000000000000000000000000..fced13674b3f082c76493679b74d0351a8ea7428 GIT binary patch literal 139307 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 literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/assets/logos/deepgram.png b/litellm/proxy/_experimental/out/assets/logos/deepgram.png new file mode 100644 index 0000000000000000000000000000000000000000..591a8ae0a701d74ebe5b6f8ad1008b81f0f55998 GIT binary patch literal 1224 zcmZ{heN0+c7{d=~V#Pr-uL=F9Q{7`sl~Rbmc?DzRJ!z||uFm|FnY zfi3e30ImoDSXBU!a}xlj?$)D{TmTTu>64{}Ty8vv!;OvQu-UOJ7CR<}#bh!W3}#dm zBQlasqeVtU(5O@@nM@&($V4JBJe+{XhvV^hEEbDKqfsbSSXdaOyjlo?z$0wJ5e9?7 zVsSVeJ{)QY1gM1$(1${Sei6_%5(4N^5X4|aM@K_!45YJIv9Ymnad8}&3L+qjL?Xc$ zbUK~Qj)Qj447xxmRKmcJ2E)9vht|*w!XW_iA!BlKG7t!?uC97Ko}r)j)z!7JvEg#LLZQ&a z!~~zuA0HnV2n20yZS(W&3b5H+KX`G$9j&9bUM~KyMcU>`Or%;%2Grx zOxJW=scdv=3|SWfKc`+lJCM-+y*4;cB09Ixk;ti5G(N0d($uBQ=G{4-cM_Mx$m>ea z+jydD=?GJHASLghm#Z}bW#?4$=+X0m4@qX~XLO8!Ak9Tu?-ybJlH84s?)mh@m!n7I zd7c?wvf>-t%*^FKGn#q#TKgaVtu~L&_B|v&H;>XZ`Ok_n7u^-MZ1nh~u(q4Mv0Q1w zwOxpLFcB5uW3m(urETD$jBH)4(K=;n6vvyf2T zw29B`ZJ92)?clukdlXlPbv!L2T=XaUFl)6vg!4XP>u|OGqXy#3-#)Q8Olw2&KgG{k znx|i@3H@T;>svb1_+;zx+}yo#q;7F<&0&)v@xdMc!WQ+!jj%KU<1Xc^g-3%;xShwt z>rAohLH*d_KaB8t1p2~r`U<69oujH(!vfNTY3a$rjO5hxQlT&>Ju@dY^L6+l6m~m~ ze(^8CrMikLjq(2l%RUPq3Rnk(Gj$rhL0PW`27@7`sgu(h2Xfi)qqA2_ z&*|k#15a09r>Uw@^YliYnpdUMs{m-cwGt%ZFTb0ZICIM7mOPgOR01(YMWiRtrQJ~| yI2}6BaW1p?_S-37l}XbFk7rsT0!Rvr3%)+Cxb_b`{<-b| literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/assets/logos/deepinfra.png b/litellm/proxy/_experimental/out/assets/logos/deepinfra.png new file mode 100644 index 0000000000000000000000000000000000000000..541497f2ccab6e3604d541f5024ac7d25f00b12f GIT binary patch literal 7014 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 Ef}ZfZpa1{> literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/assets/logos/deepseek.svg b/litellm/proxy/_experimental/out/assets/logos/deepseek.svg new file mode 100644 index 00000000000..c4754047da2 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/deepseek.svg @@ -0,0 +1,25 @@ + + + + + + diff --git a/litellm/proxy/_experimental/out/assets/logos/elevenlabs.png b/litellm/proxy/_experimental/out/assets/logos/elevenlabs.png new file mode 100644 index 0000000000000000000000000000000000000000..634ddfa0542fddf0e9c5bcd041dad1d51f260a10 GIT binary patch literal 35410 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 CnCjyI literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/assets/logos/enkrypt_ai.avif b/litellm/proxy/_experimental/out/assets/logos/enkrypt_ai.avif new file mode 100644 index 0000000000000000000000000000000000000000..a6228afb5caf61dd38c2df18a36cd58334188c0e GIT binary patch literal 2908 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

vz+oK_l-1M4bV7kB| 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 rTQ2@Lg#jxfGcQ&0&_RO2k-zbYymsa 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 literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/assets/logos/featherless.svg b/litellm/proxy/_experimental/out/assets/logos/featherless.svg new file mode 100644 index 00000000000..9d5690d8d4b --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/featherless.svg @@ -0,0 +1 @@ +featherless.ai \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/figma.svg b/litellm/proxy/_experimental/out/assets/logos/figma.svg new file mode 100644 index 00000000000..2d8b70457d9 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/figma.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/litellm/proxy/_experimental/out/assets/logos/fireworks.svg b/litellm/proxy/_experimental/out/assets/logos/fireworks.svg new file mode 100644 index 00000000000..a23445cf94b --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/fireworks.svg @@ -0,0 +1 @@ +Fireworks \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/friendli.svg b/litellm/proxy/_experimental/out/assets/logos/friendli.svg new file mode 100644 index 00000000000..e854d2ab485 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/friendli.svg @@ -0,0 +1 @@ +Friendli \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/galileo.ico b/litellm/proxy/_experimental/out/assets/logos/galileo.ico new file mode 100644 index 0000000000000000000000000000000000000000..c50b9de4df53fe68ea8d2e22e71f2b8f105423e2 GIT binary patch literal 9714 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 literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/assets/logos/github.svg b/litellm/proxy/_experimental/out/assets/logos/github.svg new file mode 100644 index 00000000000..93262122815 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/github.svg @@ -0,0 +1 @@ +Github \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/github_copilot.svg b/litellm/proxy/_experimental/out/assets/logos/github_copilot.svg new file mode 100644 index 00000000000..fd0bc9ed7aa --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/github_copilot.svg @@ -0,0 +1 @@ +GithubCopilot \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/gitlab.svg b/litellm/proxy/_experimental/out/assets/logos/gitlab.svg new file mode 100644 index 00000000000..18a89fa328d --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/gitlab.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/litellm/proxy/_experimental/out/assets/logos/gmail.svg b/litellm/proxy/_experimental/out/assets/logos/gmail.svg new file mode 100644 index 00000000000..d702890620d --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/gmail.svg @@ -0,0 +1,3 @@ + + + diff --git a/litellm/proxy/_experimental/out/assets/logos/google.svg b/litellm/proxy/_experimental/out/assets/logos/google.svg new file mode 100644 index 00000000000..7bc4a38ce7a --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/google.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/google_drive.svg b/litellm/proxy/_experimental/out/assets/logos/google_drive.svg new file mode 100644 index 00000000000..7048af9915e --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/google_drive.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/litellm/proxy/_experimental/out/assets/logos/google_pse.png b/litellm/proxy/_experimental/out/assets/logos/google_pse.png new file mode 100644 index 0000000000000000000000000000000000000000..741997b36b339b2148b250db49a10b61424d998a GIT binary patch literal 2392 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 + + \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/guardrails_ai.jpeg b/litellm/proxy/_experimental/out/assets/logos/guardrails_ai.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..b0935b74b984049127ee26d80ae075426d6dd5a2 GIT binary patch literal 9041 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 + + diff --git a/litellm/proxy/_experimental/out/assets/logos/huggingface.svg b/litellm/proxy/_experimental/out/assets/logos/huggingface.svg new file mode 100644 index 00000000000..dc1cf3ffb77 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/huggingface.svg @@ -0,0 +1 @@ +HuggingFace \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/hyperbolic.svg b/litellm/proxy/_experimental/out/assets/logos/hyperbolic.svg new file mode 100644 index 00000000000..76536c29c53 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/hyperbolic.svg @@ -0,0 +1 @@ +Hyperbolic \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/infinity.png b/litellm/proxy/_experimental/out/assets/logos/infinity.png new file mode 100644 index 0000000000000000000000000000000000000000..d0f725799868cd5b44f30a164ae23a040835e303 GIT binary patch literal 7377 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 XoXvymyAS^d(sD55 literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/assets/logos/javelin.png b/litellm/proxy/_experimental/out/assets/logos/javelin.png new file mode 100644 index 0000000000000000000000000000000000000000..1a3fe31b585b6f2d27d913786be5bcdcf822b080 GIT binary patch literal 1956 zcmd5-do&wp7T0#>R7_2&QSVZUs;YKq2qJC9V~j^yikLAp>aiZFM=R1~#jJM`TD0ns zXscwRi9}{Xi!cd-cx_ijJt9g|R-+NAs8=&FXaCu=XLkSHKfcGk-?`uU-E)8UcW+kd18q=pr5>%0?1) z1v)7B1%A!rgBQ+g9zCJ@#gXjK0i4Xw5EnD)CKus%Oiq8R@o(G;uBZOb3uw`*YP$8+S_1G)B@-4KlcgJ57&~cs_uqK=7Cos?+sG(t@`k zP2hx@on!`sf}`{_?+b3Wrpr?M;uBGi7MRt-P0{i=7}%Rnj~lZ?StATlV@NTieBEt4 z#tkliQW1UYn((za`dp4C0^}UN zigbFgAnVb2eUH{A&kV^|;E?;O){s9KK@ykh@G?vb*vaoBy<5-SCP0etcJ)o)ijksZYM^0{zDRFt&h+Qs$2%J8V+HJ4n zRtsCd=KLeYqJ!ToW5P0UTHY3{<^!J9o+Bq0OU+JGm3Oh1EgRYwKQRRZSnvP{04S{8 zRd%mu@Llbuf5XC?0(!Rp{mVjGQDFGOMxVdQ=|`Bh8WsU(bi4k*?CUIS$#UZ$KLns}AczZ=Ax(=FK6# zzva`#d5}^x(nUYgX-^5B%KPgEbT&TS6`kasHKP!)S~PrHY}((d$Xkd>-&Q%<*TsFw zRdWJ<`^t{BQ4A;k7^qBq5&HD;%jv@5DUlqk=2B&SmkDJ*)%q8=}2Nf zs~FJ+LqjzAS>;=(+z3s68xIQ;23>%^Q={Emm&>U?(fQg9?In{*+03R7u&}dw2r3dS z-%fbol||=k4AmOl+k6iAVIP7u$}@WJe)uvbJGIL>;3^aihh{KtI%PPeq2lH4 K=hg(hn)y3^DWco} literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/assets/logos/jina.png b/litellm/proxy/_experimental/out/assets/logos/jina.png new file mode 100644 index 0000000000000000000000000000000000000000..5dff74a7ece6cfd1b4136e7950433410bd06ac04 GIT binary patch literal 2758 zcmds3`8(U`7FU-`W2?QJa#0YApX)0>M#HNua9HO&UJ z#Omfz-TuS90;8Lem#nOo+wCqa@%OeUB_m1x<*YCy5~;l_uJx$lkwlNUlC+Gg7Fa9& zAF;qVa*jEvsi?fj&wuSl@X#Bdn3xzE%AHb9x4BX6qpGT!nwsiIpzUC?v$NaU+SG5M zyg0|YJe^d>R}iLBa6% zjR(u+X}#x8=^B}tJ$U%=WvZ_^e)wK9dT;)5sDk`hO9C$h_rCGW$&)8i?&lj9y4^85 zZH2i*qMMqU_MT%MCH{VV3}P?PwX}T2Xd#oyj#$!Bk{dKKGV(Y08qxMV*nZiT+S4OZ z+NYD~23=cQ`~P+gC4q-zsv)$HbNaBGWMt-63zbUE_$RyJT{`R)1|vc2 zmpXoMw9B%>(3niaojI-O&d$!s`dbOr?+XhHdwZRTQc?r%?(RXs!Qmp8hN>!8PC>Uv z_?9f4Hk%!)AQN-m+PbZyqZIaP`2E-#zo@7v6nmVjucPx*#b_=T%cwsH zI~kFjyuZCNE-5L=WHLh`Qe4QJ>k^WZ)jk)AQpd#Z+Omgi;3fm9b$^VEKnxT9lRyp@ z&UOFmrGmVyEQ(8Bo-&GQ4$O1b8MJr*VWnE zJfg$TojN60tM3X)Vyiywa39T9z7Tv=>);m{xSF^zHs<{~r`$UJ_l+<5`ug&oA@HSn z>f_US&j0)2KqwUE<>di|h3|B>w7jL=)6v$(Oj91@J$r`S?+|s(QW9)J+KI%1tuHz{ zI?vQc1_u|~_ok<(%j{Cb#l;ha+x7>XALMzBMqsdty86}(KTCIev2=v4gCAbnJBG4P zUfs6REbmK2q0mQs|Bet5m%>AaECS8Q2^*QbCq70&s5CxLD;c+;?Vm^^c& zJ@VnhhqAIVpuqBsKPM(Qj8-hajpX%XjBfespt&Zx<1(7j-0=2J0hc@(+GW~c72yzAjw z>*>91Z1m2r)KyW_Waxv9jOsZYPJQS8?;Bxg0bBj)O@DuXnN5(FBW(T&|G#Z*)>4qN z(6BH`hhX{@7nih+KJ~-NAE8Qx#l@?00Vq$;XAO6y$^uJ7+S2ZAox=UKVc~ecX4Sm<_s1uf_@esLX&f=@P>w^v1^rk27^ntY5+$Mp0lt_7SC z4v^?@=L)af*x&|_9%M2-7eCFp+SGk}YBM01?fvtU1EK!)A+$AqC}jT0I;^k1pU3J-Ln6n1Hj@V~ z$;&e-35ew6Kmsi$(eI-t5H9&P6>c8K{L@3j^8RIx;#oygaG_gs-1284kywu2*SEJ9 z4v17#Rek;Z%mEDB{_6DtKon?oNkT^g%I_-dq5!2Dwiu%gj`>DkWIpee~pEbNsgdawIl^HaM|A2G)V`}>zUbP|}=e$CBomBW#h zl~oC!+!^_v^&$4BD%y-I0#UD}-hShRUd{A$AdZQExVb5<>-W?KwJt3!VFHIc%*@Qb zKCmXfn|dS$yW;FD++iTn3}UqiJhm;&uIceo;~N_{!c4p^8Ar z8L{Y{+OWIrbmfW%1QN$Q{6)e3>)INrT&uLSG@f7iWoT$9s=njnCgd_eRKC82?srGQ zYVIyBE=ft`adjzxEac?m#LJum0sbUgCC4q-wlbCYw`7CZBMzbmm%w?>TZV+YY;T!HY8mU*V5S5OcINGd=xf<&&aj-*z6&VmJiU%KNAQw40?-k-Yb$$$kY zl%L!|yVtziZ9LT5+go>&a&~6?Fczwo(|6mrsig%iI@ + + + + + + + + + + + + + + diff --git a/litellm/proxy/_experimental/out/assets/logos/lago.svg b/litellm/proxy/_experimental/out/assets/logos/lago.svg new file mode 100644 index 00000000000..d5264f756dd --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/lago.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/litellm/proxy/_experimental/out/assets/logos/lakeraai.jpeg b/litellm/proxy/_experimental/out/assets/logos/lakeraai.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..b30d3ede6be57f0d26b4bc203b69d79f287549be GIT binary patch literal 2617 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 \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/langflow.svg b/litellm/proxy/_experimental/out/assets/logos/langflow.svg new file mode 100644 index 00000000000..1c7b36c4dd6 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/langflow.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/litellm/proxy/_experimental/out/assets/logos/langfuse.png b/litellm/proxy/_experimental/out/assets/logos/langfuse.png new file mode 100644 index 0000000000000000000000000000000000000000..8b765fb041d02ce9ba1195703b5100fce7178966 GIT binary patch literal 10860 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 literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/assets/logos/langfuse.svg b/litellm/proxy/_experimental/out/assets/logos/langfuse.svg new file mode 100644 index 00000000000..ccf072e5dbb --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/langfuse.svg @@ -0,0 +1 @@ +Langfuse \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/langgraph.png b/litellm/proxy/_experimental/out/assets/logos/langgraph.png new file mode 100644 index 0000000000000000000000000000000000000000..3df93e5205b33aaa4dfec6f7d73d729b9d2bed08 GIT binary patch literal 5495 zcmds5_ct8Q+a(b-LZTBbYF10s=n}p6UZX}2(N-5NdI_rqAy_Qd>ck>C!RoADqW50c zzWX`vfARfcW`3CGJZH|GXYM@r#%O6M5);xAVqswsD=W$AVAlTs2L2<={7Ou801Jyk zN?Go`p5KrCMPD=WnK``U+(mi47B6k=CuxPDq2G*{oaBBH%(83}zF=n8aWQ%>NHsPK z<(V$+rcCFY{-)r<6kEs%pd^y$(Zfy6*MUCJ}*g z-lf(+l$(>fd1ZOd1f_A#74_ljMf29ETZy^eB4tejb;a6gs!hm`d(?Q=cr3qu;|7Zi zX#@m5QIxXYx`4}{<+@SQ?D_=K)M~ptAWNVe^P^V*6SQuF?2+&b>^R0=a%Hw~Wiujv zIr8uw?w{=SuGU97DScf3TiB|$+p{2jPj7u(uJ&zIYrVGSmpn{tzQk9iw)}h7 zpZV>lM=g4k6+;fj&moisdiv%6cF~;q0l^LT(ek?olj%V1DV)7t_$1J|kT&O7%3Rs( zAa_Q-*U9k{;2;*@$E)7<#b!iP^^N{uT3-6|8i~S|1`|g^y-SYi;rKdH2$hIO4(Id) zJT5YTab`q;otqs}SF;av8(FM~pSu;y&c1Q<+~28|^p_1N4&(p`8EJafv?mZkwkCDU zx+h0%kwZ@ogUpmRekhC-n;KsI_!ffV%`g#=whK4Mt4J~{iwFQt-vh@+XGj5+oJ27( zrKKfajc$_zpDp(r@<7vt=(u6)`OGV7ahInVeQ@+Sb2=oj)AMZElU5W(zxb1{s0c|M zC>64Lo7p*T9eXiEoN4D`#kzqdBvfBrwoJ3V14Y>h^f;FpxI2qGh$}*>K)GJ$nQHd> zt{3xHK$3iEjlXK(ckf{6$yF)g%caBc9p?&a6~gH}GQ2~nHci+IdY)Xw?ca06+l@E^ zW4^q+_B^?h*g^18)#B``?3)>fF58^k+&4ReDAUMw$|8pC-Hk}M1U_Z%gX?si z!IcHxLMZn1J-|d7AA5I{qNDSmU`wApO!DQT%TQ(N(Zb3JkkIUK_)dbT*3DqCh3j(_ zcSrs+4Gv4c^ZU0wDxLST5_gvwR~2IxEG^VI+O2h-IGXsGRMdc@uI$FUpWZ1jLQR9E z>JZb%cuv+LF4eoD#NvsE#YQn@1q1)I*U8_d3|niSp|aPe(wRoxcYVK?sNS|yOr_hU zZ(-CMoT#2G@-^2DO(<#vYo2AxU4TP7QsDH%*Pl{ugZ3u}Eq%((gs&g%$GMt=^ z!Ch}OxH^1QN<*qY-9TCwP~c~l?KwIY`pozCN6zyOu;WH``0Zca5IFHTMDNQZr41C$?izy`e81mG~2IJcCq#+4vPV zMd%-~6t7s2{}M&}*4fS9#!CMac5t)SWeAaQ9Li=p)yL`JljBqKq9Ug)SkO2Eju!ml z-U%)G(9Do!3gF~X8EC4UZPt-_0{K~Ve7KHRr|12eO?2IHvrHPHo=vySC~C7)!YFIA zmGqRxQpW;dLkw@3$CN>RBpdDrn^r}@4?sb5)ec zmfW{K!U>f+Sno+yzi!2_%T(zRNFsui%aJmT->oax1U(NWTEMf-si8QKhBjdVaiYRa z&^z^ntt#`hy|fdSK>ZvZ&8-Kx>%LMXVNvWKt4X0`X`51)z2wxClH+FUFr2;jmn=QK zH2=~A@1k14YR4zK$_<%nCE(h-tMB1T8ytN3NT5r8^sk&&*qc!{5@ucGx0NNbx61^2 zp`1q(9BMqI1xQU>Ch-4z0CFvU+0W<^R?X-x=O9|hr*kOg-r>2$DHE}@q zJ(4yZ#`d9-(>hjC{2EKR*0q;5)1SeC0AlS*BMdJAeAaLn+ncd#x7|kY;>BnVQC9}g z;BZ#@XurFVkHlHLbR=6+xmWS0tKjn_Ahg4q&1_x_n zA55v7vT~TNenBZ}-n$ick6Fh4m(HwB*&iGdyn1(N&aD(#64fhiElj(;qbkNVB;DOr zX8HF8Z$`l7E+aYJed09FvuzRsV0w3fA3nlD_ZEvJkNVBYktwe~f$r39gFeptZ}cs1 zg#;~V+SFX2rrT*Nj%~V1kuioNRO#Bem+J5+&^8Gul}e@FoJOZALr$HY(cke!?jbn(nH6|OV6#1oOnDC`|x}Fi{S}u-x2P^H@ z7bp#qyf+CwwnAu+v3OD4J~dYQuC23QjokxN+S~;2+@o_m)f?3xwHBPgIc!B^1?w&S zvx%NQrr%za49@+KK!96oB;K)0Fz*OD_HJe@v3LvCM>?-}8uBs)xn7Cf9^%SKfrt4$Z5{1~o0Vtd&9V!)FK}S{cTWn-Uf|b=$-t-0(Wz5U;jM&v8=_q?+O3JH?I9b`(dgcu~r5}7& zeaEp`B%&2?BZ=;wjaX{F3M#v(_m0n|*||ef71iQAdcRP0Ay|TWgQfouH7$?7UD~gf zhD|rhDfze$L|1?7x)tXWb}?{+{r@ zEr-B&b=JrpGoA88%OZysQvv^w&lrd`O`|WxOugB&@@V9HaTS&m^VyG#*>4pl7CDra!UBgsEYB@&>qB+e%t+L1Tro)uRSgp=6$0wV*^1ez zv@P2C&M!(m?0a)J#Ck%80VG=jv?(2?6`x$5^)2xLf2;?wnt%B10{^hRH`q7 zl~mL%U_nBTkCcG=@*f?w4as7{MFXXzeYQ+~>Y*-3omiKl-@TYLBSGfdJ7lSxzKpbt zs7kZsWG|CmgV!CM6?6&pVK@+QWTtCWn$=CiRGk+Ef7XzUWe5#P!-1PDK)KaZ14K4a z%YWZ_@5{JsX>5MM$`LSg^4KOi>3MF`c*p8XiL?0#%j7F+n z;#y5=51pZlaZ8C^biH*TF7Z5uNx4lCac)E`cV2b3QMay&m-|xB5%#e73u5^hS@-zm z;M3Era@u1a2A<)eoy7w3e`JuPgvUAZ7mAR~x}o#ZVc5&TqimbnS^lcMBhJ$_-lI)V z47y?_Vx}2YY?8F2{` zGgOMM7zw+uv>tOE{dYjhFC>Vp57c#F(bc&Db%}43N5?)SqP8nZos{}aPxpn{`iDkt z?LXr8Jj2J(bDOMUy}waGzmq#m+*sw+Ykev=vldX^s{l#8Qb_&Yk=)s4iq;?6xe$D< zVSay0vuY0JJZrWt$yQTI1+Nd82pMB4HdPhXd}d%ltsJ-c+4j$+yd|-MuXawK z3QwuDgg(=9POn(GI+V@~2FGS0lXj(BNBhINY=K@GY2{nZd=3xqzy>i#59GPm^7JeF zQ661w5fC%VLiqety^!aW3~Bc@!t}=Ub2cqn?e}zzoVvQ})c(deV@**Jz!n(6&!L)4 zo9%b$4ThU^SP|2$*x@$^IYH!>IjT|p3_8m4-tzm2^*RdMB{v!#N9zF8hjw-b=E`Ik zY#Sz^u*Rx`$2GsmB^*}*5J4xT>SEw#k3TM65@#X&Orpd7eSr1b#kpuliQ5*k&8mjVO=+#)3(UQ$bv=K#a)2c-H}+sk0Ol=Jb}c zXm)lZpSL8(x%|D(tYr)uEF4~TMQLHQJjBDY(gz@Z|Kar$qtv_0rB(z{;xn+XXgK!= zRQO|5{~7-$Z1M0qc*||YYXKQP=EabQ5DoT>K1qM6Rj41zWB24QTHP)<7u~RN0zLJ_ z{0A{^1O-bPl3uZy#Pm7(Gt+VvCVIx^Y&)UCnEN8VF0}RYzhBwN#W@{=lZO# zU-Nx@Lrsz|nP~QVe`A^KFuO^;)_P0w`Yx9`%e8=}ok)!?0_?^9-{*L{Dk0nv*;xmh_z8HEnoaGzsSjESAgy|L%^E64t ziHc+9z1R-2!|QX)3f_WKy6j=g6q|dW9Iy5ctR3xxcMNKZ?9=o?`S9CljL7D`1AhT7 z$ZjR_A)CGq+A|QIdHIlBkc2@jmEF;ELH8XEEWg75`P=JMqLOBVQ9*%H?Xa>KChG5- zxS+I*;7ut%H<{8z&?TnBH-??DssDI|-w6ZDdb_G)81pgsV`%N~EbT2{`I{QAZ{kMt zPi}8WcK4WlNU~aPTjE}aJe=PBX-s9rm%(UghUL##=UL{;f7VX?1Pq6i5jwViw+)CH zSArxZH!?_;34Ja`5->Ds*&blyKE-8gZFT1A?O{w1*RxynYbMYZ;|s`ixUYHY@{fbu zSrF~NKB&r0^o*2&Bhypbv@v$X-tOLM9AVx++vR}M(6u-ar-_L4^gO-KkUH>)i@TCD zr^O2Qf+|#*f2a#mUNW~hHZ?SQz8#6PT8={k4#p_nQrMIN3C+nda-F^%RajX@AtJ7j zFkDqpH5atj0q-NZJ+EV26-{HJ4j_A0VpkG!3JuP^oSIo(9*Ss-t+9-tA*WCYDw4-m zWB-oWa`u^2n=za;v|0Bl0;Md+mVTy38sD zo-yA+oWeCfm-vt`OeGGcAEQeL0n!f^SCEb9#LR@2x~gQk)TdX+OEq4^aNRl6;;+z7 z`iER=rk2~n12!P-`1N7?i& zB0ogNhO>Fytu8V)qR*@9U5S$S+s+w;L{{+Zmh@8UVyp=IjxKX0s6%c`x1(s3c;VcY zTeuPBffjzI1R$-Cj$;@}q+u=^o%@_{+iBdc_c|nj_8w^JhcKQe1ZgP)cVN;Q>}Fyp zl6@M(_?+-Fj9`s!@^6S#BB<}NBJcn%q{Y_}iSRBr`9exG+T=;mq|=*{Q9!?&r!U#< zl4$iEfB$jn-S7~otsSrB=dZ2JYx7qKiaG0x>#@Z&Xtj+s-VFx_OMMAT^p)Ee&vD|4 z3S0Q0OzqWmr4==;Rc%#ar^3XpG;ssFqit|d6eujOtt5Q4w>~*}LKH+kHwb6A l?f%~~`o5uwu&~f*+}+{Vp9yJSV+>U+WqA#`st;CQ{|_PExvBsF literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/assets/logos/langsmith.png b/litellm/proxy/_experimental/out/assets/logos/langsmith.png new file mode 100644 index 0000000000000000000000000000000000000000..3df93e5205b33aaa4dfec6f7d73d729b9d2bed08 GIT binary patch literal 5495 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 literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/assets/logos/lasso.png b/litellm/proxy/_experimental/out/assets/logos/lasso.png new file mode 100644 index 0000000000000000000000000000000000000000..f4ffcb5f284c4625c52d3ab99137b02e996e6321 GIT binary patch literal 4115 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 y7%qkRN^6XMj9{>Xqpr!v6=klhca; literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/assets/logos/linear.svg b/litellm/proxy/_experimental/out/assets/logos/linear.svg new file mode 100644 index 00000000000..83662a1f9ff --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/linear.svg @@ -0,0 +1,3 @@ + + + diff --git a/litellm/proxy/_experimental/out/assets/logos/litellm.jpg b/litellm/proxy/_experimental/out/assets/logos/litellm.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a10a1d249690c6148a6ba40893e7c0ada44adec0 GIT binary patch literal 24694 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�R2V*J6MXq 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 F{u}R=q(uM# literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/assets/logos/litellm_logo.jpg b/litellm/proxy/_experimental/out/assets/logos/litellm_logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6fe96e2ed3567525bfc6487534fc1fb82a9fbf06 GIT binary patch literal 9222 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 literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/assets/logos/lmstudio.svg b/litellm/proxy/_experimental/out/assets/logos/lmstudio.svg new file mode 100644 index 00000000000..d38a17ee43f --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/lmstudio.svg @@ -0,0 +1 @@ +LM Studio \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/mcp_logo.png b/litellm/proxy/_experimental/out/assets/logos/mcp_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d920e50e7f22a4472dcc7647889c4387aa897110 GIT binary patch literal 3902 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 KHz?M3dh|avZee)< literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/assets/logos/meta_llama.svg b/litellm/proxy/_experimental/out/assets/logos/meta_llama.svg new file mode 100644 index 00000000000..a0b2a5e30a1 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/meta_llama.svg @@ -0,0 +1 @@ +MetaAI \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/microsoft_azure.svg b/litellm/proxy/_experimental/out/assets/logos/microsoft_azure.svg new file mode 100644 index 00000000000..cd96a7d3724 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/microsoft_azure.svg @@ -0,0 +1,72 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/litellm/proxy/_experimental/out/assets/logos/milvus.svg b/litellm/proxy/_experimental/out/assets/logos/milvus.svg new file mode 100644 index 00000000000..76154467b4b --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/milvus.svg @@ -0,0 +1 @@ +milvus-horizontal-color \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/minimax.svg b/litellm/proxy/_experimental/out/assets/logos/minimax.svg new file mode 100644 index 00000000000..59b741bbcb7 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/minimax.svg @@ -0,0 +1 @@ +资源 2 \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/mistral.svg b/litellm/proxy/_experimental/out/assets/logos/mistral.svg new file mode 100644 index 00000000000..8e03e244bf1 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/mistral.svg @@ -0,0 +1 @@ +Mistral \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/moonshot.svg b/litellm/proxy/_experimental/out/assets/logos/moonshot.svg new file mode 100644 index 00000000000..15a0380628b --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/moonshot.svg @@ -0,0 +1 @@ +MoonshotAI \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/morph.svg b/litellm/proxy/_experimental/out/assets/logos/morph.svg new file mode 100644 index 00000000000..dbe7c4167c1 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/morph.svg @@ -0,0 +1 @@ +Morph \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/nebius.svg b/litellm/proxy/_experimental/out/assets/logos/nebius.svg new file mode 100644 index 00000000000..2662140b21a --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/nebius.svg @@ -0,0 +1 @@ +Nebius \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/newrelic.png b/litellm/proxy/_experimental/out/assets/logos/newrelic.png new file mode 100644 index 0000000000000000000000000000000000000000..c841e3e71365fb00db681b80ef149c812998dede GIT binary patch literal 862 zcmV-k1EKthP)Px&7)eAyR9Hv7mp@DsaTLeD@2(9tIA9FY+F*0g`AXufX z?VUDF5Ceh9s2dB)?5ZvrCyk2+5=glAN*WUe4Z(7K=J;d(UGJ{6cl5V*CvOqcV*u@TP8i66IFkPG?Io_hHobs&0#FRK2Sk%#obh55gfCzo)TP*aH+e^Z zpb-!GAdUmn3$Q2HqC;W^&zmquvQm7x7Kp9Uj_i1=59?uKVHn_m+bLZBuQTz)CIYF| z;K=Vv*>V5|DTdk)PznUu(J*6;0Tlv3Kn#pF7x^^6VO@&Ng2217WdL0ZcUsmD9vLOz zK7iI522CcsFjW#w*w#Y4kH6s}IE8$j`fEHPu$>&b1?l1Ypa30Cnc`Md%YRUC8g6d5_IJs?K1 zQ2h^m{iD!V$ta?o-&{MDPKP|1yfS%{wAUp$DhKd!Ch5jiF(SAZBDd#MFF=Un2l9q+&vPkmCcvJWQ8NIx+c8Z7 zxL9{PZUjKqlZW9mpENX(Gy>3RXg3Amm7@)Y`$*pF07*qoM6N<$g8i0&3jhEB literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/assets/logos/noma_security.png b/litellm/proxy/_experimental/out/assets/logos/noma_security.png new file mode 100644 index 0000000000000000000000000000000000000000..8a332586d43087542471b45749dea77a7f3b23f9 GIT binary patch literal 3163 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 literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/assets/logos/notion.svg b/litellm/proxy/_experimental/out/assets/logos/notion.svg new file mode 100644 index 00000000000..170b9bb4140 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/notion.svg @@ -0,0 +1,3 @@ + + + diff --git a/litellm/proxy/_experimental/out/assets/logos/novita.svg b/litellm/proxy/_experimental/out/assets/logos/novita.svg new file mode 100644 index 00000000000..0658ce0f092 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/novita.svg @@ -0,0 +1 @@ +Novita AI \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/nvidia_nim.svg b/litellm/proxy/_experimental/out/assets/logos/nvidia_nim.svg new file mode 100644 index 00000000000..a9683c2e00d --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/nvidia_nim.svg @@ -0,0 +1 @@ +Nvidia \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/nvidia_triton.png b/litellm/proxy/_experimental/out/assets/logos/nvidia_triton.png new file mode 100644 index 0000000000000000000000000000000000000000..b6d7a5b2bb6d9e0feb4faf43b3638963e17bb252 GIT binary patch literal 5704 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 Jlq*?>{U4Mlze)fA literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/assets/logos/ollama.svg b/litellm/proxy/_experimental/out/assets/logos/ollama.svg new file mode 100644 index 00000000000..d7780867b53 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/ollama.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/openai_small.svg b/litellm/proxy/_experimental/out/assets/logos/openai_small.svg new file mode 100644 index 00000000000..52dad8269ec --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/openai_small.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/openmeter.png b/litellm/proxy/_experimental/out/assets/logos/openmeter.png new file mode 100644 index 0000000000000000000000000000000000000000..fa9f880b76b94b0b2388494edfe82962ad15d7c4 GIT binary patch literal 1114 zcmV-g1f~0lP)VPkwXV?+(wMF%$ukz62dgosic@|lkl?q04>F682*PUObNi5M4>k8+{p zC|4BuxZwgLl#gs@Mu-@vwK}8sJ)Uj$p3~bt)4P8+vt~cbSpT)w^Q>oTd^nCX2!imN z(P;dcN26_S#Y-ru*hwBXhFgI{K5CRO+|JQ9GtZ#J8mYvbeN@cQ~n zc4K2B(+B%|YHEsX%zjQz4%2UCWd)9ojy{b=v4GIfQ0i$G*bn zhr>a(lt`@N=;)~1coYk$uCAsH$zot&0A5~RsFm8=+nGLhcXu!`F+n!&2NcR;d3hNQ z4-ehOqewtVNC<6S7W@1ARC1)Su#nDv7L${cV7J@J?&#=X_P*TggHi$5`v!x7x#s$Z zdcB^x!I7JroA=&NPELmO^mL}*($bRK-ghBefYE4#ii!&68fJfWb(QR*q9TZnj%NCe zjg7(M<0ILvt*uO-r>7?v92}GzmV5#A_4N=K7|2{39v-Gw%zkZcEz<|HKRY{1HV!_l z0E_wgdAPj1lpB^j0g;iBP*zsPT*K_It*w!bgY2{3$Lt~v4Gl~moX)NdE*Dt>@TkM9 z1B<@CK6rb3qv|v_H#2>%uCD0lL^3imBzu2uZVoOkF62iqM*vPuJXKh1Y;4e|N3cRB zlZoj!GBQHh$E!kHTN~2{vyVeiDQ*SS)z#6t&SGe2h+gq(AvN4iPfuZCVS#L%xOn!n zn3OFP5%D=KY7b9RxtCTDE@JB ga`NTx00030|1&#nMz^R$QUCw|07*qoM6N<$g5*CPT>t<8 literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/assets/logos/openrouter.svg b/litellm/proxy/_experimental/out/assets/logos/openrouter.svg new file mode 100644 index 00000000000..c9952c11f6d --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/openrouter.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/oracle.svg b/litellm/proxy/_experimental/out/assets/logos/oracle.svg new file mode 100644 index 00000000000..0981dfcff28 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/oracle.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/otel.png b/litellm/proxy/_experimental/out/assets/logos/otel.png new file mode 100644 index 0000000000000000000000000000000000000000..878b0781c2e6408605c21c93fb199c82c0bd1cc7 GIT binary patch literal 1949 zcmV;O2V(e%P)%Y88)oE93wmEhyZTG6wLIAoKOPalH635Xl&$(7`GE_1AEs>8F|O(Oe7U~d zo&qW(fno`3Z)5O~6-Be6TJAjT~| zEG>;) zG-q!XEjLze_@~`SK)RPo`DhLvnp81j0_>3=;DTX&Z?9L)R>uA491sgT)mZs@q227D z0$RM5UJe_P6hZ|nhdk&{ryYN(EUCTHHWi44T|_3n`#iuPYil2ddzlK~`sTw&Iu}@m7e*T8v0NC4!Al3om~$Doh1+Y(`onK>XPy*-Qe!@^MMna z3TUIJ7d$JG2O|-I^;=J!xpAvYJsck>5}KU3kA?>Mw4gcHd`iu?RnEi5uh2mM$8HR^ zb-92CJqF*mwx20&Z0?R9j-NlirG8>cOz=f}b}lbsKVP~hdsFg)kU;ON&iY7EhHK=I z2d<1jb4zzrOMCBxsgH-8B?!oMboPb(ZkP58DH1`Wyy_>%1eb>ddSB;x0q^MSd-O{E zT~*uNzUaYz=Bmf%tV@65O$af0#E^jD{%J2X&RD$WP|t$&LgBYN&lVXBEQ!|dckBJK z^UC*ERO{xk9QT8LEXQFL)w;Rqzdllr_G%7%lj-QahaCabF?Q~$D&YlT;QKalTG+>1 zex+K2LumWmrXOAR^+6}KH85y%K7mt{K#AyP}+b3r`E5P<^s|8eDY<_y@o(si{kqfkD6FVv7 zD{0Ku*Nu}jrBK?1p0PAq3?E#iGSpC`z7+Gd9bn;j!7v-W1*wU=|fMp07QP*-fFXMW7R3d zq~YKWfmtvW*D&1aP9jSH>NcoVvK()hJVMi*?nu)>5!?+FA!5qtN?zo<8^R?U{$5=S z->Nlz8e*g4zHwH7tQyGspr%01lb3My`d!t)4WifXVlQp~D`0y^8@@`d#KY$v1l&U} zuIbA(!0G)=Hc`tybdtY30W8bojyP>@?HO-iSdyj)BRTQq_xXxO6MP$b@E={h3+hu(yB%)Faf%q!%WM+=`6l3H9 zJdrkoVG_XKuaD*$K6wd`Uh^JQgtjr286R-E;??GskfmpR9tQ)b)uHM4ja@O9uC&cj z#g8ov4f1LB1o;60`eQRM3J>bzfKSA?@R1+?hi@reZo!tPXMLUkgPyGM08gth)c`(5 zE%xDF-Q(8ClX02r{@=(0NdOu9b~YaMLXI^fV$y~!#Ke~!{#tSe#4ZGJKqc(n3?ml3 zH`IWLUb~H){KigCkdp(mHcBV_DFcSh+&{2@EAHVF(lnkRCKu-C0IuNZXEf<>%=81M zIj0}Rl>O`r4{?))A0A{l#nVZebUbp2DV+q)pzs7Sxv=>z#CKkv2ED^>0!7e0x3Y2o j9{ris75Hxe00960qwu^oL~o;b00000NkvXXu0mjf-M75K literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/assets/logos/palo_alto_networks.jpeg b/litellm/proxy/_experimental/out/assets/logos/palo_alto_networks.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..dc3cb66c6e7312acf575d9f966fcb2cefaa163fb GIT binary patch literal 5642 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 LisBWb;DG-F>7SJg literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/assets/logos/parallel_ai.png b/litellm/proxy/_experimental/out/assets/logos/parallel_ai.png new file mode 100644 index 0000000000000000000000000000000000000000..c877d869e8b3e01c5a8f1007c594c00be699234f GIT binary patch literal 2191 zcmV;A2ypj_P)*UO-or> zSLNm8VPRnF>+5D_WJ5zilai9-Y%7QVS<6!RDFi)H>4{-bqMK&X&ofQ$iz(T>p4cc8}r(-Mpcp_H+g?-zEWpH$zA zhJM<{c;=Jh97++4zN-2OLfH(VEZtq7j{bN?)7+lZQXM7tw0+ZwSZ1HM=FpE`gYdZ9 zEC{Qw?j1}SS!~X+F|>p`7;c>YIxp|5B;~~3oLnJQ8h(5(5Cx0-fTH<1_C*uv#<_+V zeDJ=48Pf8TH?*ivc*?SvHGlK&L4tXz`$G$R!%8y3@$UTurZh_g&={#HV(kv!2j#kB zo5LCduIV5&3x0uT`JpI1y2A-HOg-0sXUVm~Qj)}jDGVdycS8TbH;XY_B-UUWYY=AK zn22gg@Td772yay0IPXd9^z_=S007eblDuc zjQ~^wiL(n_;8WA(`;|UN@CAZTP=WEH?}vp!GGKK4SoAyH;7|?ZzOgn4Fh$#svehAQ zAbv(2vdS#AVI-n6U|aN706fkp3|yiP7(@ttZuVcmlw;3m0u4a++E+je9Laid7OM`- z=Ke|wlE|D@4+;&)sp$q4gO)3%iI1KBz$|WEpv#x&+&0v%eiOqQDa}7%wN^~h4(M2^utrY$Pps?a zi1q~CR0&kkZ&d}|)EjgHs@fAB!N!3L=2Q$}A=azJ2VUF`V$NRbbYTpwrviH8<@c7w z0?g2IDxm52XjJ4|P<&m$L2TD_%Y|D?OIY4s(OZ-<(iQO8K^E=RN?A*7(-9i+Lj>4TXbPK=Z*wkfv2DO($pXsGP^ULc!j5)GAI-wSveO}vLz zI7RNni-UOO( zD)hO|r}cQ^S?y^>%7SqCe?TD*>Clf~1A{9BIf@XQL?V$$B$7X{<3GODHmv2{$LZ-Z zs6z2iz-vy0eRwgroL!7JxlMRa)a=UXO*{+lO*}okM_8S#9^R`T308L2E|^A>h$j<3 zc!(BFjO8OoNU38yc$7QP!$;3l;4iuuL$(PYVrLBD1%Jkn;8|ZcHF_e#qp*$4z3$<% zD#wt0`3Ev+B@&55B9S~iD&a8M`fBmbMGW@@;#q6wigp@6SK{dbSRr*+G@=Z~z#TatGodZTU*zmL~}C;m1L57$L$dDA=b;X7eXRKdO1&A?S1 zhQw;_$VpX4y2+7a%@;0wg(|lS2Xb@H|L{~JcLB94w>1}Xb)x+Id4XAI@?J?avo&Z)E|9L#O$IoCLAk9oD zC+HpM0qD4h3&EWAKR~kT3#@9e4?r=+z6D|qTPB|aBEmh7JVwp;i4P(lLa)mWMpq7j zK>FPFF;c?*6^0375CF3qlOY6_Tj?5v-M9bTF5Z1h!4VV8^98%pBS=~R(?KwR#R9_`w zh!xLk{Uqkxti&^)6sJ`A+ngno%}}7Nm8YXWmc+t$!j*3ww~0M}IY9*Fyd`fTevApB zl(CoZvouj+)py4*HLD4YC~~diMcFy_MmuE1d^*pxP3j~&{bG7i6d7HM`wv(zwl&J9 RS7iVI002ovPDHLkV1kDA8`S^+ literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/assets/logos/perplexity-ai.svg b/litellm/proxy/_experimental/out/assets/logos/perplexity-ai.svg new file mode 100644 index 00000000000..e828b6dfbf1 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/perplexity-ai.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/perplexity.png b/litellm/proxy/_experimental/out/assets/logos/perplexity.png new file mode 100644 index 0000000000000000000000000000000000000000..57d55970452e61efbbd56110ab81bd80e98ea0e4 GIT binary patch literal 9615 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 literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/assets/logos/pillar.jpeg b/litellm/proxy/_experimental/out/assets/logos/pillar.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..084e8599764e556829620130e4f6afbeab30823a GIT binary patch literal 2554 zcmd5;dpwl+8hdxkh#)BC?V~YOH(8tvTY>d1}lTb%8-e2MDl+vqI!Tt09t?+7^DIa z34}?Ys1Z;{Lj?gCjr617aS$4#ShuQLtHZ(=JcJWH1>{i|2!RoFnJ>0Q-}>mh_C+HM z7ps)zAtV=F>t1NrcgwA?_q^kKX$Bp_6je7475|07LhWyK=+4PqI$>;|)ScG}#$M*GqwTs@++=7OuBEWn|Jj}xd zJC|H9xmM0)Xg2B2$t*hx)IL8h4j1F_Jue3q$jy22?boy;ZtTpXiU zXCrGq?5$-<-dBLdbM9(o@Kx1@8SdLE1)auUZK1VIdG9~dGo5iRQm%)Oz$16J0+nJa+rydC_FjKn36BGGIHd{0hZ;>8e2p#$pgU5FYUeM^dI}y5#fg*7+$J(OB%= zPLeF3Nn(Oa-QIbbX2tpMzpEGts~-Gi%-kdJ?{wnSj|o;>>42>rJZzsD12PVjIjc>CZ zOPU^xD&4bS>8dId$EnZNP|OZmL43AO+$b5;O-mXw3^sFV@SFW&;}yC42|YLV4o~m) z+Vs1g86l{JzUx-h8^yR#n-9KD4?Ct_Z$H~*ZG!tWgM%x_d&WzBzk8ZR>e=I`=Zvcx zxg&4o$A`Ps1o!+~ubbe9r9;nn9p6$9;1R_h5rAfF6A6IOegT2lj~Rm@05K+0{_2Dw z(UdfeSi2=@g2ZWB={RQ>2UU%~NeVPf^!z%CZOjy-qIK}tq$ABgymG<*nWMw&=FO)V zzWRGxTkn`P@tWI43}Vequc}p=^~Dz*($$%JsbZ_)a3;CE%QGd~nU_5uEz$KU4(&a! z1~?p09nkMMv2@|Fp}Z=XhokZZQ^$)WWccFp^;3Cb@;M16$oblcc@UM_bg>KNi-ga_Q?Wc3nZ#G) z3X}ewhTCHB(ThSu&U;%lWXYEWfYFjb&|?0NFH5tAbkk4f@$OCW@1$^L+E;mYP>S9) z#k;p3lcGW8Y2Uv|fe46qZ%hBEL;Wm2sYE~ncU4kS@DY2j0d zQDQ!e?YDY7#a#@U-Q(JlQpP53fntEiydUy|BW%DWD7SDVILgKK(YlQUoaIgyKD^Rq zQyyH?r=`>Z{uath4FV<@c8yg4ok;bY98&jo?JnNc-pM(Qs#6orWpK&0gbiD^KabRb zOo&@pO$44-3e$A8b$}oqJ(SYU0e}cVqR_(gA8GRIrr3UKTL-dKpl&rDAZTfmO?W=w zACStU9!U{uZJszt>n(hm(6qG@TIc63SJx3)ob^4|b|@x!TP9>WpR v^2$imQ*gMuKjGxN-n)`Vd \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/presidio.png b/litellm/proxy/_experimental/out/assets/logos/presidio.png new file mode 100644 index 0000000000000000000000000000000000000000..cce9139017848887f86c2c0dc7cfd78e403c70ea GIT binary patch literal 62523 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 + + + diff --git a/litellm/proxy/_experimental/out/assets/logos/pydantic.svg b/litellm/proxy/_experimental/out/assets/logos/pydantic.svg new file mode 100644 index 00000000000..0ff8e5c44c7 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/pydantic.svg @@ -0,0 +1,5 @@ + + + diff --git a/litellm/proxy/_experimental/out/assets/logos/qohash.jpg b/litellm/proxy/_experimental/out/assets/logos/qohash.jpg new file mode 100644 index 0000000000000000000000000000000000000000..50227ab3910ca8874f2e9ca744fbe03af1462a3b GIT binary patch literal 11581 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 WSdSYrJr;`iChYdxTa{UOT=)&NoEbF$ literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/assets/logos/recraft.svg b/litellm/proxy/_experimental/out/assets/logos/recraft.svg new file mode 100644 index 00000000000..da5d951cac9 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/recraft.svg @@ -0,0 +1 @@ +Recraft \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/repelloai.png b/litellm/proxy/_experimental/out/assets/logos/repelloai.png new file mode 100644 index 0000000000000000000000000000000000000000..d93c0096f608147964a1c1595489c9d9d8b1b90e GIT binary patch literal 14323 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 zo12Replicate \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/runway.png b/litellm/proxy/_experimental/out/assets/logos/runway.png new file mode 100644 index 0000000000000000000000000000000000000000..c909cb9e0f2115225cad95649df448caf3980f0b GIT binary patch literal 5165 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 literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/assets/logos/s3_vector.png b/litellm/proxy/_experimental/out/assets/logos/s3_vector.png new file mode 100644 index 0000000000000000000000000000000000000000..15a1a456e129f9e2544d82399c6db3f2b9d8d204 GIT binary patch literal 191076 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

3YYKR6{ z;eVZ|Xc9msvJQ0a1f4y;rYN*Z_5;#k5yNt59}4U~2)o?E#zdx9 zPC9b=LLI}SMFA4?dA#P8f6NaE>~Tu@QWvI++oir9CgMp4kI?3l&Tc?W#tuAvXxG2o z`NVw(c1}(WAD$T*oemMiJO;GrH~(E)nul4O$X+P9a_fkAVD z)hZipkv%7T(FL6-59!fX{`4|rAO;L`<9N}%Cs89xXqbMdTHEdj8JHIZz{o}u-W2m& z&OGPICmy}@;!E$o_wIVN##_x`8~?yLH50a{KMsbN9U!j5>|hlU)K;d7G`;mLYz=69 z@FSTG8xx#x2fCdkKlwrJhR-*PU73v=dAD4%Qo-r@7FR?hwV$bPA#{vP6+_^1VGJ|E zLL*-s>`D5G_ekwzlk&_{d-mLT|Ks0&a`%bxBO~Jzz9%w4R{F6Z%D<5;GYH^m<+}P_ zbo!~kzHZ|SPTknKaN$5_sl+x!HLu0%+Ibsna-uwqRp4hNNnt1sJ|KZ)syZd21zDGf!+Igp7&cJY zzz_l(3D`7?1sAD}VWLaSP|c}O4bxI*8?I4Ky+xiq>Fs3Q$KCivfH$!3Aa1V?PnRp> zhxd-`|HigwzH)5;(L?)^<`j`6Ipd_+MFz|NV=$Uvu-4yQ>M1Q)-?!|wtIvAl>1Qrk zy4q@0e#2%usZUlXCZ|~zWP1RKV}GfwsA@S$OEZ>|JQAo*z2dzoxul!rgPF{udvfa* z|m);sUsmyWd7yW+Q0uOJ2I7A|K`GLFLi;5Y+A}Tnc-hBbM7Qq(`KuMwR(j& zY#bk+*tBW=$ndfAF1+}``|hojEBvT0axmKgHICZ+Tl4NDr|U zsJKSDIc6&xTed0)dRLdLkvsMr8XKGH@9$0@B1|PpkQ8^jX!kjXpoJl>X^+jiTMCw+ z(mHV>cm4IXH(Zyz;+Lsw^{ZcAe8JVVkN{2QA;jEksMcJA8qjmHi?v-gQ(BL^Pd zKYcKLZjg!*(pl|Df!LCK* zjm?cG)1%2mBbl1yEl^3bQmxbsi|`K}B{di?<}O8DJATLHwFUqc@eyYaku`8^(B5&vr@jjM74WbTM8z=LJ8o4fRjEQSDd`OcM)FMU+K_FsaG}KJ( z1R_oul!0_iVJMtHa|bZFg{7k=izONcT4)9^>cqF`d@xsGlZAZnBVbqt%#N6RGxbL`0(z%2PURZ>>57!(7~NgA3d~vm{mI8K$+zGl7YSi5oK

r3Jp0Uc^q-SbK3x%nZpgSinP)CI z*9@er3SOlJbSmQ5Tabp)7XxPbs-DuVKJy+XZcWJ+) zYyFbGKfC7Ar28sleCEW&z55RwIdbr+-8*jn`Syn=_d`Ql~Iys$7dnDmeWQdAOBlFUdarjwa+pM?+grD$Pexmf~NqUn?dUy9Y zb3`sZ6(5{44jeept5|%eV%P`Mb!ZxvMf6ZZ6Zm>*_<~g9*oj|ozk2Ej(1>B&lLI{f z3W77iR)q=4eHw$qrFk|0x~(n(d7L7lx+aQFbnC7VkaKWS!cR01@>eVFLVEUBgEoed6Ay5AQoso;oo)zGwXS z?okvTGtIQ2#FHmX7?RFD_l(r1k{X#Ep2*KF9$fLJQ@5PGYF%I7l8rqpw=5n?`npV1 zOim_K;}cKsZ6sx$Lj~Au2M@25x-wlz7C;8^1w|D4(XTAqqJb4Fq!Aju%=k`kZBw4q1jbAW}NC~!t7_=4E8y@PtBeXkdpQweie`&4f zU7j4#n;y1<54K82f$I*NB%9W6x%VDc3M2`%n6w-pVfamiazH` z^l?dZX@7F$IaruugTPY{C+~P$>z(gTPTL~UYqi3eTXO$;WAc+9)o=WQFs$C#>>J3{ zCdjz3T^SKZ8Q7PC4IlzQq|&4{F>ELdIWANv)6r2P93b8&jHn(xQLP-}T`oLg**Vbt zq6GuV%9Y9Gmwo6h`RNmtv57+mj*Q&$%(kyTwf)JF$tFM8AhVG(wtqI0V(;$h`tFIt z$#$Fq;E)__bYX6aorH@6{Yx(DUwrQJMVFnn>h%64{mewjMF9Z|LUh7*W`M$H5GIV5 z4Hj5rZq%mTfZ8bXUSr}bl+Xv8W1G8EfBulEr#ZL66w=IcxMjq_gaFYF&DS^)??`y!6zq_C z?GymDK-pQ(#mmz*i4`B+13ZigN{_WA{-#6xph<{gq1c(t@#FLvmf6tvVhL5pp9@mf zFrNHNrranG9~(XK?5>@+@7wj$qlcatIozy_w(8}X7H_77;CT3Mx7=bE2+p%zNwH6b zZxQb04VoI=r!HFbs#DK>-O5v!FImuAS~J+wuYMqS{0heSSbb#w)S+^#sS)O#eBGoY zihWrqPcEO#gflkygA>6A_%oo!Nnq==BxYphAE1JPQ?}UA>?$O~W32~wu~{_xnLlb> zc_tAmdx|q42-&`Oe{%hovWxrcSDaaxskL}hFu}qpL)_9!IXzTe<`gT+h1C1;m7b?X z;j{^8`1ufz3opNvPi!sV2IF8~$fGx-#JgIC=s&8&jr2oyhLvfL#HGS)wfRT8NaujZ zXj>)SHhMSAmXx{c8?OE{JK@oZjrf!jQTE z_``<|?mWEbtIsx*TL=WCvt(rhQ*PkAQfKZ9Te^5~pwQI? z6>-k!LnGVKoB>9E5NM{7hKrgBrjGpnA#zvdc?_OQui~}|5%{etjR2Db7=mR$Ib*Am z@BHMQ2Z%E&NzCd-Ka^a~ndC#|IG1%8AwcJz?nGOGWg&d!jz!29=76e(!zi)|Kn+Qe zlZZxmn+nz=Qy>A}*~0@f9Wa;4HY4ZwB#NdV>=nw1IbvUY{m9JtOtU^+nJ!Np9+^IL zY^3tc@X=>ShwmR7dG7E*AE(b$Bv_Lu0P8^T;hJ00>XevF;`GGK)rq?c>#-rd3rhKg zYX|zTShfCYo?3BZ&!QyPl}z(`8J72^lF9Mb@k8~=O4&%LRY2=A`A*(R6Tg7O8m{|O z{ozihR=$@8>cCDiGFnBvxS-&EO?4Q2IjJX>F&ns`uQfK^yz@z^^cz>_-u}uU8n&>> zOKw`v9h^`gbekGQXPhTTl78EDN~ zhiC%QB5>u^SEmi9DolI;2Y$zApfjuKd^?sHI+%Tj;fX@!Q6yR`*5Q-QjlpEL`u8m? zoOfB~<{!20zPtX0H)SrnG7xR~X#ZP&Bl+c5C;$1a`W?5mo}6s*WWnI#WM&datqS-A zV7N^z7EaME%l;Er#GeVc`&_hDvXv;*K(@$tr-4GTQOl5GZH!LlTStg(i>L{kn0tDc zcP)6+>1Vy^>WRhdq{11;F`QgC>2B=mGkjO_CiYt4%m*qQ__V=*DGC0`VQS8VSI(xdAXY>#8 zgEFm-WtqYdv*A)FUMm?a6#AG1G6zCbi3P}VDYNYknRKv~5*QHHs+l)yGFc*<6S}UU zfkwcHW&(xb9SRomg?6zygKF{#@n_14`Wfh=8xFxO2xpQ4Jtv{Y6JAvng{6{md3b7K zWU_vgoO`2sVrJq*tukI4ug;7%CMQNKl_OIV`;Si_7#};BFDEl_J*Mjl5n*F7DRwb8 z(zoY{;b+W~VKT~7F(fMAJ+>>sykL|8FqQLTYNs zR3#akDj(UCsZY2mzuDmo1>u5^-Q7LddI3emVhXR^g+REK!c>=D9{lvF*iu$Ml}aWp zdONZKM0v(GEQw^AgN6K5rgqySBryxGenIgMUsLNfAtz-}Q=U!x#+|Ld_-b)!U-Hs( z>ywjN-j2@*Kr&uS7IZ0ltRR>>omD@SaqgUc;+RvH^pemE&&BzJk3D8drgdukvS27; z+E1#w>KKP#vwxn>@1OIyn`&tLN)S}?*+wd9=&Eg@nKX)n3O0dye4cg2>6s!wc2a-l z=_k1){~H#-Tj}9hd+aDoM@tJG%R$>!77QYha)Ss99#!>(^|Q~;k@@(ie`wx%Q}Ww? zkY9OYB2NY#hQ$_S7(~U^6udTOK>c|$^qg?37bme>4P{Yp| z7P|;fJAkW@@5~m8U7bChnHCEaD+dRb6?u$Z3v8ixDB8*WKwXfB=oze-+!rL}A9wwh={= z;mTB-i+j4xSg`2)MMGyT9U5A&xQ~}?3@%^X(bwCFxnyw%`M}K0Boh-e!@C=Y%RUy) zl4)Kmg()Y%&UTVcaFv!APe8B_CXGNM9I7o z8dkb9Ki4A9%)XTA@#JT_D&zIs8!jlm{g?A(96^<(ic$fOQh#b+^Sw7Ddylp*S)W-r z&>Wu(OPytEkSn$TTtK70pi{DRsUrXv4aCm58O8<=xqt4{>(1?QvnuiW#uDCq+ zJMSdUWT0#iz1{n*KdF7^>n$GD8W_wj8_KZjt2~{pvB`tr1>s{KFT92EP|ztK&AEYB zKoE=-C?MVCbl0#DuLj#-CsSR3Gx~A{O%_eiVs?ur5j(;z3{I=+n*y^vna&)U-p&y8 zBCkB@Qu=eO4!|O^gS=D*M|tA#*!aHb@jDM4`Pt5chsKW`CCOEpg1kie^>VAyte~aA z6KpQ22LQ_@Or9A_-;1}5RY~kfqipsI>0}2RYnj|tK2m;i;zH?rQ~&@#07*naR6>TA z1Rz+MqGEz#8yd(*9Ahd@!39>xairV|sWfEJ0j35k{67>yzf^4ciBXu@iyfAOFvmwB zVp@)MASwaEN~9p1ou&OSOui6XJlQ-$FyAz5var-~TIb@e>sFq#@{}{W`<5+QSnOeu z1*43az&K(iU<4rpi9K|Fx?HQ4Sp%1Sytvpkg;J(~l&Cb$!Sen>VdyO2_^gLBZS@-t zrc4ibd}E1y1a~p{@niG+M1#)2`4n?&pe7sWN+roo`Q9vb;$4yh&t>*bR`Z$StIo~; z!RyHrLk^xMY?Yk%x2DRq>%Z2#`GMT}CAsxWt85M-_lJ#%J{cwH?#Mp&T>d5J%R=@UF%D!K4{?_4$1TSf>si~Qs{#8lic(!A(Q6543*d5~Sxjxz|5nri>oxBx& zrK*>9I$L?R%ItR=l;{;|#L+eZso6>`PMRFZmIhmu6FjptHFdnJi?^4tGYZPsF8Z76 z)RWl~Zq8MRifr&e*na!XjWug>xlR_7z3=?Mg=%bThIJrb2=(-16lSk|RraMX$@VQY zZu32vnpBx_$DOU)f85&kc*1mk&6;d)KdCA9@G#%Qf|C}I-AJ&(9B+IeU|fYfSUA|btarht zo`oxVI~KFBM{cF7UkcCzEN7C9dJ|jmC|6nE9>x`_)~f_y4d0DQmKB)LBqs8DPty}< zKC3*C92Q_bap;`8U6^ncwWkJrA=4R=EcQzq=HiF9iC=a9>}x=l3>UHfuozRKp#c97 z0|U}}mM8qWORe#V{Ej2_gCmVISLLt0xb&8*B>+d7Nk#C+XX>B3wf@;3hoyr6a6o3mZr_DiM)Ccf~B%nPrm z@7mRR@SfIxeUAm+*2?9rrOR4B$*> zxUt-*pD54NW~N+v&*xcq#9B6an<*%iYYnukm}eCV^VYjUiAKt;h{MqHP7B7G)IYl?oU(FQy^6vU#mWvv8vh|6J&V1L>QrBRvFwjX_m4Jn9 zmYBJST(|^uSjxjVGpwYvk_tO4S^g;3k4|K&2Z*?QO=^Rce|Citacmfq9wGH`=u^a&CscLI*I0FJp z5X(9JqDaW%+Hpg*u#J|JhI{Fid}8@xkAbbIn^vC-uW4%>fH0(;rY_jlROGNUElV2) z9C2#H=QlDJ5Orreu^!v#JM#ILy!3^i+5RYAqRL~J90Cf!Qr&)14BDUVuRwnG4)xk3 zNOFT+_0fs!z+i(YfMW7+hLva?b5;?_ZVu^6wx@6tD#;aeSd-93;xBesZ=p*PxYw1vS(V|RG4+=ptJ>d~99I&Q^e}D=t z5FUlbPysW6Sduo=Tp&82LC_}avBc(efCM9++6?TaYeqiJZn}veh^Pct1JIT`<)y4{ zDS6@?yVM%2erab~oi%2|Xcd|2db7$KRVQ#t^-)q2I7Tvvw8r-qowOpEtdJK=2x=*x zS=NzRhJr2Z^&vLuI3s{XAq)Yu+RNZfm~?Ku$%04L2*06a)pWg^jnkKuF+`*WX3Kbv}? zsJoyrs;*1an6VRxV^3i%`qv~Qf)zH(CiJG2y2BiX6+3J*SGoo_NW_aJm<~Z{H#tBx zHzIJ82K-DnEMy@?btecFe1kdwhB>pr9p9{rINhO7T1rwltEs{gv4+>+b@dqXaxHUc zq%}NVJvLS9EoJ`nS6bIz$U`XhM$CdWCU#?1Gf|)Zt1stne;ibcr!LDb=xwkiY;0Oj zfnfmv3;-6(W+V~GL6e!qG&eGv*Zd#0-aFc|>%Q+hx4b&<&6_@h=?xh4N>BtlL{XGt z#fz~ei&snrV^LLi4rTzNhFapBqIb&5&((9f&qv^ zl)()8^jGh@@0NT%-+k_V4~);eIrp4>_WteP{`FnXKITZUp|cf7&t8nQE7x^mo{$}f z0laG2w-r79&7UwB(RGfFQGqh2P^(@&!C+C~kFrRYQN>B)K3TRPQ|?E=`7KdEF%2oL z=9=sN58wMGqr_@y*?GaFftDs<^QcRxOk(1LBzY1hq|r+6KUkfAlIU-+mMJdGJ}#CI zvAGej3Oi^_p&l(}*Qe)tx8A~%wMs#|VDvb7ZJ8?EW7{=N4# z?!B+Mv^epVFZaItbpPyG1B(57TQ?l&?^Nt5eU>~p)yG^9LjP6}VcO0iS zGLB$VGY$y<$9htB>O@5N$R3sj{4qixjRq1as0s)t9+CjUSphvK8itnGi=hLIsl#*` z(C~@^YEQt*Kq74zvh)IJh8Da}sq$gQoIArWGHd}2GUCecDrNe-cb^bVNu>nVm<|-k zxuTo*Bb=FIpq(lD2>=tTAZNrAt`edIm1A*<_~9I8Krbq4v={O##To#XC&XB{Si?gb z>Fm*~B%?tcjJ4zM*OviD0-s1UJ2#NRV4D-m2N}{{?>FDN*nj&nrf_2SeB+MOgJ1bv z8dgcsg&4XD=nD$c7!uJ9 zz+Sc1@gJ;iWZhAbexH^jT4V6-lk!_01VWuX*UvrYxI4#fcihAo^GOh6(3heGK=IaQ zN_V0>AraQr%IC8WA^`+aR0pw0##~F}a!=Def`u1!xELjoIG_CJhfS!evoBvbbL(Bn zUNV>DEoarOhOe)xt%NXP5aXlOt+(|bdlYwyt2T^MDScQ%HtH~7 zHCP!3Y0sdlS|JuT6XdjF1T47yZ7MJFq$WCx+8k23IHIohv8^YRAfGXm#!J`gq{{|l zSm?G0;&LWW1b{zM)O=2$2#)3_@|5ZrQA zt69L-5Jo^pzk(}=8b&I(a%d&WMR_=SKq9>q!d?@orqqckP3HP_C5rssLtpvX&;Jae zR4JZwxgOzGKgmz2YMfQaP&E%6>aVb(!+tkLpBUA?98yiyhEU1`>^53MF6e0+Uu`(n zbM$oM_?iA&=UZR;Qt$Wv&&J^!+rRWn!@YZzX{sQ8kd>vVy~x@s(gAHhJaQ8P!$#1osrqC{592$v|w zut@&-UKW@+UlLQ{c5y)TLw`8OtPjT8IqM)6hDSUgI?(ngDf|(tKuG*F?6dcS<~v81 zE@sSa=?pWmhx3xFU?U0aLt{2GoCoUI10@9dG1)6I&_4|xRp2r}0lbuCu~5Lh%NNlI zlw8h05I5Q6o$=S+?q9stXYtjIhueSU^BZ@ZXx@HY5_k|uGTAB$vg4Ht>%aZw)-&gP z-{kPF)@ScxprpUJ(z>$j8xWEVG%#~q8Fx@8OaKyCF~Q`X)HHZvqR*z7M-B>}rpNXt zFNj0GQm+r|%Q~U_c*Z_*{^~>DD5dD;aSLg5N*cTZLtb$sJ^iJzieF%kD*-{DcrLko zPGYELYB>VNTx1n&9R-wfq(T{~YhhaL@yye1Y_1>NJcOISI;qs;O#pe3EGV9M?byXI z4mt+?h!-V4JR{DP<&szh(HdAUQe@u|Na=Qb4WEWMQ8h%udZ|`1 zb%c!WkuBv28Of}eN8y!Oh(ii7t6gIZ4I2SqK;Si{bu0)Jwa67cCLmZdf@VQmTrgn) zSQ=>CzbLNVO0`<)ZGjRkDEhAr5@II3Nit+NeBr2N$PqMYogk77;NYuBP{Juwqfl$b znfgE~Lm@DPIkrvoX;5quwZJT$2o2>z5ik!64B#`AlFVQRZS zSs`XctLBbjpWPQq(~@@#Y?O!qr2g_?^RdIbG;w8h@aO+*|Bib#+eA~ysv#iVH^W8{ z01>S{(ynJj!0I>|8e@Vn4XR*!l8~8?ISy8?4ceSiVUbdzUbJ7jYOctm_N!V5I7I?EP5(UkN;wTg$wh#Hgw43Lgiqc!+t7=q$} zso+6Lf}^^cwKT)*sJ)RrE%N;Vwa=JEX`!TnezAd6ZqRSNgl{|$w3ZVb4QNbH6J#aq zqA|oDw24><%Sr!FL+2b#R%wV1*lJyDg$@A5>k6znOTOa*{hAREG-uM5r&G)(FrGMU zEUxx1ULU;mKFnw=%r;IP9v<31@!%cJkK9i9BL@TCRU6FO<``VM-hBF{-b3H*J^HMZ z5+{x{Z$R0I2z$;eF`W`(8Ie(;!I+^8HXx)$yYspP&8gQ&NMR|zdt3Kw-<$dCKi~S( zpVab7+AZ3ahT7hOgZ$>dH|2NKsi%Dk>;n&c`tipf!KcxIt_8T{G`Ci_@G`*uwWnGU z$ytsqsEl+p0C@@)1&0g=axEJ6#z?=!YJE>|a#_hXXk>43li*yeVjXq`*AO z%EOWpFwm9xjfvs*h2iSzaCQE}ot<~%Oh2QD8ym1PuBj2H0Gx6uzWAbc8V=pG!5zS;kGkQWXu)67puK8u&j6K$ zYSiuPMYh1G8f-+sa##k@(O4=3jLv~gLM1|bs$~aA8rtivbQ8EM-b6^eKKszjS8NoPt8z_7Fg$0EwA%SnW6OyfO7tfFebk zpn*j8zxv=64V1$5UHOG}IkHCU$L_z28N^Yt}pf{rkf{DwojezEv*h;dA<3Avz_1hr^D@gC+@tZ^~Zmv+JA_VB+ymPa7~6Z zlM^5LSW0(cI)hyuv{YHTCM`IWbOWz%frjgNHpkNf?nejJjMWh)i zNxJ&Ue|4keLQkO#XpxCz*J`2sDo{djGzXQ`Z`o|4Y;2bLj|S`AKpSN8P%lSp!+;h# zrpZ-}p|$&=5E(Gw<^pFPA@5X%#FL-W2KnSi&$*|C1)#js29m&FrU?68xuPfyJaojzf@ek+$+pN2p6fXb_jq8Flpot#-#rqv0Ml#ikTx0HVy- z=dE{Mmq&TdNsHt4`L`~FeAS(|I$$X;lGhT^|5y+1OwPGJnQp@9e=c*wDQaIoih3%5NK)^@g}06zITTyI2_l(`r7VDLANDFgBk-t!Q^i$x z_x|Q9FEq-@*&+`R;RcWW_q&O zyYVD2Cc5iN%+pV7{NcZ7OmA!5dr#w2Ki)lhti5+P0i@6nuGQ7{)KqJJTgBh;<1?T8 zN$PK0zS@80JH6+gs$PC|@cug+tE)^;_)*9C83sj}?CH-k5s#R#3$n|2S!hoiQ4p%v zxn~($^pP!a=q*G|(LHHtphLHkE)O;W1<)`00S?v^V9YQDG>IJOk~ReS!{#9Y5fy$Q zg|tDblrU9a2uw#HmC;Sa5CBr$Qt%C#0x*i7jTprOwbZ3zDI96kkb#i{833Yc8irPr z$URjVEr^pbu9h0a;ET^uE&kbY$wWU^*&yGyjW}S7fdoj%MDk@=g&+q@z$+YR4x^PU zrRnGUFPH{CP{AZTSTdP_(b(uVmb)A8zS~$?#_Z&E{lSpU=J#%IJa|vzzSGT*+}Y%< z2*t{SUOtWPuXYA=ywl4nN7h$Yy(`z67cTW5e!BmM&kWzc(%w1O+`qSf`e5tUNnTZF zhHtR61o{0667lY-j)(_c}M$({I1{=jc$2uLth1@U|;l(P5e2Yow?bB7T z0I8x_q9~aK=~0l*nPf;+l29_1cQN1n@WV_8V2!KU9oZ~|@v^wxXl7&~VB#Ed<*5Lz zZ-qDl4fs;UxTH_E;84np(QuHDr!`VubBQ3ZgoS+>v+qjPd-$7A{PLgvStNv@9G6gX z0aUPK@LZ%Of6F5-kUhU&J2`ReSoiziN#Girk7tECI4ET?C5pMDNR%f_ehqQyhZ}k6 zN=ZWoR4N<_zL~c^9U^1Mytk?(<4EUbn|u7&OMm(L`YSKBANvM`9iBY3!LBE#Z))Fi zcXQVqAUMFBI2P=Aj$dZqc=TZ8LY#cyhM zz$c7mX8H$q@v4G5#xP{aE)f`Mh78br{X4HyAr@K1;w!0uqjR6$ylN=*B3HD4Mk7To zct_DxEUGZv(SV>VB8k7@2LZ9sq}Z{hPk<3juN=Khe_V2@oC(hr(3(R!e?%L)ffhRG zWGj3{N9}SXKN`=45sf3?8X)Ex49gX#B#y_A6{fx;d*tMZ_Hn%MeDpFys*7-XiwwFO^v+^!yERt zZadyQahS@`1(1aXw5&yE4SHeol(c4xsrakcy3fAedhOEiyDxU1da)wL+_$rRaCd_@ zc|mNEZNkv%yke=+W4w%azz_rO8Wk6dK~xECcaE7&8lg6Z;Nb5J2K0~tO01n!P>3i( z6ZZDIx>D_4C?)`wM$=@b_>y0zmTS|v#-ND0JW@xfQ$>61TaWk@hs=vP9K4@a4$FF| zbd*gd(?&IvOHzvdb6YN~q~sxqYYXI*o1|@CX#&bo7o(y`6p3vXJmh%jE016Tn4khs zt=%D#4}GmM_@mz3 zLgT=`*6~Bb8*gIZg|CuP9!V~TmY#@idb+y*Lrwll>hcPaWP5S3b>Y3?4__L-`9}4F z7aA)od^dva!+Hw~t=Vm@nYkfv)ARXL5^;B^HUb0ME&y=$-pCr~gL2W148|dcMWXDj zgSQPOw3P6U8YV=AG~7WD<8M`!Y&2I`5R8XVgLnYL0aOesv^BaWD>Q+;>8+!$s!3bx)`yH5}XV(`Tt9O??%42s2GVanBHsZBSP3@-EFL|(ROK*M1m zwQHyx6a+rw>g@5xz)Ekh+UZ@n-dVl3tqTSjo7{6Y2gv(;HHh7QZX8Wo9p(h~BPgWtqbbwcz8bYyB({ouJ5ORfV4Ztx-zBEJ@n zHkmz;1fw-Dms;i#MJo?Vwvr)vN{$giBZvjo=vi$7YCB;ut)$UuRUJ8gCOw7Txz|`J ztYM_XWp8M+l>t-GtC5V}mJC3HCWY>EbNDlE+yV$8rt8MAAM%Hy@G?KX#1LP}wHg?f z4uNHrb_bTQ-b4(<3R-PYbS*FDM61HnwA%0>OH8;Q^j8*n#F*TWw=WJJ0n%Xc+Hi4Y z@a<=YfAlY_-~NXcd(NM^x%tUY4$s^)+%}__u|GyAi{i4@806Y>+gfucq{Tf{@{`z{ zHsS1gXZXtNjq~R=UU;Sd`s;%$mzyi=dV?AqhefWgR#}sJ^_>~HCRW_0>_mO??2&okp{jQQ|;e5Jb7^A z%<+kv4o#jsI9%A#m}5H@_zKYatbj4D20DCE)}X@CHn#dxXnOs|<)!x5o?QRNbKSQt zvY8JZqYZWz-Z48M&gVsH8V&*3jPUApG7mB?fSXWbm6h50s|gLSv1a2iC`gG2-{rhbgk3;@f!d_sW3n_E6O=mRBH8rIjIt; zxufm0((5j-9@@zRO$O9ujX;|F`0mdW<~+-o|ptf7_VfJ-c-o zEB(A0uLz<9a9>H}IRcKP0v~TjaPRkFIT&og1KK7WoMVQ*Fv1N*kbfS+IwtDzHb`RP z-l!3|Q?ntAi-LGpk42^woSx}VZR;OC$XZ>Z)Q#np!E?_J9(#ll*an}Sx#iaOefKm@ z9BppjQDKbvmT4NS+9QH|K+2Woy#3Q2%+6JelH7Sm`)7isr)v2A<^H(~)%iDCmo7Dy zmikw&HW*V_ULNpbAa6IXthZ+;=n}E!iLEo8sbXMZVzSNq?=zEJ5B!EYLQ8AewK#6i zX?loF@Jeem3{FxJgBo8GKStkGZ$uT7f)8fA9ofO6zyn=8fw?AC88#>-(nqNs#{q+uCW1+)Sbp{RhR_+ig@a}+frDzEvI6FPq zzRk%w24?1_2mALmjvs9A-&379(%7}V7IR#9#DThsZ1bWw+j;WpL35Ixyg0OG;jdvx z|Lu#sFV%YOV)gth>p1-L7a4*X&d)S(_4^hYCvKpv%o1zV2oqR5qDC8Fp&l#^4Bxac zx_=w$M&_y%%?jC+E>dVD$kTA-8Y&nXz#qsQqJ}EaFv=g8#B$(9S#61zw4k}P+B~$6 z8~3B-H8Ax}C9U<%njkUF3%CUHUX=rcb1`fqWz`+GpE+=FhY=aT;hDCo&YQwQ9wk`J zdn)GGgjnAtYaVSr4i=-^tr;>YD2NdlBXozUSlzmN``m4}-}vYw=Y8!3yhbBGu|Ht5 z6%OTTD(arLr_H5KGKuE`pLXK4sxE^u$}9#D22dy8(j$X?W?UDyyxfNHQb5(yglpyu zZOa!mbba&;6mP7tGOiurzo9LF;WrcV+F2!=3|5ZNJMF8Fa$zFdV)R%@Hk_N9*mH)p zzlc$5ae4jqSF2~9lI3&T8f^Y`{ABAO?<4N3ZaJexz_(KsuyO`*W~soFL_Z`q)fn#E z-QKsm|KYny;cskNhfB+Y%a;b1SBOfg>x+|%>y72>jioESYu8&V>w`#f+WYqHW2~ij7M~sNk++Z&)LW2*~Lvb72bX`od+ncwX8qUw>eH+_nXL@uXgLZ)RsMe0>YtGO4cUj6yng>c-v5bB<$~7 z?^S1CUw`d<^TJ!r^H&Fpt9?>IimHblJ3NKa**xMO4D+6p6)Y)&G7 zWibqNX&LSTPD;Q58zPrc4=cn(CIcXmNflM6%8&^y1Yt-1)pBho5~Wt#kVq!FhxQRB z(nrDw#oG{<+FJ_e1ZYr7B}29k0mnVtDb2$ufPPR|20(k0vMJ$vD; zx8Hu}ZIWB%JK_#cV531Z@v}e!YkW~4m-D6pFngVIGs6}ytv&J>A+mXyf$Kc0Pssv} z(H;(F&^TYZa`pKizH;ZSr{xpIo1{E7hlfq{fBq%KEaks*wdzBwwPVk4>8gr>rzgqa zj2W`hKcYOWm06IUE-56?I>Tt3Jv!}@9A5!v=LtV`qR<&Tm?eALaLc9Z3-Ul-I}BD# zHxm(BEaOHfD~~V*=Ht>4A#4i!Zgtk}o8VEAvzfia{RfE)d4ZhIoJ=qe$V#Mh=lW;A zTm8XTaoN1P-((*9@rw1_@X$3>J z2;*%w*Rk?SCb*+P&=oBB<0u!TlgOV`8|9$_Zp(HbJR+UUB?ARZ^_)qBR0YmhX^Sz^ z*XNIH1wPrrMDv&G3LN31;gHW^8i+)Y%C|hR7Cz^xKiHwU8DqtQA)6$vc81;6=5m)U zx0*k^z{K+4!sY(T`o!ugfd^vldY<`h1GfDpj==8B@=0iVHE1sTj1C}pV`-g8hUH1B z94~q?$%3wqB!dpSI`7yJb4K)NjMCH7f&97?m{04mlFFGvL=1st!)cHa5ztQ{oD3(S zJI?K542*>gH8{Ik!Eo20!Jh~|Q0!<>5^l13yW1N~x7*n@FjOr*KUClpzvE3|OwOE& zy#a=UJ5}|yZ$7cK=<2)Xgf9p|{p9hKtI=6>17Zx$l;9R5!8T9oTE|%dQ;Kfd1MV%E zbYBySHVV8x%&!H+mBHP%uRw0BFaN7YAH@W)n6k}6I?8GYQl@~ntbhfb-$FgkY8?WE zvhn$_%kO1Wyay1(h1WY=0xB5txfTtz#YPG;!^VglB^5h#*kJ)i=#*qfaH)ngioz=D z*07@GEWgvJA+4S@32p-9NTj_36yAdNiK#{7q@AFfz_)Dk!i;qhW(<&B7VlswTo#6O zP7N3@Z0%??kJ4~fmoO-e10P;nYW@C0L$3dSFm!@XvrafIzQ*MI zQXT#|G{eSDFfOW2lam?(E3OCf1BON+=m2vv1WHA>k*CnuF@C@j(#ZyhVr&T?s1cS3 ziWkLMVmLF?*tuO4#e1uk6^)b)5I;PDoYGwJF8FGNs@I-BE1}sy|JYG~3_FCyk(@fq zx{&u2Eg*$r>x9i!ve$KTS0|24SPD|Kz!U|J0=2v*lxImDo$Nkg9je>!xThq&aqcxQ z?2v(9DlesKxCLm*%Q-msD|(D85Fp|q8?5of7$6f)FSFFrc^GL7PVgez>mdg%GW&53 zcj+LV0b5@$hxFQd5*_)2Pnhg<1;s#*??6%-$GiaoO{~ZAHwR2JpeAahgD3t15%W?r zM|*T6s7ja!qY*o*fb2@3R8~ajChJIe``GYXyTIzBL-YNUN9mu_X{q>PI&UcW3d8c? z`S<(ZdYYG)0MZ3Ct6*lQyHtuD*}bQloZ;OP3}SC$axgd5n4WEuxN}>BSD1G1bWD({ z#a2}-qM*v<&-8j!0>=nx&45NFn`0trjc4p0Pa$Qw<`IV}$rBqYElA-H_#CAQ@(=m4 z)3vq1m8*lxR|i-59BZF$NX6*s(h7SzI1_$-sp@tb?DDwY-B@13CulBlw-Zx?o%6$~ z31;~Ex1C^1qIJ^P7lM#?NC#lRR7S;a4k0nDg!6o4XdQ8~izn@{N>K66a9zq6+0!z}h>|g05x9 z`pE|#@b!Ew5a*H|){G(0!on}oOfPp_0k=LB{*ueE#dg+r_47QoL;$1}N*a1@lWMT$ z6{7ASVcv)C#RTA@_zJ)(>6u}LC(x}_JZ@{bwS3gDek@W}X{(Taj4j@*!9G@Sfr_B9 zT{IQe_zLps;$S39)OTedm#2^&M@VQ!W@plk*IY8hqjV&Y3x>}rihF@QjJq>;%`=)1 z@5hvZ>?7vU6WRx$w+c`sLV4oADcN!yDvah9*8tWUAWIM^pioF`V}j{58c%-kV4+Hz z?Kz1uU1uG4wSB(1V>>F3xzc8_tr+MsVb@vX!ruP7m)Kx;$U;VDN2!GB7*>R$E}cW{ z*(Z34+F4S~C)Y8LJ=Q6sQT(w>FOdq?h`!m}w8JMe)5Do*_{R`Nj|&t8#ej?uxXE%m zw)V%d_nYjqwzf_)9C2h5cQzekGHrqtLwuxI@{<6QimZ!6QP8@kr09ovF6yZ z0~MU@P?QYD@R;(P+u58ZX<`NiM{%3%ENFNfMlrJ9cTqMQJVT?RHA0m55Yl+YL=;#z zqXa-g^p;h63pa>Zwk&X+v zvR`>aen_%kN+xDG$Zh!O)G|{}+~5veLq#rx50*$51w#wvnoi>v5*XCx!+XP(mEq0D zXaWPw?i0s@q6ap{VwNP;2VNAVENPlL&|&;9({0;#Z2!ppA2K7yj-UWu=h&qo9m=ok7Qg-&p0b~!EO`^h;<%Fmi`9Thl3ai4b@=`N> z3v&h@0|4|XXgpbw8Vt2!2nJXsw3zo4P<8zV&!JK=8ElaO`i7HiGNok@IOH(2pa3Oj zc;|;L0}(FppmAW3K~E&iszpF~1OyfVpoB131Um&RJv7wqtuGts0&U}}MvzMU+AUJ- zl&FC9DHMZ8Xc-FZhZfW#Mhvj8$TRJu8%4_?{}kJlDb~XUY}SOIIC32yQ2Z`|9u3B# zIV8bQ2w=B^7IJ0h4FvfdK>Qf{BdfTRY|WzmWSkx?0s+HCoi#>RkF7M(s9M>n1!N(l z5cLDVl?ePQIw%K*S#nwuZSsvR&AZ(_$P&Jbi~OU6Qf7yqp8z3?P6EL(vjjjE7|c+j z{SymA0xCqzR71w}>_C zl(9&V;bt?*^rT`OaA(xaB0zC?=iT=>&(F=zv(HVR5Aou?0wJ(Cc?gt~e+Xs%ml)rq zVs1v(AbB_?S89}|TZ)2J&=QsxG&jFodZY@-L}$Ond-uZ~3p=*YZ^HyU_tHx|o|&D4 z&nT+-wj2TxT5bFME$tN#2xdrC9XyIc@ZlT-aqT-f^x=AUn2DOxA=j+S2>mwW^QecJ z?5Sz;D?fRv#RHsSAiy0AB;t1wz48x(?Eb+jyq2U4PO?*XpltB9@Zw&WJw#EISL7eX z1ga86CP1M^7$z8tA|SrF9y{W}7j!6KvKGaI1ozV84z=?eC+<`&e&`*KafX2HcX0a{ z2+e{JctYb?k()>bVY7|8qBvX4OQxaGGndCWNUFk9sgWY6fTKYUlK^xLSkXcXS~dwC z@v)E?`KKby0*JWY8lj_MF4;%a9b7?%NniqlNf}=XVhaou7uDhY*{pN%i$>5bafJ#^ zOVcA#o4JV<#nMm$g+iB9cjGIVi*oC?$z}UXZ<|O8@=y{S?Q0nn*jrP*z}*-1&_d_s z;TFM_6b3?;kT@l5uZE`cjX?Lai&!VB*NTgoG;{O@W6fjzxu)J(6d$R+5IrcFP=tW4 zhvP<6Myn+dqEZwTc=53i7WOMjx_-ox0VeT+sO<9A93Dt7K-q!9X|Jpmzw(=;a+CBV z>qOYPiSgsAdg0|)$V1f}?owB8uC{4L3Mf^IG~328hQ8@;^T1qsuw+VAMcuvMELk+D z&V!wguGZKkl>`n@>hbMe)@V~*RlWGq%NMUN?_HR~E*e>lAo{FS?o~Mo0I%zKsKgEX z_YY>!GrMQn5ZG>zjevP?ug};YUSC4BPy;oDIr0irm4dJf zR)8JD0KQ$Q;Jb8A(RLeZm`~Iy#Z@0vI`X6Uk_Dg<@4!-F{Eb;P3Hk}L;*(`Qb>j{2 zFNQPH8js?}dvW&4G!ywWNXwSaW&nYPijR!Y#%Qoko+^pkX&wLBl0s{2k3w0cLWc6x zU!)l6r&3?RW#K)WnUl{!4jZ6Q0wU(Xbjpdi&QC=uT`(w$ts_iTBfYKTma_Gk;gj)b|!5xaq2|{b@z}aNDhfg>Dp?ZytH9;)&9!ilzn}Ly6 z#e*gMbQ>dMS6hK^ZU?5pL*Xm{}NxCeY4tK{r3d7V?}-h14Km zY0@y@*1!q!KwZpggwU}9>ZYRTxW3I$1ww(6(FL(OD8oV?C{{Lzf4*J73uAmOe1K!B3gVQSQEK#4b7OY53xiTyoEL3LOJ5{%o8e95cfATw_|SjvX-gl-af z5_3QYDoNeM6g1mGNLwHJWKskjH<5kH`D0eXaW~Ln6(b!DR~!;mwdue&nLscf@r3B8 z75ZA*454TR`C$PUs0WMzH?V=+j(*7-sfW9+%f?q?TL2W(F8yt*R3ZPv<1Lg^>Ry=MV;x9|QHyyYDd2M)H|kZsLpl9Oer0(1X%YZ5wWF7y78!#G*x-O_rp8G$3Z*o@GuU_Ip z+p1@+L8SJAMqPDXn5+T}uAm;*)}EPVB-wZz4l&J(v||JiYWNPzH0e+Wann*qDPeke z!4I@iRRttVtk}LGqX%g<9+}9GOA3lM`5Zh!C3Hbpe`PA3jUPE|VBn51v{p_B9yURD zuJET`?~A%RA;zaKB3?wvl0jW?7|Dhb#$!5M$*)jZ73FX;mr3OovC=p>{`u!0bVj>JHQ_hF?9 zt%dXla{`i}WB&;>(ug$Mp&O(eGT8`(fN?>R3}bYKbVtxCG2qHxu+>2hD1hyR;IM=t z(75!_6>89I@G;<)&)mab8m6cjIBD)3(_p#>ePy1Ll#KIAXI5`w$AOHJF<1hZv0>q| ze3xy20t(n6n$TEXB#q|j5HxMHQ*u&BMLx<{gNE)v@xpc$Eo$C{8d3NmYt~LuqUTOfnHsfLo6A;9E2z3@M2yK9EOl35LX| zyC`t@3<&btWzbQORWy;9o*B@dq6&1&@tlmR;ooc_PR7VGui4Q8a$QF_w+a z+g(NDz)snw2z44z&@_rkYF&ONV+w{~g*hR!T4F>XV$g8#SK7{ZWB%8o&@*+u6!Pu4|aJx@QF`w)}h2A zCyi5plp8?_N#w^*Xx<3AkIZQ%P%Y;VK*;kztno0PIRZCjJw>ww8}*kEpZmW9dnfQxD|zo1}f32 zF2YuH3F+z5nX@}lcL01;Qm?{w!JR!AN+yDgL&=h^N&Y#YR z&V&R9>QPCbNfl6s(&Sgo6j>DvTZ5ob2^wNUps;NYSw+c8tSS*xddyHJP8FrXO4yE= zYCH{UlD>n~G)SQq#vN6CJ)KHSW`H8XybTE6@EnoHFy;UwXorkY4G1HnHddFaX;neE zk`5pml)`s|2%7*m%HlIpVS?cZ-8g9LEv%r`=(9GAI;e+t5NRDolvsiTRN!_j663qJ z8l{u25SwYx6LGf+kU_K< zTZmc1xRHnq0l`K|ituBqIk>jk$PORyjw*y9hW>3mCl2Ip2j{|Z? zT|t|O(nnOm50J@D#j+JLQwK(1G?VQ32oQeJtkISVeO^cYkD$j~v1)JYc&E`mrBcD$D~2c$ajhp5#n`8tBM}%bp%}Rl0$XQ2 zsv(v*ev)=1=m*xCt2#k0ZB)S=q>b-eE!zO zl9*Hd08E{)s2+Lr>q#C?XPZ-P5b{FXxlqCVQCtH~h~=oS^1u|TF{8jaNY0h%<)QfG zDmlqoawR*0LV5rIKmbWZK~%A1N=3oBB$``VisblcfBWgDxS3>}Nm(oK>pDu=AWJ!c zjvJ85(Gsoc#EBDpvDHuWWV9##4$SS+QbIN$=Qe{Rdj-fpT>|4mQjinzfom86x(&)S z8jfp$iHxb~2n~uuz8Eld8KUMan zmVyG!AeRTeIyFYN0fr1?eHpqoQV@vE1uk#-WgUzboHEXOV*e2M7!a))(u6$&KtNF| zz`zrVq$MQKFmT55y1Y*9!5$_Sv6L~7a>*r3aV0ARfrRQAu#{`C*6$OWLo&*Ps47g? z7b;m>VHbEf@Bt9zRu0qIfnbrWu*bf(VF@=AVAG41^$rcmJfe_bM zDa%6}13hIYk7WPo@JeFjzC6~Z)sIK{N@**sbDAOIZ^p@;zWG(n=7Rd}i#vM^tND34kx>32N zp3w{$AkT=ZfeZ>D1Uwso3ai8#O5} zN%$P~jeti2HfWY#{p1}3;>DCjHE=rQh>P6M+9ZUTFq8x&T!#-aLnMH>`L@QLCzu$9GUOz3gLe@d9vJAdD4k~E z#f(tF!)B>~N-1grV!j6@riE+zE}b7WgH2hj$9F7aT?Jp_5`>p5C=gKf`_hSD+vSxl zm!!H^2%?Aszn~-}+Z-iN)mTnY3{A2Ef>m%>Q*s-FP>-suCFEa3grQP4b+*@KcRL0V zTV*&F(A4WQ_ziFD3^*ha1PzyV5v4=vMODh80N346f?@efQoCmAL3;QUIe|Voy?R zqdz&9i&Q>>7ce8_6f52X=Z%_-g&3MTKBP3V6SLxlS0@)+NU?UCv0w;X~p3#|eR8aTk+!=z09N4=@ z4rm5$LC1%e1P0>gkQN73kVSn?>y2yGDgCpuYED@R1mp(-1C=0zbBqSPc|f9AlprIG zpnxwcvXuvx0$jlx>jzX^w3DZR0(}So$&gN4Mp0iu<{73A8k$N4su^NWrjpTAT0%nM zgY=E%D{KR*+>>ssUvw@36-RkU)a{C9);fWmVHA%6U_fNJ3VvW_AddPgA$WTCHPMy<`ltO17Hpg`R1=2X2X0;DTWR^PooGa)K&`u9`Zp5x`%RuEFb{Mv{z7>r)0|< zqWqCk;Ac2yhcQw>bZ;ObyEHs5PSr{y3j#1Jcz_!U504plp!X8nh8z%(>n4;X#7E0# zcTqWV6~o4c@YtLh6ls-$DLUgLdLdn*{`fFU6oZ!xxm;dyzc7xU_=!((?(zx=(hmlT zrRfFaj{?|I(Maz}f(sTI9|$T5 z4>lMCEjmkd;64hQRv`%*0ffpP47J2vNVt$WgaZM>QzShZkTtTPE64*ydK~YUw|lINT!Yl6e)!tGE^F2VpkfHE2p6vG@3BhrcO*> zQmGNlSd5H+lpxwRYj^fudm(aGn&w&!UYU?b+N&+f1}I}6RBu`dR9i#LK?wqC%&en! z+9*XBdSMdy%rZ!^5f|Y_zV``A;!Ojo6Ux!Of(pD5s-cOo@q`CAxTgG*sb+92zsN%l<;{P=d@VL>#jS_QELU2GFo zr8R~|stNRKuJ?NDYh6B{v)ozhu6NgaY_z}H;Z>Fnm8)+MG%XTcQ~+yc&|qApf}!oU zQ%5YF^r{q*nrZ`V?ElD4hKEqq86FPYUEHJBM?lkW>$Q8iAw+hvaw{N&D5WezQE8n>Ct1Pc&Sm1a;TP=nBxX-BgnDTdEyp%mb0G zACe_yQ!trGv0U)74+#eXZm8cF4c3PDi5-ksjyCcg~9GG86$G@wK!>K}SML`)F+j8Ke_JMHtj-LIG)MEBR3ridR7#SWiNBsLN}q z7)0+r!Ch|jVyfvnkou4c^#RQ`Z<0*}!QP_ZeeP_@ zHkqBHAhBi%P#hMs@YX|w%2O#_AL4Fy4~ZYNbC)b1fIvz~BvoK!<9~U@BSkjL)mQpE zkm5A~Hr4fLJpIhG{<|(zUWfWdYLOa8IdF z22?6)b$O_g3AtRiix_CfR4&b^4pzjRiIS7h)Gi&1aEn<`>CiO8TwE0+gnSdo;dp$D z&Yw;wfUGU_H(*nZtLxp=)@v= zPFm`40!7de)r3EK6fTJ7`xe%&6(m0`qGpg|8UeFl9AYm&Na4R6UKdms+w(l^Gn~wdd#Wz3cCN{!dKpY;@juZF+JBvp1}!M!^J{Iik2m z$k0kM3Lak#0I#Bdm2ejJVl}kvw8MHs?dTn>inW0btagB;;MiU3%-nLE3N%6dh=*9( zQZI7Ob-}49Zc=4SdahM>=`tzD&Yar0&yE1jMY-cDijd5;#(NzQ1$-WT@KkiWPAheq zG{&e#tRSdjDJDQ0nit-E#@3y=lTz@SriECOa%NO(=f&9&i(4a@^>ngMo1 z+{iMx5;p)pV@@zjg@QBC5DunlRFE44SEo(wPB&r;6h|b3X>Bg`BFGFLgm^-OUWe}p=fy%HS0&xwlT3nlz(qaxA>8%^r?9(PF?7)%noh$Uf(}kp4DBRCyLo`cGLR>-=SBI?PcFRo82y$z&(!E* zb_7;-S0B6oe)fLq_cpv4AG9)x1dU1a|L7>!Ma#+)Q(zrGv|a)L+%%e>D^o|M^GkaD z$P7_bvqO*MOG3FM857-cuA;g(pBQD3X>pm?q|v6-F{-QpDDAazTm^Pgk|0FeIA9a& z>21~0btk}$-l;-r!yT0|a6@k8Ch>3GHW)+iRm-4)nG-vWBhV#_26y}@sIm@^B4^b| z3=2W4J$qdM49AIvBw8P(2|-7=*w55~58bt6XP6E+uLaa(sMqM6b&DkMlw}$O?kEH6 zfSot;z#C3kK-bp%S6J2x_BH0_QBLPFss$ zXo7LAhC~e6Vmj4WJqb;d`cMH5?g9!MF{;U0r*s4F&PW|?bI8X+q3ZVjFdNxK?Y~QxdwvUbGZg&b`^c3Eb zWAoU0T~a@oB8ywil@%0A&AQ{%an2hXE(;oGG!EcT3?xu4y_E?3MRzWq2C8skKXTcMAP4Ua~b zUdX&LW`5FVZh@r%#(fxl`G^Lh7>FXQOoPbJ6ODk9p&Nm34%X>hkV4qbGqKbdprax~ z6{s4*k_Y-9)LR#uEp>d~jU<-z;bh!2GKy&eQf?#;TYO^-UMm}7jh<^q5hh0sY!e*{ zUNg5W0Y9=pHnuE=cJcM1f;Dl`2)-4`CwOp((3XL|%FnnVeov*c+l^<(yMTaynnU|I zX^5!PaNaYBl3{N^*ZMiDXMAgWIJ0wCcVgS^f9tPr%;1i$?cLq_?)P7O{E`3nZ~odB zZ@cx>u@i^(9ohRUzxvBx{qjHm`jg-N+^0WMExyp)b?mdh_3P&@F3%o5ys^GQ^=cC~ z*fvN^x+siW(s2AOw=jje;12jg-zc?KQfaYh;VOkd%U*%xLXGX}lz<6 zhr(zqT%eDItYV3XQ5@$(2OWqM3POl9X+aVJ+Ly5>0MfK6)k1P^uvZ{X6QEa%{n4wr zscK=0v~&e&Cb?3;-`pwmHOgM(D9?awGh+-?C<>bGFQMN(?cnZ`@5-ZM`*A_!5%xUMKq zI6_Mpu5qd*C@3_oQR8TeJTXj2BNsohEnvXCuqfrTu7vQO@2pvx{Q zu`(VEsQ^`9@9(pps*;!nauIuF|C(>_NiG}1rv<%W4mj>V-qu$cR1{l_^rH9(WmW)1 zvlV~#_dw0HIyy9@)xj_i?Fc>=cd@}t2UQuD}{LA)5xIhw2N!&)G7F8VVJ}Z zs)o!5hB{~u0QP7SsRbh;4kY+4HSom~>Zqwo0-sKSfVu<+c`#WF{%9T`6F?nBNVgx5 zumZzt8-s$K2#o`qzqmdRdxPamBc1&K{q%4mGN4noMZ;Z zDQE(~gEkt2dXdVKW<$zh%QQXyoc%sK@fiio?c8T-qLpZPV3}2fJ<8eJO;GiNVyJR6 zP8r{kTRfn*N1gnmC6cE+r1t!?t*D^Yme#0yRkh>5(E{W7?|+XAN%g_Q@}g*^T=@sm zxh=4ecPOu^<|`em%w!2d@pi0+RO2==b;eyb;PhpLwc`nRD}g~NJDG-PNw|F*+00@t)7$6nA0?Ic4Xb%A)^`Xml1eFOGpq~XFaOr2?ono(QMYpMn zIynd!kv~3W2R{0Xh!m+HgkrNEMsIJ6kt?OpFY6c~E5yR2DAEaiuoMbBfu>Q7C`cR{ zLp_#<9`wCg*-SO+B0)4UOuIGR;u8ilySI0*p8u_HeZ89IO_l2#okceH?eHzC>8Xk7 ziK)rS*7U?gyEQX4H8C^Q?R0?myZ^`kcKgkIC-(iP&p-c9AA5T8__1{9sgoMOlokHW zr5ED|0(xMvfg233*mjkY{}4#+l@fGoq?!!iEF(m`<~;_CE1sa9Xb?4IG8q_zW=uJx zOQk+CMu6=kr-lLOXl%T4dUUW;UB`|v0Rb`z(crKE$c#@mH&0Z2lo@4>Km;kO;t^y8 zb6TK%;6Eq%NIF?v7AAdhB1i}gt4*0v0T1jn8mKV=5|^L^^J&c0#=h--az?6fDy^=6 zY_f=&T$=-*=TJe4fLG5vTh9m{I{{NL$l{iRJp9##OOg##y~cpH^%%Wbz-4FiGe*RON#;w$*!7#B;sE&Rds`Wu!CkFYm`Fw4HeVD^?Q6+O0c3Wgf03gzSczxkpU6KjDeB5Mf+_R{+`QX8F>yD zBEXnE8_fw-L{@o|eXUz9?D@M7KjQ0Koj3pUzy0fYt6qP7dU6u1ae9uE*y#G0oSyD> zUB>d4{=#2H0;~4UZ$0}Y@47Kt3RxJkM9)Az+`t@x0=zMpCNY+PS_%9Ovq&cJhFbRH z9EpcWng&`2nQ6ThN0qdu2K3r}tcRABX2z1mRlqH516t%*jIoC%j>1|RIAI6|FjAD^ z4BNpWSb@&zi-80NfXk>PWM+F0q#4DwOA_N%+%1%az06W7QOFgnMbn29RE|BygeWft zwP1^NAcdNXJ`z$A5mAXp**QRFG+Ng>)y;=Z+(7Umk>n}aa*pZqImF~|d~m5{VGVdy zEndFBdB>gu_uPLc7X*zy5{xCJK}rU?fV?O-g-o6Wul-8pB}08vKqP-I$>)tvIchj{ zu~M)+8Rw|mMJha`VETBKL%YGYD)^v*7VdX97$wPN}aT%O}4K!dI>QlREiy?9y!GA$@Y(7j4f7aBv? zl>AX4Adn4zr}MBYuS>Kk1`~$ycs=wKU?Aq|AyiS&3|Se2X%AeaNBfN|bu}sot#for zgSf5z8;?IzzD@MApZ}A#26}K(asaT&1RwEk>x3Q7KmWyFnPu;`#92iF_KyXv60iR9p zHuq(v49~|$A$d8E69Z?<9gjf*#zIxU)_vsAzJojG83Y-d01^uf$?<_hs*e-OvpVOf zfY13GKTGSltDn~pM?gjoA}piCaRo{66c)ES>wfw4$l)6}Utem^HB!&@k^aXw?qPb9x zsFNSVZ)`J9>6cN@cbpU&1T4hBmKv{*!+*?eK%0?o9%>t1z3$bPv zSEy*H2x(vp5VVu}DoKNxT5m7#8NzO-4^sxG_8&QU^b}>>49E8J-#d=-tG+^gg<6K5 zyy1AYakINZ$nECEhUxXx<*RI*AN3GqYp2O!aZ>Tm>8nMTAhNR z#tzD8p#ToIW2`Vid|*PlfhgH&1IjDsvWg24GVB0X_@-P#erj`C+Sh)x&^}{y0K=te z!pQTkgw{=$p+vw+hCU=?zqiBb02@m&61*56-0KTH6t!|y?i@s$$y&g7-tl#to!b{U zcYAzJw#Y((Xd1w;t!LX?i z*UmZ0fh_8YU}k^di?Q$rK9UgL)1P)ZXssi7vymgp@Fs~8cK}_ zuKqxKWWSM82oxN*sfdYdO@zaL>dc@QrGam=N)^o6m38JI1{u%>GV`BtCopBZd~k3% zy@rfpnFdh0m0F~Wc2hO_Yy^yesSUwKX?KLpcM8CW`7U@kVD3{LRULT?&h1ir)!K5a zxvlD6x$nn5Ix(v=6TP(5KFOE^Vk6oLsu`-gKKY5N!vFLK(^JIZ_&AwzLm&4&lw4Z2+uhxd?fP{NUu7bfwK zd-TD&MyL9L3D(ql{q0Myo_mAa_Jlfx;Yv%Rtfdqswt^*boSw__Fm;sslpWoVijI`n z^a62|BZW$tQRXE5Yfcu?o^vq7#QD8i0AL5aV)YQA;V~D z(sDbRK;8Hl>1u>&RByluwhA|b6O<#7x_CGeE6Rs{1{jWwNOKKoLKxYKWExRej{zupg*~!Mz?qgxp3qjKMcW8g^@d6bE#jRS zWY;(Z0WH#wjM5!x^Hut4+XBs#3AWwFO1wgDkP7J1P|wE8%=*w;fYwd~-ct!Onn z1P<-ikps3#0vKU(=~0v2TS;zGt_xqh1-$21UikjnBAbO&lT&k?W9Y_E%s>g-oJ&u+ zvPS>cx4GIp@no!Lo2et5My{Yd8Nm)j3zp;pd{l`=3;MKM*{P}-lEH}K}FPY(xQ|S0swHl6- zO;t36My=g!2r#5(^-zD3oWyY!M>0_3GQguEVdMkS5K=8XVOAMIU1GI^Rz zAV!nXbH1jibigBsNNeRk|Dlu2SKORufVsX)Omt(E0ednwp~WLglwV;Dw`esrK~P#j zDk&~4t;hZ-gk_=vNCGDCO;`?ZkgZj%Fc2_T?VQCR$$7HyzovIeZIZq`Gtc-+vQ^dF zuH*JNeEPIM*h54 zV3-o(*$jsYl{OHuL>OmmQHkeSksf z>E6cb8*iNB)^RLpZ4``x)m$Md*C+~~HecZjc1zb2p>dW}9Gx&|eMiY^{YEwW6` z4`ik}HpLc(ed0zV3{O4#An7LaU&J|GU#T|>dGON@aI1q7SD$;xGEb!hKjVu${?Su% zo5%%!(QHeP;rR@V3Y_H5rB@vFPr0Uy^bL)Z5_dwwgVRSo`apZa&mOIImN@G+Im~a7 z0yND|di@CasRDe+Mw!S%Yj!&nMIvA$B@-aaHrydD8O?D}po@CK4n7MB>nHVLh!gjk zaG(Y^L?>)QAnZIMM54k>pwc4R*nWMIT|Yk|h`zDF4_;%z!6a5deYJr~V1&XUO7T`| zkQZ`uAOQ3M1zjq3auD}yEE@YmHEfqjQaTVQA;N=-V?P)ei!>w2=ytT7XRHtoT7FN* z*U}YBryqs`KJ#nOo0(1tON~k~4Z>XD-Bc*3vb6MfKK+TR$9pCdf8|&I1Mr(_PgKA zrk_EZP*tK02mrx|VjLvbWPzzBS9PM9jP1cKS;34M$`@mc@zN?nQP}19fDH>q3}i)uLW}8%BoNd`Yc}~OOYJRS9DpYE;enAG_8NjPtmiWW23iX|5sFNpeEI| zn9m~x$|YwW227p6L;s`<=;h%!Yc9sXYB1yb^3)<6n(g5YhYz%-oLhS1{M(#$h6;ku ziweowfD;j}pY90v}nAup* zcu~WJ6+yoBj0yz>tb_|BvX?hfc`vo)P$GFTHj<8ZIg736QxLPHo9iKV)WAOk3-p~^ z##KquYco_|L!0BPhgAV z>TmE#?+{)nV8E+bEEe3Do}2x~V_*M&{@Fik&K+NQ@9jb7y=r2k+Ij4MeCB&6|Knf# zGynbHduPy|zU|hjxdpz1-c6K8X9rd&{&dVC7L4K!+CgamgDC-$5fA!7Wi}OVi97ZK z+A45~r!}ia(V!#M4B}NmX-Y^Yzibpp(@qX+fc}^~$ggfl8VLchDXn>l`4|J&Pk;~N zs6>)M0}gzo1`yN*2w0C5!0YHM==NyUlq~jg#Fk@(WTcX(4yR*5C3d=KobN`^c6*d>x*bNdOkZBdyVxOO=fVbS`h#B_EEL1rmj@1i4c#bn)kUxC%2p7TAAB&ZeBZc>_ zq>LYtQl|;iqtxnEol+7u%OzPO;6d`J;0NwW3}H8s$YWDUr>p6{$5?vuO+59K8y-ze zPHKBi_2f@3M#z`+)EnR+8b52M)|s1I{nb`)176X7RI-Rz?1SP2*EI3*EGmmZ8vp2A zGL)c61~J=73U6;yAc3b5IDk|g=}jhsSMKGzO^I1>>Iu(=pLX|6x$e9uZ;tD>n=@!{bfC* zD-qQJRSV^HKweEqA#?JoJJwGRL9;Z%8a7t-0&B9fy2KpV|NZa$g{pIL`_9w9`WJuY zAODlzrRp|f#fVjBZEbCxGb^h|nVOn<;icC<`SDLp&mA2sU;4s_KQ#PDU-~mQovE(A zVdr-K(C<8R_TYc=#XtF5zj3}*YUxl;{3nV9 zP56&ZceM~%y$Rd2$D}}6(5G?C?z(3~vHj56c^+t(SOx0(*=Je~MKH}=Nkwv}w`C}$ zWhJtLfv^-K=~JGYOGZFHl2B&Ij?r*{8GzP{8Z%&|*u<>+z9slEu18IB$tB}*FK>dX z?^85!fqoVY5&hU*r)kwev^SG?Go&hs3Va zYj2+aWB1+jw?6fm#jCH(EZq3#e);FW@TY$9&5ScmPtVNEOmiltzkd13Z~W%pz4hjk z)wUy@s+fhbIYxB2ln^a`G7evNBmjVgt9=oO2+}Fyx#?3>a9`Z(7zREM^zQPY^`W1xbfRIH^XB(G=bn2DE`=k& zU*bV5!oBD?a4OkVIsaR?Bd{k?d{q};W zkfF4x+a9zG%SoqRMwwr!MU?O?cmL3;HESs?#Vt1d-B{bajXn7DN|-r>X3OS?(I6ka zc`lwDa4k;!%HgY=&BACCACRGxqK!=HOjbv7>U2G~BvU=*;1Yo$s@Vg9_&|LCSm|MZ8fZEiNmeWw1C z-f-OUuX_s~kzYZ5?ujSAe)BETIB|ZXd)?9V_PzVO&t~1-{oA+lJMV>Y6S6sr*T49} z#drMfKmKxu;-0Zvw&j&uYMYt&RT>q32z|ITQmnb{iQ6W{ z_?d4L#4vOA5t-GHRp~X6AwD}uMv#amWb3Uy%19DWCz`=LpWLKBz7QIbj6AW0{xhVB zjdP)+4!w5W&bb)57Wp4G>(r5NR(MLR0C8aOI2HW^f(n=56`*0R=C2Ituj`VH6sSBg z-KRIBQtF_bnX<*=0n#-16zc8e`kjwf9{dij*(emsN~MRC*(^@toHMF|3sy-bo~3oo z3u|{8#%*g1T9MLF0@prBME8|4jC zuO>dx#%6H`H-SxU(|Lfk{}@Hl<;3HUOfF!c-zNnUP)!jr1X@v~3OG{goWlz6mIUk3 zmaej|*D00|4|z2v8m>W2$3{&2r9c#d({^-&EoLnUTCrA0IF-sMEesL-y~|EZHnn-; zoBD`caBV|5cVxa;T@F$5;Y@f zWwjC9F+brlFXlc)ZJ>4Sx=T*`__7(h|I?4YE7OY$e{=iezq$Rc5EmbGW=HV2M)$@G z-u$kM-hWEAZvAlY=C*PdEEwLtZFtk>d9!DK`{Yxu|MoZ6|MmCWWymJ)`Mrl9 z{N4k1zT=<+zw@?tO+DbCY~$v})=h)eI?o&GcG+0K4 zTQTE^Wjw@V(#q?Ri@qRDcLOxsvHl%7ig~=+$yo^g*!>RR!_)ys6ZwgVNgYl?0n-Y{ z3|iU1Kz$q!Swb~r3n~y5e5k4o(}n!sr7mybI&bUfuL&P|_#w113y34ECPDC8knyDs zgdI2SGzT{7Y+f}c)TNHe^aUD6*fM9$+Ps)+;9IDrH48^in$0COUa^xMd)#5E)zDxp z4a5bU(eD68NHIiU4a|VrgqMF)=W`OZag$nj?z&K7voKOZnOI8G8KYyUjXUeo20%2% zn4)WNLx>CVq!FlqGe3qPcq%FPfndBYCOdslI%W_Ck5+#`TsMVf(bUkdO*sq=5w=Mw zhK|r_M@xb=grsH+pvEY4rp63OppFFBY=q!$a)2R(f}#`vM5#cYu~5Z8)Df{-tpj;S z#G(X~*M~qPW9b0Nw6H8)k&94hzn!H%oR^+P=HjG+8E}aHEh9|%pM3b_*B;UM=GU)% zB4t}!59B@Z^T@aN9gl4Ida?sIbdzru~P=u;V6e_Dy#C^ zyFh-Uk3lj$sDjthPfXS!ntH)V)&$JGRE_W_sIAh-y13d`k7t)LCl zFN)|YPf-DLLIwbYf?`lr370@~LW6sR8jW&GwZGar#rOOH)x+MoTC4ez%KuctCFi4; z;0az<4fOk(0FIMRIx(H7UmRhsqu^3ms>si&8?6qrwS2UMbH~iDsTZBmBVFv;xLHLe zYg+Z{BQX{0>PWF%-1ySwS#y27`Fr30!D*-d6S*i0P`mWCssAmKyPhLD^?4GmCe7Ezh-uS6Ns+wsVO0MW{>OrH0PG#ihBGeJoR*2EHE(Eud?5D*Ap^j19_ z6OA>_@ob~-dvW`$3YcfSDs3LgK%ZW&Uf>e|LITK(aD7}2c;XVyhMw4o3(XKFd^A>O z!89EN+@Qa@ECx;)5+_4mSOi_;zACE){0K$0oveQLoUE;sZRuUPe(lEYKAsvra^bv| zIn%R&k*s^`(6-GO8oL8r4A&znS}f}Y)wwJSP+iCk9d+tf^TC!x%Y~8vluaK-ZS~@zhE*5lfrl820g;O=K$2%}RfD(+6 z70t-Rs3b|!^7-fObrXKr6$zOt0XHEM)0e4i*fN@7+WJj-?pBG=YP^ecAsg#%x$+th zq&or+*@KZgCt!ToZD?n4$Jhc0Q~ekLT*EtwkNj5yjV0cZ*2|LfQD&MK8QySpn7p;I z`W5(D{^qAt)TG|3_^wA1Qd9elR}hjnVr`{ZEZ*|NAD{Apf27aa_3P%(oyYqx-4yx% zf5;aG%^SuzX|R0Au?j6Dd{eV=RK2>HMH*tFB3)P#XO@qSBs9v+a;cm&)prMR{Ps_G z^9jfJh>o(vjx-NAB0(8{fd;k8*+$4v^KF?vqtM$!N=b&10v}Nwp^-K!cUXtWxW%To zH)Q4ll^0P`5-WrVPJdyLcNY)0h*|1S;~2eNum%Y+QRTq}Wy(gXrg$!MVM!$D zJ|>UE@e1zcBalc~L|NG)YJ6 z5|Drd12SM0+R6#j0}~bp@zrluk*@K@;G#m1G*3iTE7{J0k;O9u0gw&dRtcn61@lyE z@hd+0(&O1cI|+TrZvX4wQsuO%yzYrQVMq6X6;M)xSAXUp^TJSaJ{T@Hw6Thm3fLkc zlWL;>XhG^oSMU>O;Uok0@>OlQ@LC4?6`xsl=O39gGLdK797VQqz`U>R<5JTJ;L#%B zM1Ns57A>mp7%cIEYFJIG1}a8!%+?H3QK|y?a3vBVL}e2iOcH<_z5?(9!z|Da{5#WW zrk5fU#JP6|;gVROIB=S=yd~uuW`ynZm9bG)$-^)sk!9$RRVp;aAMy65^L#Nx)tUOE zsb~h6fw>_yR<((9dP)@0zZBdMCn`9G;FOS@b!n#Pz9rgg z-gp!EPPPD(sdZo*a|&ZoU$!|rPl-}eLzgx6C(&3<&_^(y^PHZ(%5HO{0z{+=oe$zL zI=(ffD7HLM;VVBeA@PlhyfW<0yZGdA!v*a_HSHEDR1P2-yy^qkf*(5^xH-J;bMz2Y zTsXJ{>!I>vw3#+SHDls96$Zy>W!~7nQEprKNBp$Ogh>l}y4SI2)M)s?vv^5;e85(W zVH6PE$Ii!K!G1Zs<(0;n|588txNJv{uj#iVvSSjBprlBRM{O}|SZmM>&5-p}B5_oT zQ$iXcg@2SFPG`}+stewtR(e4LhoXlKCcl~@j72*A(=6=R7T z1&WvCsc)h=^82B^6roOfXQ!{+t`NgO{AV|PQfe0i-Tvx5oFmQ2JVA2Y+ydMaR zNRs)66wm@UK*=;zgBK(5^a9%!OgD&WkVD8;Z_WOt8rwC^`fZb?FH zC3`CY==!F7P}qo(0c{H2pc_uh(S;5xz&#FregtyL6DMX9XE5ryzx>HncimC14rOhV zGk#ESWB_JBnZNUXGZ)@;^7{|iYrkx8=g_(rnT~W8J4Q;p=4i;+%{vxby?u%3SikWj zCTNVLY>a#GU-tm=FvE1;B|Yh}5-%xTlW?c859GLyYc#WQ<>Z zaaN~)W6e|(wjx$y^)Lt<4@0$gA(UE3GiHuR30ssaCIp;-h)|ihAU8ZPFZeA?=*oWg zVELC{&UTv_bFk3#Q1TF3LOPv-?W>QRBnu15XfO@{06+jqL_t(7ld?wlgsBU{Xu1DU@;$Yo>z{31$p+3!>>36xbS0)G>~ml zEBJsX#Mjc`xZ@6vj)U=uLgJ%6r41r$g0*S-OU)c4ACZDcDLT7YUuKUWI*!Ux2)+o) zULkRpi-71M+|XNH0`;uiX-ldNNv67ssn||sNLG%Lfsw5vhHz^cD>e&f=4#$z=+Fm~ zR}v&J^{`q1xxz%IfQ((u#)^zWngyNo_4o{C3?>3*E5OH_p-WKU@?_+Xs0?`rAkjyZ zhemo?Uj-WJpg6gIfp?AY9K7OCe`z3M3_{-;@bPd&W$aXM!6>o%2~Z$wD$YuH%y!rZ zag{pU(o4z30^M;ubY&zS@FbaV8H020N*EHrID8OZLPH^i*S>U=@>3Qfq6&_vIIyF8 z@VVvL#`Rx0`SiYPZusm;Z=G8K-iE@2dCRx=9C*z|2VMNR+a6z0*?Vc{KFjKr!q8w( zp~~-M;18jbEW>F;a83MRtGX$c&cThrI8Qyaa@T)}v3^_Jof(EIu#%_gv+Cn7lp-!b zP{os1kU~r6ZZV@LDPYYVo5$M`AW#!QBO8N=(+|YXm3(Fxu&}qQ^zxUMDhngxn)E?x z5a0L{)Xr|~Y8tN397jXjrb7f(1OEG&pGKWD1R-&y4y2>Ovl`hEhwsm)4`+&pzVGjj z(dKH1|2aa-M=QeEK+SspQiY}B4Pu@(i+6=iU9`$Or2a86N`$1gQJb0wnyLb~+NeA9 z@cgEL`@%WU7X${2{o^|C!?y!@86`EY_4E2&IWC@y8yG z5(#(;ALuaCZ|o?@pfwV7B=GTd1+-05UfcyJsDTlXxNx$7#o;2H!m$5C&luJKLR6X$ zYZLmAxNQwEJb^l9f-bTkL|TMu;@R9Y;RxtGW{z^h8Pgv?03RoX9mr4yQHhZO$qcqc z9t^?;e%+$DJG+Hsj9l9BVwBR5JOJ8(p%asJuz@vFA|PboHY=r47w^fbKK5|irWe2R zjt{K+^1pxkZ69dt*qjY*%DUz~y0QPAH-2r&1?PVE_P?|&Sk$rSvQqoFYJVTQjOh)( z;#DR%C8h^>L?ofZ0|{*w;pw%&54pt5$y+Hh3^GE_&=l=s=7K1P$u5wd=!z(-f^baN z?&=Hj(qmE%jX+>P8gppbNME&JTrD`36tHSk4E1HBMoK}@Vs(S)50_04(MFYk_))6& z^|wwQpYfgrn}i<;;KArP`@0WeH4W66oQRDchaY+n=Sb6A%&Na4Qeu3n=IJ9&xQvp~ ziqz6NinOw35B(}-IV5!?RYyxJtQkF;K%+m=AsMjMxi!-ov~0#8#y4hET*Ky4aQwhKpZ(yV~RN`a^*p8oYQ^@!T_|7B-Ays(>k!`K5mG;5@o!cIN zsIYm%hu?Zqb%LzcofRgm+SdEQpWakH`(MBRhu>v$=d~?a+R@R~&#mKH zKffbiD6}yxft@NlybNC8l2uXto~b=12-%8~pa=rNJcYt3lchd62q5Fb>B8UY2L80g3d4aqL~tw1n%6vnxy_5_x9n6w_+UuBAce1IRz91&?6SRf=dzmK#*;U+F{jW$6-WB= zGtSawGRiQ_RFR6KeZT>V_LyK4+M16v4O5np@}_aESqfm7`#;J{WveZ~CKys(^C>W0bHl z(mL}^c6|`yku3TFf5UyN1K0$5t<_+N!`^LC_n6(1_Ol3Ws;DdT-8+CLGNN5v69v2- z020`HOf*nG@=R1K;w%!!AYG3Z2~afy*Hd80s3!|`-b=8t4bV)@kZ8hwCZil&f&wiR z2uXbm(BNSi2<0(d6G4kZOZ3aorvGtBc4m-b07QO(fWAgsq7sevMi=Z*G3A@6!D%&} zF+ft|rwQytv5mLHWSt9tPMon&*63x1GYoCPB?Ar4DGOVpo&J{##ffcQgZvuN(<`#= zublFl*Eg>J?$_S=?%k)hW;}N^VOp)V{q$e|xbU%)zjOPqdO9YI+jsxANs|V`EIb={(S2T`9_{ z>%c?E4{b%(UX!>0)?6gzL%d%BCn~}-0R!I#^f6BB<9UAt5$#F zjcmPAjKl+8X`W{reF=O=hqLM-e z2sg;kd1~{>28Rc`qJc?*L&F^BY{|8Pj_Z_Q0`>S-+-fKQ9NWILvHQFbkEsO3aex9% z(>ax4tc;XMN+(f?X7c@)zuc9Yws&|((1<{}UOoq5ZGvIRE`wjX)Q(3 zEE;plA&>m;k$@r?nGFm0YPIj|ww>|bOwEDKA4eOudQ&NK+jH{w0Sb>x< zn%o%$O}&^zn%XjTdRFT<2UM%U1@FtZ7KQ`}okqdGiVqfPzy2zyhPD`A^H?K&7(N3fwEQKrW%Hm z19>YS_<>0ttfwdbDI%L8gV8_|FJsJi8PLf*Utkb(c0#HS#8icWF*uU+;EWMXf5NsS zY!j4F#LyVHfO*p?c{Ok)3p3s@~y^>X?^tFxu_uK!t+j*Zn?d#VK)A}?7>d~yE>Vj%1B~ej?9|BBUrigOLNVaEdweAk>UA_u4q-l? z1gi$1+kRrwOD2S0mk`(@Y&yvqwoAZ>fbA5NGSe$mh+h@VMh03J&7!eL1&0|n29FO; zcQHdz0G`jxg-!(6uZ}*z-_$s&;)71n-HR9mfksIVHXm6<9c^M$ zZ7}r+L$OP=31&sp_^^@xJ*Y~5!8vJ&UI}otNFNlyPR@Cc@SZV^iHG(fOFK;60_NYN z7$b>)Fi7YInuNfF$uO5`z4^S8SG3zG=r%5%z!$GDUt5PAX=bw2*r!Ec{B#m8;G><6 z!oz+FRnJOOMawm7?=B`Y4w%>xy=Nd4iq!{XD=iUl*l!an&fZ(HHJG}hq|d;9(kY{8 z2%&nEU|+!)^eJKs*R1Y2YY0QdVv_LfgtpTj&w`#YuZbVZVJDnX%V?}sYk&9>P-I;2 zcLh5_b|9j;0~V|`;CO)uDowrwsoJ?-gl@iJ%(MVCr#ifg2^5dxp%3Xsi?2U{pUK?d z8zvzKMNM`CPpaZ>2WEgFq!eD;QYhYEs?Eu9py(u~ni-kjyZ> z&j5ATsf!Mh4##4;>4p<7RVAX)l(HxP*7N>LZ5qA~yUH_V-+ zqdqxJ#1-d@cp9{asVm5kmJ5*!q3WkN7zmRwoQ2-Gy6?({1M{Y{$XAW(B`m=0hHz0^ z(DyKck`8N7KS3SL%^X#6$b$%eBSXLGf{Y$WbTkJnmiwHnOrYZ|vFTx`hm9(XuVwc& zJK6{Xik-5991|#plYP_yiqsfjAfhATQtD&MB|7x+8k4Q_#-a)j&$QHDS=U(c#2yo; z-2b_ApFQ`Qe>`xX!q9r}3XYq3=h~HXuQ=yT-?;FeHLJ_J?>k|irQ9{_8SJUoYrOZ3 zFt6E@l`ynMC?C=iI=KSpysm_~};Pngz_D-&2)n^dc3=WTh1* zr$uof(6kGf*SB!FWRHcARr6=p&|mop!s^8#Il>fF5I?07`9B zuVz)W8vPJ9%>qk4=-q@Hcu>tXe^P_8!qlN?Fmw7eU~JyH{aJs_x+UI@DNrqP*CRpm zGl7m;E@5@V#*s;r3hnI$ey5e7g*q}^xB)U+$f9*9fflNPIuS(p*tRl5bR@GFgXu0K zs1Lkx3q!<6P$JY8!RgJ->(FxIwT41dbeaJy)6clsJr@62ACw(5mv9!G(SN`LA9SJ2 zduP!NodF3Oq8v;uOw-XeO*cHcHj1snG3ucNmw#B7gmxZp?4*V;NXO;!>!|;Ux==3R|oOHgDMZ*z(;cjQi1< z=dJy>>&|}78?)YZ{O&<($NWF6*>v=E7an!-r+;wY1I2~QChWd%rBoT}-#O$9QQ6ru z%x}2`dlLg0#3v~kku==22c2*U2n@mpN^}TK>vjz>)w((jh6EDbu2U@ni?kc>NgC)5 ztLYdY=zvxjGep>hp20CwIGhKG6PqJ+ro4HrWkP$)^w`pC$FU>ST4?d-70mQA{y0Gm zxGBoa@udwLw`?&Bm_K(mpF6g7^RsmNsze&!N^0!jJPO9jjP`LgR@5XU$u@QN{C_kX zgB$3HZX8-|(^({x?aKf7itk;p(1m7Md%J4^gMHf{y6=8YWGqK8V3Y#ks&srM@Hy%M z+Ep$1(lUM`8&@0EeljnDkt6D%Q%5+XfC+F~v3iJL0mcWxSsf*lrcKEkhK6ch1nC&8 z0}Cgz2*V;`M8@1XMrETTM$5tKH}Z~V8XUDOGbHeI!0Y2duv!|}l(f*7*vbjC!+o$;D+7F2Wm}qoRCN0(eC^eQYdHYZSI0{;t5R|f_RLU(VQd! z(MOnqMp}hY_)~oN09cQmh>*lffhmknS_U!BIAEXoi&{an#V^GhGwFj1WZ5FtBbhP4 zcvw$ANCizd-hi?()^D5vLQwoJ3+m2HBIrTN=1@HM&7=F|7cFe~YU^lk@7eg`z{3yC zE45zv{?mu9{_YiTdi%%#TM7EI_Br=%?EU8-es$(Wr`>w*U$YtW+xFSNvvVB3j55qy z2nO*x@ZZOLb!-9O!AWjFiA|H*r>nORO0omv86J1YK1>4xf0{p}2}UO;^Yj?{dzTbs zjISf6o^UV22mvwgGhSvsMGCsc-8L%E5n6il9;o|MR*eDWE==s0Z_ z(DQNf0typ`R_0Lo_P!KxrCg~`n8L%8+_6&%Xq}Ql<50cenSxgeC_81UyzV?8q32}J zN)d4ZE!NysN)=(m?e$I%IKu{oz>+)bO)j%B*+#0`Q7ngHW4w*1nOw6041utM%soD! zG0V`bQ3BTi;3QfBJpDk*lrdwI0RD^`V9OBD0?&wN7Q0TLH;{L{2_IV`ePNmle38P2 zNJ?d&Y;6~d^!|g6f+i|DILKB-Nb11W=U@Pgg;Cf8sL~hgogSO_fCTLk2Sb7=;7MzXHR=B~)n+vDE($oIlAAPg%=`+6d z`&+ko!;t=aBb*;|Ew%Iy6(>(DwY9;*R7t%Y z^D_=kWU>XKm&$=bB?c0`o_vxwxHqQE-0$Wae}E!g^pz{OZ0~7rtFSJEP;5C0Ex{c7 z6kq_Qm4nzg6^xzaEt*h7WDG!@ zqnC%zB~XT@qd8^*(?lWgjS-?1`6Wga$#@HI6ZggaF4tqGIANNRfueeXG$5jFq}nFl z{+3=O3;H;nH;ko~iYi*+o$*l=DnnqVwFQ&{Ur}-f$UGQraAlbBfmb$m=sy5!`b)w{ zn-ae|X=dpoHN+kU4l9cyHV3F#%`h}3 z89WxRa>hzG2owBKM+RaHY>9l<`w1MZA?OqdduHyD6QI>*!3I5k=$vL)rwN1i^HFi) zIk?aiO}3VN-i?BsOQQ)5Yl$Vz-gYt5W@(Q(zgZ71PT$19R6!W`NKCe!m1teYUb1za zj`!9HfFVx|kJwDeUD)@7vzfx9TY#j=kh9(X)j}@LvhkQzw$H`-=Vz_Fa@YfYO-a^W{Uf3JY2(?Lg7p2eRlTr zIp==iOSsJR1W|Y#5Xz4nuwTs)Q%#7-LW`+RC(xSOMPu8fUNp!djb3Zp$OEviIeL? z$j{^rrsE5F@RL~`0~sCRKZz!KY8Ifg3Ac@MQm0~Ait8;5j;;>>V+zWx zIoITTZw0Q7Vhy1TgIKNbLT(x(-HyN*WH@>Rcp=%a6KHrOe5m&aNTV?vQfSt9L6CWj zfs)aYE)9UJtMcu(V9jt)3F#U=-Mm@B)QBPBKAUQJ@et@ccYvNW%^v2FAOPyjbf>&- zaipcKqphvd*~Wywcg3T_>z+C7=+`{@<*Oe0%sH=}KO-A_Icx2xj-UFqdmdSK)uqQ@ zd%-j7HWc?eqO#A@wwBhNJNtN}G5GMh1rr^0AcY&=2n5BT;L@(1NRQ?|M*O=pnrERK zIx=uK2J_$54O)a_fOH7dTciypie0&*JT6Dj8Mv_^%y(90>9RgG-WrN%osEEs$JhxM z7Rq|hk~LAU_NB;>4fE1h1T{Q(=BGc|HC~5O8*aPel8a_cpK&@Am^;r2K75! zhb4`glaa4^j25O*qxjXe%_~|e4^iEvQ{bB5Q)Sz*N>6AzI*`hhh7B;*!kgjx+*#8m zP0$5w+_Z(y66z8$oAWr(xd4@8Cz!E=a}*1OW9CKaxbcPIJ`7DWQMG-V2SYdVV~KJf zp_t(jb)0yoNtmm;LNG(bj)@N(*of;@Kr$hx0)evHE-O)7tW5XC!#XiN$IPhU&&4)8 zfI*U6f!48P9G&nZfHQ%_{;-5nEtH2ysuh`PjPQIRX}uN(3y~hG!<}9tkiR|wAMhdg z1I&ZpBd3$Bg*QQ$?n8ZMT=8&Xi&xOp)LOG}KpKAqZEQ9(K+j>n zM>j`Hv>**rqgdsjJEPFZMFJ>xHO+@AA)r)hue9^5VfRxHH=bE}@T|pmoOkKq7q5Ne zk|i0-1Z?e|KJCsIUfS#W3l@Iz^amb$Jlk#03Hu&YnLedf?H}pg>7z$tW}bpeg}G=9 zq6J~n50HvX1|&fbnR1EDAb@LYL}(D+^o;VN?C zw=HM+vK$Qpy4Bcp;deAn1)MvWpYcy-kZ^>73{-u%cHXRUU%lqS-W{7ibKdzatv)ie zb?eaQ&;R6t`3vuR;6W&3F@+x*MJa;Uj3VUxGfo3?I&II(3(&l@YF%*3>YRBr6OenVir zvpzra#cMxu_@R@#H)pjS+4$LO3xkJ$`^u?jed0g<>(&j8a@W#B+UL!!?j(aAfF>4M z;WwNRKKz7doWyb;_?Q>qEA+O=#VLs{Q7^9#fV%9XC2@t&1bb=75;^!05& z<3k_IGPCJ*>${IU{IFBb_~4p#8_WJ?4`~{v5N=4A=@2+)&CC3h%h3^=4O1Vm=P$ab zInjQX&H!q5+_ltZcA~CX9bl6`3k6CvKKu03&p-D2{C72Jq3uX6x75Why@VeaZ@ zeflgW*W!p>rKFbm9kE^!hKVB*X2PhVPr##uu}XlLG($8hCAKQM4HKy$Yvdm!=onlH zC)=llv(R~iEagl(ypMo@xdBL7kqAMYWQ(3crwzlA@v?yfBPI?T^a)nbY2W;YC40Xz%Gp0BGP^!kXi7q0an(GkXX438xV&PJJ}#r zO8zYTmKhARg%3uL4dpbXC)6_)()OH|>siE%WP}n@FzhNg1A*@K0X1L;+S*s^2#vdx7y-69 z&e-@+1GF3+&SGc{0aFZA=$9N4SJAB5)(U$zubbbL(jCr?76>&i_<&Cdld1D|vpj2T zc<}|kT>FAGwBQdO^O4%+%~N?^WWT(1mQ9}lZwoc{$%P4{ywQs|sQq9H zPUKjY;>k@xqE1+)OWZmDbe_mWd+b5ohX!+YG(a!zU1NQiX|&M@gN>bmjA0f}P)32V zCjcRRlX49JTf`gr20X@d+M%f<5mOEZG|F*;p8%*M#S6j>@Wvl>AC(eqD)_G?RUqFe z9xgmdGG$3=LdHBYr=*04nE-kV>1+QUt6|x z_uv2S*Z=*eJ0?ws;S4e1!yh_*(!`lNcMkAwPNd2+X=;vOWNdzL>1bRVZ|cOn5KP7m{oj;g;~*-__0 z$!RqsM~+9Sp-1?dfh!1Mun=6b3BqSWXpq;xvaW=qAd+K^qy@N&=mCP<9RnF78~wR- z1SIMsYKBczUPU*}R1T}mmRnjfn&5fAM`L|mC|)enq%cSEF6y5U^yl9 zBJNF-0KsNMCsfPG%3rOVcY@C@GZck-USZ7{VoLYqA7XA>5T)k<%T^4@0w3q@TTM zW~2fV-W$n+~vtVvoKr+ZFIbox}R;ZZCyUG|qWf)qN+m?nV zVCq5%Y{^MFaFevovc4T!3djCSmhp*S23rKoJi6xFXtURy@Y-#!tpArYK9Y^lvfRC6 z+qiKZmtT1m;fjY>+%yrENlV5OevBUDIIM>l@L%6#8%v!kg!GBG?q3 zrX1Woh&(lNQ^2x)MlXUrqNPA|cB8tXnuetkFYt?z)fueLCn#*E() zbrLQj(g>Zx_Q)W>)TL|;ObbNeIdC(WsGKtrx*{4&r!oLnM;UxhHvsTlTCnOFa~YTd zr(7yYeiW!W3jwOcPEPQJ)Pk(umBXZ(R0MQ{?fpBJI`I_JVkY5=3!=`dZ1iy}h_`@{ z5YNt(+B?P#6-s^UUZ|~HK6A>HUwroLwO_vSb8mY46y8$Tw=NquwPpO&5B>H>6TbMb zXZ_@chd1`LEm<;g$)dKla-(mj$sjZKK!RD4I5M)Ffr3^x=%QD+X2k5?0$d=NN+ujb z;^Iv^qb6u06{wTTv{Cn3JAFt2q9jl!;h)+hs3-v(C;#I>2pT$$sh%$Zy!QB`xr}L} zLjj3jXE3&gIehnqZ$0(&%6W?ybGx9}KKFBLVKZ!GDw@gsdxwhNiY-eJqP&eOq!Wc1uGga(I2%QK`|&)obWlV#fyD0dU?dD$`{e z0XX_w${96^5))zk_$l>)UUt${@xa5cg2z`drvwF30@JpuCmciSIQVkATGc;r6=wD12@OCuu zK?^OL$%@uaPiTQ2ez#bG}W%bOUmVabr$`O3>Lf0WRoXKu)*75PascSxa z^)F8T#DYqrzT^3UDSCb;xyJJo2&&zJ2E-+3dM(`|i^*WfqR9f3QER;tLp+ z4NLlVrda$$1vo_Zp+UN`YJgGM)HwAF)Zqn;Q`h04#UU)#1?$^()R)equ~0eS4ArPo zvbFfMJPLO`K|hp*-X`0&ou7f`XnoCVkK+s9s0acWsOc*sN(~QJmoC|B&2vwG;Y(i{ z9(XZpnR?IP?wB)w_5+VR1^ysv9*#+bFH%J6izCP3d4L=(@d_-c2y7LrJ-pyMtTOtj zC8I|o#LpaXI<+I?#$DlT?wr|ar2CdXPDdPo;uWO-7{)PWZxaSrqtL7hSiyqg)R}A$ zB!FQwSQ0oI&Un%dJrn{0(XPw|D1dZle})xUYc|Cx8+lj*il9XySrf{JDLc&uq{i(8 z&TV^d351oJKs-Rl@fYDAXG*_6^-ExdCJRM9DL~vsm8RmO>LFiZomXKK1wsM zfis0*sP!SMqd-*L#%FMQ$pwP#;`!Xn%Plj>47Vd8zSbbs{M-!FXr z6aV_tTe_<~#rgYASiH2q$ay65R~^duF8-9-=ik==RkW6?QVy2oNpP`W@!E~h`O z2Kly@hlYkoBES4^|F(MVb6K7H?&CJB??3$DWmjDJRd_|Z#iBL-A2dSp!Ot8A&jVh3 z`;nkJ1ZRxkcowHmS*~F>3;a%1QSV3UnHq3z*iBr>Ta^C%hyV7pWP%$hgI5Mhdxi>F z(1a=$j+!5#7>(&O8vO%}){1f29A1TWg@#V1jRqE!ZKTf6z&kq1W4fkJnHVw8VqnbL zI0j>lGW0{SP-{Fmg$P(>#s~>ql9Mb4sr*nnw(%8jj~?)U?s0TN@R6GK9o zEm0p95$J{$K{*{INiDWBPC(!9#M8Uk{936_TSt>z4R^>;IaU%NmhcGD(5-K99$!xUy6=7iD_i_Bpt7^7LWeU^vvx zJB#>1L$0I2$+*bg^lw%&iZci7x(q_pK!tv+$?A* zFFg0NpE~oCpJF3i$=`D{7aJXKY}^2qgL5Pa&e0q_X%3fqL4T-KvzgccKn-ltmlp*% zKBAWIa>v}7J36X^eS?*b3fUzwLhDQ8H;GH_qcD2zf~?z&n6f@}*U0r(7Y{uu+tJN0 zS^$|bjJhrifE#LJU~;1w>QW`hGp}>`C&9F(_vHAs%k+|m*k5bLDnFrG^VDC!^hhJn z1=OB+h}xxSBzPucro4m&^c+()QNwk;EpZZ zu+agBvL&ch2ce`maY{C427C5?_Sj=TdGPk1Jneul{YfmNIY9EbG~7Z0yQt@)j*Lwr_a z2vE~(Y{@PMpgDqO2O0&62DBDl`_^~=<+ndanEicy?HwJW>xvI-`#Wd>BnpKPFb(xc z7U`laJGa&T^&{DS`xn?3i71?D;GH?a%;K&$Qi7G}l7USmMr+V#8WQvnre=-3s=q81 zfTw;C9bu2Rmv4cyzmk=BF6im@rQW6tK z$7VFXymJ7dcrEYH5XQ71k`?oO=|;Y0x8#ic`Y6Q26awI|ANq{A!C8<7btjgPg2}>O zS*L$9sSg*X6$=n5V5&9(HvvLZ9G?Q@aNn&@b#HET@7OUoz)iL?ciIRxdehi0!f>nu zIbQ)S^aMg7EhZ1Rv$pcUpC9RZ@FpoGkpL+P_5((xL&fGScMzWCb?U7Y4OIu)c%?#? zE!u6LHLF)>1nS_cdV3M&4j%9rikk%leHi|OTmJK(PkDdWgoQhIyzq{9zV8=5|FO+U z)=)FQt~UsR=9KjX|s@f2S6h9eG?4mUZt$uSa1 zG$XYStQZqof!`b=hoU4Q3W#BwU6VLrCdyov*HK|87=}>=UrE>K%LJVFPuj)FC>X#$ zLFYH3(SF!TstG!nE!qPR1nje=`Um1Vk}$Ai^gu@q4d*mOolSXN0ziL($y&9`^=KiZ z3lGOY544eSDZm{h@kl8m70{rr;81LEk%L_F{{S88My*1R+v)fmgst-~v38;qIJJdIS|&NGi=ha#5`{ zZgWC@g}b1s3^!{+H6S`xHe%5xS zj0MHkcAnX59j^8DKEHZs<&)DJZC`lz2OHnI_2(ylXzxiAE362@gL3Ed+j>s@&5sNJ z>!T;%c-=F-I}6k2Ox$Z(=fr9K1NC9v1zL4Sxx!%t(<#Zp@#5ZDtpNpYA*gMG!{v?+ zeXB|QM-(&xU&iS|f;y+J*@4KTNm55RWv3ok2=GMG!eiNo56A0X+y=P&JTqTSH zkXOx42|X)QQU0lAWJexzWNP-<yJOmN$5b>){Aady;p` z%e-uw46Fx}QnA8bn76;>#JldetHI6D@|^#D>(5R<^;Ft{BfLb3fR+ZNdwwE34{JOC zYF(g}hV&xDN@dh~X`|eSB|K=6N)wdeg%D>m8S`lQ%boZ7m1vD3hLMESPl%3}v(7pj zMUnQU*PA>w>+9wHQx>8M8U%zPcx_qvKq!&QVO2}-4PvFLla!kv^Sr9MY_^IT5vzFa zBLX`CnsvFP_a*7m5={*-JD0vq@)^&&M@DZy5;MSpD^pcUz(f4yqP0b-$+h)28Z3g*tWdnmb-T|eJVao759NH0hI)X3Juz2Lm)H2K6r5e1fL;(@in)npYq1G6aGz)GR>k3bE2phjQ*;2dqo#2E5cHc3K-!7$yeY2Oos;~6{vXx0e}b_=1ZR)aa|z6v%JMZXB*jG z&-2gjeEiWFrM4^Id&*Pie&zNv&OUjc-RgZWWrIUm=d>qF*;&8&^|H&(Jm$(T-2C`` zrI~X(_B*tlUp>fLNz{jGL)p+Ud@qiaZ~;YsGNzH0+6&uuWV_9QxuL;gfD7U){`dkN z&Sf88=}2cZq=ux0!h7z2FjXyGw7`?pG>4ID(x)oUq58ykvK^@9UJqP4_O-{}{kQwG z>PzjD7JmQcn?Lr6Pay!`WrKyNLgJG?IRQc#e-2Z40#5aw2Ff9=s0*b0utQwz@@+s& zT|ov`cwTPxNg=N8xa)quo&Uw5J>(!9B`;KX9`;RVUPYW?XY}lPPp@l%ER|r2=#SP2 zQ7I~t9|D~m6-{Rp!WFN=pcO<0F68n|G+h$cH4sq{9`=eGM~~HhW0YQ9g#t^xhdv;t z-$YkV4FRzZK&5WMBp8}#qXLR)%(+^82?s<_=`%Ta01{kA)Xs2G$q&M21~MVW=&=At zrzyJ4L-oKSvKcO7f({<47C}NAD3O_B25BM65;h>3)7Z&(jfSDn6V1Z-%u@<=UcHAe zqJA-@f+5ceuH)muGcb2P)(Lwtn-ezxa0fq7T3B>Pw&Bx+$ABr(@w>m1#4Xv{Y+7 z)qy_O9oer1o=nerds~+*lHK96lXe5_Rfjy|FE2~R#|3;h!e!Y{fAPEc&e+<_iCPG6 zcR6xPQLR1rjFW&l3bv(%-NZ*9b=dEJ`{#k}FLX>=_^oez^=Ci(9m`F;pFR5F48{(D z1l%O#1l9)4F+drd@wczWWeftuj(Lc&Vl0RoC9SPnw(XcUg+yRz{KN%2w!c7bobuCM zTgEwqrZMxHQ7lD(oBc5UzkW6H^IKXDJamNDDsfjIjn-a?J}8qRUo(LY)d>@&AG`62 z#ufx6J1JZgPNqF{>q;(neTb zQPRN0ZZu<`c+mk0Kz?9UMv&kMq6Xt2jQksiSt zG6$IpbxvkfAsjz~lh4&*-eiicIw`6b21f?l>D4tkn>smboA}Jr&zy75uO51C#Rhii z6engK9X!FG^$(I}Uw*=Ck6nEDp?mC>72C7To2#2&85$nKVHc*)sNQu?$HgCSJ^m2Y zMxA8L|BoZL8dV`$@vIjnx@6y@Ry|>|yzZrq^JdQ=F(j(}4=AIZcCE<^`EumO$Y5=x zygf%j%v$JA*ZYu2nA*VR5UJXC1W(K&7!dkjnhlH-O}cr@D(Th+|4b=#%3 zFg9-zy%a!rl2qy~5qQC?g!kI-nP*m%%M*u&wwq|G0nLs;;M8$27{PNLFer>uD}m%f ze|^Oxh0D%sJ?4##?k$Z{3HcH1g#~740Sch1x}JtxMjZ`Lfs+c1^3W<)5$P5;q_Hb^ z?8bd4O%g;fITpuh2~c#1e-R>q62^=%nxdmbgeUq1128}E){xR%!F4sy@Fg*37yu~= zgwahcESbi}fa*Cnp+oH*Uq^&HaFtsl#t#^$VF4PBeVK!!{3gaI89~U&J@wwgH!A=; z-zLGXHfAhnI17M`V8F&?!$$#55c(wW))|Jw(qt)g96T6L1Ym01Z;vz{V(IE!!`q%p zRab_{0K!<{uExVs9RwbUJJQ&+@?a9L2(XFRq5vG$Q;p4rdq%{*onk>ws4bkq#&kQ+{v0Vy{*Fa4kFGnoTiBRUmZ&p-bQmtA%V!+qq# zAN|(1ziBX&A$$mn13`|$6)CvSXPA|>O?-6$snia6aT5X!1(H4lnhv$RR)eMgbjqne zy5;6d`?$e=A9%(B_4l6HE57{Lg#wX?$}n$i8^1xsTf2Jr{EwFod&3BCS!Ws0*|t&K za2vjct*?Xv>`v=6s-T|0!SXpliBw9hP_r^JNT#NZ7BU0i3bc0%H?V zHP}@kT~A88NmgBDqXFUrFpffxVQeRbk~o^K}yd z_d^j}8c2quw>mX=*%=%N7e@dx!+{cr$0vqzbE_{Vkup}YsO8i}6J9W@22_Vp+M(fU z7r$OHYi?F4t=qKe(N&M1{ii>#-uw*FRCX}`9~fyX*V&N!*4_8JZvWS3(`IJNAIiRQ zF1H?Q+(;<#3Ne@%3Z=9|{alyQ_vJ^RWyBT@jR)6OZl6{g+;YgFM?Lt!->hf`(P)+I zF4;_?#U@%ToT07t=`5mxI*bN5!npF(ohbR>w%&pMuD15LF^~S+gWBlBcN|`%nsnv} zfgK+KT`d`HBr(l)&F@5@qC-!7;gL(V2Q2fMCkB3Lqx+wU3w-iFH4Y%c&tc@>O^ALw zFXX$xeZfjwRvU;YOT57D@bpA{D#Lyllh@MO15IIk^%pr%WYj|^Oju#I(T#xSyiF6s zZm@hKGCfgQ{y6Bu!Xxn`6dqkimBQY6iUuT+rZ(ntVi2e95@Rp~%`WE_Xy7}oM+y8- zU`MCp*M&_lP4Gi2aal}zDR=oX*13pd1R)cA9FnF7 zU`CP;fP^4SriE7!dl1_-n&dnfRvk6r@TbSY5Xhj(pCrJQE|)951@*>a13WdR9Nx_tcZ~8zXN&_}FJJxUzBS%@-d2#s%dHdjmjzu%qj_R|dcO z``;D5_Lyehe8ocpcGyXl=3tXDiTFH8p~psW^?iIKcA!hnutfz#!n-5IrkW;4%~bH zL!7W(Nhtg!oVnl#D1u4g97cFHfjhh439yw>(Bm@I5Rv<_r#EcZ;2tuoyFMcr~!=ydi2mY@TvLWYKqbf zB&HP-Xr64sK@O`s@-7d~slnSdRBWzLba14?IXL9N5B`E(j710qj=iuDRt+G6#y&Ox zVj3oYKp=xQ1e5k)=a`WS5JCkr90K@i^f2nrQ~Q9+3;3iCnj>%2)qo#73CGjHZr0Xv|Ca5&tDmi}dN}Lf z`o%Y&^umSLtv>7GPaJpRF_R``z1Tc-b=0eU=iU9gSw}8evj2hCUi~k%y2kmNA{>8v;K6sl{X~ZLNS~wQ(P`I%tGr4DQCwJeM`vU5 z^p@elkw!alrC2GVX2ug6qnLiu7+D*}HA2lEo~T`DJIlkQdvPz#M<~ocksk^JH_V0c z652g6p7uyg6*5GbpJJw{AkzZ#23!&>KqCQ+mYacVh?+OzG~obtSStnI0nqutb>^MA zChrQ+)YF*JVi;r;{C7Wr^q`NJ6#sBC6oD9gj3q(naa04Y)(sF%-@6TJF6cs0*c<)^ zBO=^t$_#{6rTGQwjlH0Xpa7f1*{nc2)XEqW0vWx|gdRL~m5N&*f(wG3yqJQ!^YDd6 z0K%R@obipK@{++gK!SY-C_H-VgpnMS6U6|D zkU%datw&^EkS0qLK+uib3POi}prjt_r{Idh<(CHFlXM1&RD&Z4VmM1+$=4Xmbq&vG zOn)$hNyZs|Eu9C`3YB_Gt-+hlw{LB0X``npB z^;(5HYhj*rawz_fIgbQ1d<0PApL#diBB7IaVqmUQXCq%i!_OxCY{uMq3FOL0-5sRd zIPzY$i~~c>M{9y>Rzyq4CukR@O=fEVc`f?ltyH89OHf<}^Kl=Lp%|+R3na=llUQNR;cET96&R2dtB8WKHinITyiK&QPiuBVX@5U>dHM92Wi^)N^>7=y4A ztc7ra8et{$2t$dThQv9Th@YaT(M`7lH~~pptc1WXLZldg4}Qq4fhrf;2th8pGa!>E zlOtHdc)+o{MnzG)qaR%8Y#JiQTS+8SVqz3?3NV zSm(h0;R9er!&ECKP_n|*0Y<@K-|fzqmkFB?8#F6_r!M$U{2|UxM+$JU)X1i@A1cn)~`Bb;)IVL z@zxcexMahpF8%IlpPjPkz|6&VkjoxlzWhf&zU3nyK6%pA$$Kt2lcq9$22*R4NlZNg*Yn27VMoGn*nUE-lMH$F8Fgai(uR(J4Ml zoxaGoQQLmUpJJ84y>9t*ep1%B!;rOB){K5n#O{(|yGleq{;XqM9HC#i%xX1|&DyT5V zjUKbgQ&PLJM^=9^L=$lZgog00UX)i(YE_se%}f*xB*a1SHm9(aJ@}8;CTtmi$ubxk z)ifyLt$}7-(-KiE{!{MU&xtd7?fXf@5#y#%i?x zO`v3~6_CGeV3Mu^aYcU2?M6_QQl=yl2^sD*0$bNY#Fd)`J{;vF(@??ytOC|q*#d|| z_`sE{0Ywu?{g-6u)>S@?3{JEf!-)Hl-} z){#4zf%Bw3M&}+y$mWlMT#m#-aS`EPO+7#dAvzb+S(?qM7)lzv6$ZYJc@U<}ghr-Q z*tTx@$Sdn-t=RA{pE_g9n!C9f_q7|of7B5t?6KEkfn@b=eo$}K!*74{ z@eDtI;qE{E>3=@-$iq8!^p)BwZSA}kk?mZ=RUT5xvh~kD8(p%!mhR1o|@)~x2+!@V(QGx7I()OSHR))==DS%hE23{UV_~6jAL@m^ zAwGqN6Nr?GJ64zyI_b&_?jCJ1EU;RplB$JTCUL4#^oM}NLsfT7L!}K6HeA(;6vQ0e#yReKf zxCpvvTX-GP(D2mS8h`$zpYg)%oGb@FhswL8iEu6~xCOCUtn*^#xk@=CkDEn8c+y)-G?lVLw`#wq+E;vf9@Cr>~A!0msy z`@u(JQyfOV_PO`G=lxVonmp@_51%|^(!78C$M?;dH*@@?2+^6dfN3-4@GcNeLXHq3 z5h6vb3Hu78Rl59B%A-d*S5#7OgUJ0{RAKrb3yqv~#aOvYDlT=gdBnvoB?4(y?=m7> zYxc-bXvUuh07omm2Kk-+5;k+zOg^`6<*8v_joOCRbCQm{Ya+)B{{zK8haCkdB_rd= z#Ht9AU?Zu>26b|Gobi_{58m^{_sshxD2~R z+l-1a0X7GPajA?4Y6X%F$1F~b*%r%2J{-lM8iYA(1(>b<|Yh-Dl*Mw z48j}a8nw)?8JV?t;w9=B6GRB135HB-A|B{V0PVrUZG;f1_{mUmo{nk$q=oPZtUU9ECuSA1XeU%?5{scOvN{5P+K{YiWt%)FpbZu3p}o9; zr@ewxY_tGHmjRRn)~fT8$#@01gzR*`@Z6_)OmkSb1z&gua-0Ez99;%$$L11rppFJK z3a%qrm<;^8m1sbsc3ew5uWQk5aJz-Ei>0B~_Q85`oF=iIZF?7i0k2OsbcZ-4iy=QsBDSE)Miz=Nhv z?qpnkXAKq%@mqpC23RFi13@rX1Nl;desY9?zy+=qhGv04;y;h**D7V?m3{MD-*Y*= z()p&>A8j9h115Uf4_>LEIjCK~0yZtx7r5zV8a6)FYpzqHX4CjijqC`w^BR%Lo_+SE z<*U|0h@0R&EKJUeQ`L#D{Mrk2APpkzku4V{PC_>Pc7Vzn{Y}-qD;{fKD44p0I--7l z8i5o!YD2le&}gzC#IJGljIJVgxs8niiM!BB33?0HF-`I`MkhwZy?0lOAY9W@p$G;v z&T$h#qN_TP>8Ooo7sBCGv zEDIwG;+t3>Bvj!SY`|{<5_h2+goiF=!gEE-35Xb`Z79Cr5To-WUD%0ECxu9gZ#r%vk%Df0#a#;C6Y3Lv$7|xYT<{BhAVA_+0zA9EOFb4 zUqwRvLxV#D{R8wq_@Mp&;azXP|G~e)=R5y)@8O3ZGj+zK^p5bIJ9{2~WchD?^|K|5 z7v6i%<5_XmiiaOqy>eyGj&7L2{mwRiOOV&0u=3sDCrbwhSlk z#3*Uc$h~-{(7@1OxlL2Q;rll}{NO#@qhGMw5-xrJM%W|g9LeNDd6EjH;`A9h7p>AA z0h`AqV$}n{hE!movJQAQ3MNKt^o*l((kwnlYCVrV`pABJEx^6`9>KAr**>}=HNG7@ zbjK68O956TbI> z!Ha*)95888N>#w*Nn4^Et_s_jj`Ssl4!~srkP@HAk9*#x=*7#8ithkQrT2AUb2qt^BeQ zy}=Z|B1~#bA6QaI-Zv&25QAv^rFrI%lP zAcdTv^f22s41 zRq6?BSB;HePFrarZCC`xOEW^PwgqLnDD=(EKVgE{hWODM$~1BsVsbPEDCz+h(f~ocW3M(27OgRVg;BdNn*W_|UrVD++xs4U=z$wL}{t5np8 zR~^lQn{U4L{(JBI#cjWRc_Ys~PtR%_F1_sPS<|PPhnilBpNH1zksM);e6uKhr%&ZP zb_Cy4Jcu1Vk}I$zHBFzs-Gibxo_PF)UjjRxvUI|Oy4o*z<%#@^f1ZUo09pXKtIC@a zf{LZ#u6BN?v@niI8e|YYP=uP{R%4ALb zv@k%3AQt5;9=cMY#evt9l_k(gRr=Ls)|fy*y0PHUbp_g~+qHaZZwB zvug#$12EO5MU&8gCoVUBI-Em5vVhaL8Rje$i!coOcMT+vFjC1)B(uPzyhx67R4GlUN`a^Mg zlBTFV`j#kjsR=yyNrG|1e>lu#IZ;j)2O>LUa&wUga8lt)Cy~g4T`Q;1n-5P*_#=j{ zwWLgWX%N{+ye;2DS_VLIu$M@oaccL>l`}8CKU`8TNE|Ayl1wBXM^h~E>1Q}o%iGWS za48>j=LL74`88kjRZl+o-!Pmc`G1^X?zjXQH-FM$JN&^*lQ+Y0HWYon-cPt=$_=E4Crrn9#-TL7F{@4D- z@BW>?-DwVxOc!3$V%v=bo`?IO4&6D9f*os50Wc-qPaQ{0Q@gj@qo%N{`b)m>GcR1a zbnV%XUAgixmzYsnoi-kAjpYA^h0}%9H0Yvq5`m{KK5+Z}PquU77X^a2%mIB3Wn)+rhvzsi$`xl&fk~KIMh_OWKZ)gp?FM2!F`Ap7dAJ1-Sooza6NyElon zHbh4x9W`;N0QmEHg+6C~?eyuhPrj!+f_@_K3%=;f@4e^zJKp;5UHT=?zyE#z(4&r&ojUOKij9g?9yvK_bdO=Km5M)Vf?>|;)AUvz7D8ti#nMw_?gtUwIo(eAK`4)a!$g@FHk9VBat-^W-s z##l>1G4Ixlk&z&F)B%n&*+ouTk6~PM8E;c!t`jmEa+_vDfE3Iy%SkxqbD27MyOMZg z3VfQbCq;MrKtf%ag9!@Wd0sj`bV39&8@4>IC<`;Lp3TB|7lh=J{D`1zCL7NEV@3Ev zOo`_@5bFtF;`IhLr%E}cJh*G@c;CVR-kMtJ!JCZ2Bq(Rvl$w?EC%_ycdH@N5+z~XI zU31}Ogng(i-GVV{;n8nTQV7}oo%x;gCmumqx)6p6k88AwbqS}X%cJsn;1W#_3aNPd znP=@Uo;%C_@7$DdN_;-?I9aU==?bYXbTN@oel6 zxrNnIuw{G^J2u@R$=SvjSD&@tHyF#+duz3hYma;Vrq#*yX!jf6^rJU!`|wZkV&;7{ zN?}&x4Z^yZeM*mW%k@-!=l&P;L;z8jQ8N=f?@<*7*>c<&UriA{^T`49+S*;_}T}ndG)Toghc!h4fkvasL-HXg+_!A7XdhkjpS*fxO zaV9_=_Pj1;Nh<-M->kp_vpBDVZo&uI)Uza9x3p4SU&$(91#nx@Vm;|~h9N^QVy9PU zN@v)9={?F*>+~^g#TO8fx#lS3Z=NjrEVj3rpUP&`)V$dP!yX@1acdkCz0om|F>bc1 z8P?%zkq9$oKaGLQVW5)vjE_K}2o4e|(8G3%yJR;(xSatl4M5(6AWWCIYf66Fa?{O} zQh=Nd-$;@sL9OLMsvi9c1J9b1WU;<`kQc~DY9BXB<|p=5hOe`#TebsFzJu(_={qDZ zlq7QP;(Frn0As&8U)^x6TuU*pMn0U>of{`#`LYC=z;*1OEy3(fqU*M)Sf|sBn)w|B z1wZ+g9-JNKb#sdM$q~VnS|ZCN?97?RA9=*zH~gmmVgs;0JpJtTYtKG=^6aUzo;|#H z>D*cn+SlIjY4bCl)Exggg=r$KT*xh_R5^OxaF~=`yP1Tvmg7#cfI=q@BiS-9)2*5IpkF+ed2ahwl!QsJ@BISY1mX%lU9aV zP(yfRuER}QP*5ZslF$8>1ZK^cOkoQ&N92G&pZJe4x+V}LK-fA1zrv$_6l@C8Z+hb= z#Z1z~p|S^M`GVXEFq8`y$uK{&X3pK6Qa+q-o{1r8e}RyH%$y6bY>k$~kX>ZY6e@B; zFb4yh^uAFG&xLF8iQ-CGAu*GcTteX~{bfx}Rf8gvrk|7Ugj@E+PK25$z!wP62|f&l zlqHjJodEy{H-46dVRiWfo~vv^1rSAOC9)#ev4f~$i5ka=+h^GDl2iT@7*`i3{tqa@SGc?f1RAY4^VSGmxo&D-Q zRCTk`h>6ty)?V1Mf%9U?+Yo)9wQMb_XqjsI(c~zr#A&zHbA1ti`o^7W7cZW@bTQr~ zt_**fRZ0u+XmL%|ZF;;nHiN1-b?VBsTkrU}cSZe)+(Bv3Jb8eO_`}bZ9QlCZt#PG* z=Kj>2J$sJCE?+wDukN$ye(lCh4%K$nr%~p)fQ8yZX4&@OH7MU-_ndAM z!~G}=)ONMZ7o4`~spGyy{F_C!-RFMJ=e_UAcWUy?Qy<=O0SqtgoL;j#>eS`)uU4y( z)#;bL+`EP(-hC=^5R7YErqhSQW=1IpC34)vp)4VI7+PVnBK2fF!nTApUlz(HX-YZd z%%61;$|!m^P8E9Zjc+M}-zu|pgFx~jf}LyXn56Whd|UwoPIz_`@7Hr?l)r@~DKB_9 zTzrRiH|uKc|Lm+xiUpH(rRma>FzRhqhOln~tyvxzE@z)PR6r-l&cZumg^%cJi8C(r z>@?$?2|83cD8t>NMp4u=ODqgJ!!mY6d%}`7=j5_zZwFv*K~6 zaF3KIm*Jj7;oI9n`Cg+k^bAy3c8J^TiLZqx$oXXu{ZHGLzXg#;3b`_*Rs=%4Rh8~^ z)T_Wx0Lq{{%bNyGweq6=@kGQe>mnp>JRbyF6MgIsHoyRdRN0oDwiT~@1aPqZ`0zyJ z`cJf^MX?nlp1pqN{+8UD)HHc9+FtiJY9L%;+?<*rQ(YTw*+2Q-U-;nr-|OU&haR#Y zK_`z|1~D^XME#OhAI)o4;{YXREFdsi)~d}Y7x%Xh(~7Nd0h)_ryS!8b*qm&KNLXX< z5mu95*tdbA(=hFC^&+upu~m)xn?|YFqUBe8)t60UZ$WlbfKseW`voWjz*``Vy`8L9 zbCHDI;C#5;k&xMTrstJ!;wy1vgT-g^O6AC8{4zjwqZ4#4-%x-q6SuM^E|h?>)aUq* zUKG#;Q}YM-fXj>omv4(~XWf~vmmFKv%Df~U8q(oWhjfT;d-}bQ0U&fzc}pQfD^v?t z6k#kOOG%*=E=1w4d-ujNr_|ES=EQTRidyuApu7u`L!ntgBaBy=fh?8v+G0sb&*$b( zitR06=KXR=0QAIB*V&^&xemxy$L5iU96+DW8PZqI!w~TWh4C*$bxWjBpJV|np3Pz> z(y>a`kQi{k29APd4lsK3jrzvaNYPy6$JsIT(((k=S}T@Av9!ct^V^{xd-2TuO_{wf zsAu8LV`5FNlJzGMJmuC15MvRXJk{rOnQ0P+59eBg907V#i&kz?24-p$$_8s zc=v8nV^aUrM@GRCM}9d2h=($O-I&PxfuFOO7}m#vksOZMbW=5hPU!H)&;+!UK9`tB z(jZ&O$SDO*nfvG{jD-7=0Gz$?-_68n1Sc$luTdc7)_i7yulh66`EBEPZSw?LSxGFx z4)maykzi><;2qQDg7AM?B@KtP#{)agIJ`(cyMSDtZxl$l(UsWE^fP_9&kQ9<<7e_b zW1@KHEH{_?FtiIqmvs(fZ_ zU;;`CIY2j(FPz;y^~|Zy{WOiYElf5OSS7LkXmh1SjrtEvNTO@CI{50Z`N|4gjs@n> zDqJ|vr%kb%`rEH=6;joPty!R_|3IBf6>9@?PBwd+i`7Eog~c2XL2a-=JUkod3qbqv z1{=KNu#e8MK9Ndt9xKVQ{rjJMyFKNZ{lb1B-T7dP&bKg&dQo zS$LwZFfVkaBZH!d*|Mk6i@Ann_&u|`%^RW|Vc5ceH3wD@M7cG$UHJ>UXG;;fj}#qT)<=*Ziqt(9mXy94EO-!qf=`-96ywpC*)$d zC#*@43Z)If;1Xr43($cR7NZOcU4U--8}vNi#JQzxs4LDl@zWaM5-(>MA~!%YN$@6d zz@P*gulc7!wqEr%So0gnV~#VFII0#CoJI_wBS6h@r^QPM-Z_h*d8ni@I?Xk?i+9`4 z2R!~L(A6ogX{vj;rTS~@Y%`TqwUMA!-CN(jy(awSU;1U0$C5)B`;!=COHyOB%ltO* zF1EAPvx{Rzb)1Ulp|-}@!ylib)xe+jbG{7=^L3_qD0G;=dSoIQ$pBoH8-NO@batoR z;+XBHelmi6T4~6iA;Y-s@VH1iBx1@31v<#`F5i9U*(~5 z)-*K@Q|Ol}=Ru{>c&b=TNQY>RU&i)C2%~YD?u09a7Kv#_8i5jOo;|Gpe%h5*O*t=7 z5XsIAXMFZ6GEr_$Bi1YnV@XtuMRN&IlZjAVU{mFw!-rCgn}W71pvcN84VJkGbqph- zsA0z6Gi$R@l(C>}BvFjh)$G4zuR3uTGX!b@E-jybIl_!hFPfbOWIQYfz8J; z!Jw4cK*S=xvLAf?_VWQRn0M+)2Zo8R4s%#Nr+2(`*?#dg_+4~t1K+kT7l%eJ*2BGv_1Kx8(Dm4}^#nC*Oyr%qb5#M)D@d;J>&B|TfFk;-it z2RZZ(uLr;?ObR$3h%+yI>A|yC1uWit!c%I_E^?przethJkbfG<~9_-1lFgC;F!WA-@8hp0g22V z!e`GQj;$Jya3(d#Oh}hL=m@iBaV>#hZS?dKfU6{$VzighaB5*6%1m&?BYaqX??;SV zVu2YRfpaMz$P-R2!MhfTDV9eD5` z(aX)`9E_gUX8f=$8mRVYdq=7W08OFr1$unpr*LmvkDy_S5NV0OSZ3%6caEKKiW3T*XuW!{1YfaDLl`9wbVW?ij^6)*|ur4{B|eT2;L><9wMN+I&C!f7}``oEJcl9=2zzmG;+AjsJc-evL@M+5r zOrtrQq9@<|A3L7EkL#a;cB_NNvpEJ}f7t~OklnbXmrs#6YzQeLChQTyHy?y&SZn+CYNMojjw+XUD%9vTB?2&6PD~S~l zqQg*1NiuDty0&1YnR&DEn;9%cEOus(nAn@c!uS%e41^i+C7MmZjznjuquP$;dd9bI zsjpiL=Nh*@nc;*U79yk@s!%6nX;+58lzJ6r<`X=WKvw``2CZsMoVPxS3~3B4&7UZw z;#nk)vjvQ_xQ8j+LN@P;y+vKi2l_P}Zk1H)qoY9$edo?iyf7GB!h#lHxS2kijHHHi zkxb`1qLWz-k0j<3h~q001Aejz9w1hFEJ7xg=PDIbn*`WrY%iL}wd#yEw<-(fB@=3u z(}2v>_>x~{C+yx(fMRW;xUe?PM0 zbYEyqt5|>FNd=H!`+2^OEPdO3=)>Iw@uMzfX;OC=3wnp`|C}vc2HG^Di>T71mIKR;N0-uHgJMs9EclQSvwilS zcgnP)H+k|YX2uc|%?ti9q+holwis|GFQG(!3`W9jJ3AJ_pN&#+EzD?5u4nEZ4on!M zPo429DdgSeKj3)`!M`*Fcw7}E%X+&R$^iJ*@ZyIsojdc%ZKgTvWAMwnv|fm%W)0A3 z8FfUUQ?>_tP6g3;kk{ac-38!`@E3T%)w^7Ao7FE)5d-qb3;`xnX$QdAk;3MyEa@^% zTsBx@Kz1vZ@q-*ZC^}P{_?sjk!(=0j;p2`s@QKuRX+<{l+_J2IQ@ea2+kC0Eg)p7ogcbS$`TK&d7!gg?-TYAl_dlB09L$7YKQo&X>g1dN*h9CHv zI5px7QhfGGdiqF)a|GRSLrwlg9$9SGjNURCl?8v0K<3sNTs^Y{d2)szZo!vs-1Z|} zQoaTSVq|8p+q<*fO{B&qyi9FwA2Dt>=9DlxK^M*}xE`&n5ea?5wXspx#@C@~cDTd1 zrMp?dZ}B><^Eb32+@u+uS`FLf5Jg_+phu&Np2sf=kJ5*}t|bW7d5V4pDT&P;BPEN@ zf=}#jGNs~b(T2|x0+nV066#tGtM-_8N^Y)JMHV5!h0zbhL-Sq z`mbq=%b2|WmsZ4nmpCE)o93WOb5Md!9wBh2joIlkHkET9zY7qvnTiyFEkl~6Q!CEJ z!&>=>f;;erO)oGZy-JusB2ku+x9r=8Tauv>oZ=#wyab(6QZSi$3sSU_?(h6 zIT2TO>bV;?@7#B9w?tzO7&)ndu<2*e83P66 z4d~9-auvMcumdKQ_1TXG#^-)}Myc_8BnP$mDLoJjQB)2OEd$g6 z)~Qc_IW)9^Xi;vzq1)*wN+ZtI+Rb??Jv8rjZ+=rR1={YrXFePZl$xVXt1kg z3TBCEcmDk4fpYRqKlT$&u#94pULp_v$mft4;$O6^;tj_I|HO$GK6v}u(_RWP#)u37 zDH^EeyM@!4CR0q34|tg;PeHjGR-cTznI{>ur-;N10rb6KuUI%`d zuQ@hO%#BU~kL9u4HuugLEk00sX2spaqGrX+%Do9@k~Jtakn#}G0RYqw$Eosqp$IQ( z8`MxvN;v>F-knRwC@V+GR|wXYYBKz$G7>9tYf%tZaM2ihQy3%V_Pc`;b7t;9kZZ9B z*PioK6ZRX>x^L@_IhDL}b}#r?1;#TS0urMVGHK0H74{@7oJ1gOTfIa%V4NB#P;q*2 z=F0Vx5A_=v{lXz2m2TT03*odj%x$Y^&R2og92NhgfARxUy*uNVvS7s$4@HHe8p-fmWh=YjJc|o5OC$I&7m>_58-u=BURYu@QYZDrK38 z-|nG@d_GLxbm#r=dsmQ{*fz${;(X)Q@avG$J@_dl$$Fje`JiW>>FL>`+C+e0WxJ`5 zE)=9-ndFnOD*|Q;*2hJaEtD01q`gg|(<^G>_uveye{#@{PR*GplO2t8+L=-ZyGb($ ze91~#=g9-kCb=}hEGRKiVW(GG(*_#fJ$%(6>_prHWWxS9yL<;@)HKuI8q!F_+0jJi z*h1s@Ar7i|*{b1WkfL3XiXRq@x8k8tRRC?{g&k(R=`p)PCYi?#%Ny?gMVPm`^ zM4^b1?5)HoDQ0ZA2k$QV47|}IZ{q_u+~x^+{igJdFa;D?%+}%=R`|sSq$jPaUEj$(k9m# zaQnm4)lk_oqp)ilUMzmhF?UXaifK_xBQh(lJ$}_Z3l;9jvA#9?5+oT z`?41J*+Xn2cIKaP^~#V4SMD5s83(t}3N;XSJZV=9@hpJms48z{%Unq0@;_F@s6}g% zJ!(kHq!4M`s7!iXwCP#kA=t{ZyiK6c z{LM_pkHDFsl&h56vlPI@`IgoCUleAly&c>O{NoPzfIL)d^4*Y}84)0%$8k(v#lgYK z&x18jwN@G5h?60fJ{yxpXB>6P+svX$=;3ZKvs2v0u`;roJVPC_cjz(tVvn=Q zuauTpG)-wGD9(p3{t}+XnbLB3u5k|{0MnuC*Zq9=bNBSiKU84_hlc68@%(+Twq=ry15*~q+p zqo8r#yZyL83rK4~&92iUKrdfI*o^Hd-o!y6&s}k8n+A<8*i{m3GZZVV*wDU!3`HI5O67BEn5)jd_{ z?kT?1q|pl--T_5QH-PyHml1C&5ee{x8oYw&W{QP?`!1fo|8k>+UkBiqs?NpiraG2} z(`-SU=4a=D0?>B5&v^9{m+tbLzYwFsm>Gs`huy}wx3U2QOn|nHjpYDljBT8147-Q4 zAHU&qY&DO@tvrjK-p2^o1FBVx^E#c>sqwZRjk}c}!mCZtJJvPE5reB2zsPccUuXO9 zkH7sLDMq9c{c2vXSk)HD;oF=JbwvuQlm_ok-gDnfo@K0e?mR_M$ka~Q?H zdP>F_1roAgG0EL)Lli`H9PySKw4SEj3MJGfv&FB>m}H8nQyB;S?`MTgq(}M(y+=Y5 zV>uOtPXi81JhMdAJfF9$cqvSYEVSaOyt&7FA=~}JjBWyP*2`S-1+Aqu!!P(U==7M5 zx}|<_MuvbmCXCO7)uo7ohosj={HZYLJt)J z>3%6UYT*O(CJP&et0=$Vp+JF4InbDxw5MD@17n}$+;ffIUXQ|jPw9e&2sEFwN z@OlZKJm8W{(9EivZPhckGs!_%VRo7zvyX(9>{`Xd#+r-*q*%0X*6=4^z!ymmq2Ysy zd>+lQ%YluGK`Mg%TxCuOC*v3PV&^Q}dKN%+X~6FE)6br``|_Q;?@q+P#i!ZU5xjMB zXfY}BRu=kq?wpZ!?R*EbpAvfFi6`uZNnR;ij)3W}PXkO(1;=4JpQbmuzJYM*UQeOzZu`92m^0-ev$QjTwd5QNo8~h4 zGJC<6cc8zmTxTDJ#^!n2joPzsDT5{x!6+HPGJe=m|MmDgwX;B#6G`V9CpNLU)J_LZ zLV3|jhysk|E?_iI)Nkrr$}7OCx85c-Xs3Z9N`(z&kg!MXt#UMV-K)dZzMH*JX2uMcgLv-bO@e4HQ%ghiz<_c2 zOC;kbw3~vkzHxQvwhB)+P0mawau#Sae6nRJ4IFKGxe|cU6fK;990!}JU>yh3ge1Qv z?W88PZ?aObZL*V}#WS}NC`Qvoh>illvGvhhQ|QtT_>}lT;hAT4FMTnLjMQakYg=b) zuj%o^{S{tD{O;fV`yc!0$9~1hUF&99+z)(z&JUY!Cl&a=4YiHqfH~8mZi8D5YqyS0 z4^Q@|haINnG$xBVE@M1S(E^Hp>W@LHxlQT%t5OzP|61A|2eLKYJ^b(^o$maU@=x1m zaGI`e(`SaM0YIG(r@B72>2q-Lt`iq8pS*c9e+l(WU4LF&e2a-`aFcc7GrK$Jk(e}L z3qyYBD#5$YWdO}7M=NG!v{@Fd$deRiT2BUsEeL>`kT-|2Iwd7WJL!=j%WBix(q^HF zFjFHS_!wvY7G5+^1|ml&6tUp!F&w(>l%XR97#lS$PLvm#?S~P4Ex69BE=>XYSU5fa zc0h^0wT@l*%Hz>pK#lLQqmM?!kpKWd07*naRMtdjunQGKnh`Ly1j&p7J3J{oPuNCX z1C>b`yy%NB%K(fR_7c<_rbRQS0(g`K!p#mnJb#7zD1pEv;jEeA2WZwB(~IPj8=6NP zxe2HbXAMk5sZX9ppG2Qnz#DEWI7-VtMUnq!5Fg zZ-*GZ-&Ttn(cXRGs*dxOETxP43)^@)E!(egv2afJ15LH=`p2@Whi+GggRC~~34FJE z?3ItNlB@H*#PmVUDzXpK8ZS&;B+Tb+1vX+jdEt^@aqzQ39t!RmF0Cfl#Kodt{L)H< z&79~|-`oJNdBZGYXREANL9AxueH<>eBOXSX)N=^@z9j+*Z%|Hy8n%vBdY<;P1!~ww zF-lddXb^hS9k|{>^6CLNniNM$EMUqk+~i_a-6wQ2Ns%13$6I@xUvG4@3T8E~Bzhdl zTEDn+E4mVtm`D#PtcU!94Fkn_ue3Q%i;xW6S=3;n4!2ttYw;p2Ux4t4TFbEE%rO7G9>eX5tDdlTfd}|Mr-eUy;w0ywH!mk|5ie*l?yG$_!bhs`*mJf z+bU_C!>jTts|#f|9{AIKU!ukEMvcG2_N(8qy*zb%%;&uNHJ9%0 zLrXVq_~wVzxA?h{v6{~qordWlcUN7aOFdlOb=U6h%e(7W$QkFPpIJLA^~CKcU}7$^ zw4Pn69B$180`K)zH56MkOV6`o1|OLPI}Hekwx_d!E42hIJ;}Vm4@!2Disug~=>+;1 z5I$xMWf{#N{UL)A)r*N}!qjFM!CK>4xv=6?)J)%FzFb4Ya#pID9|6Aw z(Rxr@`nJbSz2eT`K=ARL(x&*{v=PqXQ$&uz9#qF5nXTO1*_H+Lgbz#cOV(>6Xa{%~J zUfdgu-FL~qjDlzh3q6P$N!Y4@{J5VSugsbxwARL8`NF|wv_g_ZYBA2O3{a|r!fvP}ZQ0hN}=(|P~i2|zqT-^t-T zGPGG!lu&e=V9+Z`&>dr#o&bnZMQvj65FWoM2`Ya9hu%w}Rj3^1H6hoN2_k?S8d9(- zi)_L^;W-D8WJB5gwB}tCc6$s$5~MRiiE9Z^TeFgUnWc{5MoWe$vsy6UIVzi*MkBv? z%omh+Fk=M80#A}{Mj{hP87+9QqTWRPEA?AbdYZZp9b9IE- z)DBh%MSK5>&B;AKIidsLBvxwSkFR?jSw@%aWS2{G}%Dz9D zF9?0;2X4V^Atuev=hL$cyBk2vl>r3U;uC{zjLA`)NcJZHX0W0_v*?ltLsMy~v^0Vd z%OaUm)D*bss}wcu%1ezp*>B`v#wc6kQg4`-7gN#59v%j+FWK>$79*7~7 zyc9yl(foxY)nUn$Pii%=1+#27`=R!%x z;+zN2=$_y2$ShNR866QEV$>!QHK4PW9*=ES)|y*6(#;X^%H-}xYT3e#QI@5 ziVexNCD<|)bAUue@VrXCkGr~d@qv3Ued;6kyyD@05j|gXdUx&i)qBsL`SeHP+_2BF z?U?=#uBhnGHha`oAj$CAVTJE{=R55$-`y7nZhDM@zHF_V$)x%IwcGkR1LDv!r$XIo zGh=TEEGT0`k*!6$*|w@FJuK60HK0_}z;6A`aEH|!h-te3??G%eb=!v0|8US%%iqQ@ z?9Kmu5bnmz(kLtU zVvzu!VrOABF9XRu5W9kRuNBRzhjW|QkN(Mn4356DI8F=MkjzE0oik}Me4dIa2O9U( zjX-oXOnEvapo<)&G1i3AvU(m>@M2i7J>`+$@f6&0NfB6GXPu0(=&g4w=3<=AL(+WE z+~F^o^PtzP8z4^iOm#d$alg1D14vikk{53+VJXY_gS?ZCU~-}vwQlZa=A*oks*Hfj zzedM$-TwTeB=9Ky8iGhwyI&`uBsp9<_o4@W<<^})^!NYv|NWD1J@v$=oI7#lyx%K% z_UYZdmvBH%wprwcOMHRf{B0)-$>6uS$|u{N{G|`P>z%*gBo)vB&Nf<;H4dg5l&#|i z^bqy{j0gSe?{Eu-i~aw~k5^azyzLmseceC|kv2+@cvoFz&Ww<)`s>1euJ@JoisG6~ z_10?P@z7(h_{q1vNyU5L`}3dkS)bl2aJt?$z_Q(q1JnQcEY4sFyO#I9n2T=k;&-|n zfZ}m3yu_Bh$v9~SrZd$N>@j|3NbHhD-ltH>!kiRcbcaTk(}EN8W32SW}^bV*|_f2I(@#D9BkvmL&8sxMT;5}EK?T+C6 z54_m^C=~7+@&$u$fW{h!`}^9xT?{vCF?>;a)Ie$cO81U$12q}!w6H z3f%BN2-C23184B7$LiUB|G(1xXe$l)$}j(l@#MQ}&qP1*+xhPgu=*wMIa#{^RD5`) zS(1D3Axi4oA#`PK!eK)5K1wDU(|}@dafmr{2pFVbs83nl^cTMrD`J*y`cY&VLovq? z<%2Ujl#g@#C(L5TjLRf)Q>+3wyJF5wyeX}qbVUzEea%v+(XMb-_$vEwnoe?Jn!!t( zL}Z+lzj`{G4WdaMm$5$bEtIi-(KSC*lY$~#O%}M39F9V@STZV}*Us!p7+4B7vLP!0 z@{z=1J6qSr8V&D~n;WX;4n0M1T~dR8+T=?SVa;+}X(_c_hqubMB~5a#vJQA-dru>B zrA;Le*`f%hsso{nL$Kqr^I(SO7PPW!nURZV5Hj10Sxx$EfRP;0#-(x!BVnICJc+^} zDGjscWFm<#fd!7B(qKj?GvbYcXMPd)$`dLF%o8TMfD|CIIdwzTty{iK`PfVT@IU_- zS8m^a`Qx9ryXz(Y)nEC`czo`KFF1JWBX?fhZM@-Q$7MNGH2I=s{yP7}P3pj5`D(^T z*N+JAUi*b#;Ic15uT9^zksTHcNT7mt4B|RHbQ8Sq@#lXbwTyLUXVLbU)s9 zoE}(M3Pyu>pZO`9zn5tJus5(2}}YkePu0nD`8FJ z+>;AtK7cI@?_*z4IolRLLnwt!`Di7@XYYtggBL__@RxL91P2KDDnBXotdE1Ksg`Qf zn=P^JvwF>oqnM@A%!0kd+clLmoVXZ!MDg$|)hQj(xJQb7|BQE=w!UU+Uc(?E?e+)@ zo*cYn2(sK${ z|AMDKbmhwmht@8Ms5`lA=`f8n)*>%Z$CfA8**N3K8fu~YNOz((9Q7{}agKL!+_ zDOkJ4pRE+cSkI0A?@oO27k#lyj&{`^>vP0o!rs4~#aodec)ZUFSu2qpBL zZrTJDP%X&w1)dI|r_@|+_o+iZjfO%?_EMF}`6=~jkNWhRAhc8PU+SKBr_?+Tmja6{ z6tnUulkQU9Xcf{^^=zT2m>*$*p~35wC&Zmf+bkM1Ce~*u{T?!R!%YCi?(zpYjwUO3 z(n388wWJPUw6pwhkP+ zat-K%<-skEfMemvM?_kL_pJIi>kB20BXN)zpMqtCEG6M5A~Q<@NLFRo9?#%jS{bg> zIOuV68k4jcRtV;g31u4Q*b5*hZeBOLcNE& z^T~H#K7C>L#H&)KO)U)!h1j*<)NE$6FWDO7u%97R_>m8M*q*!kRbT#vPWGSz0;3VTvXKmRphAq2C4GFb1GNc!)Dvb9*@SG=9QO@xJcM-Rpbb! z!R8*ag{s=7dRnfXqIGiQ=kD~%&=34j&j_DAOCu;*jfRK8vALxCi;z8ljVFbVSvxs( z`M%w?tGZnDlkDlYDz2K*t@EDH`9dLp4#nQC9Pad>H zuHb|l7}PMAPWNjn!|4FnQwxI)v#!tpmTLJ_P}dHbA# zqDj2XD)NOM8tiF7CTJSO)PO0~IyiOfrW>&a%30_rm4aR=7_Rnk)>xl4Oq(zasxP2~ zO|CXZMv2xjSxyE)cSqxM(ne3qcbsbIw+eyT-Et^AG?y8hU#Z{HX2cVQI08~`tDhzD z=|Jfb|H$9yZx}aH+{-ZQT7GfNzyRUXoFM!#CtnyN{NZw{bK;p>x9@(*gFpW6cm16o zd-K_sz3k~LPo25?+!Y^O?8Tmo-}Mjw!S1skKlAbja~%5G)-LHB-wv-fm7Y4XI&tCj zMdxpP^IPoc-u?GjS#(1G+H_kcGvZxEBlr#89O7YZ56fnZ!9ZEXtC{1-;iz5K>`(iB zqvK}-b?vHNt+MR_eOMc~aY`f0ifg^~n2W9Hpf$TGsL9$+#DX7x>wmh%NOjKmYBsn{ zBZKyL99T`Zv@2fq|Mp$yPd|6FU&vr;g%3FXe`X+hkokT>z*9&zd z%a~Uz&xTm6s~iGFmCy1(lZ>+`!F;7Bljdqw&nExk)wqG|&6g_Zdp8zJ1Dbo-cs@Qz zrPwEcszN9`&VCHG^67D4b}XeIL^KVe`34YEb=C?V6Smo>EP7eY3%85p}J5^!fN7_`b4<|N)S z57go~if}bzlM(fFkc5rabSc&0qi9)o8F(G^_2g4fdj6`^42tkQD$0=J7iZSW@vF*rSjuk?DEa9+dYqgE>JOCq-#4`Wa zVGr~;PKU4t_|etAA1Uu4G`20{90+!+U>$MwuzQSOmq%rFodyrS^randfAH$nr#gx9 znoXx^(wIlX;&08ch%PJ;*_NLxeu3|S6LMxGwWWS+a%pO-*eXgy<+ycgG8^g@7TcK^ zEB6*D%Sy*s*3>eXX28_hS?1|S5NW%_g0(Z#oD79&%fLIfzA!iNIGYo4=BzP&2iof? z&2@oiQHGdcM#T+)LK7DIUSI3EA-Z0`R8X=3barHydBe@9L(Wbb$)wCb;@nF7OBAxn zp;RXVnhxsgYLv_`Lt^JlB)63jj#;oWCn41GB?qZaV_qU$aGw`s}~>qyNqB>G$m}zVzGw@!#7$`?M@X zq!{^3XpO(Nl*oR&+KQ%ZYI9?|-PN17-txwNQ2egTk5(MRmM?R9*mcyk%EOYh!_~3t zs%M+B#J;awy}R=NI6nIZN2U9c(V7k3bUQp>!vfyPkQ*xXo4rzh^WQ-;db9!E!`|?^ zbF%>Tb-(_r>}|K6YerE1wQc)uN5hAD+?g$}U_=@g8+WH)`pE9;)e`06o`&*3zartO z^k%^6noOVv%2+?+6a8po%E?i%H8A)K#z5PL4grhOlabY=Cc4dh#icUN4$R9S3_y-vUS?-6v<(Cvv@&`h~Oi|~-;FPH&Up>Yk&DHyJ(4JW#5K>VVHV;3Ge140XWJwY#U zhHn%a-5m!TTw-?KiSmP8LJ(3hriT((Q1P!O<4%TqMiY{Y!ZY)49*-j?I)I^b+!OkH zF%IzV*0(ePH-yCxjc^iITb$FPzvwEA`=RBGnolw`Oe8m~9K}eVH4s>qmYDdKXxE)L z#*oqqK*AF4P2+vA88_i>@&OKFjY(3TKa{=0K9}yYUZwtdx1 zH(&F}r~K)!|Bbt=9|7#!{<}Y7@4bx{e#fB?LmDP{NK4TDx21LK%qey8fc&rci1xF_ z{k+fbBRUmsZAWPP#ska6^xhhz!3&y#eJ3aT5e`qFpseEUpi%8B-M0PN{5cHOVA>mJ(13N|`OKS(7e?4HOYNtDc2=KB#`hMfpVWh9<%? zZA*0GbRI36=x&#-%$F6iahIhaW*Y}`{;Ju*>RH1~wV%S0UeY!0Nz8*u$!oSb-CEQ) zjyu_4^u}M~GL|$bHzto>OX*ogPu4D%I5Df28?Lb=n;V+IT%=}Ih59VGDO7TSIxMMp9tlR8Fc|vEP4tta$t|Y0lwlI1w%{tN z8b0sAORYB*C$r#Qv^4_k^+#adrfasy>TMx~|Cj_~tD>cFr5)883^%QzAn7o>cHoa(tt7$)V668vm`xSuVmmvfzNVUvl^+_t+ zoxmm;l>7{keW9R5ytyq}AnvInrj?aqV&Aq0*cDVp>{J;g?!JqP?h$wh5(HEv4{EOy z%!g5o7%`c8>jl;b8A4{nX`u{LI6mmlG8tQm4SnCYq10zA&0xSU5gxV|g^47RB>DM; z3{P8Dvb)J8#C#Oy?lh>ARkiFE$xXU>v)m&;i*-%t12T&qYZhMePtV7;L7RCyWZVQP z_=f}L_;n)ZJ+qi4kHZ1e=;b_^Y>oiQSP~IMfU++VZWc3S>aIuRPXGw2d$b{x7j#9K zrAl%9;ARxEDSc0#{k}K8dAGZA@y^vh^3C70`=t->Zrt1*xPf=+*_)?#*FW%If903# zc4GMLpL^RoaK#fK`eq9K3rKrg2X-`NQ_zlb_4&-*`#v&L;N9-azVtJvaACu^ z>#ble0>1|6WI51707job1*^@fne(+fR;(@!n8S9mE~iaOeH@C1@C`R$HE!HPm$hIV zRv#OBnoZLMxjix2E?it+6F>3KfA9@o_v`<23+I(?+kgtC{RueB*~QQP%^2Z%`|=C; z?-N%&9b~4y-_(?yQ7X0|hP5~Z7=i!qo=GdBam+!k%=fVHNWqd_XK_7~!gpac*aX)|!c2_{+ z%<&0#5X$AvY9uNv>$^{7oQ!E}LHW(MeHPAwg_ zU;+Xncs~dr4wJa4oF%LVgxWIl=$(m4H~wngYNqCVsr@{N06Qhz2^vGA*-$Q4H+b`H z<}=&`IPg)3Lo=D-Z(A-P9uiDy256L$06L)=PQcDr8BoyZrw+~>oZWr+L;w1B{O0d| z)60MD=YRf7E}z}K|Dz|)LrjCKmwYVrXMXYb{l>3*>>GdEM{Ydz&ENEmC_i_ucV3bq z%0_3qYzytt*4b51b&}of{_PujK-TuMhaa-1tx9vs!LVD~>b+f0?@F8uVDN^Qanv^T z>nww*@Oi)%LepTso9=Mh1{}Ck_leyx{aCMcdRWrs(O4S+dpfpOb4hb13~no;l;q7m znP8*9dnd4XSo2|MwYG)o99O~GE53d2C65N|&Ycmsi<=&nD>L^hCsh{y=Khe@J(5M^ zbNg1VGC`fGtdYicS#3&6X<;c1zH@Ny)I3YSq*@3sB=&?HJ1=$cEt`UB>BvGp?W09H z&@KRIUH)R42?BKM3&nH9|@ije_8#fC`J=nilZwbPPS)K9e zK8*Yp8GoMqc8Sxm!3dc4qj(&ds6IG;Rg-lRn-6En-E zK)_6aK1(ULMx-(I&m(c`Bfnq`{@B{Hzs4T4={CcKW;bL)GaZLRtM3Kk1g-h3ri|N` z4fM7|^O@F5NNa?ZYsUVve_Y^bc-S6k0KbZo2HsG@Vlxa-`xO>!DGKzAqo(lz&BzN2 zm-Fsa7R1+_K6C2kQy+WL<;#Ee>wewtnd?vg?0YVM>fO&e;OC&bGt4*cYnZ zEPV7JMV`&^LyHb6&*!$!<<4?Hm2rRu{m74HXd#Dl|{8ri0n1}rVP zc+q!P^PNBaQ++$g9ks*uG1T_F0jDwu{)4e^kRI$#Kk&lcjc3ZJ**~=x;V1z=Ujo=V zV2Pz_jLNjqC(1&DxdYHd)1_K7Y%1g)AdDtX6iqWmEh)Wm86C4+>j)IQ@JMiF0N|5L zGiVWo@>5C%pTkST*P!u@8lLIj%!wDyUbE0>^1wkyq?}>0 z7}1@X*7%q{(T%5yt=K_FMv{hD0l)5Gx))U?6FY>oDb26mA61td<1cqa} z0@FsH31ui)v@ivAxCe3AMnPr!@^!IY8L)rJDv*ue|EZl_fM=|+eKplC(8;Dg{+y6g zfogZprMo`kv;DrH*91Olzs+i$X}HoHBWS%rcL@9pQ6n2*Mo61p_~4yu*AC8H@GP$B zyHHEf1qbTkwmgO71+sQ=RzaC|S#r|^YlOvhibTi7tXkxYO$#&X)(1pMfv;!oDObps zplU+D{Ptvh*HVIG3O2f?T0HWfTl2giXCsWeuFo`a1Cg3#6J-!=-k}*vj>JG}ttS{1 z3oFftQ(Z>K#4QM}^)a}Ene8)3F*?``tEIz$H?XZqh~hb?-Qs4Jh(CR{K-)<&%BSmv zf=>IjUk0M({Fr&_i3k?Nw)3C7s+CjNatc}6e8K}@K86Xw|CC?*jZH==;F04zpXn(I zy?Id-!$CtxvO{c9wx&#Q$Px7wB!tzliG01}Jhh_=Fe#Pj4llM@6DXqBov zb2}XyS+$xw(Pdh%!`5*t`9vsdfK|S=J#6&6lU2Ez9}>{X+MFCepNptH+(x#Q=(8QF zJ9Tru8t^5b-ztc_&VEll7z01hdK^K^+(Tpr9CF9K4sH)W{@j&krPoAM8o=I4f0HGh z)WI#nULK*FR77Yj`f>W~d-RY(<~5rl6fDbzyEY9aD3Mw`X{|jCU;=D`4!5S{&u}o64>%qy6vyUZ^Vw7FX7?{Medd+ABAd& z^C&aTN$tm@mg2w*u{|oAeb8yXka>bNOc`G4;09)PB+KyK71_4QLT0RKDTyqi%yw*r z^IL++v^k)4Yk;*4?OfaAcx^x*SIGgAn|e9Q1Phl=<4 z3g*sVLAU7@SE#gf2rkVF=u8aMpQLV|@?||;UU+tP9ssb|C3 zx}NS!prfK1^fwIqQ0 z)hcnlKN&m+#L?L?h=-?>bp&anVF1i!qF!5<19x`&uG46GYS-;6VGYx|iL%?h`Zcez zSMknwJ=w|dYU?ov<81s}I497}Dnh|u;@q8h*<&ZKUkx{`WE#DXn!1fHr9|no#JH$g z0!tlv1A#=w?JwF5Q%YN0bF(HxkWV+)%qoh+hG`^|Q!Q2=Bg|2<-iFD0a5rljk20!M zwjABTjb?V6jp=a}35=@##! z8uwa)Zp;{o3)Tlpy6{rjER32pWQf5;PiqUZsSUG}XF(Z3Gr3l7c+#dy2=#+eI7LC^ zIo$+8hvLpTg&0WBco|#Z~QSw zA+^iHO{0ceu-0DRg~6au)p*YPUJM8wksniN(Ng)y(z1)x(>^=UR{U&Xe~iE3yv?8A zALch)!Fx2qIIJ<>oK=wsOPP8Vt!I}MSU1egu4>i{|D#57cyE z_)rA%ERR7Za+mp2UA&O8qPp~!b<_Sv;v~Q`h|ovrn$IV;C5QNiZ~#(CrJ||TM#Gyj z)Giofh)R1LqzZsS#?X0}@IJcudnSnA8%NGe`7t1dU~(RWl}=JaIygVaA$ANW^(E{R9(I zH7p=WU7Di6dHj6NPdmDQ(_C#0(7eA%;!urgxp)~3u{Y%$)DuqJjr+VRJd_YE>*4jkdEJlf4ti7QrT5=&p9dVD zT9dtG=a@{7HrQ5O;h2VN}nMPdvX_JZ~PlRP~UfgnKz$+yTs?JCfTRnq*lj(!=fM_9+H zC@WG-PMLj0K#^bCU7+h8Sg~JkYT<#MQui^Q=loc(b}ejk0uZF#-3B*X7V5GHNYEv! z&P5HI_^K%9pDg`_hhkXPuy5SDWl<^zGE=01T==Bs@Z*>`w-C(=m{6vq`&c2v zG&dmy%qa`0_pllTIfta1Ysj(1x5z;)3RNXhj{;(x%)puj`!t9#SeR?XW!>1@xDt#E z3dp8Aty9Qy^0fwHf{5#)EAJE~FIf;+jeN)N^_0sqn@QsCh4*{_C}dYB}awTp7#5M7tbDCzeXPp z_DW>>+8C1sreQKD-+g?Sy-X8QCw zjZS%4*+g)2Ofd^y>j|C0T&7udJXm=~MN!a5J>H)Y^ZjHP9;z5Oebkr&8jzWei6jkn z>>hnMu`?Q4D9a+#xV*>&!mud0<}2L(<_ORZ2WGgE@Ip4ish-(;M3h~(B8d~+j?|;t zOrEus18AWGlVTjYsbNV>wWy1!@rH@3t*K%B;U})3%L(*C(xGu+isy9$30$@SfTt#K zDCbdlCOg>~2dTkHztG(DhJPXsSrfOZ7w`pXV0iP^EJ~n^2TCp&5=}h@ZAd2PD9%Ua zMpNxPRu5{1*qZxkWxdGSA|@j>Z{9bH&Ytka;hvk&Cdw!2f)IoT8myZ4`8Z|?r zvvx<@6dhfDlC$IO_XAJa5@$VP>FT*vEYGknYW%_BXs0T!+NR^2&F&D=>dZOj=%0Av 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 O0000 + + diff --git a/litellm/proxy/_experimental/out/assets/logos/sambanova.svg b/litellm/proxy/_experimental/out/assets/logos/sambanova.svg new file mode 100644 index 00000000000..1c3ce8052e3 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/sambanova.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/sap.png b/litellm/proxy/_experimental/out/assets/logos/sap.png new file mode 100644 index 0000000000000000000000000000000000000000..7d3c4604c4cd1f84c57fa9bbaca4104f5ead66dc GIT binary patch literal 200176 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

om;3Njw&OxR6W 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 Mz3!j!Yj>RbKdyBw3jhEB literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/assets/logos/search1api.png b/litellm/proxy/_experimental/out/assets/logos/search1api.png new file mode 100644 index 0000000000000000000000000000000000000000..e9091d3668fbf333814403bb6880a20fb303c9ff GIT binary patch literal 1549 zcmeAS@N?(olHy`uVBq!ia0y~yU|a&i985rwk9x(jrs)W5g*epUDf zhu&~b$v2kmEr~zBW&1MAbG2VtqH5gpi*M4p*gy|-x|CHYmhL$wvD%#BPdOc<_Mtzp bWdHv^(naaL|D+&JAcw)z)z4*}Q$iB}CcpQ# literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/assets/logos/secret_detect.png b/litellm/proxy/_experimental/out/assets/logos/secret_detect.png new file mode 100644 index 0000000000000000000000000000000000000000..b7e09d330775a2b0f17b2b629d2e5a935b934b9e GIT binary patch literal 15590 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 + + diff --git a/litellm/proxy/_experimental/out/assets/logos/shopify.svg b/litellm/proxy/_experimental/out/assets/logos/shopify.svg new file mode 100644 index 00000000000..fcc7547269d --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/shopify.svg @@ -0,0 +1,4 @@ + + + + diff --git a/litellm/proxy/_experimental/out/assets/logos/slack.svg b/litellm/proxy/_experimental/out/assets/logos/slack.svg new file mode 100644 index 00000000000..801de4f70c8 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/slack.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/litellm/proxy/_experimental/out/assets/logos/snowflake.svg b/litellm/proxy/_experimental/out/assets/logos/snowflake.svg new file mode 100644 index 00000000000..e88dcad650b --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/snowflake.svg @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/soniox.svg b/litellm/proxy/_experimental/out/assets/logos/soniox.svg new file mode 100644 index 00000000000..7b7408401c4 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/soniox.svg @@ -0,0 +1 @@ +Soniox diff --git a/litellm/proxy/_experimental/out/assets/logos/stripe.svg b/litellm/proxy/_experimental/out/assets/logos/stripe.svg new file mode 100644 index 00000000000..ac16a6fb170 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/stripe.svg @@ -0,0 +1,3 @@ + + + diff --git a/litellm/proxy/_experimental/out/assets/logos/tavily.png b/litellm/proxy/_experimental/out/assets/logos/tavily.png new file mode 100644 index 0000000000000000000000000000000000000000..81dcda6b0d5762343c7e4e61e7cd03d676fabc9a GIT binary patch literal 30986 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 + + + + + + + + + + + + + diff --git a/litellm/proxy/_experimental/out/assets/logos/topaz.svg b/litellm/proxy/_experimental/out/assets/logos/topaz.svg new file mode 100644 index 00000000000..d8efae94340 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/topaz.svg @@ -0,0 +1 @@ +TopazLabs \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/twilio.svg b/litellm/proxy/_experimental/out/assets/logos/twilio.svg new file mode 100644 index 00000000000..3517a2824d9 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/twilio.svg @@ -0,0 +1,3 @@ + + + diff --git a/litellm/proxy/_experimental/out/assets/logos/v0.svg b/litellm/proxy/_experimental/out/assets/logos/v0.svg new file mode 100644 index 00000000000..aeada8b7ebe --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/v0.svg @@ -0,0 +1 @@ +V0 \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/vercel.svg b/litellm/proxy/_experimental/out/assets/logos/vercel.svg new file mode 100644 index 00000000000..97316223317 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/vercel.svg @@ -0,0 +1 @@ +Vercel \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/vllm.png b/litellm/proxy/_experimental/out/assets/logos/vllm.png new file mode 100644 index 0000000000000000000000000000000000000000..6026ec741dcfc09c0671d1b18bf27028f0ac496e GIT binary patch literal 1167 zcmV;A1aSL_P)000D5Nkli`4GHPV7LsQis!-u@WKN;Far$Cq)Z{U zlT0t+V!J6x<6v99NGnG6ptyEcdsY^aJLBJ5NsanK+i_sRLEDqx>g^({cN?@TYPK; z*aUsI>ka+b^8QRF$ZDp8F%Gz8Rs;}&ez-%vyyZSksZ?+~F$kzP z&=Bvf~3=a z{C0KXks#%gak7L$hoVc@f@^gI?WFH z>lhkb1Wy1^LW4Ixfc8wMT;~X0^L7CC7B++}Kwf@x`iD@dJHSXuAgg*eoo1L&A5cn( zpZXZs91ZvcSk){Irvw3->w@Cs-0NaC{BrcLg(j^sjl2P}Kt52Rc>OxO(J{(gJAlqH z0XPK6xi>;=%tOjG=nkMHomJgoTIf+Y$|`u{BY5yA+f``fz`#Kl&>?wFao@d8N3|*dE})5K-K_7lu5!Acj3!Xg<}VBi#!&{Cyao> zOn3kNYj?CwSWA+b`)rU5i z&+u6wpYR79Y1Tv7u0kh(z>`Bx+#42U`I=}3!_xh(W3(+cqN z1oMT->$_kJbRpAGaXOJmgd0Ev$E=eXv(-cUN6_1OQ?M~25HQFS9?6(1b&d&8fSm)- zh~}Vstcv$=ct|M~+H^$@8aR zV?-uE@$!T#Ts5pg8FXd@_%q?&u>y=YlwM93BuSd4(002ovPDHLkV1jT&BBcNT literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/assets/logos/volcengine.png b/litellm/proxy/_experimental/out/assets/logos/volcengine.png new file mode 100644 index 0000000000000000000000000000000000000000..6dd6c0ebefc74abad4d0a726c9919c7339d6a48b GIT binary patch literal 36944 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%0DsRE-q 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 literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/assets/logos/watsonx.svg b/litellm/proxy/_experimental/out/assets/logos/watsonx.svg new file mode 100644 index 00000000000..019b9c8096e --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/watsonx.svg @@ -0,0 +1 @@ +IBM \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/xai.svg b/litellm/proxy/_experimental/out/assets/logos/xai.svg new file mode 100644 index 00000000000..9491b192fd5 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/xai.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + diff --git a/litellm/proxy/_experimental/out/assets/logos/xecguard.svg b/litellm/proxy/_experimental/out/assets/logos/xecguard.svg new file mode 100644 index 00000000000..060718dc363 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/xecguard.svg @@ -0,0 +1,4 @@ + + + + diff --git a/litellm/proxy/_experimental/out/assets/logos/xinference.svg b/litellm/proxy/_experimental/out/assets/logos/xinference.svg new file mode 100644 index 00000000000..6520116fd15 --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/xinference.svg @@ -0,0 +1 @@ +Xinference \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/assets/logos/zapier.svg b/litellm/proxy/_experimental/out/assets/logos/zapier.svg new file mode 100644 index 00000000000..8428ba82a5b --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/zapier.svg @@ -0,0 +1,3 @@ + + + diff --git a/litellm/proxy/_experimental/out/assets/logos/zscaler.svg b/litellm/proxy/_experimental/out/assets/logos/zscaler.svg new file mode 100644 index 00000000000..2a95cb02aed --- /dev/null +++ b/litellm/proxy/_experimental/out/assets/logos/zscaler.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/litellm/proxy/_experimental/out/budgets/__next.!KGRhc2hib2FyZCk.budgets.__PAGE__.txt b/litellm/proxy/_experimental/out/budgets/__next.!KGRhc2hib2FyZCk.budgets.__PAGE__.txt new file mode 100644 index 00000000000..952050fb882 --- /dev/null +++ b/litellm/proxy/_experimental/out/budgets/__next.!KGRhc2hib2FyZCk.budgets.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[359200,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/038lmn5.g6myc.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/1560njdijg7fq.js","/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/038lmn5.g6myc.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/1560njdijg7fq.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/budgets/__next.!KGRhc2hib2FyZCk.budgets.txt b/litellm/proxy/_experimental/out/budgets/__next.!KGRhc2hib2FyZCk.budgets.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/budgets/__next.!KGRhc2hib2FyZCk.budgets.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/budgets/__next.!KGRhc2hib2FyZCk.txt b/litellm/proxy/_experimental/out/budgets/__next.!KGRhc2hib2FyZCk.txt new file mode 100644 index 00000000000..55176f9118b --- /dev/null +++ b/litellm/proxy/_experimental/out/budgets/__next.!KGRhc2hib2FyZCk.txt @@ -0,0 +1,7 @@ +1:"$Sreact.fragment" +2:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +3:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +4:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +5:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +0:{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true}]],["$","$L2",null,{"Component":"$3","slots":{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@6"]}}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +6:"$0:rsc:props:children:1:props:serverProvidedParams:params" diff --git a/litellm/proxy/_experimental/out/budgets/__next._full.txt b/litellm/proxy/_experimental/out/budgets/__next._full.txt new file mode 100644 index 00000000000..de94a31650a --- /dev/null +++ b/litellm/proxy/_experimental/out/budgets/__next._full.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","budgets",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["budgets",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[359200,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/038lmn5.g6myc.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/1560njdijg7fq.js","/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/038lmn5.g6myc.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/1560njdijg7fq.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/budgets/__next._head.txt b/litellm/proxy/_experimental/out/budgets/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/budgets/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/budgets/__next._index.txt b/litellm/proxy/_experimental/out/budgets/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/budgets/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/budgets/__next._tree.txt b/litellm/proxy/_experimental/out/budgets/__next._tree.txt new file mode 100644 index 00000000000..289965fc9a3 --- /dev/null +++ b/litellm/proxy/_experimental/out/budgets/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"(dashboard)","param":null,"prefetchHints":0,"slots":{"children":{"name":"budgets","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/budgets/index.html b/litellm/proxy/_experimental/out/budgets/index.html new file mode 100644 index 00000000000..6387fb48c21 --- /dev/null +++ b/litellm/proxy/_experimental/out/budgets/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
🚅 LiteLLM
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/budgets/index.txt b/litellm/proxy/_experimental/out/budgets/index.txt new file mode 100644 index 00000000000..de94a31650a --- /dev/null +++ b/litellm/proxy/_experimental/out/budgets/index.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","budgets",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["budgets",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[359200,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/038lmn5.g6myc.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/1560njdijg7fq.js","/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/038lmn5.g6myc.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/1560njdijg7fq.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/caching/__next.!KGRhc2hib2FyZCk.caching.__PAGE__.txt b/litellm/proxy/_experimental/out/caching/__next.!KGRhc2hib2FyZCk.caching.__PAGE__.txt new file mode 100644 index 00000000000..1354285d45e --- /dev/null +++ b/litellm/proxy/_experimental/out/caching/__next.!KGRhc2hib2FyZCk.caching.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[254709,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/08b3bdf-s.-y4.js","/litellm-asset-prefix/_next/static/chunks/129bujhdmi9ce.js","/litellm-asset-prefix/_next/static/chunks/03rcuw-pknh--.js","/litellm-asset-prefix/_next/static/chunks/01xm1xt.gmrff.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","/litellm-asset-prefix/_next/static/chunks/0ys10755n8os_.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/08b3bdf-s.-y4.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/129bujhdmi9ce.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/03rcuw-pknh--.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/01xm1xt.gmrff.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0ys10755n8os_.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/caching/__next.!KGRhc2hib2FyZCk.caching.txt b/litellm/proxy/_experimental/out/caching/__next.!KGRhc2hib2FyZCk.caching.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/caching/__next.!KGRhc2hib2FyZCk.caching.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/caching/__next.!KGRhc2hib2FyZCk.txt b/litellm/proxy/_experimental/out/caching/__next.!KGRhc2hib2FyZCk.txt new file mode 100644 index 00000000000..55176f9118b --- /dev/null +++ b/litellm/proxy/_experimental/out/caching/__next.!KGRhc2hib2FyZCk.txt @@ -0,0 +1,7 @@ +1:"$Sreact.fragment" +2:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +3:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +4:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +5:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +0:{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true}]],["$","$L2",null,{"Component":"$3","slots":{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@6"]}}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +6:"$0:rsc:props:children:1:props:serverProvidedParams:params" diff --git a/litellm/proxy/_experimental/out/caching/__next._full.txt b/litellm/proxy/_experimental/out/caching/__next._full.txt new file mode 100644 index 00000000000..3c853889b21 --- /dev/null +++ b/litellm/proxy/_experimental/out/caching/__next._full.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","caching",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["caching",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[254709,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/08b3bdf-s.-y4.js","/litellm-asset-prefix/_next/static/chunks/129bujhdmi9ce.js","/litellm-asset-prefix/_next/static/chunks/03rcuw-pknh--.js","/litellm-asset-prefix/_next/static/chunks/01xm1xt.gmrff.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","/litellm-asset-prefix/_next/static/chunks/0ys10755n8os_.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/08b3bdf-s.-y4.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/129bujhdmi9ce.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/03rcuw-pknh--.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/01xm1xt.gmrff.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0ys10755n8os_.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/caching/__next._head.txt b/litellm/proxy/_experimental/out/caching/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/caching/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/caching/__next._index.txt b/litellm/proxy/_experimental/out/caching/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/caching/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/caching/__next._tree.txt b/litellm/proxy/_experimental/out/caching/__next._tree.txt new file mode 100644 index 00000000000..f919b3c63fb --- /dev/null +++ b/litellm/proxy/_experimental/out/caching/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"(dashboard)","param":null,"prefetchHints":0,"slots":{"children":{"name":"caching","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/caching/index.html b/litellm/proxy/_experimental/out/caching/index.html new file mode 100644 index 00000000000..4ed6c656528 --- /dev/null +++ b/litellm/proxy/_experimental/out/caching/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
🚅 LiteLLM
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/caching/index.txt b/litellm/proxy/_experimental/out/caching/index.txt new file mode 100644 index 00000000000..3c853889b21 --- /dev/null +++ b/litellm/proxy/_experimental/out/caching/index.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","caching",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["caching",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[254709,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/08b3bdf-s.-y4.js","/litellm-asset-prefix/_next/static/chunks/129bujhdmi9ce.js","/litellm-asset-prefix/_next/static/chunks/03rcuw-pknh--.js","/litellm-asset-prefix/_next/static/chunks/01xm1xt.gmrff.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","/litellm-asset-prefix/_next/static/chunks/0ys10755n8os_.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/08b3bdf-s.-y4.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/129bujhdmi9ce.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/03rcuw-pknh--.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/01xm1xt.gmrff.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0ys10755n8os_.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/cost-tracking/__next.!KGRhc2hib2FyZCk.cost-tracking.__PAGE__.txt b/litellm/proxy/_experimental/out/cost-tracking/__next.!KGRhc2hib2FyZCk.cost-tracking.__PAGE__.txt new file mode 100644 index 00000000000..5d74b0cc3d2 --- /dev/null +++ b/litellm/proxy/_experimental/out/cost-tracking/__next.!KGRhc2hib2FyZCk.cost-tracking.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[193317,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0z4fh7pvzmoy8.js","/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0sylbcw3ha_ba.js","/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","/litellm-asset-prefix/_next/static/chunks/0hsqxu.xbf.l5.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/05z02g9s~8km0.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0z4fh7pvzmoy8.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0sylbcw3ha_ba.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0hsqxu.xbf.l5.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/05z02g9s~8km0.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/cost-tracking/__next.!KGRhc2hib2FyZCk.cost-tracking.txt b/litellm/proxy/_experimental/out/cost-tracking/__next.!KGRhc2hib2FyZCk.cost-tracking.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/cost-tracking/__next.!KGRhc2hib2FyZCk.cost-tracking.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/cost-tracking/__next.!KGRhc2hib2FyZCk.txt b/litellm/proxy/_experimental/out/cost-tracking/__next.!KGRhc2hib2FyZCk.txt new file mode 100644 index 00000000000..55176f9118b --- /dev/null +++ b/litellm/proxy/_experimental/out/cost-tracking/__next.!KGRhc2hib2FyZCk.txt @@ -0,0 +1,7 @@ +1:"$Sreact.fragment" +2:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +3:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +4:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +5:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +0:{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true}]],["$","$L2",null,{"Component":"$3","slots":{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@6"]}}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +6:"$0:rsc:props:children:1:props:serverProvidedParams:params" diff --git a/litellm/proxy/_experimental/out/cost-tracking/__next._full.txt b/litellm/proxy/_experimental/out/cost-tracking/__next._full.txt new file mode 100644 index 00000000000..f9a3366cd90 --- /dev/null +++ b/litellm/proxy/_experimental/out/cost-tracking/__next._full.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","cost-tracking",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["cost-tracking",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[193317,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0z4fh7pvzmoy8.js","/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0sylbcw3ha_ba.js","/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","/litellm-asset-prefix/_next/static/chunks/0hsqxu.xbf.l5.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/05z02g9s~8km0.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0z4fh7pvzmoy8.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0sylbcw3ha_ba.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0hsqxu.xbf.l5.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/05z02g9s~8km0.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/cost-tracking/__next._head.txt b/litellm/proxy/_experimental/out/cost-tracking/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/cost-tracking/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/cost-tracking/__next._index.txt b/litellm/proxy/_experimental/out/cost-tracking/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/cost-tracking/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/cost-tracking/__next._tree.txt b/litellm/proxy/_experimental/out/cost-tracking/__next._tree.txt new file mode 100644 index 00000000000..9c5c09bef77 --- /dev/null +++ b/litellm/proxy/_experimental/out/cost-tracking/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"(dashboard)","param":null,"prefetchHints":0,"slots":{"children":{"name":"cost-tracking","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/cost-tracking/index.html b/litellm/proxy/_experimental/out/cost-tracking/index.html new file mode 100644 index 00000000000..66312220eca --- /dev/null +++ b/litellm/proxy/_experimental/out/cost-tracking/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
🚅 LiteLLM
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/cost-tracking/index.txt b/litellm/proxy/_experimental/out/cost-tracking/index.txt new file mode 100644 index 00000000000..f9a3366cd90 --- /dev/null +++ b/litellm/proxy/_experimental/out/cost-tracking/index.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","cost-tracking",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["cost-tracking",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[193317,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0z4fh7pvzmoy8.js","/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0sylbcw3ha_ba.js","/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","/litellm-asset-prefix/_next/static/chunks/0hsqxu.xbf.l5.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/05z02g9s~8km0.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0z4fh7pvzmoy8.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0sylbcw3ha_ba.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0hsqxu.xbf.l5.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/05z02g9s~8km0.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/favicon.ico b/litellm/proxy/_experimental/out/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..7c45601d5c311b44348e70790527de8a3c5ed655 GIT binary patch literal 6387 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 Xadfe~z7{PT;m&vW(j5K2x4-`Z=U(*D literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/guardrails-monitor/__next.!KGRhc2hib2FyZCk.guardrails-monitor.__PAGE__.txt b/litellm/proxy/_experimental/out/guardrails-monitor/__next.!KGRhc2hib2FyZCk.guardrails-monitor.__PAGE__.txt new file mode 100644 index 00000000000..45e6b9a90d9 --- /dev/null +++ b/litellm/proxy/_experimental/out/guardrails-monitor/__next.!KGRhc2hib2FyZCk.guardrails-monitor.__PAGE__.txt @@ -0,0 +1,10 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[55004,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0jaa-io9cz430.js","/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0j2~0jseuoube.js","/litellm-asset-prefix/_next/static/chunks/0ys10755n8os_.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/09dh.hm0vr~61.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/036wlkuzplhfz.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +:HL["/litellm-asset-prefix/_next/static/chunks/0jib1e4hgitwz.css","style"] +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0jib1e4hgitwz.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0jaa-io9cz430.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0j2~0jseuoube.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0ys10755n8os_.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/09dh.hm0vr~61.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/036wlkuzplhfz.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/guardrails-monitor/__next.!KGRhc2hib2FyZCk.guardrails-monitor.txt b/litellm/proxy/_experimental/out/guardrails-monitor/__next.!KGRhc2hib2FyZCk.guardrails-monitor.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/guardrails-monitor/__next.!KGRhc2hib2FyZCk.guardrails-monitor.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/guardrails-monitor/__next.!KGRhc2hib2FyZCk.txt b/litellm/proxy/_experimental/out/guardrails-monitor/__next.!KGRhc2hib2FyZCk.txt new file mode 100644 index 00000000000..55176f9118b --- /dev/null +++ b/litellm/proxy/_experimental/out/guardrails-monitor/__next.!KGRhc2hib2FyZCk.txt @@ -0,0 +1,7 @@ +1:"$Sreact.fragment" +2:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +3:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +4:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +5:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +0:{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true}]],["$","$L2",null,{"Component":"$3","slots":{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@6"]}}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +6:"$0:rsc:props:children:1:props:serverProvidedParams:params" diff --git a/litellm/proxy/_experimental/out/guardrails-monitor/__next._full.txt b/litellm/proxy/_experimental/out/guardrails-monitor/__next._full.txt new file mode 100644 index 00000000000..b6648b6ae7e --- /dev/null +++ b/litellm/proxy/_experimental/out/guardrails-monitor/__next._full.txt @@ -0,0 +1,34 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +:HL["/litellm-asset-prefix/_next/static/chunks/0jib1e4hgitwz.css","style"] +0:{"P":null,"c":["","guardrails-monitor",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["guardrails-monitor",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[55004,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0jaa-io9cz430.js","/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0j2~0jseuoube.js","/litellm-asset-prefix/_next/static/chunks/0ys10755n8os_.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/09dh.hm0vr~61.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/036wlkuzplhfz.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0jib1e4hgitwz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0jaa-io9cz430.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0j2~0jseuoube.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0ys10755n8os_.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/09dh.hm0vr~61.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/036wlkuzplhfz.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/guardrails-monitor/__next._head.txt b/litellm/proxy/_experimental/out/guardrails-monitor/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/guardrails-monitor/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/guardrails-monitor/__next._index.txt b/litellm/proxy/_experimental/out/guardrails-monitor/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/guardrails-monitor/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/guardrails-monitor/__next._tree.txt b/litellm/proxy/_experimental/out/guardrails-monitor/__next._tree.txt new file mode 100644 index 00000000000..8faf1e30ca8 --- /dev/null +++ b/litellm/proxy/_experimental/out/guardrails-monitor/__next._tree.txt @@ -0,0 +1,5 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +:HL["/litellm-asset-prefix/_next/static/chunks/0jib1e4hgitwz.css","style"] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"(dashboard)","param":null,"prefetchHints":0,"slots":{"children":{"name":"guardrails-monitor","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/guardrails-monitor/index.html b/litellm/proxy/_experimental/out/guardrails-monitor/index.html new file mode 100644 index 00000000000..1e8f4b28818 --- /dev/null +++ b/litellm/proxy/_experimental/out/guardrails-monitor/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
🚅 LiteLLM
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/guardrails-monitor/index.txt b/litellm/proxy/_experimental/out/guardrails-monitor/index.txt new file mode 100644 index 00000000000..b6648b6ae7e --- /dev/null +++ b/litellm/proxy/_experimental/out/guardrails-monitor/index.txt @@ -0,0 +1,34 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +:HL["/litellm-asset-prefix/_next/static/chunks/0jib1e4hgitwz.css","style"] +0:{"P":null,"c":["","guardrails-monitor",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["guardrails-monitor",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[55004,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0jaa-io9cz430.js","/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0j2~0jseuoube.js","/litellm-asset-prefix/_next/static/chunks/0ys10755n8os_.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/09dh.hm0vr~61.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/036wlkuzplhfz.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0jib1e4hgitwz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0jaa-io9cz430.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0j2~0jseuoube.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0ys10755n8os_.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/09dh.hm0vr~61.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/036wlkuzplhfz.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/guardrails/__next.!KGRhc2hib2FyZCk.guardrails.__PAGE__.txt b/litellm/proxy/_experimental/out/guardrails/__next.!KGRhc2hib2FyZCk.guardrails.__PAGE__.txt new file mode 100644 index 00000000000..26e114cb91d --- /dev/null +++ b/litellm/proxy/_experimental/out/guardrails/__next.!KGRhc2hib2FyZCk.guardrails.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[509345,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0_tak0mb5m-3k.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0u3_nka63vh6t.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0ydd65iv6ffpl.js","/litellm-asset-prefix/_next/static/chunks/05.uhnqp00zd5.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/15hm8gokjq2uu.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0_tak0mb5m-3k.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0u3_nka63vh6t.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0ydd65iv6ffpl.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/05.uhnqp00zd5.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/15hm8gokjq2uu.js","async":true}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/guardrails/__next.!KGRhc2hib2FyZCk.guardrails.txt b/litellm/proxy/_experimental/out/guardrails/__next.!KGRhc2hib2FyZCk.guardrails.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/guardrails/__next.!KGRhc2hib2FyZCk.guardrails.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/guardrails/__next.!KGRhc2hib2FyZCk.txt b/litellm/proxy/_experimental/out/guardrails/__next.!KGRhc2hib2FyZCk.txt new file mode 100644 index 00000000000..55176f9118b --- /dev/null +++ b/litellm/proxy/_experimental/out/guardrails/__next.!KGRhc2hib2FyZCk.txt @@ -0,0 +1,7 @@ +1:"$Sreact.fragment" +2:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +3:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +4:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +5:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +0:{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true}]],["$","$L2",null,{"Component":"$3","slots":{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@6"]}}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +6:"$0:rsc:props:children:1:props:serverProvidedParams:params" diff --git a/litellm/proxy/_experimental/out/guardrails/__next._full.txt b/litellm/proxy/_experimental/out/guardrails/__next._full.txt new file mode 100644 index 00000000000..31d4801af91 --- /dev/null +++ b/litellm/proxy/_experimental/out/guardrails/__next._full.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","guardrails",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["guardrails",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[509345,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0_tak0mb5m-3k.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0u3_nka63vh6t.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0ydd65iv6ffpl.js","/litellm-asset-prefix/_next/static/chunks/05.uhnqp00zd5.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/15hm8gokjq2uu.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0_tak0mb5m-3k.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0u3_nka63vh6t.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0ydd65iv6ffpl.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/05.uhnqp00zd5.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/15hm8gokjq2uu.js","async":true,"nonce":"$undefined"}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/guardrails/__next._head.txt b/litellm/proxy/_experimental/out/guardrails/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/guardrails/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/guardrails/__next._index.txt b/litellm/proxy/_experimental/out/guardrails/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/guardrails/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/guardrails/__next._tree.txt b/litellm/proxy/_experimental/out/guardrails/__next._tree.txt new file mode 100644 index 00000000000..edf07fe30e8 --- /dev/null +++ b/litellm/proxy/_experimental/out/guardrails/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"(dashboard)","param":null,"prefetchHints":0,"slots":{"children":{"name":"guardrails","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/guardrails/index.html b/litellm/proxy/_experimental/out/guardrails/index.html new file mode 100644 index 00000000000..a4ae052af34 --- /dev/null +++ b/litellm/proxy/_experimental/out/guardrails/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
🚅 LiteLLM
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/guardrails/index.txt b/litellm/proxy/_experimental/out/guardrails/index.txt new file mode 100644 index 00000000000..31d4801af91 --- /dev/null +++ b/litellm/proxy/_experimental/out/guardrails/index.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","guardrails",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["guardrails",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[509345,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0_tak0mb5m-3k.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0u3_nka63vh6t.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0ydd65iv6ffpl.js","/litellm-asset-prefix/_next/static/chunks/05.uhnqp00zd5.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/15hm8gokjq2uu.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0_tak0mb5m-3k.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0u3_nka63vh6t.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0ydd65iv6ffpl.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/05.uhnqp00zd5.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/15hm8gokjq2uu.js","async":true,"nonce":"$undefined"}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/index.html b/litellm/proxy/_experimental/out/index.html new file mode 100644 index 00000000000..21fe401b892 --- /dev/null +++ b/litellm/proxy/_experimental/out/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
🚅 LiteLLM
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/index.txt b/litellm/proxy/_experimental/out/index.txt new file mode 100644 index 00000000000..f1ff1ff8411 --- /dev/null +++ b/litellm/proxy/_experimental/out/index.txt @@ -0,0 +1,30 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +c:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{},null,false,null]},null,false,null]},null,false,null],"$Lb",false]],"m":"$undefined","G":["$c",["$Ld","$Le"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +f:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +10:I[871135,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","/litellm-asset-prefix/_next/static/chunks/0~-ovi6c4wjt1.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0c2apcdkbqq0o.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/0ngre0.s4-ej6.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/05t1k89l9tc3s.js","/litellm-asset-prefix/_next/static/chunks/17n.qg70cy9.9.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","/litellm-asset-prefix/_next/static/chunks/14566-_ogh-19.js","/litellm-asset-prefix/_next/static/chunks/0w39dn9x3dp9g.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js"],"default"] +13:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +14:"$Sreact.suspense" +16:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +18:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[["$","$Lf",null,{"Component":"$10","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@11","$@12"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0~-ovi6c4wjt1.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0c2apcdkbqq0o.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0ngre0.s4-ej6.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/05t1k89l9tc3s.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/17n.qg70cy9.9.js","async":true,"nonce":"$undefined"}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","async":true,"nonce":"$undefined"}],["$","script","script-13",{"src":"/litellm-asset-prefix/_next/static/chunks/14566-_ogh-19.js","async":true,"nonce":"$undefined"}],["$","script","script-14",{"src":"/litellm-asset-prefix/_next/static/chunks/0w39dn9x3dp9g.js","async":true,"nonce":"$undefined"}],["$","script","script-15",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true,"nonce":"$undefined"}],["$","script","script-16",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true,"nonce":"$undefined"}],["$","script","script-17",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}]],["$","$L13",null,{"children":["$","$14",null,{"name":"Next.MetadataOutlet","children":"$@15"}]}]]}] +b:["$","$1","h",{"children":[null,["$","$L16",null,{"children":"$L17"}],["$","div",null,{"hidden":true,"children":["$","$L18",null,{"children":["$","$14",null,{"name":"Next.Metadata","children":"$L19"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +d:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +e:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +11:{} +12:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +17:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1a:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +15:null +19:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1a","4",{}]] diff --git a/litellm/proxy/_experimental/out/logging-and-alerts/__next.!KGRhc2hib2FyZCk.logging-and-alerts.__PAGE__.txt b/litellm/proxy/_experimental/out/logging-and-alerts/__next.!KGRhc2hib2FyZCk.logging-and-alerts.__PAGE__.txt new file mode 100644 index 00000000000..08ef1fee33d --- /dev/null +++ b/litellm/proxy/_experimental/out/logging-and-alerts/__next.!KGRhc2hib2FyZCk.logging-and-alerts.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[372024,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0ajdq5~-z4-0o.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/1781p3yhsw7kp.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","/litellm-asset-prefix/_next/static/chunks/0em0654rb513m.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/05w6e8.ake4_v.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0ajdq5~-z4-0o.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/1781p3yhsw7kp.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0em0654rb513m.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/05w6e8.ake4_v.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/logging-and-alerts/__next.!KGRhc2hib2FyZCk.logging-and-alerts.txt b/litellm/proxy/_experimental/out/logging-and-alerts/__next.!KGRhc2hib2FyZCk.logging-and-alerts.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/logging-and-alerts/__next.!KGRhc2hib2FyZCk.logging-and-alerts.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/logging-and-alerts/__next.!KGRhc2hib2FyZCk.txt b/litellm/proxy/_experimental/out/logging-and-alerts/__next.!KGRhc2hib2FyZCk.txt new file mode 100644 index 00000000000..55176f9118b --- /dev/null +++ b/litellm/proxy/_experimental/out/logging-and-alerts/__next.!KGRhc2hib2FyZCk.txt @@ -0,0 +1,7 @@ +1:"$Sreact.fragment" +2:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +3:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +4:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +5:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +0:{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true}]],["$","$L2",null,{"Component":"$3","slots":{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@6"]}}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +6:"$0:rsc:props:children:1:props:serverProvidedParams:params" diff --git a/litellm/proxy/_experimental/out/logging-and-alerts/__next._full.txt b/litellm/proxy/_experimental/out/logging-and-alerts/__next._full.txt new file mode 100644 index 00000000000..1b3c5a41ea3 --- /dev/null +++ b/litellm/proxy/_experimental/out/logging-and-alerts/__next._full.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","logging-and-alerts",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["logging-and-alerts",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[372024,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0ajdq5~-z4-0o.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/1781p3yhsw7kp.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","/litellm-asset-prefix/_next/static/chunks/0em0654rb513m.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/05w6e8.ake4_v.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0ajdq5~-z4-0o.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/1781p3yhsw7kp.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0em0654rb513m.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/05w6e8.ake4_v.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/logging-and-alerts/__next._head.txt b/litellm/proxy/_experimental/out/logging-and-alerts/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/logging-and-alerts/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/logging-and-alerts/__next._index.txt b/litellm/proxy/_experimental/out/logging-and-alerts/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/logging-and-alerts/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/logging-and-alerts/__next._tree.txt b/litellm/proxy/_experimental/out/logging-and-alerts/__next._tree.txt new file mode 100644 index 00000000000..bbe28d52fdf --- /dev/null +++ b/litellm/proxy/_experimental/out/logging-and-alerts/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"(dashboard)","param":null,"prefetchHints":0,"slots":{"children":{"name":"logging-and-alerts","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/logging-and-alerts/index.html b/litellm/proxy/_experimental/out/logging-and-alerts/index.html new file mode 100644 index 00000000000..9cb31b9c048 --- /dev/null +++ b/litellm/proxy/_experimental/out/logging-and-alerts/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
🚅 LiteLLM
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/logging-and-alerts/index.txt b/litellm/proxy/_experimental/out/logging-and-alerts/index.txt new file mode 100644 index 00000000000..1b3c5a41ea3 --- /dev/null +++ b/litellm/proxy/_experimental/out/logging-and-alerts/index.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","logging-and-alerts",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["logging-and-alerts",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[372024,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0ajdq5~-z4-0o.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/1781p3yhsw7kp.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","/litellm-asset-prefix/_next/static/chunks/0em0654rb513m.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/05w6e8.ake4_v.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0ajdq5~-z4-0o.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/1781p3yhsw7kp.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0em0654rb513m.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/05w6e8.ake4_v.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/login/__next._full.txt b/litellm/proxy/_experimental/out/login/__next._full.txt new file mode 100644 index 00000000000..33c45ba10d7 --- /dev/null +++ b/litellm/proxy/_experimental/out/login/__next._full.txt @@ -0,0 +1,25 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +8:I[594542,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/02813b2b-kz98.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0tbzoqict3-mi.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0-4tg9f~_a3b~.js"],"default"] +b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +c:"$Sreact.suspense" +f:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +11:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +13:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","login",""],"q":"","i":false,"f":[[["",{"children":["login",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@9","$@a"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/02813b2b-kz98.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0tbzoqict3-mi.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0-4tg9f~_a3b~.js","async":true,"nonce":"$undefined"}]],["$","$Lb",null,{"children":["$","$c",null,{"name":"Next.MetadataOutlet","children":"$@d"}]}]]}],{},null,false,null]},null,false,"$@e"]},null,false,null],["$","$1","h",{"children":[null,["$","$Lf",null,{"children":"$L10"}],["$","div",null,{"hidden":true,"children":["$","$L11",null,{"children":["$","$c",null,{"name":"Next.Metadata","children":"$L12"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$13",[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +14:[] +e:"$W14" +9:{} +a:"$0:f:0:1:1:children:1:children:0:props:children:0:props:serverProvidedParams:params" +10:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +15:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +d:null +12:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L15","4",{}]] diff --git a/litellm/proxy/_experimental/out/login/__next._head.txt b/litellm/proxy/_experimental/out/login/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/login/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/login/__next._index.txt b/litellm/proxy/_experimental/out/login/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/login/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/login/__next._tree.txt b/litellm/proxy/_experimental/out/login/__next._tree.txt new file mode 100644 index 00000000000..f43c60dff74 --- /dev/null +++ b/litellm/proxy/_experimental/out/login/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"login","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/login/__next.login.__PAGE__.txt b/litellm/proxy/_experimental/out/login/__next.login.__PAGE__.txt new file mode 100644 index 00000000000..5e3a5776c6f --- /dev/null +++ b/litellm/proxy/_experimental/out/login/__next.login.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[594542,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/02813b2b-kz98.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0tbzoqict3-mi.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0-4tg9f~_a3b~.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/02813b2b-kz98.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0tbzoqict3-mi.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0-4tg9f~_a3b~.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/login/__next.login.txt b/litellm/proxy/_experimental/out/login/__next.login.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/login/__next.login.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/login/index.html b/litellm/proxy/_experimental/out/login/index.html new file mode 100644 index 00000000000..e1dee7ea7dc --- /dev/null +++ b/litellm/proxy/_experimental/out/login/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
🚅 LiteLLM
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/login/index.txt b/litellm/proxy/_experimental/out/login/index.txt new file mode 100644 index 00000000000..33c45ba10d7 --- /dev/null +++ b/litellm/proxy/_experimental/out/login/index.txt @@ -0,0 +1,25 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +8:I[594542,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/02813b2b-kz98.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0tbzoqict3-mi.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0-4tg9f~_a3b~.js"],"default"] +b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +c:"$Sreact.suspense" +f:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +11:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +13:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","login",""],"q":"","i":false,"f":[[["",{"children":["login",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@9","$@a"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/02813b2b-kz98.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0tbzoqict3-mi.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0-4tg9f~_a3b~.js","async":true,"nonce":"$undefined"}]],["$","$Lb",null,{"children":["$","$c",null,{"name":"Next.MetadataOutlet","children":"$@d"}]}]]}],{},null,false,null]},null,false,"$@e"]},null,false,null],["$","$1","h",{"children":[null,["$","$Lf",null,{"children":"$L10"}],["$","div",null,{"hidden":true,"children":["$","$L11",null,{"children":["$","$c",null,{"name":"Next.Metadata","children":"$L12"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$13",[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +14:[] +e:"$W14" +9:{} +a:"$0:f:0:1:1:children:1:children:0:props:children:0:props:serverProvidedParams:params" +10:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +15:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +d:null +12:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L15","4",{}]] diff --git a/litellm/proxy/_experimental/out/logs/__next.!KGRhc2hib2FyZCk.logs.__PAGE__.txt b/litellm/proxy/_experimental/out/logs/__next.!KGRhc2hib2FyZCk.logs.__PAGE__.txt new file mode 100644 index 00000000000..fa991a96308 --- /dev/null +++ b/litellm/proxy/_experimental/out/logs/__next.!KGRhc2hib2FyZCk.logs.__PAGE__.txt @@ -0,0 +1,10 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[799062,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","/litellm-asset-prefix/_next/static/chunks/10jlu0mdcmzoi.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/066hp9.940823.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/15auqattd2wzv.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/0m5k-5fv1ya8x.js","/litellm-asset-prefix/_next/static/chunks/169km.d7x9qr6.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","/litellm-asset-prefix/_next/static/chunks/0jr8wo_7ak~7n.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","/litellm-asset-prefix/_next/static/chunks/036wlkuzplhfz.js","/litellm-asset-prefix/_next/static/chunks/0rdv7_7_95b-1.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +:HL["/litellm-asset-prefix/_next/static/chunks/0jib1e4hgitwz.css","style"] +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0jib1e4hgitwz.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/10jlu0mdcmzoi.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/066hp9.940823.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/15auqattd2wzv.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0m5k-5fv1ya8x.js","async":true}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/169km.d7x9qr6.js","async":true}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true}],["$","script","script-13",{"src":"/litellm-asset-prefix/_next/static/chunks/0jr8wo_7ak~7n.js","async":true}],["$","script","script-14",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true}],["$","script","script-15",{"src":"/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","async":true}],["$","script","script-16",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true}],["$","script","script-17",{"src":"/litellm-asset-prefix/_next/static/chunks/036wlkuzplhfz.js","async":true}],["$","script","script-18",{"src":"/litellm-asset-prefix/_next/static/chunks/0rdv7_7_95b-1.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/logs/__next.!KGRhc2hib2FyZCk.logs.txt b/litellm/proxy/_experimental/out/logs/__next.!KGRhc2hib2FyZCk.logs.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/logs/__next.!KGRhc2hib2FyZCk.logs.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/logs/__next.!KGRhc2hib2FyZCk.txt b/litellm/proxy/_experimental/out/logs/__next.!KGRhc2hib2FyZCk.txt new file mode 100644 index 00000000000..55176f9118b --- /dev/null +++ b/litellm/proxy/_experimental/out/logs/__next.!KGRhc2hib2FyZCk.txt @@ -0,0 +1,7 @@ +1:"$Sreact.fragment" +2:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +3:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +4:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +5:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +0:{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true}]],["$","$L2",null,{"Component":"$3","slots":{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@6"]}}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +6:"$0:rsc:props:children:1:props:serverProvidedParams:params" diff --git a/litellm/proxy/_experimental/out/logs/__next._full.txt b/litellm/proxy/_experimental/out/logs/__next._full.txt new file mode 100644 index 00000000000..d03c5f28713 --- /dev/null +++ b/litellm/proxy/_experimental/out/logs/__next._full.txt @@ -0,0 +1,34 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +:HL["/litellm-asset-prefix/_next/static/chunks/0jib1e4hgitwz.css","style"] +0:{"P":null,"c":["","logs",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["logs",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[799062,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","/litellm-asset-prefix/_next/static/chunks/10jlu0mdcmzoi.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/066hp9.940823.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/15auqattd2wzv.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/0m5k-5fv1ya8x.js","/litellm-asset-prefix/_next/static/chunks/169km.d7x9qr6.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","/litellm-asset-prefix/_next/static/chunks/0jr8wo_7ak~7n.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","/litellm-asset-prefix/_next/static/chunks/036wlkuzplhfz.js","/litellm-asset-prefix/_next/static/chunks/0rdv7_7_95b-1.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0jib1e4hgitwz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/10jlu0mdcmzoi.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/066hp9.940823.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/15auqattd2wzv.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0m5k-5fv1ya8x.js","async":true,"nonce":"$undefined"}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/169km.d7x9qr6.js","async":true,"nonce":"$undefined"}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true,"nonce":"$undefined"}],["$","script","script-13",{"src":"/litellm-asset-prefix/_next/static/chunks/0jr8wo_7ak~7n.js","async":true,"nonce":"$undefined"}],["$","script","script-14",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-15",{"src":"/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","async":true,"nonce":"$undefined"}],["$","script","script-16",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true,"nonce":"$undefined"}],["$","script","script-17",{"src":"/litellm-asset-prefix/_next/static/chunks/036wlkuzplhfz.js","async":true,"nonce":"$undefined"}],["$","script","script-18",{"src":"/litellm-asset-prefix/_next/static/chunks/0rdv7_7_95b-1.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/logs/__next._head.txt b/litellm/proxy/_experimental/out/logs/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/logs/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/logs/__next._index.txt b/litellm/proxy/_experimental/out/logs/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/logs/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/logs/__next._tree.txt b/litellm/proxy/_experimental/out/logs/__next._tree.txt new file mode 100644 index 00000000000..e436b3d69c2 --- /dev/null +++ b/litellm/proxy/_experimental/out/logs/__next._tree.txt @@ -0,0 +1,5 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +:HL["/litellm-asset-prefix/_next/static/chunks/0jib1e4hgitwz.css","style"] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"(dashboard)","param":null,"prefetchHints":0,"slots":{"children":{"name":"logs","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/logs/index.html b/litellm/proxy/_experimental/out/logs/index.html new file mode 100644 index 00000000000..fd347f758b6 --- /dev/null +++ b/litellm/proxy/_experimental/out/logs/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
🚅 LiteLLM
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/logs/index.txt b/litellm/proxy/_experimental/out/logs/index.txt new file mode 100644 index 00000000000..d03c5f28713 --- /dev/null +++ b/litellm/proxy/_experimental/out/logs/index.txt @@ -0,0 +1,34 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +:HL["/litellm-asset-prefix/_next/static/chunks/0jib1e4hgitwz.css","style"] +0:{"P":null,"c":["","logs",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["logs",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[799062,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","/litellm-asset-prefix/_next/static/chunks/10jlu0mdcmzoi.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/066hp9.940823.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/15auqattd2wzv.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/0m5k-5fv1ya8x.js","/litellm-asset-prefix/_next/static/chunks/169km.d7x9qr6.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","/litellm-asset-prefix/_next/static/chunks/0jr8wo_7ak~7n.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","/litellm-asset-prefix/_next/static/chunks/036wlkuzplhfz.js","/litellm-asset-prefix/_next/static/chunks/0rdv7_7_95b-1.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0jib1e4hgitwz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/10jlu0mdcmzoi.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/066hp9.940823.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/15auqattd2wzv.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0m5k-5fv1ya8x.js","async":true,"nonce":"$undefined"}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/169km.d7x9qr6.js","async":true,"nonce":"$undefined"}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true,"nonce":"$undefined"}],["$","script","script-13",{"src":"/litellm-asset-prefix/_next/static/chunks/0jr8wo_7ak~7n.js","async":true,"nonce":"$undefined"}],["$","script","script-14",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-15",{"src":"/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","async":true,"nonce":"$undefined"}],["$","script","script-16",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true,"nonce":"$undefined"}],["$","script","script-17",{"src":"/litellm-asset-prefix/_next/static/chunks/036wlkuzplhfz.js","async":true,"nonce":"$undefined"}],["$","script","script-18",{"src":"/litellm-asset-prefix/_next/static/chunks/0rdv7_7_95b-1.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/mcp-servers/__next.!KGRhc2hib2FyZCk.mcp-servers.__PAGE__.txt b/litellm/proxy/_experimental/out/mcp-servers/__next.!KGRhc2hib2FyZCk.mcp-servers.__PAGE__.txt new file mode 100644 index 00000000000..e139e9b4469 --- /dev/null +++ b/litellm/proxy/_experimental/out/mcp-servers/__next.!KGRhc2hib2FyZCk.mcp-servers.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[366321,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/15wqqcwhnlidr.js","/litellm-asset-prefix/_next/static/chunks/0rsh-mjgd1-1b.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/17jd5l9o~hzf3.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0_cwbuh_om4s9.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/15hm8gokjq2uu.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/15wqqcwhnlidr.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0rsh-mjgd1-1b.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/17jd5l9o~hzf3.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0_cwbuh_om4s9.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/15hm8gokjq2uu.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/mcp-servers/__next.!KGRhc2hib2FyZCk.mcp-servers.txt b/litellm/proxy/_experimental/out/mcp-servers/__next.!KGRhc2hib2FyZCk.mcp-servers.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/mcp-servers/__next.!KGRhc2hib2FyZCk.mcp-servers.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/mcp-servers/__next.!KGRhc2hib2FyZCk.txt b/litellm/proxy/_experimental/out/mcp-servers/__next.!KGRhc2hib2FyZCk.txt new file mode 100644 index 00000000000..55176f9118b --- /dev/null +++ b/litellm/proxy/_experimental/out/mcp-servers/__next.!KGRhc2hib2FyZCk.txt @@ -0,0 +1,7 @@ +1:"$Sreact.fragment" +2:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +3:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +4:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +5:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +0:{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true}]],["$","$L2",null,{"Component":"$3","slots":{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@6"]}}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +6:"$0:rsc:props:children:1:props:serverProvidedParams:params" diff --git a/litellm/proxy/_experimental/out/mcp-servers/__next._full.txt b/litellm/proxy/_experimental/out/mcp-servers/__next._full.txt new file mode 100644 index 00000000000..1f193e67954 --- /dev/null +++ b/litellm/proxy/_experimental/out/mcp-servers/__next._full.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","mcp-servers",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["mcp-servers",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[366321,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/15wqqcwhnlidr.js","/litellm-asset-prefix/_next/static/chunks/0rsh-mjgd1-1b.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/17jd5l9o~hzf3.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0_cwbuh_om4s9.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/15hm8gokjq2uu.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/15wqqcwhnlidr.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0rsh-mjgd1-1b.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/17jd5l9o~hzf3.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0_cwbuh_om4s9.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/15hm8gokjq2uu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/mcp-servers/__next._head.txt b/litellm/proxy/_experimental/out/mcp-servers/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/mcp-servers/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/mcp-servers/__next._index.txt b/litellm/proxy/_experimental/out/mcp-servers/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/mcp-servers/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/mcp-servers/__next._tree.txt b/litellm/proxy/_experimental/out/mcp-servers/__next._tree.txt new file mode 100644 index 00000000000..7fa410c785c --- /dev/null +++ b/litellm/proxy/_experimental/out/mcp-servers/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"(dashboard)","param":null,"prefetchHints":0,"slots":{"children":{"name":"mcp-servers","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/mcp-servers/index.html b/litellm/proxy/_experimental/out/mcp-servers/index.html new file mode 100644 index 00000000000..26180443c96 --- /dev/null +++ b/litellm/proxy/_experimental/out/mcp-servers/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
🚅 LiteLLM
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/mcp-servers/index.txt b/litellm/proxy/_experimental/out/mcp-servers/index.txt new file mode 100644 index 00000000000..1f193e67954 --- /dev/null +++ b/litellm/proxy/_experimental/out/mcp-servers/index.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","mcp-servers",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["mcp-servers",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[366321,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/15wqqcwhnlidr.js","/litellm-asset-prefix/_next/static/chunks/0rsh-mjgd1-1b.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/17jd5l9o~hzf3.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0_cwbuh_om4s9.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/15hm8gokjq2uu.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/15wqqcwhnlidr.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0rsh-mjgd1-1b.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/17jd5l9o~hzf3.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0_cwbuh_om4s9.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/15hm8gokjq2uu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/mcp/oauth/callback/__next._full.txt b/litellm/proxy/_experimental/out/mcp/oauth/callback/__next._full.txt new file mode 100644 index 00000000000..0555b25eb7e --- /dev/null +++ b/litellm/proxy/_experimental/out/mcp/oauth/callback/__next._full.txt @@ -0,0 +1,25 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +8:I[346328,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0b5g~_decuer~.js"],"default"] +b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +c:"$Sreact.suspense" +f:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +11:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +13:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","mcp","oauth","callback",""],"q":"","i":false,"f":[[["",{"children":["mcp",{"children":["oauth",{"children":["callback",{"children":["__PAGE__",{}]}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@9","$@a"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0b5g~_decuer~.js","async":true,"nonce":"$undefined"}]],["$","$Lb",null,{"children":["$","$c",null,{"name":"Next.MetadataOutlet","children":"$@d"}]}]]}],{},null,false,null]},null,false,"$@e"]},null,false,"$@e"]},null,false,"$@e"]},null,false,null],["$","$1","h",{"children":[null,["$","$Lf",null,{"children":"$L10"}],["$","div",null,{"hidden":true,"children":["$","$L11",null,{"children":["$","$c",null,{"name":"Next.Metadata","children":"$L12"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$13",[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +14:[] +e:"$W14" +9:{} +a:"$0:f:0:1:1:children:1:children:1:children:1:children:0:props:children:0:props:serverProvidedParams:params" +10:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +15:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +d:null +12:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L15","4",{}]] diff --git a/litellm/proxy/_experimental/out/mcp/oauth/callback/__next._head.txt b/litellm/proxy/_experimental/out/mcp/oauth/callback/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/mcp/oauth/callback/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/mcp/oauth/callback/__next._index.txt b/litellm/proxy/_experimental/out/mcp/oauth/callback/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/mcp/oauth/callback/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/mcp/oauth/callback/__next._tree.txt b/litellm/proxy/_experimental/out/mcp/oauth/callback/__next._tree.txt new file mode 100644 index 00000000000..764c88c13be --- /dev/null +++ b/litellm/proxy/_experimental/out/mcp/oauth/callback/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"mcp","param":null,"prefetchHints":0,"slots":{"children":{"name":"oauth","param":null,"prefetchHints":0,"slots":{"children":{"name":"callback","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/mcp/oauth/callback/__next.mcp.oauth.callback.__PAGE__.txt b/litellm/proxy/_experimental/out/mcp/oauth/callback/__next.mcp.oauth.callback.__PAGE__.txt new file mode 100644 index 00000000000..3704a8907e1 --- /dev/null +++ b/litellm/proxy/_experimental/out/mcp/oauth/callback/__next.mcp.oauth.callback.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[346328,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0b5g~_decuer~.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0b5g~_decuer~.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/mcp/oauth/callback/__next.mcp.oauth.callback.txt b/litellm/proxy/_experimental/out/mcp/oauth/callback/__next.mcp.oauth.callback.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/mcp/oauth/callback/__next.mcp.oauth.callback.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/mcp/oauth/callback/__next.mcp.oauth.txt b/litellm/proxy/_experimental/out/mcp/oauth/callback/__next.mcp.oauth.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/mcp/oauth/callback/__next.mcp.oauth.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/mcp/oauth/callback/__next.mcp.txt b/litellm/proxy/_experimental/out/mcp/oauth/callback/__next.mcp.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/mcp/oauth/callback/__next.mcp.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/mcp/oauth/callback/index.html b/litellm/proxy/_experimental/out/mcp/oauth/callback/index.html new file mode 100644 index 00000000000..a24072e7043 --- /dev/null +++ b/litellm/proxy/_experimental/out/mcp/oauth/callback/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/mcp/oauth/callback/index.txt b/litellm/proxy/_experimental/out/mcp/oauth/callback/index.txt new file mode 100644 index 00000000000..0555b25eb7e --- /dev/null +++ b/litellm/proxy/_experimental/out/mcp/oauth/callback/index.txt @@ -0,0 +1,25 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +8:I[346328,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0b5g~_decuer~.js"],"default"] +b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +c:"$Sreact.suspense" +f:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +11:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +13:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","mcp","oauth","callback",""],"q":"","i":false,"f":[[["",{"children":["mcp",{"children":["oauth",{"children":["callback",{"children":["__PAGE__",{}]}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@9","$@a"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0b5g~_decuer~.js","async":true,"nonce":"$undefined"}]],["$","$Lb",null,{"children":["$","$c",null,{"name":"Next.MetadataOutlet","children":"$@d"}]}]]}],{},null,false,null]},null,false,"$@e"]},null,false,"$@e"]},null,false,"$@e"]},null,false,null],["$","$1","h",{"children":[null,["$","$Lf",null,{"children":"$L10"}],["$","div",null,{"hidden":true,"children":["$","$L11",null,{"children":["$","$c",null,{"name":"Next.Metadata","children":"$L12"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$13",[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +14:[] +e:"$W14" +9:{} +a:"$0:f:0:1:1:children:1:children:1:children:1:children:0:props:children:0:props:serverProvidedParams:params" +10:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +15:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +d:null +12:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L15","4",{}]] diff --git a/litellm/proxy/_experimental/out/memory/__next.!KGRhc2hib2FyZCk.memory.__PAGE__.txt b/litellm/proxy/_experimental/out/memory/__next.!KGRhc2hib2FyZCk.memory.__PAGE__.txt new file mode 100644 index 00000000000..82287434271 --- /dev/null +++ b/litellm/proxy/_experimental/out/memory/__next.!KGRhc2hib2FyZCk.memory.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[956224,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0q2og72gex34u.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0q2og72gex34u.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/memory/__next.!KGRhc2hib2FyZCk.memory.txt b/litellm/proxy/_experimental/out/memory/__next.!KGRhc2hib2FyZCk.memory.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/memory/__next.!KGRhc2hib2FyZCk.memory.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/memory/__next.!KGRhc2hib2FyZCk.txt b/litellm/proxy/_experimental/out/memory/__next.!KGRhc2hib2FyZCk.txt new file mode 100644 index 00000000000..55176f9118b --- /dev/null +++ b/litellm/proxy/_experimental/out/memory/__next.!KGRhc2hib2FyZCk.txt @@ -0,0 +1,7 @@ +1:"$Sreact.fragment" +2:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +3:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +4:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +5:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +0:{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true}]],["$","$L2",null,{"Component":"$3","slots":{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@6"]}}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +6:"$0:rsc:props:children:1:props:serverProvidedParams:params" diff --git a/litellm/proxy/_experimental/out/memory/__next._full.txt b/litellm/proxy/_experimental/out/memory/__next._full.txt new file mode 100644 index 00000000000..ee18c62f066 --- /dev/null +++ b/litellm/proxy/_experimental/out/memory/__next._full.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","memory",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["memory",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[956224,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0q2og72gex34u.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0q2og72gex34u.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/memory/__next._head.txt b/litellm/proxy/_experimental/out/memory/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/memory/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/memory/__next._index.txt b/litellm/proxy/_experimental/out/memory/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/memory/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/memory/__next._tree.txt b/litellm/proxy/_experimental/out/memory/__next._tree.txt new file mode 100644 index 00000000000..e3d8e2076c9 --- /dev/null +++ b/litellm/proxy/_experimental/out/memory/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"(dashboard)","param":null,"prefetchHints":0,"slots":{"children":{"name":"memory","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/memory/index.html b/litellm/proxy/_experimental/out/memory/index.html new file mode 100644 index 00000000000..6b5a5f138ef --- /dev/null +++ b/litellm/proxy/_experimental/out/memory/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
🚅 LiteLLM
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/memory/index.txt b/litellm/proxy/_experimental/out/memory/index.txt new file mode 100644 index 00000000000..ee18c62f066 --- /dev/null +++ b/litellm/proxy/_experimental/out/memory/index.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","memory",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["memory",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[956224,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0q2og72gex34u.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0q2og72gex34u.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/model-hub-table/__next.!KGRhc2hib2FyZCk.model-hub-table.__PAGE__.txt b/litellm/proxy/_experimental/out/model-hub-table/__next.!KGRhc2hib2FyZCk.model-hub-table.__PAGE__.txt new file mode 100644 index 00000000000..65d16b2fdf6 --- /dev/null +++ b/litellm/proxy/_experimental/out/model-hub-table/__next.!KGRhc2hib2FyZCk.model-hub-table.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[157058,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0ogm.~yq5rjmw.js","/litellm-asset-prefix/_next/static/chunks/03fia.h6j.gpu.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","/litellm-asset-prefix/_next/static/chunks/0pwrfxkkt~qfh.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/11kowzys1c43t.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0ogm.~yq5rjmw.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/03fia.h6j.gpu.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwrfxkkt~qfh.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/11kowzys1c43t.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/model-hub-table/__next.!KGRhc2hib2FyZCk.model-hub-table.txt b/litellm/proxy/_experimental/out/model-hub-table/__next.!KGRhc2hib2FyZCk.model-hub-table.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/model-hub-table/__next.!KGRhc2hib2FyZCk.model-hub-table.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/model-hub-table/__next.!KGRhc2hib2FyZCk.txt b/litellm/proxy/_experimental/out/model-hub-table/__next.!KGRhc2hib2FyZCk.txt new file mode 100644 index 00000000000..55176f9118b --- /dev/null +++ b/litellm/proxy/_experimental/out/model-hub-table/__next.!KGRhc2hib2FyZCk.txt @@ -0,0 +1,7 @@ +1:"$Sreact.fragment" +2:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +3:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +4:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +5:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +0:{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true}]],["$","$L2",null,{"Component":"$3","slots":{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@6"]}}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +6:"$0:rsc:props:children:1:props:serverProvidedParams:params" diff --git a/litellm/proxy/_experimental/out/model-hub-table/__next._full.txt b/litellm/proxy/_experimental/out/model-hub-table/__next._full.txt new file mode 100644 index 00000000000..886a8490732 --- /dev/null +++ b/litellm/proxy/_experimental/out/model-hub-table/__next._full.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","model-hub-table",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["model-hub-table",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[157058,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0ogm.~yq5rjmw.js","/litellm-asset-prefix/_next/static/chunks/03fia.h6j.gpu.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","/litellm-asset-prefix/_next/static/chunks/0pwrfxkkt~qfh.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/11kowzys1c43t.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0ogm.~yq5rjmw.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/03fia.h6j.gpu.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwrfxkkt~qfh.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/11kowzys1c43t.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/model-hub-table/__next._head.txt b/litellm/proxy/_experimental/out/model-hub-table/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/model-hub-table/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/model-hub-table/__next._index.txt b/litellm/proxy/_experimental/out/model-hub-table/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/model-hub-table/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/model-hub-table/__next._tree.txt b/litellm/proxy/_experimental/out/model-hub-table/__next._tree.txt new file mode 100644 index 00000000000..bc28a3737f2 --- /dev/null +++ b/litellm/proxy/_experimental/out/model-hub-table/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"(dashboard)","param":null,"prefetchHints":0,"slots":{"children":{"name":"model-hub-table","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/model-hub-table/index.html b/litellm/proxy/_experimental/out/model-hub-table/index.html new file mode 100644 index 00000000000..323dedb4f0e --- /dev/null +++ b/litellm/proxy/_experimental/out/model-hub-table/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
🚅 LiteLLM
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/model-hub-table/index.txt b/litellm/proxy/_experimental/out/model-hub-table/index.txt new file mode 100644 index 00000000000..886a8490732 --- /dev/null +++ b/litellm/proxy/_experimental/out/model-hub-table/index.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","model-hub-table",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["model-hub-table",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[157058,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0ogm.~yq5rjmw.js","/litellm-asset-prefix/_next/static/chunks/03fia.h6j.gpu.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","/litellm-asset-prefix/_next/static/chunks/0pwrfxkkt~qfh.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/11kowzys1c43t.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0ogm.~yq5rjmw.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/03fia.h6j.gpu.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwrfxkkt~qfh.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/11kowzys1c43t.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/model_hub/__next._full.txt b/litellm/proxy/_experimental/out/model_hub/__next._full.txt new file mode 100644 index 00000000000..e71cc545719 --- /dev/null +++ b/litellm/proxy/_experimental/out/model_hub/__next._full.txt @@ -0,0 +1,28 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +8:I[560280,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0q9_qqi.nzx5l.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/00pl5r0.xdcua.js","/litellm-asset-prefix/_next/static/chunks/0tbzoqict3-mi.js","/litellm-asset-prefix/_next/static/chunks/0snrx6.._0zus.js","/litellm-asset-prefix/_next/static/chunks/00jwo~_zp.35~.js","/litellm-asset-prefix/_next/static/chunks/0byy7z~x~srwc.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/0ip1d_6ew-zr2.js"],"default"] +b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +c:"$Sreact.suspense" +10:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","model_hub",""],"q":"","i":false,"f":[[["",{"children":["model_hub",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@9","$@a"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0q9_qqi.nzx5l.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/00pl5r0.xdcua.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0tbzoqict3-mi.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0snrx6.._0zus.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/00jwo~_zp.35~.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0byy7z~x~srwc.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-13",{"src":"/litellm-asset-prefix/_next/static/chunks/0ip1d_6ew-zr2.js","async":true,"nonce":"$undefined"}]],["$","$Lb",null,{"children":["$","$c",null,{"name":"Next.MetadataOutlet","children":"$@d"}]}]]}],{},null,false,null]},null,false,"$@e"]},null,false,null],"$Lf",false]],"m":"$undefined","G":["$10",["$L11","$L12"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +14:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +16:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +13:[] +e:"$W13" +f:["$","$1","h",{"children":[null,["$","$L14",null,{"children":"$L15"}],["$","div",null,{"hidden":true,"children":["$","$L16",null,{"children":["$","$c",null,{"name":"Next.Metadata","children":"$L17"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +11:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +12:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:{} +a:"$0:f:0:1:1:children:1:children:0:props:children:0:props:serverProvidedParams:params" +15:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +18:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +d:null +17:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L18","4",{}]] diff --git a/litellm/proxy/_experimental/out/model_hub/__next._head.txt b/litellm/proxy/_experimental/out/model_hub/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/model_hub/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/model_hub/__next._index.txt b/litellm/proxy/_experimental/out/model_hub/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/model_hub/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/model_hub/__next._tree.txt b/litellm/proxy/_experimental/out/model_hub/__next._tree.txt new file mode 100644 index 00000000000..4798d3fc3fd --- /dev/null +++ b/litellm/proxy/_experimental/out/model_hub/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"model_hub","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/model_hub/__next.model_hub.__PAGE__.txt b/litellm/proxy/_experimental/out/model_hub/__next.model_hub.__PAGE__.txt new file mode 100644 index 00000000000..7022160db2f --- /dev/null +++ b/litellm/proxy/_experimental/out/model_hub/__next.model_hub.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[560280,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0q9_qqi.nzx5l.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/00pl5r0.xdcua.js","/litellm-asset-prefix/_next/static/chunks/0tbzoqict3-mi.js","/litellm-asset-prefix/_next/static/chunks/0snrx6.._0zus.js","/litellm-asset-prefix/_next/static/chunks/00jwo~_zp.35~.js","/litellm-asset-prefix/_next/static/chunks/0byy7z~x~srwc.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/0ip1d_6ew-zr2.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0q9_qqi.nzx5l.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/00pl5r0.xdcua.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0tbzoqict3-mi.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0snrx6.._0zus.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/00jwo~_zp.35~.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0byy7z~x~srwc.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-13",{"src":"/litellm-asset-prefix/_next/static/chunks/0ip1d_6ew-zr2.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/model_hub/__next.model_hub.txt b/litellm/proxy/_experimental/out/model_hub/__next.model_hub.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/model_hub/__next.model_hub.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/model_hub/index.html b/litellm/proxy/_experimental/out/model_hub/index.html new file mode 100644 index 00000000000..ae76abeeabf --- /dev/null +++ b/litellm/proxy/_experimental/out/model_hub/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/model_hub/index.txt b/litellm/proxy/_experimental/out/model_hub/index.txt new file mode 100644 index 00000000000..e71cc545719 --- /dev/null +++ b/litellm/proxy/_experimental/out/model_hub/index.txt @@ -0,0 +1,28 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +8:I[560280,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0q9_qqi.nzx5l.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/00pl5r0.xdcua.js","/litellm-asset-prefix/_next/static/chunks/0tbzoqict3-mi.js","/litellm-asset-prefix/_next/static/chunks/0snrx6.._0zus.js","/litellm-asset-prefix/_next/static/chunks/00jwo~_zp.35~.js","/litellm-asset-prefix/_next/static/chunks/0byy7z~x~srwc.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/0ip1d_6ew-zr2.js"],"default"] +b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +c:"$Sreact.suspense" +10:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","model_hub",""],"q":"","i":false,"f":[[["",{"children":["model_hub",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@9","$@a"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0q9_qqi.nzx5l.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/00pl5r0.xdcua.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0tbzoqict3-mi.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0snrx6.._0zus.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/00jwo~_zp.35~.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0byy7z~x~srwc.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-13",{"src":"/litellm-asset-prefix/_next/static/chunks/0ip1d_6ew-zr2.js","async":true,"nonce":"$undefined"}]],["$","$Lb",null,{"children":["$","$c",null,{"name":"Next.MetadataOutlet","children":"$@d"}]}]]}],{},null,false,null]},null,false,"$@e"]},null,false,null],"$Lf",false]],"m":"$undefined","G":["$10",["$L11","$L12"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +14:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +16:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +13:[] +e:"$W13" +f:["$","$1","h",{"children":[null,["$","$L14",null,{"children":"$L15"}],["$","div",null,{"hidden":true,"children":["$","$L16",null,{"children":["$","$c",null,{"name":"Next.Metadata","children":"$L17"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +11:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +12:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:{} +a:"$0:f:0:1:1:children:1:children:0:props:children:0:props:serverProvidedParams:params" +15:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +18:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +d:null +17:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L18","4",{}]] diff --git a/litellm/proxy/_experimental/out/model_hub_table/__next._full.txt b/litellm/proxy/_experimental/out/model_hub_table/__next._full.txt new file mode 100644 index 00000000000..5e0bf489dcf --- /dev/null +++ b/litellm/proxy/_experimental/out/model_hub_table/__next._full.txt @@ -0,0 +1,32 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +8:I[86408,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/01~uswbzv7_90.js","/litellm-asset-prefix/_next/static/chunks/0n028f.v-dhms.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0ogm.~yq5rjmw.js","/litellm-asset-prefix/_next/static/chunks/0jdm7x5soayfw.js","/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0tbzoqict3-mi.js","/litellm-asset-prefix/_next/static/chunks/0zqdpz_rk5.wq.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/0pwrfxkkt~qfh.js","/litellm-asset-prefix/_next/static/chunks/17b18lwgc39xm.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js"],"default"] +11:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","model_hub_table",""],"q":"","i":false,"f":[[["",{"children":["model_hub_table",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@9","$@a"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/01~uswbzv7_90.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0n028f.v-dhms.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0ogm.~yq5rjmw.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0jdm7x5soayfw.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","async":true,"nonce":"$undefined"}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true,"nonce":"$undefined"}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/0tbzoqict3-mi.js","async":true,"nonce":"$undefined"}],["$","script","script-13",{"src":"/litellm-asset-prefix/_next/static/chunks/0zqdpz_rk5.wq.js","async":true,"nonce":"$undefined"}],["$","script","script-14",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],"$Lb","$Lc","$Ld"],"$Le"]}],{},null,false,null]},null,false,"$@f"]},null,false,null],"$L10",false]],"m":"$undefined","G":["$11",["$L12","$L13"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +14:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +15:"$Sreact.suspense" +18:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1a:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +b:["$","script","script-15",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwrfxkkt~qfh.js","async":true,"nonce":"$undefined"}] +c:["$","script","script-16",{"src":"/litellm-asset-prefix/_next/static/chunks/17b18lwgc39xm.js","async":true,"nonce":"$undefined"}] +d:["$","script","script-17",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}] +e:["$","$L14",null,{"children":["$","$15",null,{"name":"Next.MetadataOutlet","children":"$@16"}]}] +17:[] +f:"$W17" +10:["$","$1","h",{"children":[null,["$","$L18",null,{"children":"$L19"}],["$","div",null,{"hidden":true,"children":["$","$L1a",null,{"children":["$","$15",null,{"name":"Next.Metadata","children":"$L1b"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +12:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +13:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:{} +a:"$0:f:0:1:1:children:1:children:0:props:children:0:props:serverProvidedParams:params" +19:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1c:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +16:null +1b:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1c","4",{}]] diff --git a/litellm/proxy/_experimental/out/model_hub_table/__next._head.txt b/litellm/proxy/_experimental/out/model_hub_table/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/model_hub_table/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/model_hub_table/__next._index.txt b/litellm/proxy/_experimental/out/model_hub_table/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/model_hub_table/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/model_hub_table/__next._tree.txt b/litellm/proxy/_experimental/out/model_hub_table/__next._tree.txt new file mode 100644 index 00000000000..2116e1ec9bb --- /dev/null +++ b/litellm/proxy/_experimental/out/model_hub_table/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"model_hub_table","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/model_hub_table/__next.model_hub_table.__PAGE__.txt b/litellm/proxy/_experimental/out/model_hub_table/__next.model_hub_table.__PAGE__.txt new file mode 100644 index 00000000000..2579f3beb2f --- /dev/null +++ b/litellm/proxy/_experimental/out/model_hub_table/__next.model_hub_table.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[86408,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/01~uswbzv7_90.js","/litellm-asset-prefix/_next/static/chunks/0n028f.v-dhms.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0ogm.~yq5rjmw.js","/litellm-asset-prefix/_next/static/chunks/0jdm7x5soayfw.js","/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0tbzoqict3-mi.js","/litellm-asset-prefix/_next/static/chunks/0zqdpz_rk5.wq.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/0pwrfxkkt~qfh.js","/litellm-asset-prefix/_next/static/chunks/17b18lwgc39xm.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/01~uswbzv7_90.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0n028f.v-dhms.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0ogm.~yq5rjmw.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0jdm7x5soayfw.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","async":true}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/0tbzoqict3-mi.js","async":true}],["$","script","script-13",{"src":"/litellm-asset-prefix/_next/static/chunks/0zqdpz_rk5.wq.js","async":true}],["$","script","script-14",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-15",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwrfxkkt~qfh.js","async":true}],["$","script","script-16",{"src":"/litellm-asset-prefix/_next/static/chunks/17b18lwgc39xm.js","async":true}],["$","script","script-17",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/model_hub_table/__next.model_hub_table.txt b/litellm/proxy/_experimental/out/model_hub_table/__next.model_hub_table.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/model_hub_table/__next.model_hub_table.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/model_hub_table/index.html b/litellm/proxy/_experimental/out/model_hub_table/index.html new file mode 100644 index 00000000000..94771c6a2ea --- /dev/null +++ b/litellm/proxy/_experimental/out/model_hub_table/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/model_hub_table/index.txt b/litellm/proxy/_experimental/out/model_hub_table/index.txt new file mode 100644 index 00000000000..5e0bf489dcf --- /dev/null +++ b/litellm/proxy/_experimental/out/model_hub_table/index.txt @@ -0,0 +1,32 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +8:I[86408,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/01~uswbzv7_90.js","/litellm-asset-prefix/_next/static/chunks/0n028f.v-dhms.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0ogm.~yq5rjmw.js","/litellm-asset-prefix/_next/static/chunks/0jdm7x5soayfw.js","/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0tbzoqict3-mi.js","/litellm-asset-prefix/_next/static/chunks/0zqdpz_rk5.wq.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/0pwrfxkkt~qfh.js","/litellm-asset-prefix/_next/static/chunks/17b18lwgc39xm.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js"],"default"] +11:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","model_hub_table",""],"q":"","i":false,"f":[[["",{"children":["model_hub_table",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@9","$@a"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/01~uswbzv7_90.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0n028f.v-dhms.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0ogm.~yq5rjmw.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0jdm7x5soayfw.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","async":true,"nonce":"$undefined"}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true,"nonce":"$undefined"}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/0tbzoqict3-mi.js","async":true,"nonce":"$undefined"}],["$","script","script-13",{"src":"/litellm-asset-prefix/_next/static/chunks/0zqdpz_rk5.wq.js","async":true,"nonce":"$undefined"}],["$","script","script-14",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],"$Lb","$Lc","$Ld"],"$Le"]}],{},null,false,null]},null,false,"$@f"]},null,false,null],"$L10",false]],"m":"$undefined","G":["$11",["$L12","$L13"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +14:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +15:"$Sreact.suspense" +18:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1a:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +b:["$","script","script-15",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwrfxkkt~qfh.js","async":true,"nonce":"$undefined"}] +c:["$","script","script-16",{"src":"/litellm-asset-prefix/_next/static/chunks/17b18lwgc39xm.js","async":true,"nonce":"$undefined"}] +d:["$","script","script-17",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}] +e:["$","$L14",null,{"children":["$","$15",null,{"name":"Next.MetadataOutlet","children":"$@16"}]}] +17:[] +f:"$W17" +10:["$","$1","h",{"children":[null,["$","$L18",null,{"children":"$L19"}],["$","div",null,{"hidden":true,"children":["$","$L1a",null,{"children":["$","$15",null,{"name":"Next.Metadata","children":"$L1b"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +12:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +13:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:{} +a:"$0:f:0:1:1:children:1:children:0:props:children:0:props:serverProvidedParams:params" +19:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1c:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +16:null +1b:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1c","4",{}]] diff --git a/litellm/proxy/_experimental/out/models-and-endpoints/__next.!KGRhc2hib2FyZCk.models-and-endpoints.__PAGE__.txt b/litellm/proxy/_experimental/out/models-and-endpoints/__next.!KGRhc2hib2FyZCk.models-and-endpoints.__PAGE__.txt new file mode 100644 index 00000000000..74d51157c45 --- /dev/null +++ b/litellm/proxy/_experimental/out/models-and-endpoints/__next.!KGRhc2hib2FyZCk.models-and-endpoints.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[664307,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0aj3r46j-.qsy.js","/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","/litellm-asset-prefix/_next/static/chunks/17e1s6gkzjh5f.js","/litellm-asset-prefix/_next/static/chunks/114pbx0696lkh.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/0.yiw37jc_bvi.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/05btv.l5gro_..js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0mmrbksvmhp.1.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","/litellm-asset-prefix/_next/static/chunks/14_9gq.6yjjih.js","/litellm-asset-prefix/_next/static/chunks/022.sz94ycw4x.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0ecsfnbwne0sn.js","/litellm-asset-prefix/_next/static/chunks/05wzckn7dnk9_.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0aj3r46j-.qsy.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/17e1s6gkzjh5f.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/114pbx0696lkh.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0.yiw37jc_bvi.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/05btv.l5gro_..js","async":true}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/0mmrbksvmhp.1.js","async":true}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true}],["$","script","script-13",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true}],["$","script","script-14",{"src":"/litellm-asset-prefix/_next/static/chunks/14_9gq.6yjjih.js","async":true}],["$","script","script-15",{"src":"/litellm-asset-prefix/_next/static/chunks/022.sz94ycw4x.js","async":true}],["$","script","script-16",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true}],["$","script","script-17",{"src":"/litellm-asset-prefix/_next/static/chunks/0ecsfnbwne0sn.js","async":true}],["$","script","script-18",{"src":"/litellm-asset-prefix/_next/static/chunks/05wzckn7dnk9_.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/models-and-endpoints/__next.!KGRhc2hib2FyZCk.models-and-endpoints.txt b/litellm/proxy/_experimental/out/models-and-endpoints/__next.!KGRhc2hib2FyZCk.models-and-endpoints.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/models-and-endpoints/__next.!KGRhc2hib2FyZCk.models-and-endpoints.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/models-and-endpoints/__next.!KGRhc2hib2FyZCk.txt b/litellm/proxy/_experimental/out/models-and-endpoints/__next.!KGRhc2hib2FyZCk.txt new file mode 100644 index 00000000000..55176f9118b --- /dev/null +++ b/litellm/proxy/_experimental/out/models-and-endpoints/__next.!KGRhc2hib2FyZCk.txt @@ -0,0 +1,7 @@ +1:"$Sreact.fragment" +2:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +3:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +4:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +5:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +0:{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true}]],["$","$L2",null,{"Component":"$3","slots":{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@6"]}}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +6:"$0:rsc:props:children:1:props:serverProvidedParams:params" diff --git a/litellm/proxy/_experimental/out/models-and-endpoints/__next._full.txt b/litellm/proxy/_experimental/out/models-and-endpoints/__next._full.txt new file mode 100644 index 00000000000..ec4e5f645c2 --- /dev/null +++ b/litellm/proxy/_experimental/out/models-and-endpoints/__next._full.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","models-and-endpoints",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["models-and-endpoints",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[664307,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0aj3r46j-.qsy.js","/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","/litellm-asset-prefix/_next/static/chunks/17e1s6gkzjh5f.js","/litellm-asset-prefix/_next/static/chunks/114pbx0696lkh.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/0.yiw37jc_bvi.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/05btv.l5gro_..js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0mmrbksvmhp.1.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","/litellm-asset-prefix/_next/static/chunks/14_9gq.6yjjih.js","/litellm-asset-prefix/_next/static/chunks/022.sz94ycw4x.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0ecsfnbwne0sn.js","/litellm-asset-prefix/_next/static/chunks/05wzckn7dnk9_.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0aj3r46j-.qsy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/17e1s6gkzjh5f.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/114pbx0696lkh.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0.yiw37jc_bvi.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/05btv.l5gro_..js","async":true,"nonce":"$undefined"}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/0mmrbksvmhp.1.js","async":true,"nonce":"$undefined"}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-13",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true,"nonce":"$undefined"}],["$","script","script-14",{"src":"/litellm-asset-prefix/_next/static/chunks/14_9gq.6yjjih.js","async":true,"nonce":"$undefined"}],["$","script","script-15",{"src":"/litellm-asset-prefix/_next/static/chunks/022.sz94ycw4x.js","async":true,"nonce":"$undefined"}],["$","script","script-16",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}],["$","script","script-17",{"src":"/litellm-asset-prefix/_next/static/chunks/0ecsfnbwne0sn.js","async":true,"nonce":"$undefined"}],["$","script","script-18",{"src":"/litellm-asset-prefix/_next/static/chunks/05wzckn7dnk9_.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/models-and-endpoints/__next._head.txt b/litellm/proxy/_experimental/out/models-and-endpoints/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/models-and-endpoints/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/models-and-endpoints/__next._index.txt b/litellm/proxy/_experimental/out/models-and-endpoints/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/models-and-endpoints/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/models-and-endpoints/__next._tree.txt b/litellm/proxy/_experimental/out/models-and-endpoints/__next._tree.txt new file mode 100644 index 00000000000..db4727c9179 --- /dev/null +++ b/litellm/proxy/_experimental/out/models-and-endpoints/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"(dashboard)","param":null,"prefetchHints":0,"slots":{"children":{"name":"models-and-endpoints","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/models-and-endpoints/index.html b/litellm/proxy/_experimental/out/models-and-endpoints/index.html new file mode 100644 index 00000000000..555559d47cb --- /dev/null +++ b/litellm/proxy/_experimental/out/models-and-endpoints/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
🚅 LiteLLM
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/models-and-endpoints/index.txt b/litellm/proxy/_experimental/out/models-and-endpoints/index.txt new file mode 100644 index 00000000000..ec4e5f645c2 --- /dev/null +++ b/litellm/proxy/_experimental/out/models-and-endpoints/index.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","models-and-endpoints",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["models-and-endpoints",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[664307,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0aj3r46j-.qsy.js","/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","/litellm-asset-prefix/_next/static/chunks/17e1s6gkzjh5f.js","/litellm-asset-prefix/_next/static/chunks/114pbx0696lkh.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/0.yiw37jc_bvi.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/05btv.l5gro_..js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0mmrbksvmhp.1.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","/litellm-asset-prefix/_next/static/chunks/14_9gq.6yjjih.js","/litellm-asset-prefix/_next/static/chunks/022.sz94ycw4x.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0ecsfnbwne0sn.js","/litellm-asset-prefix/_next/static/chunks/05wzckn7dnk9_.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0aj3r46j-.qsy.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/17e1s6gkzjh5f.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/114pbx0696lkh.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0.yiw37jc_bvi.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/05btv.l5gro_..js","async":true,"nonce":"$undefined"}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/0mmrbksvmhp.1.js","async":true,"nonce":"$undefined"}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-13",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true,"nonce":"$undefined"}],["$","script","script-14",{"src":"/litellm-asset-prefix/_next/static/chunks/14_9gq.6yjjih.js","async":true,"nonce":"$undefined"}],["$","script","script-15",{"src":"/litellm-asset-prefix/_next/static/chunks/022.sz94ycw4x.js","async":true,"nonce":"$undefined"}],["$","script","script-16",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}],["$","script","script-17",{"src":"/litellm-asset-prefix/_next/static/chunks/0ecsfnbwne0sn.js","async":true,"nonce":"$undefined"}],["$","script","script-18",{"src":"/litellm-asset-prefix/_next/static/chunks/05wzckn7dnk9_.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/next.svg b/litellm/proxy/_experimental/out/next.svg new file mode 100644 index 00000000000..5174b28c565 --- /dev/null +++ b/litellm/proxy/_experimental/out/next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/old-usage/__next.!KGRhc2hib2FyZCk.old-usage.__PAGE__.txt b/litellm/proxy/_experimental/out/old-usage/__next.!KGRhc2hib2FyZCk.old-usage.__PAGE__.txt new file mode 100644 index 00000000000..6cfa4d7fb4e --- /dev/null +++ b/litellm/proxy/_experimental/out/old-usage/__next.!KGRhc2hib2FyZCk.old-usage.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[183051,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","/litellm-asset-prefix/_next/static/chunks/0h274dbe8lloe.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/01y._o853f7le.js","/litellm-asset-prefix/_next/static/chunks/0~0su3wi_7f6-.js","/litellm-asset-prefix/_next/static/chunks/00p.gft-l.6p..js","/litellm-asset-prefix/_next/static/chunks/0ys10755n8os_.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","/litellm-asset-prefix/_next/static/chunks/0kr3_6r.1wa_9.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","/litellm-asset-prefix/_next/static/chunks/0jr8wo_7ak~7n.js","/litellm-asset-prefix/_next/static/chunks/11h.ntqd0jl3z.js","/litellm-asset-prefix/_next/static/chunks/04476udqypzuu.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0h274dbe8lloe.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/01y._o853f7le.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0~0su3wi_7f6-.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/00p.gft-l.6p..js","async":true}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/0ys10755n8os_.js","async":true}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true}],["$","script","script-13",{"src":"/litellm-asset-prefix/_next/static/chunks/0kr3_6r.1wa_9.js","async":true}],["$","script","script-14",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true}],["$","script","script-15",{"src":"/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","async":true}],["$","script","script-16",{"src":"/litellm-asset-prefix/_next/static/chunks/0jr8wo_7ak~7n.js","async":true}],["$","script","script-17",{"src":"/litellm-asset-prefix/_next/static/chunks/11h.ntqd0jl3z.js","async":true}],["$","script","script-18",{"src":"/litellm-asset-prefix/_next/static/chunks/04476udqypzuu.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/old-usage/__next.!KGRhc2hib2FyZCk.old-usage.txt b/litellm/proxy/_experimental/out/old-usage/__next.!KGRhc2hib2FyZCk.old-usage.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/old-usage/__next.!KGRhc2hib2FyZCk.old-usage.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/old-usage/__next.!KGRhc2hib2FyZCk.txt b/litellm/proxy/_experimental/out/old-usage/__next.!KGRhc2hib2FyZCk.txt new file mode 100644 index 00000000000..55176f9118b --- /dev/null +++ b/litellm/proxy/_experimental/out/old-usage/__next.!KGRhc2hib2FyZCk.txt @@ -0,0 +1,7 @@ +1:"$Sreact.fragment" +2:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +3:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +4:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +5:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +0:{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true}]],["$","$L2",null,{"Component":"$3","slots":{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@6"]}}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +6:"$0:rsc:props:children:1:props:serverProvidedParams:params" diff --git a/litellm/proxy/_experimental/out/old-usage/__next._full.txt b/litellm/proxy/_experimental/out/old-usage/__next._full.txt new file mode 100644 index 00000000000..b68f123b6c8 --- /dev/null +++ b/litellm/proxy/_experimental/out/old-usage/__next._full.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","old-usage",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["old-usage",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[183051,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","/litellm-asset-prefix/_next/static/chunks/0h274dbe8lloe.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/01y._o853f7le.js","/litellm-asset-prefix/_next/static/chunks/0~0su3wi_7f6-.js","/litellm-asset-prefix/_next/static/chunks/00p.gft-l.6p..js","/litellm-asset-prefix/_next/static/chunks/0ys10755n8os_.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","/litellm-asset-prefix/_next/static/chunks/0kr3_6r.1wa_9.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","/litellm-asset-prefix/_next/static/chunks/0jr8wo_7ak~7n.js","/litellm-asset-prefix/_next/static/chunks/11h.ntqd0jl3z.js","/litellm-asset-prefix/_next/static/chunks/04476udqypzuu.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0h274dbe8lloe.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/01y._o853f7le.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0~0su3wi_7f6-.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/00p.gft-l.6p..js","async":true,"nonce":"$undefined"}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/0ys10755n8os_.js","async":true,"nonce":"$undefined"}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true,"nonce":"$undefined"}],["$","script","script-13",{"src":"/litellm-asset-prefix/_next/static/chunks/0kr3_6r.1wa_9.js","async":true,"nonce":"$undefined"}],["$","script","script-14",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-15",{"src":"/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","async":true,"nonce":"$undefined"}],["$","script","script-16",{"src":"/litellm-asset-prefix/_next/static/chunks/0jr8wo_7ak~7n.js","async":true,"nonce":"$undefined"}],["$","script","script-17",{"src":"/litellm-asset-prefix/_next/static/chunks/11h.ntqd0jl3z.js","async":true,"nonce":"$undefined"}],["$","script","script-18",{"src":"/litellm-asset-prefix/_next/static/chunks/04476udqypzuu.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/old-usage/__next._head.txt b/litellm/proxy/_experimental/out/old-usage/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/old-usage/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/old-usage/__next._index.txt b/litellm/proxy/_experimental/out/old-usage/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/old-usage/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/old-usage/__next._tree.txt b/litellm/proxy/_experimental/out/old-usage/__next._tree.txt new file mode 100644 index 00000000000..7bb47a8dccd --- /dev/null +++ b/litellm/proxy/_experimental/out/old-usage/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"(dashboard)","param":null,"prefetchHints":0,"slots":{"children":{"name":"old-usage","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/old-usage/index.html b/litellm/proxy/_experimental/out/old-usage/index.html new file mode 100644 index 00000000000..9a2dacba560 --- /dev/null +++ b/litellm/proxy/_experimental/out/old-usage/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
🚅 LiteLLM
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/old-usage/index.txt b/litellm/proxy/_experimental/out/old-usage/index.txt new file mode 100644 index 00000000000..b68f123b6c8 --- /dev/null +++ b/litellm/proxy/_experimental/out/old-usage/index.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","old-usage",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["old-usage",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[183051,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","/litellm-asset-prefix/_next/static/chunks/0h274dbe8lloe.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/01y._o853f7le.js","/litellm-asset-prefix/_next/static/chunks/0~0su3wi_7f6-.js","/litellm-asset-prefix/_next/static/chunks/00p.gft-l.6p..js","/litellm-asset-prefix/_next/static/chunks/0ys10755n8os_.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","/litellm-asset-prefix/_next/static/chunks/0kr3_6r.1wa_9.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","/litellm-asset-prefix/_next/static/chunks/0jr8wo_7ak~7n.js","/litellm-asset-prefix/_next/static/chunks/11h.ntqd0jl3z.js","/litellm-asset-prefix/_next/static/chunks/04476udqypzuu.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0h274dbe8lloe.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/01y._o853f7le.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0~0su3wi_7f6-.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/00p.gft-l.6p..js","async":true,"nonce":"$undefined"}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/0ys10755n8os_.js","async":true,"nonce":"$undefined"}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true,"nonce":"$undefined"}],["$","script","script-13",{"src":"/litellm-asset-prefix/_next/static/chunks/0kr3_6r.1wa_9.js","async":true,"nonce":"$undefined"}],["$","script","script-14",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-15",{"src":"/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","async":true,"nonce":"$undefined"}],["$","script","script-16",{"src":"/litellm-asset-prefix/_next/static/chunks/0jr8wo_7ak~7n.js","async":true,"nonce":"$undefined"}],["$","script","script-17",{"src":"/litellm-asset-prefix/_next/static/chunks/11h.ntqd0jl3z.js","async":true,"nonce":"$undefined"}],["$","script","script-18",{"src":"/litellm-asset-prefix/_next/static/chunks/04476udqypzuu.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/onboarding/__next._full.txt b/litellm/proxy/_experimental/out/onboarding/__next._full.txt new file mode 100644 index 00000000000..9789bf6725b --- /dev/null +++ b/litellm/proxy/_experimental/out/onboarding/__next._full.txt @@ -0,0 +1,25 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +8:I[566606,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0au3mg4n33g_o.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0tbzoqict3-mi.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0bqafy~83g2md.js"],"default"] +b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +c:"$Sreact.suspense" +f:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +11:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +13:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","onboarding",""],"q":"","i":false,"f":[[["",{"children":["onboarding",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@9","$@a"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0au3mg4n33g_o.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0tbzoqict3-mi.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0bqafy~83g2md.js","async":true,"nonce":"$undefined"}]],["$","$Lb",null,{"children":["$","$c",null,{"name":"Next.MetadataOutlet","children":"$@d"}]}]]}],{},null,false,null]},null,false,"$@e"]},null,false,null],["$","$1","h",{"children":[null,["$","$Lf",null,{"children":"$L10"}],["$","div",null,{"hidden":true,"children":["$","$L11",null,{"children":["$","$c",null,{"name":"Next.Metadata","children":"$L12"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$13",[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +14:[] +e:"$W14" +9:{} +a:"$0:f:0:1:1:children:1:children:0:props:children:0:props:serverProvidedParams:params" +10:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +15:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +d:null +12:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L15","4",{}]] diff --git a/litellm/proxy/_experimental/out/onboarding/__next._head.txt b/litellm/proxy/_experimental/out/onboarding/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/onboarding/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/onboarding/__next._index.txt b/litellm/proxy/_experimental/out/onboarding/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/onboarding/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/onboarding/__next._tree.txt b/litellm/proxy/_experimental/out/onboarding/__next._tree.txt new file mode 100644 index 00000000000..4daeaa9b4e3 --- /dev/null +++ b/litellm/proxy/_experimental/out/onboarding/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"onboarding","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/onboarding/__next.onboarding.__PAGE__.txt b/litellm/proxy/_experimental/out/onboarding/__next.onboarding.__PAGE__.txt new file mode 100644 index 00000000000..15f69949ba6 --- /dev/null +++ b/litellm/proxy/_experimental/out/onboarding/__next.onboarding.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[566606,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0au3mg4n33g_o.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0tbzoqict3-mi.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0bqafy~83g2md.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0au3mg4n33g_o.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0tbzoqict3-mi.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0bqafy~83g2md.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/onboarding/__next.onboarding.txt b/litellm/proxy/_experimental/out/onboarding/__next.onboarding.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/onboarding/__next.onboarding.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/onboarding/index.html b/litellm/proxy/_experimental/out/onboarding/index.html new file mode 100644 index 00000000000..5e6db19b0c7 --- /dev/null +++ b/litellm/proxy/_experimental/out/onboarding/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/onboarding/index.txt b/litellm/proxy/_experimental/out/onboarding/index.txt new file mode 100644 index 00000000000..9789bf6725b --- /dev/null +++ b/litellm/proxy/_experimental/out/onboarding/index.txt @@ -0,0 +1,25 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +8:I[566606,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0au3mg4n33g_o.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0tbzoqict3-mi.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0bqafy~83g2md.js"],"default"] +b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +c:"$Sreact.suspense" +f:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +11:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +13:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","onboarding",""],"q":"","i":false,"f":[[["",{"children":["onboarding",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":[["$","$1","c",{"children":[["$","$L7",null,{"Component":"$8","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@9","$@a"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0au3mg4n33g_o.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0tbzoqict3-mi.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0bqafy~83g2md.js","async":true,"nonce":"$undefined"}]],["$","$Lb",null,{"children":["$","$c",null,{"name":"Next.MetadataOutlet","children":"$@d"}]}]]}],{},null,false,null]},null,false,"$@e"]},null,false,null],["$","$1","h",{"children":[null,["$","$Lf",null,{"children":"$L10"}],["$","div",null,{"hidden":true,"children":["$","$L11",null,{"children":["$","$c",null,{"name":"Next.Metadata","children":"$L12"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$13",[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +14:[] +e:"$W14" +9:{} +a:"$0:f:0:1:1:children:1:children:0:props:children:0:props:serverProvidedParams:params" +10:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +15:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +d:null +12:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L15","4",{}]] diff --git a/litellm/proxy/_experimental/out/organizations/__next.!KGRhc2hib2FyZCk.organizations.__PAGE__.txt b/litellm/proxy/_experimental/out/organizations/__next.!KGRhc2hib2FyZCk.organizations.__PAGE__.txt new file mode 100644 index 00000000000..dcd10c6dac3 --- /dev/null +++ b/litellm/proxy/_experimental/out/organizations/__next.!KGRhc2hib2FyZCk.organizations.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[526612,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/04p5iour3skhn.js","/litellm-asset-prefix/_next/static/chunks/0gj2~qks1xrx8.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/16qfko21~_dn~.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0689o862~x~pg.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/04p5iour3skhn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0gj2~qks1xrx8.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/16qfko21~_dn~.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0689o862~x~pg.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/organizations/__next.!KGRhc2hib2FyZCk.organizations.txt b/litellm/proxy/_experimental/out/organizations/__next.!KGRhc2hib2FyZCk.organizations.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/organizations/__next.!KGRhc2hib2FyZCk.organizations.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/organizations/__next.!KGRhc2hib2FyZCk.txt b/litellm/proxy/_experimental/out/organizations/__next.!KGRhc2hib2FyZCk.txt new file mode 100644 index 00000000000..55176f9118b --- /dev/null +++ b/litellm/proxy/_experimental/out/organizations/__next.!KGRhc2hib2FyZCk.txt @@ -0,0 +1,7 @@ +1:"$Sreact.fragment" +2:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +3:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +4:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +5:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +0:{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true}]],["$","$L2",null,{"Component":"$3","slots":{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@6"]}}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +6:"$0:rsc:props:children:1:props:serverProvidedParams:params" diff --git a/litellm/proxy/_experimental/out/organizations/__next._full.txt b/litellm/proxy/_experimental/out/organizations/__next._full.txt new file mode 100644 index 00000000000..5962ac46d10 --- /dev/null +++ b/litellm/proxy/_experimental/out/organizations/__next._full.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","organizations",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["organizations",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[526612,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/04p5iour3skhn.js","/litellm-asset-prefix/_next/static/chunks/0gj2~qks1xrx8.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/16qfko21~_dn~.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0689o862~x~pg.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/04p5iour3skhn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0gj2~qks1xrx8.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/16qfko21~_dn~.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0689o862~x~pg.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/organizations/__next._head.txt b/litellm/proxy/_experimental/out/organizations/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/organizations/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/organizations/__next._index.txt b/litellm/proxy/_experimental/out/organizations/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/organizations/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/organizations/__next._tree.txt b/litellm/proxy/_experimental/out/organizations/__next._tree.txt new file mode 100644 index 00000000000..4d16c8bc438 --- /dev/null +++ b/litellm/proxy/_experimental/out/organizations/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"(dashboard)","param":null,"prefetchHints":0,"slots":{"children":{"name":"organizations","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/organizations/index.html b/litellm/proxy/_experimental/out/organizations/index.html new file mode 100644 index 00000000000..addbabc74c3 --- /dev/null +++ b/litellm/proxy/_experimental/out/organizations/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
🚅 LiteLLM
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/organizations/index.txt b/litellm/proxy/_experimental/out/organizations/index.txt new file mode 100644 index 00000000000..5962ac46d10 --- /dev/null +++ b/litellm/proxy/_experimental/out/organizations/index.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","organizations",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["organizations",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[526612,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/04p5iour3skhn.js","/litellm-asset-prefix/_next/static/chunks/0gj2~qks1xrx8.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/16qfko21~_dn~.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0689o862~x~pg.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/04p5iour3skhn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0gj2~qks1xrx8.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/16qfko21~_dn~.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0689o862~x~pg.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/playground/__next.!KGRhc2hib2FyZCk.playground.__PAGE__.txt b/litellm/proxy/_experimental/out/playground/__next.!KGRhc2hib2FyZCk.playground.__PAGE__.txt new file mode 100644 index 00000000000..7c0a9133d99 --- /dev/null +++ b/litellm/proxy/_experimental/out/playground/__next.!KGRhc2hib2FyZCk.playground.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[213970,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0teffxf7o_863.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/09n64dqzn.le~.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0x6hmpiq7.b-x.js","/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","/litellm-asset-prefix/_next/static/chunks/0m._ijxus~ryi.js","/litellm-asset-prefix/_next/static/chunks/0nnx~7-7e5t~1.js","/litellm-asset-prefix/_next/static/chunks/0mb3erwqomzal.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/16.oisvgwzo8s.js","/litellm-asset-prefix/_next/static/chunks/101az3fsw7lje.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0teffxf7o_863.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/09n64dqzn.le~.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0x6hmpiq7.b-x.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0m._ijxus~ryi.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0nnx~7-7e5t~1.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0mb3erwqomzal.js","async":true}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/16.oisvgwzo8s.js","async":true}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/101az3fsw7lje.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/playground/__next.!KGRhc2hib2FyZCk.playground.txt b/litellm/proxy/_experimental/out/playground/__next.!KGRhc2hib2FyZCk.playground.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/playground/__next.!KGRhc2hib2FyZCk.playground.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/playground/__next.!KGRhc2hib2FyZCk.txt b/litellm/proxy/_experimental/out/playground/__next.!KGRhc2hib2FyZCk.txt new file mode 100644 index 00000000000..55176f9118b --- /dev/null +++ b/litellm/proxy/_experimental/out/playground/__next.!KGRhc2hib2FyZCk.txt @@ -0,0 +1,7 @@ +1:"$Sreact.fragment" +2:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +3:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +4:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +5:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +0:{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true}]],["$","$L2",null,{"Component":"$3","slots":{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@6"]}}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +6:"$0:rsc:props:children:1:props:serverProvidedParams:params" diff --git a/litellm/proxy/_experimental/out/playground/__next._full.txt b/litellm/proxy/_experimental/out/playground/__next._full.txt new file mode 100644 index 00000000000..f7e80d5beaa --- /dev/null +++ b/litellm/proxy/_experimental/out/playground/__next._full.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","playground",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["playground",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[213970,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0teffxf7o_863.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/09n64dqzn.le~.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0x6hmpiq7.b-x.js","/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","/litellm-asset-prefix/_next/static/chunks/0m._ijxus~ryi.js","/litellm-asset-prefix/_next/static/chunks/0nnx~7-7e5t~1.js","/litellm-asset-prefix/_next/static/chunks/0mb3erwqomzal.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/16.oisvgwzo8s.js","/litellm-asset-prefix/_next/static/chunks/101az3fsw7lje.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0teffxf7o_863.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/09n64dqzn.le~.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0x6hmpiq7.b-x.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0m._ijxus~ryi.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0nnx~7-7e5t~1.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0mb3erwqomzal.js","async":true,"nonce":"$undefined"}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true,"nonce":"$undefined"}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/16.oisvgwzo8s.js","async":true,"nonce":"$undefined"}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/101az3fsw7lje.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/playground/__next._head.txt b/litellm/proxy/_experimental/out/playground/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/playground/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/playground/__next._index.txt b/litellm/proxy/_experimental/out/playground/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/playground/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/playground/__next._tree.txt b/litellm/proxy/_experimental/out/playground/__next._tree.txt new file mode 100644 index 00000000000..97827b95185 --- /dev/null +++ b/litellm/proxy/_experimental/out/playground/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"(dashboard)","param":null,"prefetchHints":0,"slots":{"children":{"name":"playground","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/playground/index.html b/litellm/proxy/_experimental/out/playground/index.html new file mode 100644 index 00000000000..72f881616c2 --- /dev/null +++ b/litellm/proxy/_experimental/out/playground/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
🚅 LiteLLM
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/playground/index.txt b/litellm/proxy/_experimental/out/playground/index.txt new file mode 100644 index 00000000000..f7e80d5beaa --- /dev/null +++ b/litellm/proxy/_experimental/out/playground/index.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","playground",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["playground",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[213970,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0teffxf7o_863.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/09n64dqzn.le~.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0x6hmpiq7.b-x.js","/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","/litellm-asset-prefix/_next/static/chunks/0m._ijxus~ryi.js","/litellm-asset-prefix/_next/static/chunks/0nnx~7-7e5t~1.js","/litellm-asset-prefix/_next/static/chunks/0mb3erwqomzal.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/16.oisvgwzo8s.js","/litellm-asset-prefix/_next/static/chunks/101az3fsw7lje.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0teffxf7o_863.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/09n64dqzn.le~.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0x6hmpiq7.b-x.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0m._ijxus~ryi.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0nnx~7-7e5t~1.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0mb3erwqomzal.js","async":true,"nonce":"$undefined"}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true,"nonce":"$undefined"}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/16.oisvgwzo8s.js","async":true,"nonce":"$undefined"}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/101az3fsw7lje.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/policies/__next.!KGRhc2hib2FyZCk.policies.__PAGE__.txt b/litellm/proxy/_experimental/out/policies/__next.!KGRhc2hib2FyZCk.policies.__PAGE__.txt new file mode 100644 index 00000000000..46a532c9472 --- /dev/null +++ b/litellm/proxy/_experimental/out/policies/__next.!KGRhc2hib2FyZCk.policies.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[102616,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/03_wvlr03g~35.js","/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0kqhn69~lkflo.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0k3aqiu733i3f.js","/litellm-asset-prefix/_next/static/chunks/0m._ijxus~ryi.js","/litellm-asset-prefix/_next/static/chunks/0mb3erwqomzal.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/03_wvlr03g~35.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0kqhn69~lkflo.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0k3aqiu733i3f.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0m._ijxus~ryi.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0mb3erwqomzal.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/policies/__next.!KGRhc2hib2FyZCk.policies.txt b/litellm/proxy/_experimental/out/policies/__next.!KGRhc2hib2FyZCk.policies.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/policies/__next.!KGRhc2hib2FyZCk.policies.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/policies/__next.!KGRhc2hib2FyZCk.txt b/litellm/proxy/_experimental/out/policies/__next.!KGRhc2hib2FyZCk.txt new file mode 100644 index 00000000000..55176f9118b --- /dev/null +++ b/litellm/proxy/_experimental/out/policies/__next.!KGRhc2hib2FyZCk.txt @@ -0,0 +1,7 @@ +1:"$Sreact.fragment" +2:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +3:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +4:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +5:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +0:{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true}]],["$","$L2",null,{"Component":"$3","slots":{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@6"]}}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +6:"$0:rsc:props:children:1:props:serverProvidedParams:params" diff --git a/litellm/proxy/_experimental/out/policies/__next._full.txt b/litellm/proxy/_experimental/out/policies/__next._full.txt new file mode 100644 index 00000000000..29de14fc16f --- /dev/null +++ b/litellm/proxy/_experimental/out/policies/__next._full.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","policies",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["policies",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[102616,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/03_wvlr03g~35.js","/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0kqhn69~lkflo.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0k3aqiu733i3f.js","/litellm-asset-prefix/_next/static/chunks/0m._ijxus~ryi.js","/litellm-asset-prefix/_next/static/chunks/0mb3erwqomzal.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/03_wvlr03g~35.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0kqhn69~lkflo.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0k3aqiu733i3f.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0m._ijxus~ryi.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0mb3erwqomzal.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/policies/__next._head.txt b/litellm/proxy/_experimental/out/policies/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/policies/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/policies/__next._index.txt b/litellm/proxy/_experimental/out/policies/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/policies/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/policies/__next._tree.txt b/litellm/proxy/_experimental/out/policies/__next._tree.txt new file mode 100644 index 00000000000..25a2788350a --- /dev/null +++ b/litellm/proxy/_experimental/out/policies/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"(dashboard)","param":null,"prefetchHints":0,"slots":{"children":{"name":"policies","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/policies/index.html b/litellm/proxy/_experimental/out/policies/index.html new file mode 100644 index 00000000000..4c1d934311a --- /dev/null +++ b/litellm/proxy/_experimental/out/policies/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
🚅 LiteLLM
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/policies/index.txt b/litellm/proxy/_experimental/out/policies/index.txt new file mode 100644 index 00000000000..29de14fc16f --- /dev/null +++ b/litellm/proxy/_experimental/out/policies/index.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","policies",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["policies",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[102616,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/03_wvlr03g~35.js","/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0kqhn69~lkflo.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0k3aqiu733i3f.js","/litellm-asset-prefix/_next/static/chunks/0m._ijxus~ryi.js","/litellm-asset-prefix/_next/static/chunks/0mb3erwqomzal.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/03_wvlr03g~35.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0kqhn69~lkflo.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0k3aqiu733i3f.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0m._ijxus~ryi.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0mb3erwqomzal.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/projects/__next.!KGRhc2hib2FyZCk.projects.__PAGE__.txt b/litellm/proxy/_experimental/out/projects/__next.!KGRhc2hib2FyZCk.projects.__PAGE__.txt new file mode 100644 index 00000000000..25cc48f87e3 --- /dev/null +++ b/litellm/proxy/_experimental/out/projects/__next.!KGRhc2hib2FyZCk.projects.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[454587,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/058o-fyv9lb_l.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0~~y94vmu8z5d.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/13c74.fwk0wmq.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/0ys10755n8os_.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","/litellm-asset-prefix/_next/static/chunks/13s0v9siktndj.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0hzdsr8t0ksq..js","/litellm-asset-prefix/_next/static/chunks/0mh1wnrvmv_y7.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/058o-fyv9lb_l.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0~~y94vmu8z5d.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/13c74.fwk0wmq.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0ys10755n8os_.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/13s0v9siktndj.js","async":true}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/0hzdsr8t0ksq..js","async":true}],["$","script","script-13",{"src":"/litellm-asset-prefix/_next/static/chunks/0mh1wnrvmv_y7.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/projects/__next.!KGRhc2hib2FyZCk.projects.txt b/litellm/proxy/_experimental/out/projects/__next.!KGRhc2hib2FyZCk.projects.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/projects/__next.!KGRhc2hib2FyZCk.projects.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/projects/__next.!KGRhc2hib2FyZCk.txt b/litellm/proxy/_experimental/out/projects/__next.!KGRhc2hib2FyZCk.txt new file mode 100644 index 00000000000..55176f9118b --- /dev/null +++ b/litellm/proxy/_experimental/out/projects/__next.!KGRhc2hib2FyZCk.txt @@ -0,0 +1,7 @@ +1:"$Sreact.fragment" +2:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +3:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +4:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +5:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +0:{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true}]],["$","$L2",null,{"Component":"$3","slots":{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@6"]}}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +6:"$0:rsc:props:children:1:props:serverProvidedParams:params" diff --git a/litellm/proxy/_experimental/out/projects/__next._full.txt b/litellm/proxy/_experimental/out/projects/__next._full.txt new file mode 100644 index 00000000000..f62117a6143 --- /dev/null +++ b/litellm/proxy/_experimental/out/projects/__next._full.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","projects",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["projects",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[454587,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/058o-fyv9lb_l.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0~~y94vmu8z5d.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/13c74.fwk0wmq.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/0ys10755n8os_.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","/litellm-asset-prefix/_next/static/chunks/13s0v9siktndj.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0hzdsr8t0ksq..js","/litellm-asset-prefix/_next/static/chunks/0mh1wnrvmv_y7.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/058o-fyv9lb_l.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0~~y94vmu8z5d.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/13c74.fwk0wmq.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0ys10755n8os_.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/13s0v9siktndj.js","async":true,"nonce":"$undefined"}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/0hzdsr8t0ksq..js","async":true,"nonce":"$undefined"}],["$","script","script-13",{"src":"/litellm-asset-prefix/_next/static/chunks/0mh1wnrvmv_y7.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/projects/__next._head.txt b/litellm/proxy/_experimental/out/projects/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/projects/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/projects/__next._index.txt b/litellm/proxy/_experimental/out/projects/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/projects/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/projects/__next._tree.txt b/litellm/proxy/_experimental/out/projects/__next._tree.txt new file mode 100644 index 00000000000..18e4f75787f --- /dev/null +++ b/litellm/proxy/_experimental/out/projects/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"(dashboard)","param":null,"prefetchHints":0,"slots":{"children":{"name":"projects","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/projects/index.html b/litellm/proxy/_experimental/out/projects/index.html new file mode 100644 index 00000000000..f5e12e44148 --- /dev/null +++ b/litellm/proxy/_experimental/out/projects/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
🚅 LiteLLM
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/projects/index.txt b/litellm/proxy/_experimental/out/projects/index.txt new file mode 100644 index 00000000000..f62117a6143 --- /dev/null +++ b/litellm/proxy/_experimental/out/projects/index.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","projects",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["projects",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[454587,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/058o-fyv9lb_l.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0~~y94vmu8z5d.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/13c74.fwk0wmq.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/0ys10755n8os_.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","/litellm-asset-prefix/_next/static/chunks/13s0v9siktndj.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0hzdsr8t0ksq..js","/litellm-asset-prefix/_next/static/chunks/0mh1wnrvmv_y7.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/058o-fyv9lb_l.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0~~y94vmu8z5d.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/13c74.fwk0wmq.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0ys10755n8os_.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/13s0v9siktndj.js","async":true,"nonce":"$undefined"}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/0hzdsr8t0ksq..js","async":true,"nonce":"$undefined"}],["$","script","script-13",{"src":"/litellm-asset-prefix/_next/static/chunks/0mh1wnrvmv_y7.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/prompts/__next.!KGRhc2hib2FyZCk.prompts.__PAGE__.txt b/litellm/proxy/_experimental/out/prompts/__next.!KGRhc2hib2FyZCk.prompts.__PAGE__.txt new file mode 100644 index 00000000000..59908a43fd8 --- /dev/null +++ b/litellm/proxy/_experimental/out/prompts/__next.!KGRhc2hib2FyZCk.prompts.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[66899,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0m.pilqkjqyg3.js","/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","/litellm-asset-prefix/_next/static/chunks/101az3fsw7lje.js","/litellm-asset-prefix/_next/static/chunks/13ln.k6r3lkv_.js","/litellm-asset-prefix/_next/static/chunks/0lb0p7rh5znu_.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0vo11_94ear6l.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0m.pilqkjqyg3.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/101az3fsw7lje.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/13ln.k6r3lkv_.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0lb0p7rh5znu_.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/0vo11_94ear6l.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/prompts/__next.!KGRhc2hib2FyZCk.prompts.txt b/litellm/proxy/_experimental/out/prompts/__next.!KGRhc2hib2FyZCk.prompts.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/prompts/__next.!KGRhc2hib2FyZCk.prompts.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/prompts/__next.!KGRhc2hib2FyZCk.txt b/litellm/proxy/_experimental/out/prompts/__next.!KGRhc2hib2FyZCk.txt new file mode 100644 index 00000000000..55176f9118b --- /dev/null +++ b/litellm/proxy/_experimental/out/prompts/__next.!KGRhc2hib2FyZCk.txt @@ -0,0 +1,7 @@ +1:"$Sreact.fragment" +2:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +3:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +4:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +5:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +0:{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true}]],["$","$L2",null,{"Component":"$3","slots":{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@6"]}}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +6:"$0:rsc:props:children:1:props:serverProvidedParams:params" diff --git a/litellm/proxy/_experimental/out/prompts/__next._full.txt b/litellm/proxy/_experimental/out/prompts/__next._full.txt new file mode 100644 index 00000000000..bf63149f94b --- /dev/null +++ b/litellm/proxy/_experimental/out/prompts/__next._full.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","prompts",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["prompts",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[66899,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0m.pilqkjqyg3.js","/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","/litellm-asset-prefix/_next/static/chunks/101az3fsw7lje.js","/litellm-asset-prefix/_next/static/chunks/13ln.k6r3lkv_.js","/litellm-asset-prefix/_next/static/chunks/0lb0p7rh5znu_.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0vo11_94ear6l.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0m.pilqkjqyg3.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/101az3fsw7lje.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/13ln.k6r3lkv_.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0lb0p7rh5znu_.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/0vo11_94ear6l.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/prompts/__next._head.txt b/litellm/proxy/_experimental/out/prompts/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/prompts/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/prompts/__next._index.txt b/litellm/proxy/_experimental/out/prompts/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/prompts/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/prompts/__next._tree.txt b/litellm/proxy/_experimental/out/prompts/__next._tree.txt new file mode 100644 index 00000000000..99efaa276e5 --- /dev/null +++ b/litellm/proxy/_experimental/out/prompts/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"(dashboard)","param":null,"prefetchHints":0,"slots":{"children":{"name":"prompts","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/prompts/index.html b/litellm/proxy/_experimental/out/prompts/index.html new file mode 100644 index 00000000000..4892bbbdece --- /dev/null +++ b/litellm/proxy/_experimental/out/prompts/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
🚅 LiteLLM
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/prompts/index.txt b/litellm/proxy/_experimental/out/prompts/index.txt new file mode 100644 index 00000000000..bf63149f94b --- /dev/null +++ b/litellm/proxy/_experimental/out/prompts/index.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","prompts",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["prompts",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[66899,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0m.pilqkjqyg3.js","/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","/litellm-asset-prefix/_next/static/chunks/101az3fsw7lje.js","/litellm-asset-prefix/_next/static/chunks/13ln.k6r3lkv_.js","/litellm-asset-prefix/_next/static/chunks/0lb0p7rh5znu_.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0vo11_94ear6l.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0m.pilqkjqyg3.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0m6zdocif1gl4.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/101az3fsw7lje.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/13ln.k6r3lkv_.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0lb0p7rh5znu_.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/0vo11_94ear6l.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/router-settings/__next.!KGRhc2hib2FyZCk.router-settings.__PAGE__.txt b/litellm/proxy/_experimental/out/router-settings/__next.!KGRhc2hib2FyZCk.router-settings.__PAGE__.txt new file mode 100644 index 00000000000..3a82b9c89ff --- /dev/null +++ b/litellm/proxy/_experimental/out/router-settings/__next.!KGRhc2hib2FyZCk.router-settings.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[389543,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0jzxuesytdzt0.js","/litellm-asset-prefix/_next/static/chunks/0.bx44y-6~tug.js","/litellm-asset-prefix/_next/static/chunks/08is8lfgypp_2.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0nnx~7-7e5t~1.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/15.9ylrtxojbj.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/15rg~y4h.lcrl.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0jzxuesytdzt0.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.bx44y-6~tug.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/08is8lfgypp_2.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0nnx~7-7e5t~1.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/15.9ylrtxojbj.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/15rg~y4h.lcrl.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/router-settings/__next.!KGRhc2hib2FyZCk.router-settings.txt b/litellm/proxy/_experimental/out/router-settings/__next.!KGRhc2hib2FyZCk.router-settings.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/router-settings/__next.!KGRhc2hib2FyZCk.router-settings.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/router-settings/__next.!KGRhc2hib2FyZCk.txt b/litellm/proxy/_experimental/out/router-settings/__next.!KGRhc2hib2FyZCk.txt new file mode 100644 index 00000000000..55176f9118b --- /dev/null +++ b/litellm/proxy/_experimental/out/router-settings/__next.!KGRhc2hib2FyZCk.txt @@ -0,0 +1,7 @@ +1:"$Sreact.fragment" +2:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +3:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +4:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +5:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +0:{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true}]],["$","$L2",null,{"Component":"$3","slots":{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@6"]}}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +6:"$0:rsc:props:children:1:props:serverProvidedParams:params" diff --git a/litellm/proxy/_experimental/out/router-settings/__next._full.txt b/litellm/proxy/_experimental/out/router-settings/__next._full.txt new file mode 100644 index 00000000000..0c2867777fe --- /dev/null +++ b/litellm/proxy/_experimental/out/router-settings/__next._full.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","router-settings",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["router-settings",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[389543,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0jzxuesytdzt0.js","/litellm-asset-prefix/_next/static/chunks/0.bx44y-6~tug.js","/litellm-asset-prefix/_next/static/chunks/08is8lfgypp_2.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0nnx~7-7e5t~1.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/15.9ylrtxojbj.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/15rg~y4h.lcrl.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0jzxuesytdzt0.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.bx44y-6~tug.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/08is8lfgypp_2.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0nnx~7-7e5t~1.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/15.9ylrtxojbj.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/15rg~y4h.lcrl.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/router-settings/__next._head.txt b/litellm/proxy/_experimental/out/router-settings/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/router-settings/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/router-settings/__next._index.txt b/litellm/proxy/_experimental/out/router-settings/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/router-settings/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/router-settings/__next._tree.txt b/litellm/proxy/_experimental/out/router-settings/__next._tree.txt new file mode 100644 index 00000000000..052b2255a99 --- /dev/null +++ b/litellm/proxy/_experimental/out/router-settings/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"(dashboard)","param":null,"prefetchHints":0,"slots":{"children":{"name":"router-settings","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/router-settings/index.html b/litellm/proxy/_experimental/out/router-settings/index.html new file mode 100644 index 00000000000..7d01c7b91bc --- /dev/null +++ b/litellm/proxy/_experimental/out/router-settings/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
🚅 LiteLLM
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/router-settings/index.txt b/litellm/proxy/_experimental/out/router-settings/index.txt new file mode 100644 index 00000000000..0c2867777fe --- /dev/null +++ b/litellm/proxy/_experimental/out/router-settings/index.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","router-settings",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["router-settings",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[389543,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0jzxuesytdzt0.js","/litellm-asset-prefix/_next/static/chunks/0.bx44y-6~tug.js","/litellm-asset-prefix/_next/static/chunks/08is8lfgypp_2.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0nnx~7-7e5t~1.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/15.9ylrtxojbj.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/15rg~y4h.lcrl.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0jzxuesytdzt0.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.bx44y-6~tug.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/08is8lfgypp_2.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0nnx~7-7e5t~1.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/15.9ylrtxojbj.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/15rg~y4h.lcrl.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/search-tools/__next.!KGRhc2hib2FyZCk.search-tools.__PAGE__.txt b/litellm/proxy/_experimental/out/search-tools/__next.!KGRhc2hib2FyZCk.search-tools.__PAGE__.txt new file mode 100644 index 00000000000..b51b936b3a9 --- /dev/null +++ b/litellm/proxy/_experimental/out/search-tools/__next.!KGRhc2hib2FyZCk.search-tools.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[962296,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0ovmgshl9hfea.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/01_xjyxcb1uco.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0ovmgshl9hfea.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/01_xjyxcb1uco.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/search-tools/__next.!KGRhc2hib2FyZCk.search-tools.txt b/litellm/proxy/_experimental/out/search-tools/__next.!KGRhc2hib2FyZCk.search-tools.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/search-tools/__next.!KGRhc2hib2FyZCk.search-tools.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/search-tools/__next.!KGRhc2hib2FyZCk.txt b/litellm/proxy/_experimental/out/search-tools/__next.!KGRhc2hib2FyZCk.txt new file mode 100644 index 00000000000..55176f9118b --- /dev/null +++ b/litellm/proxy/_experimental/out/search-tools/__next.!KGRhc2hib2FyZCk.txt @@ -0,0 +1,7 @@ +1:"$Sreact.fragment" +2:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +3:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +4:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +5:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +0:{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true}]],["$","$L2",null,{"Component":"$3","slots":{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@6"]}}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +6:"$0:rsc:props:children:1:props:serverProvidedParams:params" diff --git a/litellm/proxy/_experimental/out/search-tools/__next._full.txt b/litellm/proxy/_experimental/out/search-tools/__next._full.txt new file mode 100644 index 00000000000..05918c288f5 --- /dev/null +++ b/litellm/proxy/_experimental/out/search-tools/__next._full.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","search-tools",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["search-tools",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[962296,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0ovmgshl9hfea.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/01_xjyxcb1uco.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0ovmgshl9hfea.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/01_xjyxcb1uco.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/search-tools/__next._head.txt b/litellm/proxy/_experimental/out/search-tools/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/search-tools/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/search-tools/__next._index.txt b/litellm/proxy/_experimental/out/search-tools/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/search-tools/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/search-tools/__next._tree.txt b/litellm/proxy/_experimental/out/search-tools/__next._tree.txt new file mode 100644 index 00000000000..fdefa78a15c --- /dev/null +++ b/litellm/proxy/_experimental/out/search-tools/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"(dashboard)","param":null,"prefetchHints":0,"slots":{"children":{"name":"search-tools","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/search-tools/index.html b/litellm/proxy/_experimental/out/search-tools/index.html new file mode 100644 index 00000000000..b2c4b50bff0 --- /dev/null +++ b/litellm/proxy/_experimental/out/search-tools/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
🚅 LiteLLM
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/search-tools/index.txt b/litellm/proxy/_experimental/out/search-tools/index.txt new file mode 100644 index 00000000000..05918c288f5 --- /dev/null +++ b/litellm/proxy/_experimental/out/search-tools/index.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","search-tools",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["search-tools",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[962296,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0ovmgshl9hfea.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/01_xjyxcb1uco.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0ovmgshl9hfea.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/01_xjyxcb1uco.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/skills/__next.!KGRhc2hib2FyZCk.skills.__PAGE__.txt b/litellm/proxy/_experimental/out/skills/__next.!KGRhc2hib2FyZCk.skills.__PAGE__.txt new file mode 100644 index 00000000000..c4d408ce52e --- /dev/null +++ b/litellm/proxy/_experimental/out/skills/__next.!KGRhc2hib2FyZCk.skills.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[974992,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0hzj3mfqun9q~.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0hzj3mfqun9q~.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/skills/__next.!KGRhc2hib2FyZCk.skills.txt b/litellm/proxy/_experimental/out/skills/__next.!KGRhc2hib2FyZCk.skills.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/skills/__next.!KGRhc2hib2FyZCk.skills.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/skills/__next.!KGRhc2hib2FyZCk.txt b/litellm/proxy/_experimental/out/skills/__next.!KGRhc2hib2FyZCk.txt new file mode 100644 index 00000000000..55176f9118b --- /dev/null +++ b/litellm/proxy/_experimental/out/skills/__next.!KGRhc2hib2FyZCk.txt @@ -0,0 +1,7 @@ +1:"$Sreact.fragment" +2:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +3:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +4:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +5:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +0:{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true}]],["$","$L2",null,{"Component":"$3","slots":{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@6"]}}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +6:"$0:rsc:props:children:1:props:serverProvidedParams:params" diff --git a/litellm/proxy/_experimental/out/skills/__next._full.txt b/litellm/proxy/_experimental/out/skills/__next._full.txt new file mode 100644 index 00000000000..21c21dd19b7 --- /dev/null +++ b/litellm/proxy/_experimental/out/skills/__next._full.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","skills",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["skills",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[974992,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0hzj3mfqun9q~.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0hzj3mfqun9q~.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/skills/__next._head.txt b/litellm/proxy/_experimental/out/skills/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/skills/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/skills/__next._index.txt b/litellm/proxy/_experimental/out/skills/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/skills/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/skills/__next._tree.txt b/litellm/proxy/_experimental/out/skills/__next._tree.txt new file mode 100644 index 00000000000..6013c599eb6 --- /dev/null +++ b/litellm/proxy/_experimental/out/skills/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"(dashboard)","param":null,"prefetchHints":0,"slots":{"children":{"name":"skills","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/skills/index.html b/litellm/proxy/_experimental/out/skills/index.html new file mode 100644 index 00000000000..9b90685f717 --- /dev/null +++ b/litellm/proxy/_experimental/out/skills/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
🚅 LiteLLM
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/skills/index.txt b/litellm/proxy/_experimental/out/skills/index.txt new file mode 100644 index 00000000000..21c21dd19b7 --- /dev/null +++ b/litellm/proxy/_experimental/out/skills/index.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","skills",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["skills",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[974992,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0hzj3mfqun9q~.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0hzj3mfqun9q~.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/tag-management/__next.!KGRhc2hib2FyZCk.tag-management.__PAGE__.txt b/litellm/proxy/_experimental/out/tag-management/__next.!KGRhc2hib2FyZCk.tag-management.__PAGE__.txt new file mode 100644 index 00000000000..8067a3a321e --- /dev/null +++ b/litellm/proxy/_experimental/out/tag-management/__next.!KGRhc2hib2FyZCk.tag-management.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[601757,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/17j1m89pizunk.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/03l9yp-0vdrvg.js","/litellm-asset-prefix/_next/static/chunks/14566-_ogh-19.js","/litellm-asset-prefix/_next/static/chunks/0mh1wnrvmv_y7.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","/litellm-asset-prefix/_next/static/chunks/0d2qt-f_paso0.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/17j1m89pizunk.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/03l9yp-0vdrvg.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/14566-_ogh-19.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0mh1wnrvmv_y7.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/0d2qt-f_paso0.js","async":true}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/tag-management/__next.!KGRhc2hib2FyZCk.tag-management.txt b/litellm/proxy/_experimental/out/tag-management/__next.!KGRhc2hib2FyZCk.tag-management.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/tag-management/__next.!KGRhc2hib2FyZCk.tag-management.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/tag-management/__next.!KGRhc2hib2FyZCk.txt b/litellm/proxy/_experimental/out/tag-management/__next.!KGRhc2hib2FyZCk.txt new file mode 100644 index 00000000000..55176f9118b --- /dev/null +++ b/litellm/proxy/_experimental/out/tag-management/__next.!KGRhc2hib2FyZCk.txt @@ -0,0 +1,7 @@ +1:"$Sreact.fragment" +2:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +3:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +4:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +5:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +0:{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true}]],["$","$L2",null,{"Component":"$3","slots":{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@6"]}}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +6:"$0:rsc:props:children:1:props:serverProvidedParams:params" diff --git a/litellm/proxy/_experimental/out/tag-management/__next._full.txt b/litellm/proxy/_experimental/out/tag-management/__next._full.txt new file mode 100644 index 00000000000..56806f311e8 --- /dev/null +++ b/litellm/proxy/_experimental/out/tag-management/__next._full.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","tag-management",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["tag-management",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[601757,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/17j1m89pizunk.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/03l9yp-0vdrvg.js","/litellm-asset-prefix/_next/static/chunks/14566-_ogh-19.js","/litellm-asset-prefix/_next/static/chunks/0mh1wnrvmv_y7.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","/litellm-asset-prefix/_next/static/chunks/0d2qt-f_paso0.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/17j1m89pizunk.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/03l9yp-0vdrvg.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/14566-_ogh-19.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0mh1wnrvmv_y7.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true,"nonce":"$undefined"}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/0d2qt-f_paso0.js","async":true,"nonce":"$undefined"}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/tag-management/__next._head.txt b/litellm/proxy/_experimental/out/tag-management/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/tag-management/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/tag-management/__next._index.txt b/litellm/proxy/_experimental/out/tag-management/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/tag-management/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/tag-management/__next._tree.txt b/litellm/proxy/_experimental/out/tag-management/__next._tree.txt new file mode 100644 index 00000000000..cad2d2f718e --- /dev/null +++ b/litellm/proxy/_experimental/out/tag-management/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"(dashboard)","param":null,"prefetchHints":0,"slots":{"children":{"name":"tag-management","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/tag-management/index.html b/litellm/proxy/_experimental/out/tag-management/index.html new file mode 100644 index 00000000000..91293e858e5 --- /dev/null +++ b/litellm/proxy/_experimental/out/tag-management/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
🚅 LiteLLM
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/tag-management/index.txt b/litellm/proxy/_experimental/out/tag-management/index.txt new file mode 100644 index 00000000000..56806f311e8 --- /dev/null +++ b/litellm/proxy/_experimental/out/tag-management/index.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","tag-management",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["tag-management",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[601757,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/17j1m89pizunk.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/03l9yp-0vdrvg.js","/litellm-asset-prefix/_next/static/chunks/14566-_ogh-19.js","/litellm-asset-prefix/_next/static/chunks/0mh1wnrvmv_y7.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","/litellm-asset-prefix/_next/static/chunks/0d2qt-f_paso0.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/17j1m89pizunk.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/03l9yp-0vdrvg.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/14566-_ogh-19.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0mh1wnrvmv_y7.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true,"nonce":"$undefined"}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/0d2qt-f_paso0.js","async":true,"nonce":"$undefined"}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/teams/__next.!KGRhc2hib2FyZCk.teams.__PAGE__.txt b/litellm/proxy/_experimental/out/teams/__next.!KGRhc2hib2FyZCk.teams.__PAGE__.txt new file mode 100644 index 00000000000..970171bf710 --- /dev/null +++ b/litellm/proxy/_experimental/out/teams/__next.!KGRhc2hib2FyZCk.teams.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[596115,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","/litellm-asset-prefix/_next/static/chunks/184o99uxk88c7.js","/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","/litellm-asset-prefix/_next/static/chunks/02nrwvikmd-wf.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0md97r_057_33.js","/litellm-asset-prefix/_next/static/chunks/0-85n.4jrc2vv.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/02oicwo.~e~ak.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0mmrbksvmhp.1.js","/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","/litellm-asset-prefix/_next/static/chunks/142-5lmjc6wc~.js","/litellm-asset-prefix/_next/static/chunks/0mh1wnrvmv_y7.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/184o99uxk88c7.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02nrwvikmd-wf.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0md97r_057_33.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-85n.4jrc2vv.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/02oicwo.~e~ak.js","async":true}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true}],["$","script","script-13",{"src":"/litellm-asset-prefix/_next/static/chunks/0mmrbksvmhp.1.js","async":true}],["$","script","script-14",{"src":"/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","async":true}],["$","script","script-15",{"src":"/litellm-asset-prefix/_next/static/chunks/142-5lmjc6wc~.js","async":true}],["$","script","script-16",{"src":"/litellm-asset-prefix/_next/static/chunks/0mh1wnrvmv_y7.js","async":true}],["$","script","script-17",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/teams/__next.!KGRhc2hib2FyZCk.teams.txt b/litellm/proxy/_experimental/out/teams/__next.!KGRhc2hib2FyZCk.teams.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/teams/__next.!KGRhc2hib2FyZCk.teams.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/teams/__next.!KGRhc2hib2FyZCk.txt b/litellm/proxy/_experimental/out/teams/__next.!KGRhc2hib2FyZCk.txt new file mode 100644 index 00000000000..55176f9118b --- /dev/null +++ b/litellm/proxy/_experimental/out/teams/__next.!KGRhc2hib2FyZCk.txt @@ -0,0 +1,7 @@ +1:"$Sreact.fragment" +2:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +3:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +4:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +5:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +0:{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true}]],["$","$L2",null,{"Component":"$3","slots":{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@6"]}}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +6:"$0:rsc:props:children:1:props:serverProvidedParams:params" diff --git a/litellm/proxy/_experimental/out/teams/__next._full.txt b/litellm/proxy/_experimental/out/teams/__next._full.txt new file mode 100644 index 00000000000..9495cc62468 --- /dev/null +++ b/litellm/proxy/_experimental/out/teams/__next._full.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","teams",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["teams",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[596115,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","/litellm-asset-prefix/_next/static/chunks/184o99uxk88c7.js","/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","/litellm-asset-prefix/_next/static/chunks/02nrwvikmd-wf.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0md97r_057_33.js","/litellm-asset-prefix/_next/static/chunks/0-85n.4jrc2vv.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/02oicwo.~e~ak.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0mmrbksvmhp.1.js","/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","/litellm-asset-prefix/_next/static/chunks/142-5lmjc6wc~.js","/litellm-asset-prefix/_next/static/chunks/0mh1wnrvmv_y7.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/184o99uxk88c7.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02nrwvikmd-wf.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0md97r_057_33.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-85n.4jrc2vv.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/02oicwo.~e~ak.js","async":true,"nonce":"$undefined"}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-13",{"src":"/litellm-asset-prefix/_next/static/chunks/0mmrbksvmhp.1.js","async":true,"nonce":"$undefined"}],["$","script","script-14",{"src":"/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","async":true,"nonce":"$undefined"}],["$","script","script-15",{"src":"/litellm-asset-prefix/_next/static/chunks/142-5lmjc6wc~.js","async":true,"nonce":"$undefined"}],["$","script","script-16",{"src":"/litellm-asset-prefix/_next/static/chunks/0mh1wnrvmv_y7.js","async":true,"nonce":"$undefined"}],["$","script","script-17",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/teams/__next._head.txt b/litellm/proxy/_experimental/out/teams/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/teams/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/teams/__next._index.txt b/litellm/proxy/_experimental/out/teams/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/teams/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/teams/__next._tree.txt b/litellm/proxy/_experimental/out/teams/__next._tree.txt new file mode 100644 index 00000000000..b36cb2787ab --- /dev/null +++ b/litellm/proxy/_experimental/out/teams/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"(dashboard)","param":null,"prefetchHints":0,"slots":{"children":{"name":"teams","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/teams/index.html b/litellm/proxy/_experimental/out/teams/index.html new file mode 100644 index 00000000000..df321f5c878 --- /dev/null +++ b/litellm/proxy/_experimental/out/teams/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
🚅 LiteLLM
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/teams/index.txt b/litellm/proxy/_experimental/out/teams/index.txt new file mode 100644 index 00000000000..9495cc62468 --- /dev/null +++ b/litellm/proxy/_experimental/out/teams/index.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","teams",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["teams",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[596115,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","/litellm-asset-prefix/_next/static/chunks/184o99uxk88c7.js","/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","/litellm-asset-prefix/_next/static/chunks/02nrwvikmd-wf.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0md97r_057_33.js","/litellm-asset-prefix/_next/static/chunks/0-85n.4jrc2vv.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/02oicwo.~e~ak.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0mmrbksvmhp.1.js","/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","/litellm-asset-prefix/_next/static/chunks/142-5lmjc6wc~.js","/litellm-asset-prefix/_next/static/chunks/0mh1wnrvmv_y7.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/184o99uxk88c7.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02nrwvikmd-wf.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0md97r_057_33.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-85n.4jrc2vv.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/02oicwo.~e~ak.js","async":true,"nonce":"$undefined"}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-13",{"src":"/litellm-asset-prefix/_next/static/chunks/0mmrbksvmhp.1.js","async":true,"nonce":"$undefined"}],["$","script","script-14",{"src":"/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","async":true,"nonce":"$undefined"}],["$","script","script-15",{"src":"/litellm-asset-prefix/_next/static/chunks/142-5lmjc6wc~.js","async":true,"nonce":"$undefined"}],["$","script","script-16",{"src":"/litellm-asset-prefix/_next/static/chunks/0mh1wnrvmv_y7.js","async":true,"nonce":"$undefined"}],["$","script","script-17",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/tool-policies/__next.!KGRhc2hib2FyZCk.tool-policies.__PAGE__.txt b/litellm/proxy/_experimental/out/tool-policies/__next.!KGRhc2hib2FyZCk.tool-policies.__PAGE__.txt new file mode 100644 index 00000000000..f1232e25654 --- /dev/null +++ b/litellm/proxy/_experimental/out/tool-policies/__next.!KGRhc2hib2FyZCk.tool-policies.__PAGE__.txt @@ -0,0 +1,10 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[752754,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/07_~yky8gc9_m.js","/litellm-asset-prefix/_next/static/chunks/0-f.2po-pctaa.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/09dh.hm0vr~61.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/036wlkuzplhfz.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +:HL["/litellm-asset-prefix/_next/static/chunks/0jib1e4hgitwz.css","style"] +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0jib1e4hgitwz.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/07_~yky8gc9_m.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0-f.2po-pctaa.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/09dh.hm0vr~61.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/036wlkuzplhfz.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/tool-policies/__next.!KGRhc2hib2FyZCk.tool-policies.txt b/litellm/proxy/_experimental/out/tool-policies/__next.!KGRhc2hib2FyZCk.tool-policies.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/tool-policies/__next.!KGRhc2hib2FyZCk.tool-policies.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/tool-policies/__next.!KGRhc2hib2FyZCk.txt b/litellm/proxy/_experimental/out/tool-policies/__next.!KGRhc2hib2FyZCk.txt new file mode 100644 index 00000000000..55176f9118b --- /dev/null +++ b/litellm/proxy/_experimental/out/tool-policies/__next.!KGRhc2hib2FyZCk.txt @@ -0,0 +1,7 @@ +1:"$Sreact.fragment" +2:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +3:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +4:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +5:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +0:{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true}]],["$","$L2",null,{"Component":"$3","slots":{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@6"]}}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +6:"$0:rsc:props:children:1:props:serverProvidedParams:params" diff --git a/litellm/proxy/_experimental/out/tool-policies/__next._full.txt b/litellm/proxy/_experimental/out/tool-policies/__next._full.txt new file mode 100644 index 00000000000..1a0edf2c773 --- /dev/null +++ b/litellm/proxy/_experimental/out/tool-policies/__next._full.txt @@ -0,0 +1,34 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +:HL["/litellm-asset-prefix/_next/static/chunks/0jib1e4hgitwz.css","style"] +0:{"P":null,"c":["","tool-policies",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["tool-policies",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[752754,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/07_~yky8gc9_m.js","/litellm-asset-prefix/_next/static/chunks/0-f.2po-pctaa.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/09dh.hm0vr~61.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/036wlkuzplhfz.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0jib1e4hgitwz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/07_~yky8gc9_m.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0-f.2po-pctaa.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/09dh.hm0vr~61.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/036wlkuzplhfz.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/tool-policies/__next._head.txt b/litellm/proxy/_experimental/out/tool-policies/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/tool-policies/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/tool-policies/__next._index.txt b/litellm/proxy/_experimental/out/tool-policies/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/tool-policies/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/tool-policies/__next._tree.txt b/litellm/proxy/_experimental/out/tool-policies/__next._tree.txt new file mode 100644 index 00000000000..86148d402ba --- /dev/null +++ b/litellm/proxy/_experimental/out/tool-policies/__next._tree.txt @@ -0,0 +1,5 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +:HL["/litellm-asset-prefix/_next/static/chunks/0jib1e4hgitwz.css","style"] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"(dashboard)","param":null,"prefetchHints":0,"slots":{"children":{"name":"tool-policies","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/tool-policies/index.html b/litellm/proxy/_experimental/out/tool-policies/index.html new file mode 100644 index 00000000000..ec64b257bd0 --- /dev/null +++ b/litellm/proxy/_experimental/out/tool-policies/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
🚅 LiteLLM
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/tool-policies/index.txt b/litellm/proxy/_experimental/out/tool-policies/index.txt new file mode 100644 index 00000000000..1a0edf2c773 --- /dev/null +++ b/litellm/proxy/_experimental/out/tool-policies/index.txt @@ -0,0 +1,34 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +:HL["/litellm-asset-prefix/_next/static/chunks/0jib1e4hgitwz.css","style"] +0:{"P":null,"c":["","tool-policies",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["tool-policies",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[752754,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/07_~yky8gc9_m.js","/litellm-asset-prefix/_next/static/chunks/0-f.2po-pctaa.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/09dh.hm0vr~61.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/036wlkuzplhfz.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0jib1e4hgitwz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0uu6lckpr0s15.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/07_~yky8gc9_m.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0-f.2po-pctaa.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/09dh.hm0vr~61.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/036wlkuzplhfz.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/transform-request/__next.!KGRhc2hib2FyZCk.transform-request.__PAGE__.txt b/litellm/proxy/_experimental/out/transform-request/__next.!KGRhc2hib2FyZCk.transform-request.__PAGE__.txt new file mode 100644 index 00000000000..e5d94678c20 --- /dev/null +++ b/litellm/proxy/_experimental/out/transform-request/__next.!KGRhc2hib2FyZCk.transform-request.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[411929,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0pu3ltw1cci2~.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0pu3ltw1cci2~.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/transform-request/__next.!KGRhc2hib2FyZCk.transform-request.txt b/litellm/proxy/_experimental/out/transform-request/__next.!KGRhc2hib2FyZCk.transform-request.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/transform-request/__next.!KGRhc2hib2FyZCk.transform-request.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/transform-request/__next.!KGRhc2hib2FyZCk.txt b/litellm/proxy/_experimental/out/transform-request/__next.!KGRhc2hib2FyZCk.txt new file mode 100644 index 00000000000..55176f9118b --- /dev/null +++ b/litellm/proxy/_experimental/out/transform-request/__next.!KGRhc2hib2FyZCk.txt @@ -0,0 +1,7 @@ +1:"$Sreact.fragment" +2:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +3:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +4:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +5:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +0:{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true}]],["$","$L2",null,{"Component":"$3","slots":{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@6"]}}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +6:"$0:rsc:props:children:1:props:serverProvidedParams:params" diff --git a/litellm/proxy/_experimental/out/transform-request/__next._full.txt b/litellm/proxy/_experimental/out/transform-request/__next._full.txt new file mode 100644 index 00000000000..bba228338f5 --- /dev/null +++ b/litellm/proxy/_experimental/out/transform-request/__next._full.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","transform-request",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["transform-request",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[411929,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0pu3ltw1cci2~.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0pu3ltw1cci2~.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/transform-request/__next._head.txt b/litellm/proxy/_experimental/out/transform-request/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/transform-request/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/transform-request/__next._index.txt b/litellm/proxy/_experimental/out/transform-request/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/transform-request/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/transform-request/__next._tree.txt b/litellm/proxy/_experimental/out/transform-request/__next._tree.txt new file mode 100644 index 00000000000..bdeccdd31cc --- /dev/null +++ b/litellm/proxy/_experimental/out/transform-request/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"(dashboard)","param":null,"prefetchHints":0,"slots":{"children":{"name":"transform-request","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/transform-request/index.html b/litellm/proxy/_experimental/out/transform-request/index.html new file mode 100644 index 00000000000..02b33320ad4 --- /dev/null +++ b/litellm/proxy/_experimental/out/transform-request/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
🚅 LiteLLM
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/transform-request/index.txt b/litellm/proxy/_experimental/out/transform-request/index.txt new file mode 100644 index 00000000000..bba228338f5 --- /dev/null +++ b/litellm/proxy/_experimental/out/transform-request/index.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","transform-request",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["transform-request",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[411929,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0pu3ltw1cci2~.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0pu3ltw1cci2~.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/ui-theme/__next.!KGRhc2hib2FyZCk.txt b/litellm/proxy/_experimental/out/ui-theme/__next.!KGRhc2hib2FyZCk.txt new file mode 100644 index 00000000000..55176f9118b --- /dev/null +++ b/litellm/proxy/_experimental/out/ui-theme/__next.!KGRhc2hib2FyZCk.txt @@ -0,0 +1,7 @@ +1:"$Sreact.fragment" +2:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +3:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +4:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +5:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +0:{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true}]],["$","$L2",null,{"Component":"$3","slots":{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@6"]}}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +6:"$0:rsc:props:children:1:props:serverProvidedParams:params" diff --git a/litellm/proxy/_experimental/out/ui-theme/__next.!KGRhc2hib2FyZCk.ui-theme.__PAGE__.txt b/litellm/proxy/_experimental/out/ui-theme/__next.!KGRhc2hib2FyZCk.ui-theme.__PAGE__.txt new file mode 100644 index 00000000000..9cf863efda0 --- /dev/null +++ b/litellm/proxy/_experimental/out/ui-theme/__next.!KGRhc2hib2FyZCk.ui-theme.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[312130,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/17cvpyw6fshd4.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/17cvpyw6fshd4.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/ui-theme/__next.!KGRhc2hib2FyZCk.ui-theme.txt b/litellm/proxy/_experimental/out/ui-theme/__next.!KGRhc2hib2FyZCk.ui-theme.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/ui-theme/__next.!KGRhc2hib2FyZCk.ui-theme.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/ui-theme/__next._full.txt b/litellm/proxy/_experimental/out/ui-theme/__next._full.txt new file mode 100644 index 00000000000..43d82875670 --- /dev/null +++ b/litellm/proxy/_experimental/out/ui-theme/__next._full.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","ui-theme",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["ui-theme",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[312130,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/17cvpyw6fshd4.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/17cvpyw6fshd4.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/ui-theme/__next._head.txt b/litellm/proxy/_experimental/out/ui-theme/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/ui-theme/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/ui-theme/__next._index.txt b/litellm/proxy/_experimental/out/ui-theme/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/ui-theme/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/ui-theme/__next._tree.txt b/litellm/proxy/_experimental/out/ui-theme/__next._tree.txt new file mode 100644 index 00000000000..c6209906f5d --- /dev/null +++ b/litellm/proxy/_experimental/out/ui-theme/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"(dashboard)","param":null,"prefetchHints":0,"slots":{"children":{"name":"ui-theme","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/ui-theme/index.html b/litellm/proxy/_experimental/out/ui-theme/index.html new file mode 100644 index 00000000000..010804ed959 --- /dev/null +++ b/litellm/proxy/_experimental/out/ui-theme/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
🚅 LiteLLM
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/ui-theme/index.txt b/litellm/proxy/_experimental/out/ui-theme/index.txt new file mode 100644 index 00000000000..43d82875670 --- /dev/null +++ b/litellm/proxy/_experimental/out/ui-theme/index.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","ui-theme",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["ui-theme",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[312130,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/17cvpyw6fshd4.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/17cvpyw6fshd4.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/usage/__next.!KGRhc2hib2FyZCk.txt b/litellm/proxy/_experimental/out/usage/__next.!KGRhc2hib2FyZCk.txt new file mode 100644 index 00000000000..55176f9118b --- /dev/null +++ b/litellm/proxy/_experimental/out/usage/__next.!KGRhc2hib2FyZCk.txt @@ -0,0 +1,7 @@ +1:"$Sreact.fragment" +2:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +3:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +4:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +5:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +0:{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true}]],["$","$L2",null,{"Component":"$3","slots":{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@6"]}}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +6:"$0:rsc:props:children:1:props:serverProvidedParams:params" diff --git a/litellm/proxy/_experimental/out/usage/__next.!KGRhc2hib2FyZCk.usage.__PAGE__.txt b/litellm/proxy/_experimental/out/usage/__next.!KGRhc2hib2FyZCk.usage.__PAGE__.txt new file mode 100644 index 00000000000..27078feb5dc --- /dev/null +++ b/litellm/proxy/_experimental/out/usage/__next.!KGRhc2hib2FyZCk.usage.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[986888,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/0sxgv7gc5lm3g.js","/litellm-asset-prefix/_next/static/chunks/0mspdfvjqoti_.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/04476udqypzuu.js","/litellm-asset-prefix/_next/static/chunks/0lku60vnd9m1i.js","/litellm-asset-prefix/_next/static/chunks/0ys10755n8os_.js","/litellm-asset-prefix/_next/static/chunks/036wlkuzplhfz.js","/litellm-asset-prefix/_next/static/chunks/101az3fsw7lje.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0tgl~~_4hb1rp.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","/litellm-asset-prefix/_next/static/chunks/0jr8wo_7ak~7n.js","/litellm-asset-prefix/_next/static/chunks/0kr3_6r.1wa_9.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0sxgv7gc5lm3g.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mspdfvjqoti_.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/04476udqypzuu.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0lku60vnd9m1i.js","async":true}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/0ys10755n8os_.js","async":true}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/036wlkuzplhfz.js","async":true}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/101az3fsw7lje.js","async":true}],["$","script","script-13",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true}],["$","script","script-14",{"src":"/litellm-asset-prefix/_next/static/chunks/0tgl~~_4hb1rp.js","async":true}],["$","script","script-15",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true}],["$","script","script-16",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true}],["$","script","script-17",{"src":"/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","async":true}],["$","script","script-18",{"src":"/litellm-asset-prefix/_next/static/chunks/0jr8wo_7ak~7n.js","async":true}],["$","script","script-19",{"src":"/litellm-asset-prefix/_next/static/chunks/0kr3_6r.1wa_9.js","async":true}],["$","script","script-20",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/usage/__next.!KGRhc2hib2FyZCk.usage.txt b/litellm/proxy/_experimental/out/usage/__next.!KGRhc2hib2FyZCk.usage.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/usage/__next.!KGRhc2hib2FyZCk.usage.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/usage/__next._full.txt b/litellm/proxy/_experimental/out/usage/__next._full.txt new file mode 100644 index 00000000000..a97925d068a --- /dev/null +++ b/litellm/proxy/_experimental/out/usage/__next._full.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","usage",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["usage",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[986888,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/0sxgv7gc5lm3g.js","/litellm-asset-prefix/_next/static/chunks/0mspdfvjqoti_.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/04476udqypzuu.js","/litellm-asset-prefix/_next/static/chunks/0lku60vnd9m1i.js","/litellm-asset-prefix/_next/static/chunks/0ys10755n8os_.js","/litellm-asset-prefix/_next/static/chunks/036wlkuzplhfz.js","/litellm-asset-prefix/_next/static/chunks/101az3fsw7lje.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0tgl~~_4hb1rp.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","/litellm-asset-prefix/_next/static/chunks/0jr8wo_7ak~7n.js","/litellm-asset-prefix/_next/static/chunks/0kr3_6r.1wa_9.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0sxgv7gc5lm3g.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mspdfvjqoti_.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/04476udqypzuu.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0lku60vnd9m1i.js","async":true,"nonce":"$undefined"}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/0ys10755n8os_.js","async":true,"nonce":"$undefined"}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/036wlkuzplhfz.js","async":true,"nonce":"$undefined"}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/101az3fsw7lje.js","async":true,"nonce":"$undefined"}],["$","script","script-13",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-14",{"src":"/litellm-asset-prefix/_next/static/chunks/0tgl~~_4hb1rp.js","async":true,"nonce":"$undefined"}],["$","script","script-15",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true,"nonce":"$undefined"}],["$","script","script-16",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-17",{"src":"/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","async":true,"nonce":"$undefined"}],["$","script","script-18",{"src":"/litellm-asset-prefix/_next/static/chunks/0jr8wo_7ak~7n.js","async":true,"nonce":"$undefined"}],["$","script","script-19",{"src":"/litellm-asset-prefix/_next/static/chunks/0kr3_6r.1wa_9.js","async":true,"nonce":"$undefined"}],["$","script","script-20",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/usage/__next._head.txt b/litellm/proxy/_experimental/out/usage/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/usage/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/usage/__next._index.txt b/litellm/proxy/_experimental/out/usage/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/usage/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/usage/__next._tree.txt b/litellm/proxy/_experimental/out/usage/__next._tree.txt new file mode 100644 index 00000000000..5a794218d6e --- /dev/null +++ b/litellm/proxy/_experimental/out/usage/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"(dashboard)","param":null,"prefetchHints":0,"slots":{"children":{"name":"usage","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/usage/index.html b/litellm/proxy/_experimental/out/usage/index.html new file mode 100644 index 00000000000..ae8f0056e31 --- /dev/null +++ b/litellm/proxy/_experimental/out/usage/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
🚅 LiteLLM
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/usage/index.txt b/litellm/proxy/_experimental/out/usage/index.txt new file mode 100644 index 00000000000..a97925d068a --- /dev/null +++ b/litellm/proxy/_experimental/out/usage/index.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","usage",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["usage",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[986888,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/0sxgv7gc5lm3g.js","/litellm-asset-prefix/_next/static/chunks/0mspdfvjqoti_.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/04476udqypzuu.js","/litellm-asset-prefix/_next/static/chunks/0lku60vnd9m1i.js","/litellm-asset-prefix/_next/static/chunks/0ys10755n8os_.js","/litellm-asset-prefix/_next/static/chunks/036wlkuzplhfz.js","/litellm-asset-prefix/_next/static/chunks/101az3fsw7lje.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0tgl~~_4hb1rp.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","/litellm-asset-prefix/_next/static/chunks/0jr8wo_7ak~7n.js","/litellm-asset-prefix/_next/static/chunks/0kr3_6r.1wa_9.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/011mgw.-67gs_.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0sxgv7gc5lm3g.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mspdfvjqoti_.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/04476udqypzuu.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0lku60vnd9m1i.js","async":true,"nonce":"$undefined"}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/0ys10755n8os_.js","async":true,"nonce":"$undefined"}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/036wlkuzplhfz.js","async":true,"nonce":"$undefined"}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/101az3fsw7lje.js","async":true,"nonce":"$undefined"}],["$","script","script-13",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-14",{"src":"/litellm-asset-prefix/_next/static/chunks/0tgl~~_4hb1rp.js","async":true,"nonce":"$undefined"}],["$","script","script-15",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true,"nonce":"$undefined"}],["$","script","script-16",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-17",{"src":"/litellm-asset-prefix/_next/static/chunks/0-3i_.uof35pm.js","async":true,"nonce":"$undefined"}],["$","script","script-18",{"src":"/litellm-asset-prefix/_next/static/chunks/0jr8wo_7ak~7n.js","async":true,"nonce":"$undefined"}],["$","script","script-19",{"src":"/litellm-asset-prefix/_next/static/chunks/0kr3_6r.1wa_9.js","async":true,"nonce":"$undefined"}],["$","script","script-20",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/users/__next.!KGRhc2hib2FyZCk.txt b/litellm/proxy/_experimental/out/users/__next.!KGRhc2hib2FyZCk.txt new file mode 100644 index 00000000000..55176f9118b --- /dev/null +++ b/litellm/proxy/_experimental/out/users/__next.!KGRhc2hib2FyZCk.txt @@ -0,0 +1,7 @@ +1:"$Sreact.fragment" +2:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +3:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +4:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +5:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +0:{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true}]],["$","$L2",null,{"Component":"$3","slots":{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@6"]}}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +6:"$0:rsc:props:children:1:props:serverProvidedParams:params" diff --git a/litellm/proxy/_experimental/out/users/__next.!KGRhc2hib2FyZCk.users.__PAGE__.txt b/litellm/proxy/_experimental/out/users/__next.!KGRhc2hib2FyZCk.users.__PAGE__.txt new file mode 100644 index 00000000000..d283c952bf5 --- /dev/null +++ b/litellm/proxy/_experimental/out/users/__next.!KGRhc2hib2FyZCk.users.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[198134,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0ql_-8xthluga.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/04~mux1g2xqfl.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/06x5y8ia4k1mc.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0lstohw6r.qs..js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0ql_-8xthluga.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/04~mux1g2xqfl.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/06x5y8ia4k1mc.js","async":true}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/0lstohw6r.qs..js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/users/__next.!KGRhc2hib2FyZCk.users.txt b/litellm/proxy/_experimental/out/users/__next.!KGRhc2hib2FyZCk.users.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/users/__next.!KGRhc2hib2FyZCk.users.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/users/__next._full.txt b/litellm/proxy/_experimental/out/users/__next._full.txt new file mode 100644 index 00000000000..cc7b3aa3def --- /dev/null +++ b/litellm/proxy/_experimental/out/users/__next._full.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","users",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["users",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[198134,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0ql_-8xthluga.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/04~mux1g2xqfl.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/06x5y8ia4k1mc.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0lstohw6r.qs..js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0ql_-8xthluga.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/04~mux1g2xqfl.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/06x5y8ia4k1mc.js","async":true,"nonce":"$undefined"}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/0lstohw6r.qs..js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/users/__next._head.txt b/litellm/proxy/_experimental/out/users/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/users/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/users/__next._index.txt b/litellm/proxy/_experimental/out/users/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/users/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/users/__next._tree.txt b/litellm/proxy/_experimental/out/users/__next._tree.txt new file mode 100644 index 00000000000..8f0921d0e30 --- /dev/null +++ b/litellm/proxy/_experimental/out/users/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"(dashboard)","param":null,"prefetchHints":0,"slots":{"children":{"name":"users","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/users/index.html b/litellm/proxy/_experimental/out/users/index.html new file mode 100644 index 00000000000..5058b399dd1 --- /dev/null +++ b/litellm/proxy/_experimental/out/users/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
🚅 LiteLLM
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/users/index.txt b/litellm/proxy/_experimental/out/users/index.txt new file mode 100644 index 00000000000..cc7b3aa3def --- /dev/null +++ b/litellm/proxy/_experimental/out/users/index.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","users",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["users",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[198134,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0ql_-8xthluga.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/04~mux1g2xqfl.js","/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/06x5y8ia4k1mc.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0lstohw6r.qs..js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0ql_-8xthluga.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/04~mux1g2xqfl.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0q6~n4y84cejn.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0v1rxqc1hqmrl.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/06x5y8ia4k1mc.js","async":true,"nonce":"$undefined"}],["$","script","script-11",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-12",{"src":"/litellm-asset-prefix/_next/static/chunks/0lstohw6r.qs..js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/vector-stores/__next.!KGRhc2hib2FyZCk.txt b/litellm/proxy/_experimental/out/vector-stores/__next.!KGRhc2hib2FyZCk.txt new file mode 100644 index 00000000000..55176f9118b --- /dev/null +++ b/litellm/proxy/_experimental/out/vector-stores/__next.!KGRhc2hib2FyZCk.txt @@ -0,0 +1,7 @@ +1:"$Sreact.fragment" +2:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +3:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +4:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +5:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +0:{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true}]],["$","$L2",null,{"Component":"$3","slots":{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@6"]}}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +6:"$0:rsc:props:children:1:props:serverProvidedParams:params" diff --git a/litellm/proxy/_experimental/out/vector-stores/__next.!KGRhc2hib2FyZCk.vector-stores.__PAGE__.txt b/litellm/proxy/_experimental/out/vector-stores/__next.!KGRhc2hib2FyZCk.vector-stores.__PAGE__.txt new file mode 100644 index 00000000000..8d013632a67 --- /dev/null +++ b/litellm/proxy/_experimental/out/vector-stores/__next.!KGRhc2hib2FyZCk.vector-stores.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[400157,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0ceh~7zrbxj.y.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/0uy6wzxw5oh5v.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0m._ijxus~ryi.js","/litellm-asset-prefix/_next/static/chunks/10ybnll3qh-8s.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0ceh~7zrbxj.y.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0uy6wzxw5oh5v.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0m._ijxus~ryi.js","async":true}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/10ybnll3qh-8s.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/vector-stores/__next.!KGRhc2hib2FyZCk.vector-stores.txt b/litellm/proxy/_experimental/out/vector-stores/__next.!KGRhc2hib2FyZCk.vector-stores.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/vector-stores/__next.!KGRhc2hib2FyZCk.vector-stores.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/vector-stores/__next._full.txt b/litellm/proxy/_experimental/out/vector-stores/__next._full.txt new file mode 100644 index 00000000000..2f5206305e3 --- /dev/null +++ b/litellm/proxy/_experimental/out/vector-stores/__next._full.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","vector-stores",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["vector-stores",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[400157,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0ceh~7zrbxj.y.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/0uy6wzxw5oh5v.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0m._ijxus~ryi.js","/litellm-asset-prefix/_next/static/chunks/10ybnll3qh-8s.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0ceh~7zrbxj.y.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0uy6wzxw5oh5v.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0m._ijxus~ryi.js","async":true,"nonce":"$undefined"}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/10ybnll3qh-8s.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/vector-stores/__next._head.txt b/litellm/proxy/_experimental/out/vector-stores/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/vector-stores/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/vector-stores/__next._index.txt b/litellm/proxy/_experimental/out/vector-stores/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/vector-stores/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/vector-stores/__next._tree.txt b/litellm/proxy/_experimental/out/vector-stores/__next._tree.txt new file mode 100644 index 00000000000..f204c2f6e2c --- /dev/null +++ b/litellm/proxy/_experimental/out/vector-stores/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"(dashboard)","param":null,"prefetchHints":0,"slots":{"children":{"name":"vector-stores","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/vector-stores/index.html b/litellm/proxy/_experimental/out/vector-stores/index.html new file mode 100644 index 00000000000..57dfeb41203 --- /dev/null +++ b/litellm/proxy/_experimental/out/vector-stores/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
🚅 LiteLLM
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/vector-stores/index.txt b/litellm/proxy/_experimental/out/vector-stores/index.txt new file mode 100644 index 00000000000..2f5206305e3 --- /dev/null +++ b/litellm/proxy/_experimental/out/vector-stores/index.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","vector-stores",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["vector-stores",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[400157,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/0ceh~7zrbxj.y.js","/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","/litellm-asset-prefix/_next/static/chunks/0uy6wzxw5oh5v.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0m._ijxus~ryi.js","/litellm-asset-prefix/_next/static/chunks/10ybnll3qh-8s.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0ceh~7zrbxj.y.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/00q4mtjboprhm.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0el08tticy_20.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0sx3mu2_l9g_y.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0uy6wzxw5oh5v.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/0l7em-5kjv49e.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0m._ijxus~ryi.js","async":true,"nonce":"$undefined"}],["$","script","script-10",{"src":"/litellm-asset-prefix/_next/static/chunks/10ybnll3qh-8s.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/vercel.svg b/litellm/proxy/_experimental/out/vercel.svg new file mode 100644 index 00000000000..d2f84222734 --- /dev/null +++ b/litellm/proxy/_experimental/out/vercel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/litellm/proxy/_experimental/out/workflows/__next.!KGRhc2hib2FyZCk.txt b/litellm/proxy/_experimental/out/workflows/__next.!KGRhc2hib2FyZCk.txt new file mode 100644 index 00000000000..55176f9118b --- /dev/null +++ b/litellm/proxy/_experimental/out/workflows/__next.!KGRhc2hib2FyZCk.txt @@ -0,0 +1,7 @@ +1:"$Sreact.fragment" +2:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +3:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +4:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +5:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +0:{"rsc":["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true}]],["$","$L2",null,{"Component":"$3","slots":{"children":["$","$L4",null,{"parallelRouterKey":"children","template":["$","$L5",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@6"]}}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +6:"$0:rsc:props:children:1:props:serverProvidedParams:params" diff --git a/litellm/proxy/_experimental/out/workflows/__next.!KGRhc2hib2FyZCk.workflows.__PAGE__.txt b/litellm/proxy/_experimental/out/workflows/__next.!KGRhc2hib2FyZCk.workflows.__PAGE__.txt new file mode 100644 index 00000000000..bffc2e441df --- /dev/null +++ b/litellm/proxy/_experimental/out/workflows/__next.!KGRhc2hib2FyZCk.workflows.__PAGE__.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +3:I[425656,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/02c1-r_khzb89.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js"],"default"] +6:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +7:"$Sreact.suspense" +0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{"Component":"$3","serverProvidedParams":{"searchParams":{},"params":{},"promises":["$@4","$@5"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/02c1-r_khzb89.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true}]],["$","$L6",null,{"children":["$","$7",null,{"name":"Next.MetadataOutlet","children":"$@8"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} +4:{} +5:"$0:rsc:props:children:0:props:serverProvidedParams:params" +8:null diff --git a/litellm/proxy/_experimental/out/workflows/__next.!KGRhc2hib2FyZCk.workflows.txt b/litellm/proxy/_experimental/out/workflows/__next.!KGRhc2hib2FyZCk.workflows.txt new file mode 100644 index 00000000000..fd3f84cd0fe --- /dev/null +++ b/litellm/proxy/_experimental/out/workflows/__next.!KGRhc2hib2FyZCk.workflows.txt @@ -0,0 +1,5 @@ +1:"$Sreact.fragment" +2:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:[] +0:{"rsc":["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","template":["$","$L3",null,{}]}]]}],"isPartial":false,"staleTime":300,"varyParams":"$W4","buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/workflows/__next._full.txt b/litellm/proxy/_experimental/out/workflows/__next._full.txt new file mode 100644 index 00000000000..81a845bd908 --- /dev/null +++ b/litellm/proxy/_experimental/out/workflows/__next._full.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","workflows",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["workflows",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[425656,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/02c1-r_khzb89.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/02c1-r_khzb89.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_experimental/out/workflows/__next._head.txt b/litellm/proxy/_experimental/out/workflows/__next._head.txt new file mode 100644 index 00000000000..27acd699792 --- /dev/null +++ b/litellm/proxy/_experimental/out/workflows/__next._head.txt @@ -0,0 +1,6 @@ +1:"$Sreact.fragment" +2:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +3:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +4:"$Sreact.suspense" +5:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L5","4",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/workflows/__next._index.txt b/litellm/proxy/_experimental/out/workflows/__next._index.txt new file mode 100644 index 00000000000..9714fd22643 --- /dev/null +++ b/litellm/proxy/_experimental/out/workflows/__next._index.txt @@ -0,0 +1,9 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]}]}]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/workflows/__next._tree.txt b/litellm/proxy/_experimental/out/workflows/__next._tree.txt new file mode 100644 index 00000000000..9e9c4a3f240 --- /dev/null +++ b/litellm/proxy/_experimental/out/workflows/__next._tree.txt @@ -0,0 +1,4 @@ +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"(dashboard)","param":null,"prefetchHints":0,"slots":{"children":{"name":"workflows","param":null,"prefetchHints":0,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}}}}}},"staleTime":300,"buildId":"5rDiFx0t_mOGYmV_8kSkw"} diff --git a/litellm/proxy/_experimental/out/workflows/index.html b/litellm/proxy/_experimental/out/workflows/index.html new file mode 100644 index 00000000000..e573d37dd68 --- /dev/null +++ b/litellm/proxy/_experimental/out/workflows/index.html @@ -0,0 +1 @@ +LiteLLM Dashboard
🚅 LiteLLM
Loading...
\ No newline at end of file diff --git a/litellm/proxy/_experimental/out/workflows/index.txt b/litellm/proxy/_experimental/out/workflows/index.txt new file mode 100644 index 00000000000..81a845bd908 --- /dev/null +++ b/litellm/proxy/_experimental/out/workflows/index.txt @@ -0,0 +1,33 @@ +1:"$Sreact.fragment" +2:I[867271,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +3:I[71195,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +4:I[557951,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"AuthProvider"] +5:I[339756,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +6:I[837457,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default"] +7:I[92825,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientSegmentRoot"] +8:I[216370,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js"],"default"] +e:I[168027,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"default",1] +:HL["/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","style"] +:HL["/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","style"] +:HL["/litellm-asset-prefix/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2","font",{"crossOrigin":"","type":"font/woff2"}] +0:{"P":null,"c":["","workflows",""],"q":"","i":false,"f":[[["",{"children":["(dashboard)",{"children":["workflows",{"children":["__PAGE__",{}]}]}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"className":"inter_5972bc34-module__OU16Qa__className","children":["$","$L2",null,{"children":["$","$L3",null,{"children":["$","$L4",null,{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]}]}]}]]}],{"children":[["$","$1","c",{"children":[[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","async":true,"nonce":"$undefined"}],["$","script","script-4",{"src":"/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","async":true,"nonce":"$undefined"}],["$","script","script-5",{"src":"/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","async":true,"nonce":"$undefined"}],["$","script","script-6",{"src":"/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","async":true,"nonce":"$undefined"}],["$","script","script-7",{"src":"/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","async":true,"nonce":"$undefined"}],["$","script","script-8",{"src":"/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","async":true,"nonce":"$undefined"}],["$","script","script-9",{"src":"/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","async":true,"nonce":"$undefined"}]],["$","$L7",null,{"Component":"$8","slots":{"children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:style","children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:1:props:style","children":404}],["$","div",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:style","children":["$","h2",null,{"style":"$0:f:0:1:0:props:children:1:props:children:props:children:props:children:props:children:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style","children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@9"]}}]]}],{"children":["$La",{"children":["$Lb",{},null,false,null]},null,false,"$@c"]},null,false,null]},null,false,null],"$Ld",false]],"m":"$undefined","G":["$e",["$Lf","$L10"]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"5rDiFx0t_mOGYmV_8kSkw"} +11:I[347257,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ClientPageRoot"] +12:I[425656,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js","/litellm-asset-prefix/_next/static/chunks/0whkizop7gd0~.js","/litellm-asset-prefix/_next/static/chunks/0-ih8xcz_89nt.js","/litellm-asset-prefix/_next/static/chunks/0pd5zl~lciww9.js","/litellm-asset-prefix/_next/static/chunks/02ihc5xweq16v.js","/litellm-asset-prefix/_next/static/chunks/0lg.6rbfsd-l9.js","/litellm-asset-prefix/_next/static/chunks/0mzw3maijoev6.js","/litellm-asset-prefix/_next/static/chunks/043q3g5-5-aju.js","/litellm-asset-prefix/_next/static/chunks/04amwk-x_vjxu.js","/litellm-asset-prefix/_next/static/chunks/0-dhh1_d1.b1u.js","/litellm-asset-prefix/_next/static/chunks/0pwkd9r.mc_ee.js","/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","/litellm-asset-prefix/_next/static/chunks/02c1-r_khzb89.js","/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js"],"default"] +15:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"OutletBoundary"] +16:"$Sreact.suspense" +19:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"ViewportBoundary"] +1b:I[897367,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"MetadataBoundary"] +a:["$","$1","c",{"children":[null,["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}] +b:["$","$1","c",{"children":[["$","$L11",null,{"Component":"$12","serverProvidedParams":{"searchParams":{},"params":"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params","promises":["$@13","$@14"]}}],[["$","script","script-0",{"src":"/litellm-asset-prefix/_next/static/chunks/0_y-b9_d9dsuv.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/litellm-asset-prefix/_next/static/chunks/02c1-r_khzb89.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/litellm-asset-prefix/_next/static/chunks/0zrbitbm~0koh.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/litellm-asset-prefix/_next/static/chunks/0c4pfjjue0uc-.js","async":true,"nonce":"$undefined"}]],["$","$L15",null,{"children":["$","$16",null,{"name":"Next.MetadataOutlet","children":"$@17"}]}]]}] +18:[] +c:"$W18" +d:["$","$1","h",{"children":[null,["$","$L19",null,{"children":"$L1a"}],["$","div",null,{"hidden":true,"children":["$","$L1b",null,{"children":["$","$16",null,{"name":"Next.Metadata","children":"$L1c"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}] +f:["$","link","0",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/05qmwjqau64bz.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +10:["$","link","1",{"rel":"stylesheet","href":"/litellm-asset-prefix/_next/static/chunks/0i77.0u.82o9u.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}] +9:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +13:{} +14:"$0:f:0:1:1:children:0:props:children:1:props:serverProvidedParams:params" +1a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] +1d:I[27201,["/litellm-asset-prefix/_next/static/chunks/0n.a~e5dwfnkn.js","/litellm-asset-prefix/_next/static/chunks/0.4.bbjx7y007.js","/litellm-asset-prefix/_next/static/chunks/0pidya1qvuvx8.js"],"IconMark"] +17:null +1c:[["$","title","0",{"children":"LiteLLM Dashboard"}],["$","meta","1",{"name":"description","content":"LiteLLM Proxy Admin UI"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0~dgapwhi~75y.ico","sizes":"48x48","type":"image/x-icon"}],["$","link","3",{"rel":"icon","href":"/get_favicon"}],["$","$L1d","4",{}]] diff --git a/litellm/proxy/_new_new_secret_config.yaml b/litellm/proxy/_new_new_secret_config.yaml new file mode 100644 index 00000000000..7932cc20fe9 --- /dev/null +++ b/litellm/proxy/_new_new_secret_config.yaml @@ -0,0 +1,14 @@ +model_list: + - model_name: bedrock-claude + litellm_params: + model: bedrock/anthropic.claude-3-5-sonnet-20240620-v1:0 + aws_region_name: us-east-1 + aws_access_key_id: os.environ/AWS_ACCESS_KEY_ID + aws_secret_access_key: os.environ/AWS_SECRET_ACCESS_KEY + +litellm_settings: + callbacks: ["datadog"] # logs llm success + failure logs on datadog + service_callback: ["datadog"] # logs redis, postgres failures on datadog + +general_settings: + store_prompts_in_spend_logs: true diff --git a/litellm/proxy/_new_secret_config.yaml b/litellm/proxy/_new_secret_config.yaml new file mode 100644 index 00000000000..703fe6adc41 --- /dev/null +++ b/litellm/proxy/_new_secret_config.yaml @@ -0,0 +1,83 @@ +# model_list: +# - model_name: claude-sonnet-4-6 +# litellm_params: {model: anthropic/claude-sonnet-4-6} +# model_info: +# litellm_routing_preferences: +# quality_tier: 1 +# keywords: [tin] +# - model_name: gpt-4o-mini +# litellm_params: {model: openai/gpt-4o-mini} +# model_info: +# litellm_routing_preferences: +# quality_tier: 1 +# keywords: [] +# - model_name: gpt-4o +# litellm_params: {model: openai/gpt-4o} +# model_info: +# litellm_routing_preferences: +# quality_tier: 2 +# keywords: [vision, function_calling] +# - model_name: opus +# litellm_params: {model: anthropic/claude-opus-4-7} +# model_info: +# litellm_routing_preferences: +# quality_tier: 3 +# keywords: ["architecture", "design"] +# - model_name: my-quality-router +# litellm_params: +# model: auto_router/adaptive_router +# adaptive_router_default_model: gpt-4o-mini +# adaptive_router_config: +# available_models: [gpt-4o-mini, gpt-4o, opus, claude-sonnet-4-6] +# Example proxy config for the adaptive router (v0). +# +# Wires one logical router ("smart-cheap-router") that adaptively picks between +# two real deployments ("fast" and "smart") based on per-session feedback signals. +# +# How to use from a client: +# POST /v1/chat/completions { "model": "smart-cheap-router", ... } +# Add { "metadata": { "litellm_session_id": "" } } to enable +# sticky-session routing within a conversation. +# +# Required env vars: OPENAI_API_KEY, DATABASE_URL. + +model_list: + # ---- The adaptive router "control" deployment ------------------------- + # `model_name` is what clients call. `available_models` lists the underlying + # deployments the router is allowed to pick from (must match other model_name + # entries in this list). + - model_name: smart-cheap-router + litellm_params: + model: auto_router/adaptive_router + adaptive_router_config: + available_models: ["fast", "smart"] + weights: + quality: 0.7 + cost: 0.3 + + # ---- Underlying deployments the router picks from --------------------- + - model_name: fast + litellm_params: + model: anthropic/claude-sonnet-4-6 + api_key: os.environ/ANTHROPIC_API_KEY + input_cost_per_token: 0.00000015 + model_info: + adaptive_router_preferences: + quality_tier: 2 + strengths: [] + + - model_name: smart + litellm_params: + model: anthropic/claude-opus-4-7 + api_key: os.environ/ANTHROPIC_API_KEY + input_cost_per_token: 0.0000050 + model_info: + adaptive_router_preferences: + quality_tier: 3 + strengths: ["code_generation", "technical_design", "analytical_reasoning"] + +litellm_settings: + drop_params: True + +general_settings: + master_key: sk-1234 # REPLACE in production diff --git a/litellm/proxy/_super_secret_config.yaml b/litellm/proxy/_super_secret_config.yaml new file mode 100644 index 00000000000..b993b9cdfef --- /dev/null +++ b/litellm/proxy/_super_secret_config.yaml @@ -0,0 +1,110 @@ +model_list: +- model_name: claude-3-5-sonnet + litellm_params: + model: claude-3-haiku-20240307 +# - model_name: gemini-1.5-flash-gemini +# litellm_params: +# model: vertex_ai_beta/gemini-1.5-flash +# api_base: https://gateway.ai.cloudflare.com/v1/fa4cdcab1f32b95ca3b53fd36043d691/test/google-vertex-ai/v1/projects/adroit-crow-413218/locations/us-central1/publishers/google/models/gemini-1.5-flash +- litellm_params: + api_base: http://0.0.0.0:8080 + api_key: '' + model: gpt-4o + rpm: 800 + input_cost_per_token: 300 + model_name: gpt-4o +- model_name: llama3-70b-8192 + litellm_params: + model: groq/llama3-70b-8192 +- model_name: fake-openai-endpoint + litellm_params: + model: predibase/llama-3-8b-instruct + api_key: os.environ/PREDIBASE_API_KEY + tenant_id: os.environ/PREDIBASE_TENANT_ID + max_new_tokens: 256 +# - litellm_params: +# api_base: https://my-endpoint-europe-berri-992.openai.azure.com/ +# api_key: os.environ/AZURE_EUROPE_API_KEY +# model: azure/gpt-35-turbo +# rpm: 10 +# model_name: gpt-3.5-turbo-fake-model +- litellm_params: + api_base: https://openai-gpt-4-test-v-1.openai.azure.com + api_key: os.environ/AZURE_API_KEY + api_version: 2024-02-15-preview + model: azure/chatgpt-v-2 + tpm: 100 + model_name: gpt-3.5-turbo +- litellm_params: + model: anthropic.claude-3-sonnet-20240229-v1:0 + model_name: bedrock-anthropic-claude-3 +- litellm_params: + model: claude-3-haiku-20240307 + model_name: anthropic-claude-3 +- litellm_params: + api_base: https://openai-gpt-4-test-v-1.openai.azure.com/ + api_key: os.environ/AZURE_API_KEY + api_version: 2024-02-15-preview + model: azure/chatgpt-v-2 + drop_params: True + tpm: 100 + model_name: gpt-3.5-turbo +- model_name: tts + litellm_params: + model: openai/tts-1 +- model_name: gpt-4-turbo-preview + litellm_params: + api_base: https://openai-france-1234.openai.azure.com + api_key: os.environ/AZURE_FRANCE_API_KEY + api_version: 2024-02-15-preview + model: azure/gpt-turbo +- model_name: text-embedding + litellm_params: + model: textembedding-gecko-multilingual@001 + vertex_project: my-project-9d5c + vertex_location: us-central1 +- model_name: lbl/command-r-plus + litellm_params: + model: openai/lbl/command-r-plus + api_key: "os.environ/VLLM_API_KEY" + api_base: http://vllm-command:8000/v1 + rpm: 1000 + input_cost_per_token: 0 + output_cost_per_token: 0 + model_info: + max_input_tokens: 80920 + +# litellm_settings: +# callbacks: ["dynamic_rate_limiter"] +# # success_callback: ["langfuse"] +# # failure_callback: ["langfuse"] +# # default_team_settings: +# # - team_id: proj1 +# # success_callback: ["langfuse"] +# # langfuse_public_key: os.environ/LANGFUSE_PUBLIC_KEY +# # langfuse_secret: os.environ/LANGFUSE_SECRET +# # langfuse_host: https://us.cloud.langfuse.com +# # - team_id: proj2 +# # success_callback: ["langfuse"] +# # langfuse_public_key: os.environ/LANGFUSE_PUBLIC_KEY +# # langfuse_secret: os.environ/LANGFUSE_SECRET +# # langfuse_host: https://us.cloud.langfuse.com + +assistant_settings: + custom_llm_provider: openai + litellm_params: + api_key: os.environ/OPENAI_API_KEY + + +router_settings: + enable_pre_call_checks: true + + +litellm_settings: + callbacks: ["s3"] + +# general_settings: +# # alerting: ["slack"] +# enable_jwt_auth: True +# litellm_jwtauth: +# team_id_jwt_field: "client_id" \ No newline at end of file diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index 6d64843fab0..c85faeba1a6 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -1438,31 +1438,6 @@ def _get_cors_config( origins, allow_cors_credentials = _get_cors_config() -def _restructure_ui_html_files(ui_root: str) -> None: - """Ensure each exported HTML route is available as /index.html.""" - - for current_root, _, files in os.walk(ui_root): - rel_root = os.path.relpath(current_root, ui_root) - first_segment = "" if rel_root == "." else rel_root.split(os.sep)[0] - - if first_segment in {"_next", "litellm-asset-prefix"}: - continue - - for filename in files: - if not filename.endswith(".html") or filename == "index.html": - continue - - file_path = os.path.join(current_root, filename) - target_dir = os.path.splitext(file_path)[0] - target_path = os.path.join(target_dir, "index.html") - - os.makedirs(target_dir, exist_ok=True) - try: - os.replace(file_path, target_path) - except FileNotFoundError: - continue - - # get current directory try: current_dir = os.path.dirname(os.path.abspath(__file__)) @@ -1697,17 +1672,43 @@ try: # # Mount the _next directory at the root level app.mount( "/_next", - StaticFiles(directory=os.path.join(ui_path, "_next"), check_dir=False), + StaticFiles(directory=os.path.join(ui_path, "_next")), name="next_static", ) app.mount( f"{litellm_asset_prefix}/_next", - StaticFiles(directory=os.path.join(ui_path, "_next"), check_dir=False), + StaticFiles(directory=os.path.join(ui_path, "_next")), name="next_static", ) # print(f"mounted _next at {server_root_path}/ui/_next") - app.mount("/ui", StaticFiles(directory=ui_path, html=True, check_dir=False), name="ui") + app.mount("/ui", StaticFiles(directory=ui_path, html=True), name="ui") + + def _restructure_ui_html_files(ui_root: str) -> None: + """Ensure each exported HTML route is available as /index.html.""" + + for current_root, _, files in os.walk(ui_root): + rel_root = os.path.relpath(current_root, ui_root) + first_segment = "" if rel_root == "." else rel_root.split(os.sep)[0] + + # Ignore Next.js asset directories + if first_segment in {"_next", "litellm-asset-prefix"}: + continue + + for filename in files: + if not filename.endswith(".html") or filename == "index.html": + continue + + file_path = os.path.join(current_root, filename) + target_dir = os.path.splitext(file_path)[0] + target_path = os.path.join(target_dir, "index.html") + + os.makedirs(target_dir, exist_ok=True) + try: + os.replace(file_path, target_path) + except FileNotFoundError: + # Another process may have already moved this file. + continue # Handle HTML file restructuring # Only restructure if: @@ -13636,9 +13637,7 @@ async def get_favicon(): ) current_dir = os.path.dirname(os.path.abspath(__file__)) - built_favicon = os.path.join(current_dir, "_experimental", "out", "favicon.ico") - bundled_favicon = os.path.join(current_dir, "swagger", "favicon.ico") - default_favicon = built_favicon if os.path.exists(built_favicon) else bundled_favicon + default_favicon = os.path.join(current_dir, "_experimental", "out", "favicon.ico") favicon_url = os.getenv("LITELLM_FAVICON_URL", "") diff --git a/tests/proxy_admin_ui_tests/test-results/.last-run.json b/tests/proxy_admin_ui_tests/test-results/.last-run.json new file mode 100644 index 00000000000..cbcc1fbac11 --- /dev/null +++ b/tests/proxy_admin_ui_tests/test-results/.last-run.json @@ -0,0 +1,4 @@ +{ + "status": "passed", + "failedTests": [] +} \ No newline at end of file diff --git a/tests/test_litellm/proxy/test_proxy_server.py b/tests/test_litellm/proxy/test_proxy_server.py index 0d6cd972459..68122bbba3b 100644 --- a/tests/test_litellm/proxy/test_proxy_server.py +++ b/tests/test_litellm/proxy/test_proxy_server.py @@ -604,17 +604,9 @@ def test_ui_extensionless_route_requires_restructure(tmp_path): assert "login" in response.text -def test_admin_ui_export_serves_nested_extensionless_routes(tmp_path): - from litellm.proxy import proxy_server - - out_dir = tmp_path / "out" - (out_dir / "_next").mkdir(parents=True) - (out_dir / "index.html").write_text("home") - callback_src = out_dir / "mcp" / "oauth" / "callback.html" - callback_src.parent.mkdir(parents=True) - callback_src.write_text("callback") - - proxy_server._restructure_ui_html_files(str(out_dir)) +def test_admin_ui_export_serves_nested_extensionless_routes(): + out_dir = Path(litellm.__file__).parent / "proxy" / "_experimental" / "out" + assert out_dir.is_dir(), f"missing UI export at {out_dir}" nested_html_offenders = [ path.relative_to(out_dir).as_posix() diff --git a/ui/litellm-dashboard/build_ui.sh b/ui/litellm-dashboard/build_ui.sh index b59301233ec..aa346c12edc 100755 --- a/ui/litellm-dashboard/build_ui.sh +++ b/ui/litellm-dashboard/build_ui.sh @@ -49,8 +49,7 @@ if [ $? -eq 0 ]; then # Specify the destination directory destination_dir="../../litellm/proxy/_experimental/out" - # Ensure the destination directory exists, then clear it - mkdir -p "$destination_dir" + # Remove existing files in the destination directory rm -rf "$destination_dir"/* # Copy the contents of the output directory to the specified destination diff --git a/ui/litellm-dashboard/build_ui_custom_path.sh b/ui/litellm-dashboard/build_ui_custom_path.sh index 93d8c080b76..a92927f8ea7 100755 --- a/ui/litellm-dashboard/build_ui_custom_path.sh +++ b/ui/litellm-dashboard/build_ui_custom_path.sh @@ -55,8 +55,7 @@ if [ $? -eq 0 ]; then # Specify the destination directory destination_dir="../../litellm/proxy/_experimental/out" - # Ensure the destination directory exists, then clear it - mkdir -p "$destination_dir" + # Remove existing files in the destination directory rm -rf "$destination_dir"/* # Copy the contents of the output directory to the specified destination From ae6dbb4a9bc744412ef4ab2f3e65c8bee51c9846 Mon Sep 17 00:00:00 2001 From: yuneng-jiang Date: Wed, 1 Jul 2026 14:09:07 -0700 Subject: [PATCH 57/79] fix(scripts): resolve worktree root before relative_to in type_check_gate (#31906) On macOS, tempfile.mkdtemp returns a path under /var/folders, a symlink to /private/var. The base pass in type_check_gate.py resolved each diagnostic path (yielding /private/var/...) but not the worktree root, so relative_to raised ValueError for every diagnostic, base counts came back empty, and the vacuous-run guard failed every local make lint-basedpyright run. type_discipline_gate.py already resolves root the same way; ruff_strict_gate.py counts rule codes without touching worktree paths, so it is unaffected. CI runs Linux where the temp dir is not a symlink, which is why this only bit local macOS runs --- scripts/type_check_gate.py | 2 +- tests/test_litellm/test_type_check_gate.py | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/scripts/type_check_gate.py b/scripts/type_check_gate.py index 256fc433d8d..d3837cc2c0d 100644 --- a/scripts/type_check_gate.py +++ b/scripts/type_check_gate.py @@ -63,7 +63,7 @@ def _to_relative(raw: str, root: Path) -> str | None: path = Path(raw) absolute = path if path.is_absolute() else root / path try: - return absolute.resolve().relative_to(root).as_posix() + return absolute.resolve().relative_to(root.resolve()).as_posix() except ValueError: return None diff --git a/tests/test_litellm/test_type_check_gate.py b/tests/test_litellm/test_type_check_gate.py index 3faf46c87de..e602bf6e66f 100644 --- a/tests/test_litellm/test_type_check_gate.py +++ b/tests/test_litellm/test_type_check_gate.py @@ -54,6 +54,21 @@ def test_paths_outside_repo_are_skipped(): assert gate.count_basedpyright(payload) == {} +def test_symlinked_root_keeps_diagnostics_in_tree(tmp_path): + real = tmp_path / "real" + real.mkdir() + link = tmp_path / "link" + link.symlink_to(real) + payload = json.dumps( + { + "generalDiagnostics": [ + _bpr(link / "litellm" / "x.py", "error", "reportArgumentType") + ] + } + ) + assert gate.count_basedpyright(payload, root=link) == {"reportArgumentType": 1} + + def test_at_or_under_ceiling_passes(): budget = {"no-any-return": {"limit": 5}} assert gate.evaluate({"no-any-return": 5}, {}, budget) == [] From 7e993446d8c4abd7b3ad2c289529f279ce0db863 Mon Sep 17 00:00:00 2001 From: "devin-ai-integration[bot]" <158243242+devin-ai-integration[bot]@users.noreply.github.com> Date: Wed, 1 Jul 2026 15:44:30 -0700 Subject: [PATCH 58/79] feat(bedrock_mantle): add xai.grok-4.3 to model cost map for SigV4 auth (#31916) Register bedrock_mantle/xai.grok-4.3 with /v1/responses in supported_endpoints so the data-driven gate routes it through BedrockMantleResponsesAPIConfig (which inherits SigV4 signing via BedrockMantleAuthMixin). Without this entry the model falls through to None and forces bearer-token-only auth. Pricing sourced from AWS Bedrock pricing page. Closes #31196 Co-authored-by: unknown <> Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- ...odel_prices_and_context_window_backup.json | 20 +++++++++++++++++++ model_prices_and_context_window.json | 20 +++++++++++++++++++ ...bedrock_mantle_responses_transformation.py | 10 ++++++++++ 3 files changed, 50 insertions(+) diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index b16e1015255..8dfd3d0036a 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -42887,6 +42887,26 @@ "supports_tool_choice": true, "supports_vision": true }, + "bedrock_mantle/xai.grok-4.3": { + "input_cost_per_token": 1.25e-06, + "output_cost_per_token": 2.5e-06, + "cache_read_input_token_cost": 2e-07, + "litellm_provider": "bedrock_mantle", + "max_input_tokens": 131072, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses" + ], + "supports_function_calling": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true, + "source": "https://aws.amazon.com/bedrock/pricing/" + }, "volcengine/doubao-seed-2-0-pro-260215": { "litellm_provider": "volcengine", "max_input_tokens": 256000, diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index 3e4c5b947a1..6ab6f1bda46 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -43122,6 +43122,26 @@ "supports_tool_choice": true, "supports_vision": true }, + "bedrock_mantle/xai.grok-4.3": { + "input_cost_per_token": 1.25e-06, + "output_cost_per_token": 2.5e-06, + "cache_read_input_token_cost": 2e-07, + "litellm_provider": "bedrock_mantle", + "max_input_tokens": 131072, + "max_output_tokens": 16384, + "max_tokens": 16384, + "mode": "chat", + "supported_endpoints": [ + "/v1/chat/completions", + "/v1/responses" + ], + "supports_function_calling": true, + "supports_reasoning": true, + "supports_response_schema": true, + "supports_tool_choice": true, + "supports_vision": true, + "source": "https://aws.amazon.com/bedrock/pricing/" + }, "volcengine/doubao-seed-2-0-pro-260215": { "litellm_provider": "volcengine", "max_input_tokens": 256000, diff --git a/tests/test_litellm/llms/bedrock_mantle/test_bedrock_mantle_responses_transformation.py b/tests/test_litellm/llms/bedrock_mantle/test_bedrock_mantle_responses_transformation.py index 94efc7c51ef..aafaf401700 100644 --- a/tests/test_litellm/llms/bedrock_mantle/test_bedrock_mantle_responses_transformation.py +++ b/tests/test_litellm/llms/bedrock_mantle/test_bedrock_mantle_responses_transformation.py @@ -452,6 +452,16 @@ class TestBedrockMantleResponsesRegistry: assert isinstance(cfg, BedrockMantleResponsesAPIConfig) assert cfg.use_openai_path is True + def test_registry_returns_native_config_for_xai_grok(self, local_cost_map): + from litellm.utils import ProviderConfigManager + + cfg = ProviderConfigManager.get_provider_responses_api_config( + provider="bedrock_mantle", + model="xai.grok-4.3", + ) + assert isinstance(cfg, BedrockMantleResponsesAPIConfig) + assert cfg.use_openai_path is False + def test_unmapped_frontier_model_falls_through_to_none(self, restore_model_cost): # The gate is data-driven, not name-based: an unseen model not yet in the # price map (e.g. a future gpt-6) has no capability signal, so it falls From 700afbb6b23dffd00c04f69b0e1ce59362ad8f11 Mon Sep 17 00:00:00 2001 From: Mateo Wang <277851410+mateo-berri@users.noreply.github.com> Date: Wed, 1 Jul 2026 16:26:38 -0700 Subject: [PATCH 59/79] chore: make CLAUDE.md rules more concise (#31892) --- CLAUDE.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 86bd89156a3..a492aabd02d 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -33,9 +33,9 @@ If you ever make public-facing PR descriptions, comments, issues, commit message Don't hesitate to use values in .env to get needed API keys and other secrets, as long as you never add them to conversation history, commit them, or include them in GitHub issues / PRs -Run tests before you commit. Also, run `make pre-commit` right before each commit, which generates types (as needed) and formats/lints your code. Any errors found must be fixed. For `make pre-commit` to work properly you must stage your changes first (git add): it reports CI red or green based on what would happen if you committed your staged changes, but it runs the linters over the working tree, so any unstaged edits to tracked files or untracked files are folded into the result and will skew it away from what CI (which only sees your commit) would report +Run tests before you commit. Also, run `make pre-commit` right before each commit, which generates types (as needed) and formats/lints your code. Any errors found must be fixed. It only runs when there are staged frontend and/or backend changes and calculates violations, generates types, etc. based on the worktree, so stage what you need or stash/delete unwanted files in litellm/ or ui/ (where backend and frontend lint run, respectively) before running it. If it fails because dashboard api types are stale, it already regenerated them for you. You just need to stage the schema.d.ts, re-run `make pre-commit` to confirm it passes, and commit -When you fix violations gated by `ruff-strict-budget.json`, `type-discipline-budget.json`, or `basedpyright-code-budget.json`, run `make lint-budget-update` and commit the lowered limits so the ceilings ratchet down instead of leaving stale headroom. It lowers each rule's limit by the number of violations this branch cleared since its branch point and never raises one, measured against the working tree, so stage exactly the fixes you're committing before running it; crediting unstaged fixes you won't commit would over-tighten the limits and turn CI red once the committed subset is checked +When you fix violations gated by `ruff-strict-budget.json`, `type-discipline-budget.json`, or `basedpyright-code-budget.json`, run `make lint-budget-update` and commit the lowered limits so the ceilings ratchet down instead of leaving stale headroom. It measures the working tree, so it must contain exactly the fixes you're committing If you're trying to create a new function that relies on untyped stuff, instead of adding more Any's and pushing `reportAny` / `reportExplicitAny` closer to their basedpyright ceilings, just validate it in the caller with Pydantic (a model or `TypeAdapter` that returns the typed thing or raises will do) and then pass the now typed variable in From a2f5bb1868ad68619f2cf2f858203ebe6c51dc1d Mon Sep 17 00:00:00 2001 From: yucheng-berri Date: Wed, 1 Jul 2026 17:05:49 -0700 Subject: [PATCH 60/79] fix(proxy): authorize /health/test_connection against loaded deployment's team_id (VERIA-441) (#31767) * fix(proxy): authorize /health/test_connection against loaded deployment's team_id (VERIA-441) POST /health/test_connection looked up a deployment by request-supplied model_info.id, dumped its litellm_params (including api_key) into the outbound probe, merged request params over it, and then authorized the call against the caller-supplied model_info.team_id. A team admin could pass another team's deployment id together with their own team_id and an attacker-controlled api_base, sending the victim team's provider key to that URL. Capture the loaded deployment's model_info alongside its litellm_params in both the id-lookup and the model_name fallback paths, and pass that captured value to can_user_make_model_call. When no deployment is loaded (caller is probing fresh, request-supplied credentials), keep using the request body's model_info; no foreign deployment is in scope and the existing role check still requires admin or team-admin. Add two regression tests that wrap (not mock) ModelManagementAuthChecks.can_user_make_model_call, one per resolution path, asserting HTTP 403 and that the auth check was reached with the loaded deployment's team_id. Both fail on the pre-fix code. * test(health): add positive-path regression through real auth (VERIA-441) The two deny tests already exercise the real (wrapped) ModelManagementAuthChecks. Add a matching positive-path test so a mutation that swaps the auth team_id for a deny-all value on the legit path also fails: loaded deployment owned by team-X, caller admin of team-X -> asserts HTTP 200 and that the auth check ran with the LOADED deployment's team_id. * refactor(test): rename health endpoint tests for clarity (VERIA-441) Rename test functions and variables from attacker/victim/owner framing to neutral team-a/team-b terminology. Update docstrings to remove exploit-specific language. Tests remain functionally identical, covering deny paths (cross-team deployments) and the positive path (same-team deployments). --- .../health_endpoints/_health_endpoints.py | 6 +- .../health_endpoints/test_health_endpoints.py | 303 ++++++++++++++++++ 2 files changed, 308 insertions(+), 1 deletion(-) diff --git a/litellm/proxy/health_endpoints/_health_endpoints.py b/litellm/proxy/health_endpoints/_health_endpoints.py index c20991b8d43..2b3ec231ac8 100644 --- a/litellm/proxy/health_endpoints/_health_endpoints.py +++ b/litellm/proxy/health_endpoints/_health_endpoints.py @@ -1807,6 +1807,7 @@ async def test_model_connection( # Look up model configuration from router if model name is provided # This gets the litellm_params from proxy config (with resolved env vars) config_litellm_params: dict = {} + loaded_model_info: Optional[dict] = None if llm_router is not None: # Prefer disambiguation by deployment id (`model_info.id`) when # the caller supplies it. This is required when multiple @@ -1825,6 +1826,7 @@ async def test_model_connection( if deployment_by_id is not None: config_litellm_params = deployment_by_id.litellm_params.model_dump(exclude_none=True) + loaded_model_info = deployment_by_id.model_info.model_dump(exclude_none=True) elif model_name: # Fall back to model_name lookup for callers (e.g. the # "Add Model" wizard, or curl) that don't supply an id. @@ -1846,6 +1848,7 @@ async def test_model_connection( # config. These already have resolved environment # variables from proxy config. config_litellm_params = dict(deployments[0].get("litellm_params", {})) + loaded_model_info = dict(deployments[0].get("model_info") or {}) except Exception as e: verbose_proxy_logger.debug( f"Could not find model {model_name} in router: {e}. Proceeding with request params only." @@ -1856,11 +1859,12 @@ async def test_model_connection( litellm_params = {**config_litellm_params, **request_litellm_params} ## Auth check + auth_model_info = loaded_model_info if loaded_model_info is not None else model_info await ModelManagementAuthChecks.can_user_make_model_call( model_params=Deployment( model_name="test_model", litellm_params=LiteLLM_Params(**litellm_params), - model_info=model_info, + model_info=auth_model_info, ), user_api_key_dict=user_api_key_dict, prisma_client=prisma_client, diff --git a/tests/test_litellm/proxy/health_endpoints/test_health_endpoints.py b/tests/test_litellm/proxy/health_endpoints/test_health_endpoints.py index a04ad5598df..917bedcb93f 100644 --- a/tests/test_litellm/proxy/health_endpoints/test_health_endpoints.py +++ b/tests/test_litellm/proxy/health_endpoints/test_health_endpoints.py @@ -696,6 +696,309 @@ async def test_test_model_connection_falls_back_to_deployments_zero_without_id() assert model_params.get("api_key") == "fake-key-A" +@pytest.mark.asyncio +async def test_test_model_connection_uses_loaded_deployment_team_id(): + """ + /health/test_connection must authorize using the team_id of the + deployment it actually loaded (by model_info.id), not the team_id + supplied in the request body. Requesting team A's deployment while + authenticated as an admin of team B must be denied. + """ + from fastapi import HTTPException + + from litellm.proxy._types import LiteLLM_TeamTable + from litellm.proxy.management_endpoints.model_management_endpoints import ( + ModelManagementAuthChecks, + ) + from litellm.types.router import Deployment, LiteLLM_Params, ModelInfo + + mock_request = MagicMock() + + requester_team_id = "team-b" + deployment_owner_team_id = "team-a" + deployment_id = "team-a-deployment-id" + + requester_user_api_key_dict = UserAPIKeyAuth( + token="requester-token", + user_id="team-b-admin-user", + team_id=requester_team_id, + user_role=LitellmUserRoles.INTERNAL_USER, + ) + + mock_prisma_client = MagicMock() + + other_team_deployment = Deployment( + model_name="team-a-model", + litellm_params=LiteLLM_Params( + model="openai/gpt-4o", + api_base="https://team-a-api.invalid/v1", + api_key="TEAM-A-API-KEY", + ), + model_info=ModelInfo(id=deployment_id, team_id=deployment_owner_team_id), + ) + + mock_router = MagicMock() + mock_router.get_deployment.return_value = other_team_deployment + + async def fake_find_unique(*, where): + team_id = where["team_id"] + if team_id == requester_team_id: + return SimpleNamespace( + model_dump=lambda: LiteLLM_TeamTable( + team_id=requester_team_id, + members_with_roles=[ + { + "user_id": "team-b-admin-user", + "role": "admin", + } + ], + ).model_dump() + ) + if team_id == deployment_owner_team_id: + return SimpleNamespace( + model_dump=lambda: LiteLLM_TeamTable( + team_id=deployment_owner_team_id, + members_with_roles=[], + ).model_dump() + ) + return None + + with ( + patch("litellm.proxy.proxy_server.prisma_client", mock_prisma_client), + patch("litellm.proxy.proxy_server.llm_router", mock_router), + patch("litellm.proxy.proxy_server.premium_user", True), + patch.object( + ModelManagementAuthChecks, + "can_user_make_model_call", + wraps=ModelManagementAuthChecks.can_user_make_model_call, + ) as spy_auth_check, + patch( + "litellm.proxy.management_endpoints.model_management_endpoints.TeamRepository" + ) as MockTeamRepo, + ): + mock_team_repo_instance = MagicMock() + mock_team_repo_instance.table.find_unique = AsyncMock( + side_effect=fake_find_unique + ) + MockTeamRepo.return_value = mock_team_repo_instance + + with pytest.raises(HTTPException) as exc_info: + await health_test_model_connection( + request=mock_request, + mode="chat", + litellm_params={ + "model": "openai/gpt-4o", + "api_base": "https://swapped-base.invalid/v1", + }, + model_info={ + "id": deployment_id, + "team_id": requester_team_id, + }, + user_api_key_dict=requester_user_api_key_dict, + ) + + assert exc_info.value.status_code == 403 + assert spy_auth_check.called + passed_model_params = spy_auth_check.call_args.kwargs["model_params"] + assert passed_model_params.model_info.team_id == deployment_owner_team_id, ( + "Auth check must run against the loaded deployment's team_id " + f"({deployment_owner_team_id!r}); got " + f"{passed_model_params.model_info.team_id!r}." + ) + + +@pytest.mark.asyncio +async def test_test_model_connection_uses_loaded_deployment_team_id_via_model_name_fallback(): + """ + Companion to the id-lookup case: when the caller provides only a model + name (no `model_info.id`) and that name resolves via the router's + `model_name` fallback to a deployment owned by a different team, the + auth check must still run against the loaded deployment's `team_id`, + not the caller-supplied one in the request body. + """ + from fastapi import HTTPException + + from litellm.proxy._types import LiteLLM_TeamTable + from litellm.proxy.management_endpoints.model_management_endpoints import ( + ModelManagementAuthChecks, + ) + + mock_request = MagicMock() + + requester_team_id = "team-b-2" + deployment_owner_team_id = "team-a-2" + + requester_user_api_key_dict = UserAPIKeyAuth( + token="requester-token-2", + user_id="team-b-admin-user-2", + team_id=requester_team_id, + user_role=LitellmUserRoles.INTERNAL_USER, + ) + + mock_prisma_client = MagicMock() + + other_team_deployment_dict = { + "model_name": "shared-model-name", + "litellm_params": { + "model": "openai/gpt-4o", + "api_base": "https://team-a-api-2.invalid/v1", + "api_key": "TEAM-A-API-KEY-2", + }, + "model_info": { + "id": "team-a-deployment-id-2", + "team_id": deployment_owner_team_id, + }, + } + + mock_router = MagicMock() + mock_router.get_model_list.return_value = [other_team_deployment_dict] + + async def fake_find_unique(*, where): + return SimpleNamespace( + model_dump=lambda: LiteLLM_TeamTable( + team_id=where["team_id"], + members_with_roles=( + [{"user_id": "team-b-admin-user-2", "role": "admin"}] + if where["team_id"] == requester_team_id + else [] + ), + ).model_dump() + ) + + with ( + patch("litellm.proxy.proxy_server.prisma_client", mock_prisma_client), + patch("litellm.proxy.proxy_server.llm_router", mock_router), + patch("litellm.proxy.proxy_server.premium_user", True), + patch.object( + ModelManagementAuthChecks, + "can_user_make_model_call", + wraps=ModelManagementAuthChecks.can_user_make_model_call, + ) as spy_auth_check, + patch( + "litellm.proxy.management_endpoints.model_management_endpoints.TeamRepository" + ) as MockTeamRepo, + ): + mock_team_repo_instance = MagicMock() + mock_team_repo_instance.table.find_unique = AsyncMock( + side_effect=fake_find_unique + ) + MockTeamRepo.return_value = mock_team_repo_instance + + with pytest.raises(HTTPException) as exc_info: + await health_test_model_connection( + request=mock_request, + mode="chat", + litellm_params={ + "model": "shared-model-name", + "api_base": "https://swapped-base-2.invalid/v1", + }, + model_info={"team_id": requester_team_id}, + user_api_key_dict=requester_user_api_key_dict, + ) + + assert exc_info.value.status_code == 403 + + passed_model_params = spy_auth_check.call_args.kwargs["model_params"] + assert passed_model_params.model_info.team_id == deployment_owner_team_id + + +@pytest.mark.asyncio +async def test_test_model_connection_authorized_team_admin_passes_real_auth(): + """ + Positive-path companion to the deny tests above. When the caller is a + genuine admin of the team that owns the loaded deployment, the real + (unmocked) auth check must pass and the endpoint must reach the outbound + health probe. Guards against a regression that swaps the auth `team_id` + for something deny-all on the legit path. + """ + from litellm.proxy._types import LiteLLM_TeamTable + from litellm.proxy.management_endpoints.model_management_endpoints import ( + ModelManagementAuthChecks, + ) + from litellm.types.router import Deployment, LiteLLM_Params, ModelInfo + + mock_request = MagicMock() + + owner_team_id = "team-owner" + owner_admin_user_id = "team-owner-admin" + owned_deployment_id = "owned-deployment-id" + + owner_admin_api_key_dict = UserAPIKeyAuth( + token="owner-admin-token", + user_id=owner_admin_user_id, + team_id=owner_team_id, + user_role=LitellmUserRoles.INTERNAL_USER, + ) + + mock_prisma_client = MagicMock() + + owned_deployment = Deployment( + model_name="owner-model", + litellm_params=LiteLLM_Params( + model="openai/gpt-4o-mini", + api_base="https://owner-real-api.invalid/v1", + api_key="owner-team-api-key", + ), + model_info=ModelInfo(id=owned_deployment_id, team_id=owner_team_id), + ) + + mock_router = MagicMock() + mock_router.get_deployment.return_value = owned_deployment + + async def fake_find_unique(*, where): + if where["team_id"] == owner_team_id: + return SimpleNamespace( + model_dump=lambda: LiteLLM_TeamTable( + team_id=owner_team_id, + members_with_roles=[ + {"user_id": owner_admin_user_id, "role": "admin"} + ], + ).model_dump() + ) + return None + + health_result = {"status": "healthy", "response_time_ms": 50} + + with ( + patch("litellm.proxy.proxy_server.prisma_client", mock_prisma_client), + patch("litellm.proxy.proxy_server.llm_router", mock_router), + patch("litellm.proxy.proxy_server.premium_user", True), + patch.object( + ModelManagementAuthChecks, + "can_user_make_model_call", + wraps=ModelManagementAuthChecks.can_user_make_model_call, + ) as spy_auth_check, + patch( + "litellm.proxy.management_endpoints.model_management_endpoints.TeamRepository" + ) as MockTeamRepo, + patch( + "litellm.proxy.health_endpoints._health_endpoints.litellm.ahealth_check", + AsyncMock(return_value=health_result), + ), + patch( + "litellm.proxy.health_endpoints._health_endpoints.run_with_timeout", + AsyncMock(return_value=health_result), + ), + ): + mock_team_repo_instance = MagicMock() + mock_team_repo_instance.table.find_unique = AsyncMock( + side_effect=fake_find_unique + ) + MockTeamRepo.return_value = mock_team_repo_instance + + result = await health_test_model_connection( + request=mock_request, + mode="chat", + litellm_params={"model": "openai/gpt-4o-mini"}, + model_info={"id": owned_deployment_id, "team_id": owner_team_id}, + user_api_key_dict=owner_admin_api_key_dict, + ) + + assert result["status"] == "success" + passed_model_params = spy_auth_check.call_args.kwargs["model_params"] + assert passed_model_params.model_info.team_id == owner_team_id + + @pytest.mark.asyncio @pytest.mark.parametrize( "status,error_message", From 99c65ea6ddc3b5d4f13b7f7d21ff24a897f4ffa7 Mon Sep 17 00:00:00 2001 From: yucheng-berri Date: Wed, 1 Jul 2026 17:06:03 -0700 Subject: [PATCH 61/79] fix(proxy): admin-gate `permissions` on /key/update and /key/regenerate (LIT-4092) (#31810) The `_check_permissions_caller_permission` helper introduced in #31469 was only wired into `_common_key_generation_helper`. This change wires it into `_validate_update_key_data` and `regenerate_key_fn` so the three write paths share the admin gate, and refactors the helper to accept the full request model so it can key on `"permissions" in data.model_fields_set` rather than truthiness. The presence check keeps the model-level omit default flowing through unchanged while treating any explicit value (including `{}` / `null`) as an admin-only write. In `regenerate_key_fn` the gate is placed before the `premium_user` license check so the rejection is consistent across premium and non-premium deployments. That ordering is pinned by `test_regenerate_key_non_admin_permissions_rejected_before_enterprise_gate` Tests in tests/test_litellm/proxy/management_endpoints/test_key_management_endpoints.py: - test_update_key_non_admin_permissions_non_empty_rejected - test_update_key_non_admin_permissions_explicit_empty_rejected - test_update_key_non_admin_permissions_explicit_null_rejected - test_update_key_non_admin_omits_permissions_succeeds (control) - test_update_key_admin_can_set_permissions (control) - test_regenerate_key_non_admin_permissions_rejected - test_regenerate_key_non_admin_permissions_explicit_empty_rejected - test_permissions_explicit_empty_rejected_for_non_admin_on_generate - test_regenerate_key_non_admin_permissions_rejected_before_enterprise_gate Mutation-killed against gate removal on either wire, against reverting the helper to a truthiness check, and against reordering the gate past the enterprise-license check --- .../key_management_endpoints.py | 24 +- .../test_key_management_endpoints.py | 267 ++++++++++++++++++ 2 files changed, 283 insertions(+), 8 deletions(-) diff --git a/litellm/proxy/management_endpoints/key_management_endpoints.py b/litellm/proxy/management_endpoints/key_management_endpoints.py index 523cb9b74e5..f0473edded5 100644 --- a/litellm/proxy/management_endpoints/key_management_endpoints.py +++ b/litellm/proxy/management_endpoints/key_management_endpoints.py @@ -563,18 +563,18 @@ def _check_allowed_routes_caller_permission( def _check_permissions_caller_permission( - permissions: Optional[dict], + data: GenerateRequestBase, user_api_key_dict: UserAPIKeyAuth, ) -> None: """ - Only proxy admins may set the `permissions` dict on a key. + Require PROXY_ADMIN when `permissions` is present in the request body. - The field grants ambient capabilities (e.g. `get_spend_routes` exposes - `/global/spend/*`), so it must follow the same admin gate as - `allowed_routes`. Without this gate a non-admin can self-grant capabilities - they do not hold, including read access to global spend. + Presence is detected via `data.model_fields_set` so a caller that + omits the field (default flows through) is distinct from one that + sends any explicit value. """ - if not permissions: + permissions_in_request = "permissions" in data.model_fields_set + if not permissions_in_request and not data.permissions: return if user_api_key_dict.user_role == LitellmUserRoles.PROXY_ADMIN.value: return @@ -840,7 +840,7 @@ async def _common_key_generation_helper( team_table=team_table, ) _check_permissions_caller_permission( - permissions=data.permissions, + data=data, user_api_key_dict=user_api_key_dict, ) @@ -2236,6 +2236,10 @@ async def _validate_update_key_data( data=data, user_api_key_dict=user_api_key_dict, ) + _check_permissions_caller_permission( + data=data, + user_api_key_dict=user_api_key_dict, + ) _validate_caller_can_change_key_ownership( data=data, @@ -4552,6 +4556,10 @@ async def regenerate_key_fn( data=data, user_api_key_dict=user_api_key_dict, ) + _check_permissions_caller_permission( + data=data, + user_api_key_dict=user_api_key_dict, + ) # Mirror /key/generate's post-handle_key_type recheck so a # non-admin can't elevate via a key_type preset that the # regenerate flow would otherwise carry through unchecked. diff --git a/tests/test_litellm/proxy/management_endpoints/test_key_management_endpoints.py b/tests/test_litellm/proxy/management_endpoints/test_key_management_endpoints.py index ae62be8799f..601fa2c6d78 100644 --- a/tests/test_litellm/proxy/management_endpoints/test_key_management_endpoints.py +++ b/tests/test_litellm/proxy/management_endpoints/test_key_management_endpoints.py @@ -13644,3 +13644,270 @@ async def test_permissions_admin_can_set_any(monkeypatch): team_table=None, ) assert result is not None + + +@pytest.mark.asyncio +async def test_permissions_explicit_empty_rejected_for_non_admin_on_generate(monkeypatch): + """`_common_key_generation_helper` rejects a non-admin when + `permissions` is present in the request body, even as `{}`. Omit-default + stays allowed; that carve-out lives in + `test_permissions_empty_default_allowed_for_non_admin`.""" + monkeypatch.setattr( + "litellm.proxy.management_endpoints.key_management_endpoints.litellm.default_key_generate_params", + None, + raising=False, + ) + caller = UserAPIKeyAuth( + user_role=LitellmUserRoles.INTERNAL_USER, + user_id="user-1", + max_budget=100.0, + ) + request = GenerateKeyRequest(permissions={}) + assert "permissions" in request.model_fields_set + with pytest.raises(HTTPException) as exc_info: + await _common_key_generation_helper( + data=request, + user_api_key_dict=caller, + litellm_changed_by=None, + team_table=None, + ) + assert exc_info.value.status_code == 403 + assert "permissions" in str(exc_info.value.detail) + + +def _make_personal_key_row_for_alice(): + return MagicMock( + token="hashed_alice_personal_key", + user_id="alice", + team_id=None, + created_by="alice", + max_budget=None, + organization_id=None, + project_id=None, + ) + + +def _make_alice_internal_user(): + return UserAPIKeyAuth( + user_role=LitellmUserRoles.INTERNAL_USER, + api_key="sk-alice", + user_id="alice", + ) + + +@pytest.mark.asyncio +async def test_update_key_non_admin_permissions_non_empty_rejected(monkeypatch): + """`_validate_update_key_data` rejects a non-admin when `permissions` + is present in the request body (personal-key fast-path caller).""" + mock_prisma_client = AsyncMock() + mock_prisma_client.jsonify_object = lambda data: data + monkeypatch.setattr("litellm.proxy.proxy_server.prisma_client", mock_prisma_client) + + data = UpdateKeyRequest( + key="sk-alice-personal", + permissions={"get_spend_routes": True}, + ) + + with pytest.raises(HTTPException) as exc: + await _validate_update_key_data( + data=data, + existing_key_row=_make_personal_key_row_for_alice(), + user_api_key_dict=_make_alice_internal_user(), + llm_router=None, + premium_user=True, + prisma_client=mock_prisma_client, + user_api_key_cache=MagicMock(), + ) + assert exc.value.status_code == 403 + assert "permissions" in str(exc.value.detail) + + +@pytest.mark.asyncio +async def test_update_key_non_admin_permissions_explicit_empty_rejected(monkeypatch): + """`_validate_update_key_data` rejects a non-admin when `permissions` + is present as `{}` in the request body. The value matches the model + default but `model_fields_set` distinguishes the two.""" + mock_prisma_client = AsyncMock() + mock_prisma_client.jsonify_object = lambda data: data + monkeypatch.setattr("litellm.proxy.proxy_server.prisma_client", mock_prisma_client) + + data = UpdateKeyRequest( + key="sk-alice-personal", + permissions={}, + ) + assert "permissions" in data.model_fields_set + + with pytest.raises(HTTPException) as exc: + await _validate_update_key_data( + data=data, + existing_key_row=_make_personal_key_row_for_alice(), + user_api_key_dict=_make_alice_internal_user(), + llm_router=None, + premium_user=True, + prisma_client=mock_prisma_client, + user_api_key_cache=MagicMock(), + ) + assert exc.value.status_code == 403 + assert "permissions" in str(exc.value.detail) + + +@pytest.mark.asyncio +async def test_update_key_non_admin_permissions_explicit_null_rejected(monkeypatch): + """`_validate_update_key_data` rejects a non-admin when `permissions` + is present as `null` in the request body.""" + mock_prisma_client = AsyncMock() + mock_prisma_client.jsonify_object = lambda data: data + monkeypatch.setattr("litellm.proxy.proxy_server.prisma_client", mock_prisma_client) + + data = UpdateKeyRequest( + key="sk-alice-personal", + permissions=None, + ) + assert "permissions" in data.model_fields_set + + with pytest.raises(HTTPException) as exc: + await _validate_update_key_data( + data=data, + existing_key_row=_make_personal_key_row_for_alice(), + user_api_key_dict=_make_alice_internal_user(), + llm_router=None, + premium_user=True, + prisma_client=mock_prisma_client, + user_api_key_cache=MagicMock(), + ) + assert exc.value.status_code == 403 + assert "permissions" in str(exc.value.detail) + + +@pytest.mark.asyncio +async def test_update_key_non_admin_omits_permissions_succeeds(monkeypatch): + """`_validate_update_key_data` accepts a non-admin owner when + `permissions` is absent from the request body (personal-key fast path + on an unrelated field).""" + mock_prisma_client = AsyncMock() + mock_prisma_client.jsonify_object = lambda data: data + monkeypatch.setattr("litellm.proxy.proxy_server.prisma_client", mock_prisma_client) + + data = UpdateKeyRequest(key="sk-alice-personal", tpm_limit=42) + assert "permissions" not in data.model_fields_set + + await _validate_update_key_data( + data=data, + existing_key_row=_make_personal_key_row_for_alice(), + user_api_key_dict=_make_alice_internal_user(), + llm_router=None, + premium_user=True, + prisma_client=mock_prisma_client, + user_api_key_cache=MagicMock(), + ) + + +@pytest.mark.asyncio +async def test_update_key_admin_can_set_permissions(monkeypatch): + """`_validate_update_key_data` accepts a PROXY_ADMIN caller for every + shape of `permissions` in the request body.""" + mock_prisma_client = AsyncMock() + mock_prisma_client.jsonify_object = lambda data: data + monkeypatch.setattr("litellm.proxy.proxy_server.prisma_client", mock_prisma_client) + + admin = UserAPIKeyAuth( + user_role=LitellmUserRoles.PROXY_ADMIN, + api_key="sk-admin", + user_id="admin-1", + ) + for permissions_value in ({"get_spend_routes": True}, {}, None): + data = UpdateKeyRequest( + key="sk-alice-personal", + permissions=permissions_value, + ) + await _validate_update_key_data( + data=data, + existing_key_row=_make_personal_key_row_for_alice(), + user_api_key_dict=admin, + llm_router=None, + premium_user=True, + prisma_client=mock_prisma_client, + user_api_key_cache=MagicMock(), + ) + + +@pytest.mark.asyncio +async def test_regenerate_key_non_admin_permissions_rejected(monkeypatch): + """`regenerate_key_fn` rejects a non-admin when `permissions` is + present in the request body, before any DB work.""" + from litellm.proxy._types import RegenerateKeyRequest + from litellm.proxy.management_endpoints.key_management_endpoints import ( + regenerate_key_fn, + ) + + monkeypatch.setattr("litellm.proxy.proxy_server.premium_user", True) + + data = RegenerateKeyRequest( + key="sk-alice-personal", + permissions={"get_spend_routes": True}, + ) + + with pytest.raises(ProxyException) as exc: + await regenerate_key_fn( + key=None, + data=data, + user_api_key_dict=_make_alice_internal_user(), + litellm_changed_by=None, + ) + assert int(exc.value.code) == 403 + assert "permissions" in str(exc.value.message) + + +@pytest.mark.asyncio +async def test_regenerate_key_non_admin_permissions_explicit_empty_rejected(monkeypatch): + """`regenerate_key_fn` rejects a non-admin when `permissions` is + present as `{}` in the request body.""" + from litellm.proxy._types import RegenerateKeyRequest + from litellm.proxy.management_endpoints.key_management_endpoints import ( + regenerate_key_fn, + ) + + monkeypatch.setattr("litellm.proxy.proxy_server.premium_user", True) + + data = RegenerateKeyRequest(key="sk-alice-personal", permissions={}) + assert "permissions" in data.model_fields_set + + with pytest.raises(ProxyException) as exc: + await regenerate_key_fn( + key=None, + data=data, + user_api_key_dict=_make_alice_internal_user(), + litellm_changed_by=None, + ) + assert int(exc.value.code) == 403 + assert "permissions" in str(exc.value.message) + + +@pytest.mark.asyncio +async def test_regenerate_key_non_admin_permissions_rejected_before_enterprise_gate(monkeypatch): + """`regenerate_key_fn` runs `_check_permissions_caller_permission` + before the `premium_user` check, so a non-premium proxy still returns + the permissions rejection (403) rather than the enterprise-license + error (500) when a non-admin sends `permissions`.""" + from litellm.proxy._types import RegenerateKeyRequest + from litellm.proxy.management_endpoints.key_management_endpoints import ( + regenerate_key_fn, + ) + + monkeypatch.setattr("litellm.proxy.proxy_server.premium_user", False) + + data = RegenerateKeyRequest( + key="sk-alice-personal", + permissions={"get_spend_routes": True}, + ) + + with pytest.raises(ProxyException) as exc: + await regenerate_key_fn( + key=None, + data=data, + user_api_key_dict=_make_alice_internal_user(), + litellm_changed_by=None, + ) + assert int(exc.value.code) == 403 + assert "permissions" in str(exc.value.message) + assert "Enterprise" not in str(exc.value.message) From 0b0fd6a4d1d1e743e29523f400bc1106d6782354 Mon Sep 17 00:00:00 2001 From: Mateo Wang <277851410+mateo-berri@users.noreply.github.com> Date: Wed, 1 Jul 2026 17:16:21 -0700 Subject: [PATCH 62/79] feat(github_copilot): route /v1/messages to Copilot native Anthropic endpoint (#31802) * feat(github_copilot): route /v1/messages to Copilot native Anthropic endpoint Add a GitHub Copilot Anthropic Messages transformation that routes supported Claude models through the native /v1/messages endpoint. This covers request URL construction, default headers, and supported model metadata. * fix(github_copilot): address PR review feedback Tighten the Anthropic Messages environment validation and web search interception behavior after review feedback. Avoid treating non-web-search requests as web-search-only paths. * style(github_copilot): apply black formatting Apply Black formatting to the GitHub Copilot Anthropic Messages tests. * test(github_copilot): cover ProviderConfigManager dispatch for Anthropic Messages Add coverage for ProviderConfigManager dispatch when GitHub Copilot models use the Anthropic Messages API, including non-Anthropic models returning no config. * fix(github_copilot): apply messages-proxy intent header to /v1/messages Set the messages-proxy interaction header for GitHub Copilot Anthropic Messages requests so /v1/messages uses the expected Copilot intent. * fix(github_copilot): use modern generic annotations Replace legacy typing generics in the GitHub Copilot Anthropic Messages transformation so the strict Ruff budget gate stays within its ceiling. * refactor(github_copilot): decouple web-search short-circuit and harden /v1/messages URL Address review feedback on the Copilot native Anthropic messages path. Replace the hardcoded LlmProviders.GITHUB_COPILOT check in the web-search interception handler with a handles_web_search_natively() method on BaseAnthropicMessagesConfig (default True), overridden to False in GithubCopilotAnthropicMessagesConfig. Provider-specific behavior now lives in llms/ and the handler stays provider-agnostic, so a future provider in the same situation needs no carve-out here. In get_complete_url, reuse the already-resolved api_base returned by validate_anthropic_messages_environment instead of reading the authenticator a second time, removing redundant I/O and the mid-request inconsistency window. The caller-supplied base is still discarded in validate, which is the security boundary. Normalize a trailing slash on the base in both methods so a tenant-specific host never yields a double-slash //v1/messages URL. * fix(github_copilot): forward anthropic-beta headers on /v1/messages The Copilot config inherited should_filter_anthropic_beta_headers()==True from BaseAnthropicMessagesConfig, so update_headers_with_filtered_beta stripped every anthropic-beta value after validate_anthropic_messages_environment injected them (github_copilot has no mapping in anthropic_beta_headers_config.json). That silently disabled header-gated features like context_management and structured outputs on the native passthrough. Override the hook to False, matching OpenAILikeAnthropicMessagesConfig. * test(github_copilot): remove dead branch in beta-header regression test The anthropic-beta filtering test guarded the fix with an if branch on should_filter_anthropic_beta_headers(), which is always False, so the branch was unreachable. Replace it with a direct assertion that running the provider-scoped filter for github_copilot strips every beta value, proving why the override is load-bearing and catching a regression that flips it back on. --------- Co-authored-by: ririnto Co-authored-by: Cursor Agent --- .../websearch_interception/handler.py | 21 +- .../anthropic_messages/transformation.py | 13 + .../llms/github_copilot/messages/__init__.py | 0 .../github_copilot/messages/transformation.py | 118 +++++++ ...odel_prices_and_context_window_backup.json | 9 +- litellm/utils.py | 7 + .../llms/github_copilot/messages/__init__.py | 0 ..._github_copilot_messages_transformation.py | 328 ++++++++++++++++++ 8 files changed, 485 insertions(+), 11 deletions(-) create mode 100644 litellm/llms/github_copilot/messages/__init__.py create mode 100644 litellm/llms/github_copilot/messages/transformation.py create mode 100644 tests/test_litellm/llms/github_copilot/messages/__init__.py create mode 100644 tests/test_litellm/llms/github_copilot/messages/test_github_copilot_messages_transformation.py diff --git a/litellm/integrations/websearch_interception/handler.py b/litellm/integrations/websearch_interception/handler.py index bfae6d5b7b0..60100e8c2fd 100644 --- a/litellm/integrations/websearch_interception/handler.py +++ b/litellm/integrations/websearch_interception/handler.py @@ -120,21 +120,26 @@ class WebSearchInterceptionLogger(CustomLogger): if self.enabled_providers is not None and provider_str not in self.enabled_providers: return None - # Only short-circuit for providers without native Anthropic Messages - # support. Providers that have a BaseAnthropicMessagesConfig (bedrock, - # vertex_ai, azure_ai, anthropic) already use the agentic loop, which - # includes a follow-up LLM call to synthesize the answer from search - # results. Short-circuiting those would skip that synthesis step and - # return raw search text — a regression for existing users. + # Only short-circuit for providers whose Anthropic Messages agentic loop + # does not run web_search itself. Providers that have a + # BaseAnthropicMessagesConfig which handles web search natively (bedrock, + # vertex_ai, azure_ai, anthropic) already perform the search plus a + # follow-up LLM synthesis step; short-circuiting those would skip that + # synthesis and return raw search text — a regression for existing users. + # + # github_copilot has a BaseAnthropicMessagesConfig (added for thinking + # passthrough) but does not handle web_search natively, so its config + # returns handles_web_search_natively() == False and we still short-circuit + # web-search-only requests against it. try: provider_enum = LlmProviders(provider_str) anthropic_config = ProviderConfigManager.get_provider_anthropic_messages_config( model=model, provider=provider_enum ) - if anthropic_config is not None: + if anthropic_config is not None and anthropic_config.handles_web_search_natively(): verbose_logger.debug( f"WebSearchInterception: Skipping short-circuit for {provider_str} " - "(provider has native Anthropic Messages support, using agentic loop)" + "(provider handles web search natively via the agentic loop)" ) return None except (ValueError, Exception): diff --git a/litellm/llms/base_llm/anthropic_messages/transformation.py b/litellm/llms/base_llm/anthropic_messages/transformation.py index 966995bc571..448c1d07009 100644 --- a/litellm/llms/base_llm/anthropic_messages/transformation.py +++ b/litellm/llms/base_llm/anthropic_messages/transformation.py @@ -114,6 +114,19 @@ class BaseAnthropicMessagesConfig(ABC): """ return True + def handles_web_search_natively(self) -> bool: + """ + Whether the upstream this config routes to executes ``web_search`` tools + itself as part of its Anthropic Messages agentic loop. + + The web-search interception handler short-circuits web-search-only + requests (running the search itself and returning synthetic results) only + for providers that do NOT. Providers whose agentic loop already performs + the search plus a follow-up synthesis step (bedrock, vertex_ai, ...) + return True so those requests flow through untouched. + """ + return True + def get_async_streaming_response_iterator( self, model: str, diff --git a/litellm/llms/github_copilot/messages/__init__.py b/litellm/llms/github_copilot/messages/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/litellm/llms/github_copilot/messages/transformation.py b/litellm/llms/github_copilot/messages/transformation.py new file mode 100644 index 00000000000..fb3f0a4e159 --- /dev/null +++ b/litellm/llms/github_copilot/messages/transformation.py @@ -0,0 +1,118 @@ +from typing import Any, Optional + +from litellm.exceptions import AuthenticationError +from litellm.llms.anthropic.experimental_pass_through.messages.transformation import ( + AnthropicMessagesConfig, +) + +from ..authenticator import Authenticator +from ..common_utils import ( + DEFAULT_GITHUB_COPILOT_API_BASE, + GetAPIKeyError, + get_copilot_default_headers, +) + +_MESSAGES_PROXY_API_VERSION = "2026-06-01" + + +class GithubCopilotAnthropicMessagesConfig(AnthropicMessagesConfig): + """ + GitHub Copilot implementation of Anthropic messages API. + Routes requests to Copilot's /v1/messages endpoint with appropriate authentication and headers. + """ + + def __init__(self) -> None: + super().__init__() + self.authenticator = Authenticator() + + def handles_web_search_natively(self) -> bool: + """ + Copilot's /v1/messages endpoint does not execute ``web_search`` tools, so + the interception handler must short-circuit web-search-only requests + instead of routing them here. + """ + return False + + def should_filter_anthropic_beta_headers(self) -> bool: + """ + Copilot's /v1/messages is a native Anthropic Messages passthrough, so + ``anthropic-beta`` values injected by ``_update_headers_with_anthropic_beta`` + (context_management, structured outputs, ...) must reach the upstream + verbatim. The default provider-scoped filter would drop them because + github_copilot has no entry in ``anthropic_beta_headers_config.json``. + """ + return False + + def validate_anthropic_messages_environment( + self, + headers: dict, + model: str, + messages: list[Any], + optional_params: dict, + litellm_params: dict, + api_key: Optional[str] = None, + api_base: Optional[str] = None, + ) -> tuple[dict, Optional[str]]: + """ + Validate environment for GitHub Copilot and add Copilot-specific headers. + + The caller-supplied ``api_base`` is intentionally ignored. Routing this + request anywhere other than the authenticated Copilot endpoint would + leak the Copilot bearer token to a caller-controlled URL. + """ + # Always use the Copilot endpoint resolved from the authenticated + # session, never the caller-supplied api_base. rstrip so a + # tenant-specific base with a trailing slash does not yield a + # double-slash URL once "/v1/messages" is appended downstream. + dynamic_api_base = (self.authenticator.get_api_base() or DEFAULT_GITHUB_COPILOT_API_BASE).rstrip("/") + try: + dynamic_api_key = self.authenticator.get_api_key() + except GetAPIKeyError as e: + raise AuthenticationError( + model=model, + llm_provider="github_copilot", + message=str(e), + ) + + # Merge Copilot headers with provided headers + copilot_headers = get_copilot_default_headers(dynamic_api_key) + for key, value in copilot_headers.items(): + if key not in headers: + headers[key] = value + + headers["openai-intent"] = "messages-proxy" + headers["x-interaction-type"] = "messages-proxy" + headers["x-github-api-version"] = _MESSAGES_PROXY_API_VERSION + + if "anthropic-version" not in headers: + headers["anthropic-version"] = "2023-06-01" + + headers = self._update_headers_with_anthropic_beta( + headers, optional_params, custom_llm_provider="github_copilot" + ) + + return headers, dynamic_api_base + + def get_complete_url( + self, + api_base: Optional[str], + api_key: Optional[str], + model: str, + optional_params: dict, + litellm_params: dict, + stream: Optional[bool] = None, + ) -> str: + """ + Return the complete URL for GitHub Copilot /v1/messages endpoint. + + ``api_base`` here is the value already resolved by + ``validate_anthropic_messages_environment`` (the authenticated Copilot + host), not the raw caller-supplied base — that one is discarded there to + avoid leaking the Copilot bearer token to a caller-controlled URL. We + reuse it to avoid a second authenticator read, falling back to a fresh + resolution only if it was not provided. + """ + resolved = (api_base or self.authenticator.get_api_base() or DEFAULT_GITHUB_COPILOT_API_BASE).rstrip("/") + if not resolved.endswith("/v1/messages"): + resolved = f"{resolved}/v1/messages" + return resolved diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index 8dfd3d0036a..b3058bb4214 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -19176,7 +19176,8 @@ "max_tokens": 16000, "mode": "chat", "supported_endpoints": [ - "/v1/chat/completions" + "/v1/chat/completions", + "/v1/messages" ], "supports_function_calling": true, "supports_parallel_function_calling": true, @@ -19189,7 +19190,8 @@ "max_tokens": 16000, "mode": "chat", "supported_endpoints": [ - "/v1/chat/completions" + "/v1/chat/completions", + "/v1/messages" ], "supports_function_calling": true, "supports_parallel_function_calling": true, @@ -19242,7 +19244,8 @@ "max_tokens": 16000, "mode": "chat", "supported_endpoints": [ - "/v1/chat/completions" + "/v1/chat/completions", + "/v1/messages" ], "supports_function_calling": true, "supports_parallel_function_calling": true, diff --git a/litellm/utils.py b/litellm/utils.py index 45ce5332f1d..26d3ae32739 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -7984,6 +7984,13 @@ class ProviderConfigManager: ) return DeepSeekAnthropicMessagesConfig() + elif litellm.LlmProviders.GITHUB_COPILOT == provider: + if "claude" in model_lower: + from litellm.llms.github_copilot.messages.transformation import ( + GithubCopilotAnthropicMessagesConfig, + ) + + return GithubCopilotAnthropicMessagesConfig() return None @staticmethod diff --git a/tests/test_litellm/llms/github_copilot/messages/__init__.py b/tests/test_litellm/llms/github_copilot/messages/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/test_litellm/llms/github_copilot/messages/test_github_copilot_messages_transformation.py b/tests/test_litellm/llms/github_copilot/messages/test_github_copilot_messages_transformation.py new file mode 100644 index 00000000000..01787c07d27 --- /dev/null +++ b/tests/test_litellm/llms/github_copilot/messages/test_github_copilot_messages_transformation.py @@ -0,0 +1,328 @@ +import os +import sys +from unittest.mock import MagicMock + +import pytest + +sys.path.insert(0, os.path.abspath("../..")) + +from litellm.exceptions import AuthenticationError +from litellm.llms.github_copilot.common_utils import GetAPIKeyError +from litellm.llms.github_copilot.messages.transformation import ( + GithubCopilotAnthropicMessagesConfig, +) + + +def test_github_copilot_anthropic_messages_config_init(): + """Test GithubCopilotAnthropicMessagesConfig initialization.""" + config = GithubCopilotAnthropicMessagesConfig() + assert config is not None + assert hasattr(config, "authenticator") + + +def test_github_copilot_anthropic_messages_get_complete_url(): + """get_complete_url builds the /v1/messages URL from the base it is handed. + + In the request flow that ``api_base`` is the value already resolved by + validate_anthropic_messages_environment (the authenticated Copilot host); the + caller-supplied base is discarded there, not here (see the validate tests). + """ + config = GithubCopilotAnthropicMessagesConfig() + config.authenticator = MagicMock() + config.authenticator.get_api_base.return_value = None + + # No api_base supplied and no authenticator base -> default Copilot endpoint. + url = config.get_complete_url( + api_base=None, + api_key=None, + model="github_copilot/claude-haiku-4.5", + optional_params={}, + litellm_params={}, + ) + assert url == "https://api.githubcopilot.com/v1/messages" + # Falls back to a single authenticator read, not a hard-coded second one. + config.authenticator.get_api_base.assert_called() + + # The resolved (validated) base passed in is reused verbatim; no extra read. + config.authenticator.get_api_base.reset_mock() + url = config.get_complete_url( + api_base="https://api.business.githubcopilot.com", + api_key=None, + model="github_copilot/claude-haiku-4.5", + optional_params={}, + litellm_params={}, + ) + assert url == "https://api.business.githubcopilot.com/v1/messages" + config.authenticator.get_api_base.assert_not_called() + + # A trailing slash on the base must not produce a double-slash URL. + url = config.get_complete_url( + api_base="https://api.business.githubcopilot.com/", + api_key=None, + model="github_copilot/claude-haiku-4.5", + optional_params={}, + litellm_params={}, + ) + assert url == "https://api.business.githubcopilot.com/v1/messages" + + # An already-complete /v1/messages base is left untouched. + url = config.get_complete_url( + api_base="https://api.githubcopilot.com/v1/messages", + api_key=None, + model="github_copilot/claude-haiku-4.5", + optional_params={}, + litellm_params={}, + ) + assert url == "https://api.githubcopilot.com/v1/messages" + + +def test_github_copilot_anthropic_messages_get_complete_url_normalizes_authenticator_trailing_slash(): + """A tenant base with a trailing slash from the authenticator fallback must + not yield a double-slash URL.""" + config = GithubCopilotAnthropicMessagesConfig() + config.authenticator = MagicMock() + config.authenticator.get_api_base.return_value = "https://api.business.githubcopilot.com/" + + url = config.get_complete_url( + api_base=None, + api_key=None, + model="github_copilot/claude-haiku-4.5", + optional_params={}, + litellm_params={}, + ) + assert url == "https://api.business.githubcopilot.com/v1/messages" + + +def test_github_copilot_anthropic_messages_validate_environment(): + """Test environment validation and header injection.""" + config = GithubCopilotAnthropicMessagesConfig() + + # Mock the authenticator + config.authenticator = MagicMock() + config.authenticator.get_api_key.return_value = "gh.test-key-123" + config.authenticator.get_api_base.return_value = None + + headers = {} + # Pass a hostile api_base to confirm it is ignored. + validated_headers, api_base = config.validate_anthropic_messages_environment( + headers=headers, + model="github_copilot/claude-haiku-4.5", + messages=[{"role": "user", "content": "Hello"}], + optional_params={}, + litellm_params={}, + api_key=None, + api_base="https://attacker.example.com", + ) + + assert "copilot-integration-id" in validated_headers + assert validated_headers["copilot-integration-id"] == "vscode-chat" + assert "Authorization" in validated_headers + assert "anthropic-version" in validated_headers + assert validated_headers["anthropic-version"] == "2023-06-01" + # /v1/messages must use the messages-proxy intent so the Copilot backend + # enables Anthropic-native features (context_management, thinking, etc.). + assert validated_headers["openai-intent"] == "messages-proxy" + assert validated_headers["x-interaction-type"] == "messages-proxy" + assert validated_headers["x-github-api-version"] == "2026-06-01" + assert api_base == "https://api.githubcopilot.com" + + +def test_github_copilot_anthropic_messages_validate_environment_injects_beta_headers(): + """Anthropic-beta headers must be auto-injected for advanced features + (context_management, output_format, etc.) — matches the parent + AnthropicMessagesConfig contract.""" + config = GithubCopilotAnthropicMessagesConfig() + config.authenticator = MagicMock() + config.authenticator.get_api_key.return_value = "gh.test-key" + config.authenticator.get_api_base.return_value = None + + validated_headers, _ = config.validate_anthropic_messages_environment( + headers={}, + model="github_copilot/claude-haiku-4.5", + messages=[{"role": "user", "content": "Hello"}], + optional_params={"output_format": {"type": "json_object"}}, + litellm_params={}, + api_key=None, + api_base=None, + ) + + assert "anthropic-beta" in validated_headers + assert "structured-outputs-2025-11-13" in validated_headers["anthropic-beta"] + + +def test_github_copilot_anthropic_messages_validate_environment_preserves_caller_anthropic_version(): + """Caller-supplied anthropic-version must be forwarded verbatim.""" + config = GithubCopilotAnthropicMessagesConfig() + config.authenticator = MagicMock() + config.authenticator.get_api_key.return_value = "gh.test-key" + config.authenticator.get_api_base.return_value = None + + validated_headers, _ = config.validate_anthropic_messages_environment( + headers={"anthropic-version": "2024-10-22"}, + model="github_copilot/claude-haiku-4.5", + messages=[{"role": "user", "content": "Hello"}], + optional_params={}, + litellm_params={}, + api_key=None, + api_base=None, + ) + + assert validated_headers["anthropic-version"] == "2024-10-22" + + +def test_github_copilot_anthropic_messages_validate_environment_injects_context_management_beta(): + """context_management in optional_params must trigger the corresponding + anthropic-beta header so the Copilot backend accepts the field.""" + config = GithubCopilotAnthropicMessagesConfig() + config.authenticator = MagicMock() + config.authenticator.get_api_key.return_value = "gh.test-key" + config.authenticator.get_api_base.return_value = None + + validated_headers, _ = config.validate_anthropic_messages_environment( + headers={}, + model="github_copilot/claude-haiku-4.5", + messages=[{"role": "user", "content": "Hello"}], + optional_params={"context_management": {"edits": [{"type": "clear_tool_uses_20250919"}]}}, + litellm_params={}, + api_key=None, + api_base=None, + ) + + assert validated_headers["openai-intent"] == "messages-proxy" + assert validated_headers["x-interaction-type"] == "messages-proxy" + assert "anthropic-beta" in validated_headers + assert "context-management-2025-06-27" in validated_headers["anthropic-beta"] + + +def test_github_copilot_anthropic_messages_validate_environment_auth_error(): + """Test error handling when authentication fails.""" + config = GithubCopilotAnthropicMessagesConfig() + + # Mock the authenticator to raise an error + config.authenticator = MagicMock() + config.authenticator.get_api_key.side_effect = GetAPIKeyError(status_code=401, message="No valid API key found") + + with pytest.raises(AuthenticationError): + config.validate_anthropic_messages_environment( + headers={}, + model="github_copilot/claude-haiku-4.5", + messages=[{"role": "user", "content": "Hello"}], + optional_params={}, + litellm_params={}, + api_key=None, + api_base=None, + ) + + +def test_github_copilot_anthropic_messages_supported_params(): + """Test supported parameters list.""" + config = GithubCopilotAnthropicMessagesConfig() + params = config.get_supported_anthropic_messages_params("github_copilot/claude-haiku-4.5") + + # Should inherit from AnthropicMessagesConfig + assert "messages" in params + assert "model" in params + assert "max_tokens" in params + assert "thinking" in params + + +def test_provider_config_manager_dispatches_claude_to_copilot_messages_config(): + """ProviderConfigManager must return the Copilot Anthropic Messages config + for Claude models served via github_copilot.""" + from litellm.types.utils import LlmProviders + from litellm.utils import ProviderConfigManager + + config = ProviderConfigManager.get_provider_anthropic_messages_config( + model="github_copilot/claude-haiku-4.5", + provider=LlmProviders.GITHUB_COPILOT, + ) + + assert isinstance(config, GithubCopilotAnthropicMessagesConfig) + + +def test_provider_config_manager_skips_non_claude_copilot_models(): + """Non-Claude github_copilot models (e.g. gpt-*) must not be routed through + the Anthropic Messages dispatch.""" + from litellm.types.utils import LlmProviders + from litellm.utils import ProviderConfigManager + + config = ProviderConfigManager.get_provider_anthropic_messages_config( + model="github_copilot/gpt-5-mini", + provider=LlmProviders.GITHUB_COPILOT, + ) + + assert config is None + + +def test_github_copilot_anthropic_messages_validate_environment_normalizes_trailing_slash(): + """A tenant base with a trailing slash from the authenticator must be + normalized so the URL built downstream has no double slash.""" + config = GithubCopilotAnthropicMessagesConfig() + config.authenticator = MagicMock() + config.authenticator.get_api_key.return_value = "gh.test-key" + config.authenticator.get_api_base.return_value = "https://api.business.githubcopilot.com/" + + _, api_base = config.validate_anthropic_messages_environment( + headers={}, + model="github_copilot/claude-haiku-4.5", + messages=[{"role": "user", "content": "Hello"}], + optional_params={}, + litellm_params={}, + api_key=None, + api_base="https://attacker.example.com", + ) + + assert api_base == "https://api.business.githubcopilot.com" + + +def test_github_copilot_config_disables_anthropic_beta_filtering(): + """Copilot's /v1/messages is a native Anthropic passthrough, so injected + anthropic-beta values (context_management, structured outputs, ...) must be + forwarded verbatim. The default provider-scoped filter would drop them + because github_copilot has no entry in the beta headers config; a regression + here would silently disable header-gated Anthropic features for Copilot.""" + from litellm.anthropic_beta_headers_manager import update_headers_with_filtered_beta + from litellm.llms.anthropic.experimental_pass_through.messages.transformation import ( + AnthropicMessagesConfig, + ) + + config = GithubCopilotAnthropicMessagesConfig() + assert config.should_filter_anthropic_beta_headers() is False + assert AnthropicMessagesConfig().should_filter_anthropic_beta_headers() is True + + config.authenticator = MagicMock() + config.authenticator.get_api_key.return_value = "gh.test-key" + config.authenticator.get_api_base.return_value = None + + headers, _ = config.validate_anthropic_messages_environment( + headers={}, + model="github_copilot/claude-haiku-4.5", + messages=[{"role": "user", "content": "Hello"}], + optional_params={"context_management": {"edits": [{"type": "clear_tool_uses_20250919"}]}}, + litellm_params={}, + api_key=None, + api_base=None, + ) + + assert "context-management-2025-06-27" in headers["anthropic-beta"] + + # The override is load-bearing: had the config opted into the provider-scoped + # filter, the handler would have run it and dropped every value, since + # github_copilot has no mapping. Prove that here so a regression that flips + # should_filter back on is caught as the silent feature breakage it causes. + stripped = update_headers_with_filtered_beta(headers=dict(headers), provider="github_copilot") + assert "anthropic-beta" not in stripped + + +def test_github_copilot_config_does_not_handle_web_search_natively(): + """Copilot's /v1/messages does not run web_search, so its config must report + handles_web_search_natively() == False. This is what keeps the web-search + interception handler short-circuiting Copilot instead of routing to it, even + though Copilot now has a BaseAnthropicMessagesConfig. The base Anthropic + config (bedrock/vertex/anthropic path) must report True.""" + from litellm.llms.anthropic.experimental_pass_through.messages.transformation import ( + AnthropicMessagesConfig, + ) + + assert GithubCopilotAnthropicMessagesConfig().handles_web_search_natively() is False + assert AnthropicMessagesConfig().handles_web_search_natively() is True From fde4c7c97ae49370dc7986326aace4c5fb7bd91b Mon Sep 17 00:00:00 2001 From: Mateo Wang <277851410+mateo-berri@users.noreply.github.com> Date: Wed, 1 Jul 2026 17:31:07 -0700 Subject: [PATCH 63/79] feat(gdc): implement Google Distributed Cloud (GDC) Gemini provider (#31895) * feat(gdc): add Google Distributed Cloud Gemini provider support Introduce support for the Google Distributed Cloud (GDC) Gemini provider by adding "gdc" to the list of chat providers and enabling the gdc/ model prefix. The implementation defines a new GDCGeminiConfig class which handles authentication via Google Distributed Cloud service account credentials, manages token generation, formats GDC Gemini request URLs, and transforms request structures accordingly The PreProcessNonDefaultParams class is also updated to exclude vertex parameters from filtering when the custom LLM provider is GDC, allowing vertex parameters to be passed properly during GDC initialization * fix: resolve issues identified in PR #30702 * fix(gdc): harden credentials, fix vertex param filtering, add tests The supports_vertex_params branch regressed vertex_ai and vertex_ai_beta: the `if custom_llm_provider in [...]: pass` was a no-op, so those providers fell through to the config lookup, found no supports_vertex_params, and had their vertex_ params stripped. The check is now a single _provider_supports_vertex_params helper that keeps vertex_ params for the vertex family and for any config that opts in, and only swallows the expected ValueError from an unknown provider string instead of a blanket except GDC project and location now resolve from the deployment's litellm_params and the litellm.vertex_project / litellm.vertex_location globals before falling back to request optional_params, matching how vertex_ai resolves them, so a proxy caller can no longer route a request to a project the deployment did not expose A request api_key is no longer treated as a filesystem path, so a caller can't make the host open a local service-account file; api_key must be a literal service-account JSON string or a bearer token The opt-in token cache is hardened: the lock and cache dict are created in __init__ instead of via a racy hasattr lazy-init, the token is read inside the lock, and the audience is stripped of a trailing slash once so the cached and non-cached paths agree Also declares gdc_api_base, switches the lazy-import entry to the relative path every other entry uses, adds the missing trailing comma in the provider config map, and drops the api_base fallback that only ran when api_key was None Adds unit tests covering the vertex-param filter, deployment-over-request precedence, the api_key file-path rejection, URL construction branches, environment validation, token caching, and the gdc completion dispatch; transformation.py is fully covered * fix(gdc): prefer GDC-specific config, honor vertex_ai aliases, harden URL and bool parsing * fix(gdc): mint the GDCH token audience from the host, not the full base When api_base embedded /v1/projects/... and the deployment set project/location, get_complete_url rebuilt the request URL from the host while validate_environment still derived the token audience from the full original api_base, so the bearer token could target a different audience than the URL actually called. The audience is now the scheme://host of api_base in every case, matching the host get_complete_url builds against * fix(gdc): restrict JSON api_key to GDCH service accounts Only accept a credential whose type is gdch_service_account before calling google.auth.load_credentials_from_dict, so a caller-supplied external_account/identity_pool/pluggable credential carrying arbitrary token or credential_source endpoints is rejected before any token refresh runs. GDC only ever uses GDCH service accounts, and non-GDCH credentials could not have completed auth anyway (with_gdch_audience is GDCH-only), so this narrows the credential-refresh surface without changing valid GDC behavior. * fix(gdc): validate project and location as plain identifiers vertex_project and vertex_location can come from request params and were interpolated as raw path text into the GDC request URL and the x-goog-user-project header. A caller-supplied value containing / ? # or .. could reshape the path and make the proxy send its GDC-authorized request to a different endpoint under the configured host. Validate both against a strict identifier pattern before building the URL or header and raise an auth error otherwise; GCP project ids and locations are plain identifiers so valid deployments are unaffected. * fix(gdc): bind x-goog-user-project quota header to the deployment The quota project header was resolved with request-level vertex_project taking effect, so with a preformed deployment api_base a caller could set vertex_project to a different project and have it sent under the proxy's GDC credential, misattributing quota or billing. Resolve the header project the same way the URL is resolved: a preformed api_base without a deployment override binds to the project embedded in the URL, otherwise deployment and global config win over request params. This keeps the URL and the quota header consistent. * fix(gdc): always rebind x-goog-user-project, stripping caller-forwarded values The quota project header was only set when absent, so with client header forwarding an authenticated caller could send their own x-goog-user-project (any casing) and have it ride on the proxy's GDC credential, bypassing the deployment-derived binding. Strip every casing of the header and always set it from _effective_project before the request is signed. * fix(gdc): make a preformed api_base authoritative for project routing get_litellm_params copies caller-supplied vertex_project and vertex_location into litellm_params via OPTIONAL_KWARGS_KEYS, so litellm_params cannot be treated as a deployment-only source. The previous _deployment_overrides_path inference let an authenticated caller flip a pinned preformed api_base such as /v1/projects/pinned/... to /v1/projects/attacker/..., driving requests to a caller-chosen project with the proxy's configured GDC credentials and quota header A preformed /v1/projects/ api_base is now authoritative; get_complete_url returns it unchanged and _effective_project binds the x-goog-user-project quota header to the project embedded in that URL, so a caller can no longer redirect a pinned deployment or move the quota header off it. The two tests that asserted the override behavior are now regression tests that fail if the rewrite is reintroduced * fix(gdc): make a preformed api_base self-sufficient in get_complete_url get_complete_url resolved and required a params-derived vertex_project before returning a preformed /v1/projects/ api_base, so a deployment that pins its project in the api_base path was forced to also pass vertex_project or hit 'project is required'. validate_environment already extracts the project from a preformed URL and needs no such param, so the two paths disagreed The preformed-URL early return now runs before project/location resolution, matching validate_environment: a preformed api_base is returned as-is with no redundant param, and non-preformed bases still require vertex_project and vertex_location as before. Adds a regression test that a preformed base with no project/location params returns the URL unchanged --------- Co-authored-by: Paige O'Connor Co-authored-by: Tim Laubach --- litellm/__init__.py | 3 + litellm/_lazy_imports_registry.py | 5 + litellm/constants.py | 1 + .../get_llm_provider_logic.py | 2 + litellm/llms/gdc/__init__.py | 0 litellm/llms/gdc/chat/__init__.py | 0 litellm/llms/gdc/chat/transformation.py | 285 +++++++ litellm/main.py | 43 ++ litellm/types/utils.py | 1 + litellm/utils.py | 21 +- provider_endpoints_support.json | 10 + ruff-strict-budget.json | 2 +- .../gdc/chat/test_gdc_chat_transformation.py | 717 ++++++++++++++++++ tests/test_litellm/test_utils.py | 42 + 14 files changed, 1126 insertions(+), 6 deletions(-) create mode 100644 litellm/llms/gdc/__init__.py create mode 100644 litellm/llms/gdc/chat/__init__.py create mode 100644 litellm/llms/gdc/chat/transformation.py create mode 100644 tests/test_litellm/llms/gdc/chat/test_gdc_chat_transformation.py diff --git a/litellm/__init__.py b/litellm/__init__.py index 15e95ded906..9327e121b1d 100644 --- a/litellm/__init__.py +++ b/litellm/__init__.py @@ -263,6 +263,8 @@ azure_key: Optional[str] = None anthropic_key: Optional[str] = None replicate_key: Optional[str] = None bytez_key: Optional[str] = None +gdc_key: Optional[str] = None +gdc_api_base: Optional[str] = None cohere_key: Optional[str] = None infinity_key: Optional[str] = None clarifai_key: Optional[str] = None @@ -1787,6 +1789,7 @@ if TYPE_CHECKING: from .llms.nvidia_nim.embed import ( NvidiaNimEmbeddingConfig as NvidiaNimEmbeddingConfig, ) + from .llms.gdc.chat.transformation import GDCGeminiConfig as GDCGeminiConfig # Type stubs for lazy-loaded config instances openaiOSeriesConfig: OpenAIOSeriesConfig diff --git a/litellm/_lazy_imports_registry.py b/litellm/_lazy_imports_registry.py index 4f131354d2e..0f9d3a560d1 100644 --- a/litellm/_lazy_imports_registry.py +++ b/litellm/_lazy_imports_registry.py @@ -323,6 +323,7 @@ LLM_CONFIG_NAMES = ( "SnowflakeEmbeddingConfig", "AmazonNovaChatConfig", "SonioxAudioTranscriptionConfig", + "GDCGeminiConfig", ) # Types that support lazy loading via _lazy_import_types @@ -1157,6 +1158,10 @@ _LLM_CONFIGS_IMPORT_MAP = { ".llms.dashscope.chat.transformation", "DashScopeChatConfig", ), + "GDCGeminiConfig": ( + ".llms.gdc.chat.transformation", + "GDCGeminiConfig", + ), "ModelScopeChatConfig": ( ".llms.modelscope.chat.transformation", "ModelScopeChatConfig", diff --git a/litellm/constants.py b/litellm/constants.py index 93aed83852b..6eb2779dcae 100644 --- a/litellm/constants.py +++ b/litellm/constants.py @@ -460,6 +460,7 @@ LITELLM_CHAT_PROVIDERS = [ "openai", "openai_like", "bytez", + "gdc", "xai", "custom_openai", "text-completion-openai", diff --git a/litellm/litellm_core_utils/get_llm_provider_logic.py b/litellm/litellm_core_utils/get_llm_provider_logic.py index 122d09c855b..a7a576ff167 100644 --- a/litellm/litellm_core_utils/get_llm_provider_logic.py +++ b/litellm/litellm_core_utils/get_llm_provider_logic.py @@ -446,6 +446,8 @@ def get_llm_provider( # bytez models elif model.startswith("bytez/"): custom_llm_provider = "bytez" + elif model.startswith("gdc/"): + custom_llm_provider = "gdc" elif model.startswith("lemonade/"): custom_llm_provider = "lemonade" elif model.startswith("heroku/"): diff --git a/litellm/llms/gdc/__init__.py b/litellm/llms/gdc/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/litellm/llms/gdc/chat/__init__.py b/litellm/llms/gdc/chat/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/litellm/llms/gdc/chat/transformation.py b/litellm/llms/gdc/chat/transformation.py new file mode 100644 index 00000000000..61631920a64 --- /dev/null +++ b/litellm/llms/gdc/chat/transformation.py @@ -0,0 +1,285 @@ +""" +GDC Gemini chat completion transformation +""" + +import json +import os +import re +import threading +from typing import Any, Final +from urllib.parse import urlsplit + +import litellm +from litellm.llms.openai_like.chat.transformation import OpenAILikeChatConfig + + +class GDCGeminiConfig(OpenAILikeChatConfig): + supports_vertex_params: bool = True # Tell LiteLLM utilities not to strip vertex_ params + _GDCH_CREDENTIAL_TYPE: Final[str] = "gdch_service_account" + _PATH_ID_PATTERN: Final[re.Pattern[str]] = re.compile(r"^[a-zA-Z0-9_-]+$") + + def __init__(self, **kwargs: Any) -> None: + super().__init__(**kwargs) + self._creds_lock = threading.Lock() + self._gdch_creds_cache: dict = {} + + def get_supported_openai_params(self, model: str) -> list: + return [ + "vertex_project", + "vertex_location", + ] + super().get_supported_openai_params(model) + + def _resolve_project(self, optional_params: dict, litellm_params: dict) -> str | None: + return ( + litellm_params.get("vertex_project") + or litellm_params.get("vertex_ai_project") + or getattr(litellm, "vertex_project", None) + or optional_params.get("vertex_project") + or optional_params.get("vertex_ai_project") + ) + + def _resolve_location(self, optional_params: dict, litellm_params: dict) -> str | None: + return ( + litellm_params.get("vertex_location") + or litellm_params.get("vertex_ai_location") + or getattr(litellm, "vertex_location", None) + or optional_params.get("vertex_location") + or optional_params.get("vertex_ai_location") + ) + + def _effective_project(self, api_base: str, optional_params: dict, litellm_params: dict) -> str | None: + match = re.search(r"/v1/projects/([^/]+)", api_base) + if match: + return match.group(1) + return self._resolve_project(optional_params, litellm_params) + + def _validate_path_id(self, value: str, field: str, model: str) -> str: + if not self._PATH_ID_PATTERN.match(value): + raise litellm.utils.AuthenticationError( + message=f"{field} must be a plain identifier of letters, digits, hyphens or underscores.", + llm_provider="gdc", + model=model, + ) + return value + + def get_complete_url( + self, + api_base: str | None, + api_key: str | None, + model: str, + optional_params: dict, + litellm_params: dict, + stream: bool | None = None, + ) -> str: + api_base = api_base or litellm.gdc_api_base or litellm.api_base + if not api_base: + raise litellm.utils.AuthenticationError( + message="api_base/host is required for GDC Gemini. Please set it or pass it.", + llm_provider="gdc", + model=model, + ) + + if not api_base.startswith("http"): + api_base = f"https://{api_base}" + + api_base = api_base.rstrip("/") + + if "/v1/projects/" in api_base: + return api_base + + project = self._resolve_project(optional_params, litellm_params) + + if not project: + raise litellm.utils.AuthenticationError( + message="project is required for GDC Gemini. Please pass vertex_project.", + llm_provider="gdc", + model=model, + ) + + location = self._resolve_location(optional_params, litellm_params) + + if not location: + raise litellm.utils.AuthenticationError( + message="location is required for GDC Gemini. Please pass vertex_location.", + llm_provider="gdc", + model=model, + ) + + project = self._validate_path_id(project, "vertex_project", model) + location = self._validate_path_id(location, "vertex_location", model) + + return f"{api_base}/v1/projects/{project}/locations/{location}/chat/completions" + + def _read_env_bool(self, val: Any, env_var: str, default: bool = True) -> bool | str: + def _parse(s: str) -> bool | str: + cleaned = s.strip().lower() + if cleaned in ("false", "0", "no", "off"): + return False + if cleaned in ("true", "1", "yes", "on"): + return True + return s + + if val is not None: + if isinstance(val, str): + return _parse(val) + return val + + _env_val = os.getenv(env_var) + if _env_val is None: + return default + return _parse(_env_val) + + def _fetch_auth(self, gdch_creds: Any, ssl_verify: bool | str) -> None: + import requests + from google.auth.transport import requests as auth_requests + + auth_session = requests.Session() + auth_session.verify = ssl_verify + auth_request = auth_requests.Request(session=auth_session) + gdch_creds.refresh(auth_request) + + def _cached_fetch_token(self, creds: Any, audience: str, ssl_verify: bool | str, api_key: str | None = None) -> str: + # Key cache by both audience and credential identity to prevent cross-caller contamination + cache_key = (audience.rstrip("/"), api_key or str(id(creds))) + + with self._creds_lock: + if cache_key not in self._gdch_creds_cache: + self._gdch_creds_cache[cache_key] = creds.with_gdch_audience(audience.rstrip("/")) + + gdch_creds = self._gdch_creds_cache[cache_key] + + if not getattr(gdch_creds, "valid", False) or not getattr(gdch_creds, "token", None): + self._fetch_auth(gdch_creds, ssl_verify) + + token = gdch_creds.token + + return token + + def _load_creds_from_key(self, api_key: str) -> tuple[Any, bool]: + import google.auth + + try: + json_obj = json.loads(api_key) + except json.JSONDecodeError: + return None, False + if not isinstance(json_obj, dict) or json_obj.get("type") != self._GDCH_CREDENTIAL_TYPE: + raise ValueError( + "GDC only accepts a GDCH service account credential as a JSON api_key " + '(expected "type": "gdch_service_account"). Other Google credential types are ' + "rejected so their token or external-account endpoints cannot drive server-side requests." + ) + creds, _ = google.auth.load_credentials_from_dict(json_obj) + return creds, True + + def validate_environment( + self, + headers: dict, + model: str, + messages: list[Any], + optional_params: dict, + litellm_params: dict, + api_key: str | None = None, + api_base: str | None = None, + ) -> dict: + import google.auth.exceptions + + api_base = api_base or litellm.gdc_api_base or litellm.api_base + if not api_base: + raise litellm.utils.AuthenticationError( + message="api_base/host is required for GDC Gemini. Please set it or pass it.", + llm_provider="gdc", + model=model, + ) + + if not api_key: + raise litellm.utils.AuthenticationError( + message="api_key is required for GDC Gemini. Please pass your service account string or token as the api_key.", + llm_provider="gdc", + model=model, + ) + + project = self._effective_project(api_base, optional_params, litellm_params) + if not project: + raise litellm.utils.AuthenticationError( + message="project is required for GDC Gemini. Please pass vertex_project.", + llm_provider="gdc", + model=model, + ) + project = self._validate_path_id(project, "vertex_project", model) + + _audience_parts = urlsplit(api_base if api_base.startswith("http") else f"https://{api_base}") + audience = f"{_audience_parts.scheme}://{_audience_parts.netloc}" + + try: + creds, is_service_account = self._load_creds_from_key(api_key) + except ( + google.auth.exceptions.GoogleAuthError, + ValueError, + TypeError, + KeyError, + AttributeError, + ) as e: + raise litellm.utils.AuthenticationError( + message=f"Failed to load service account credentials from api_key: {str(e)}", + llm_provider="gdc", + model=model, + ) from e + + if creds is not None: + ssl_verify = self._read_env_bool(litellm_params.get("ssl_verify"), "SSL_VERIFY", default=True) + if self._read_env_bool(litellm_params.get("gdc_token_caching"), "GDC_TOKEN_CACHING", default=False): + token = self._cached_fetch_token(creds, audience, ssl_verify, api_key) + else: + gdch_creds = creds.with_gdch_audience(audience) + self._fetch_auth(gdch_creds, ssl_verify) + token = gdch_creds.token + headers["Authorization"] = f"Bearer {token}" + + if "Authorization" not in headers and not is_service_account: + headers["Authorization"] = f"Bearer {api_key}" + + # Standardize necessary metadata headers + if "content-type" not in headers and "Content-Type" not in headers: + headers["Content-Type"] = "application/json" + + stale_quota_headers = tuple(h for h in headers if h.lower() == "x-goog-user-project") + for stale in stale_quota_headers: + headers.pop(stale, None) + headers["x-goog-user-project"] = f"projects/{project}" + + return headers + + def transform_request( + self, + model: str, + messages: list[Any], + optional_params: dict, + litellm_params: dict, + headers: dict, + ) -> dict: + """ + Transforms the request to the GDC provider + """ + if model.startswith("gdc/"): + model = model.split("/", 1)[1] + + data = super().transform_request( + model=model, + messages=messages, + optional_params=optional_params, + litellm_params=litellm_params, + headers=headers, + ) + + # Remove extra params used for routing/auth + for param in [ + "vertex_project", + "vertex_ai_project", + "vertex_location", + "vertex_ai_location", + "ssl_verify", + "gdc_token_caching", + ]: + data.pop(param, None) + + return data diff --git a/litellm/main.py b/litellm/main.py index 18d2c367f8d..567930a4999 100644 --- a/litellm/main.py +++ b/litellm/main.py @@ -210,6 +210,7 @@ from .llms.bedrock.embed.embedding import BedrockEmbedding from .llms.bedrock.image_edit.handler import BedrockImageEdit from .llms.bedrock.image_generation.image_handler import BedrockImageGeneration from .llms.bytez.chat.transformation import BytezChatConfig +from .llms.gdc.chat.transformation import GDCGeminiConfig from .llms.clarifai.chat.transformation import ClarifaiConfig from .llms.codestral.completion.handler import CodestralTextCompletion from .llms.cohere.embed import handler as cohere_embed @@ -318,6 +319,7 @@ google_batch_embeddings = GoogleBatchEmbeddings() vertex_partner_models_chat_completion = VertexAIPartnerModels() vertex_gemma_chat_completion = VertexAIGemmaModels() vertex_model_garden_chat_completion = VertexAIModelGardenModels() +gdc_transformation = GDCGeminiConfig() # vertex_text_to_speech is now replaced by VertexAITextToSpeechConfig sagemaker_llm = SagemakerLLM() watsonx_chat_completion = WatsonXChatHandler() @@ -4336,6 +4338,45 @@ def _complete_gradient_ai(ctx: _CompletionDispatchContext) -> _CompletionDispatc ) +def _complete_gdc(ctx: _CompletionDispatchContext) -> _CompletionDispatchResult: + acompletion = ctx.acompletion + api_base = ctx.api_base + api_key = ctx.api_key + client = ctx.client + custom_llm_provider = ctx.custom_llm_provider + headers = ctx.headers + litellm_params = ctx.litellm_params + logging = ctx.logging + messages = ctx.messages + model = ctx.model + model_response = ctx.model_response + optional_params = ctx.optional_params + stream = ctx.stream + timeout = ctx.timeout + + api_key = api_key or litellm.gdc_key or get_secret_str("GDC_API_KEY") or litellm.api_key + api_base = api_base or litellm.gdc_api_base or get_secret_str("GDC_API_BASE") or litellm.api_base + + return base_llm_http_handler.completion( + model=model, + messages=messages, + headers=headers, + model_response=model_response, + api_key=api_key, + api_base=api_base, + acompletion=acompletion, + logging_obj=logging, + optional_params=optional_params, + litellm_params=litellm_params, + timeout=timeout, # type: ignore + client=client, + custom_llm_provider=custom_llm_provider, + encoding=_get_encoding(), + stream=stream, + provider_config=gdc_transformation, + ) + + def _complete_bytez(ctx: _CompletionDispatchContext) -> _CompletionDispatchResult: acompletion = ctx.acompletion api_base = ctx.api_base @@ -5533,6 +5574,8 @@ def completion( # type: ignore elif custom_llm_provider == "gradient_ai": response = _complete_gradient_ai(_dispatch_ctx) + elif custom_llm_provider == "gdc": + response = _complete_gdc(_dispatch_ctx) elif custom_llm_provider == "bytez": response = _complete_bytez(_dispatch_ctx) elif custom_llm_provider == "lemonade": diff --git a/litellm/types/utils.py b/litellm/types/utils.py index 4f0c0c21bce..0e2a6b24806 100644 --- a/litellm/types/utils.py +++ b/litellm/types/utils.py @@ -3369,6 +3369,7 @@ class LlmProviders(str, Enum): LITELLM_AGENT = "litellm_agent" CURSOR = "cursor" BEDROCK_MANTLE = "bedrock_mantle" + GDC = "gdc" # Create a set of all provider values for quick lookup diff --git a/litellm/utils.py b/litellm/utils.py index 26d3ae32739..226b94913b5 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -3497,6 +3497,17 @@ def filter_out_litellm_params(kwargs: dict) -> dict: return {key: value for key, value in kwargs.items() if key not in all_litellm_params} +def _provider_supports_vertex_params(custom_llm_provider: str) -> bool: + if custom_llm_provider in ("vertex_ai", "vertex_ai_beta"): + return True + try: + provider = LlmProviders(custom_llm_provider) + except ValueError: + return False + provider_config = ProviderConfigManager.get_provider_chat_config(model="", provider=provider) + return bool(getattr(provider_config, "supports_vertex_params", False)) + + class PreProcessNonDefaultParams: @staticmethod def base_pre_process_non_default_params( @@ -3518,11 +3529,7 @@ class PreProcessNonDefaultParams: continue elif k == "hf_model_name" and custom_llm_provider != "sagemaker": continue - elif ( - k.startswith("vertex_") - and custom_llm_provider != "vertex_ai" - and custom_llm_provider != "vertex_ai_beta" - ): # allow dynamically setting vertex ai init logic + elif k.startswith("vertex_") and not _provider_supports_vertex_params(custom_llm_provider): continue passed_params[k] = v @@ -7674,6 +7681,10 @@ class ProviderConfigManager: lambda: ProviderConfigManager._get_langflow_config(), False, ), + LlmProviders.GDC: ( + lambda: litellm.GDCGeminiConfig(), + False, + ), } @staticmethod diff --git a/provider_endpoints_support.json b/provider_endpoints_support.json index b137ec59a1f..edac8949f28 100644 --- a/provider_endpoints_support.json +++ b/provider_endpoints_support.json @@ -1059,6 +1059,16 @@ "interactions": true } }, + "gdc": { + "display_name": "Google Distributed Cloud (GDC)", + "url": "https://docs.litellm.ai/docs/providers/gdc", + "endpoints": { + "chat_completions": true, + "messages": false, + "responses": false, + "embeddings": false + } + }, "github_copilot": { "display_name": "GitHub Copilot (`github_copilot`)", "url": "https://docs.litellm.ai/docs/providers/github_copilot", diff --git a/ruff-strict-budget.json b/ruff-strict-budget.json index be62f8a9d67..f5aa600ab84 100644 --- a/ruff-strict-budget.json +++ b/ruff-strict-budget.json @@ -180,7 +180,7 @@ "limit": 34 }, "PLR1714": { - "limit": 267 + "limit": 265 }, "PLR1730": { "limit": 10 diff --git a/tests/test_litellm/llms/gdc/chat/test_gdc_chat_transformation.py b/tests/test_litellm/llms/gdc/chat/test_gdc_chat_transformation.py new file mode 100644 index 00000000000..d106cf7ea21 --- /dev/null +++ b/tests/test_litellm/llms/gdc/chat/test_gdc_chat_transformation.py @@ -0,0 +1,717 @@ +import os +import sys +from unittest.mock import MagicMock, patch + +import pytest + +# Adds the parent directory to the system path +sys.path.insert(0, os.path.abspath("../../../../..")) + +import litellm +from litellm.llms.gdc.chat.transformation import GDCGeminiConfig + +TEST_API_KEY = '{"type": "gdch_service_account", "project_id": "test-project"}' +TEST_MODEL = "gdc/gemini-2.5-flash" +TEST_API_BASE = "https://gdc-endpoint.com" +TEST_PROJECT = "test-project" +TEST_LOCATION = "test-location" + + +class TestGDCGeminiConfig: + def test_get_complete_url(self): + config = GDCGeminiConfig() + url = config.get_complete_url( + api_base=TEST_API_BASE, + api_key=None, + model=TEST_MODEL, + optional_params={ + "vertex_project": TEST_PROJECT, + "vertex_location": TEST_LOCATION, + }, + litellm_params={}, + ) + assert ( + url + == f"{TEST_API_BASE}/v1/projects/{TEST_PROJECT}/locations/{TEST_LOCATION}/chat/completions" + ) + + def test_get_complete_url_adds_https_scheme(self): + config = GDCGeminiConfig() + url = config.get_complete_url( + api_base="gdc-endpoint.com", + api_key=None, + model=TEST_MODEL, + optional_params={}, + litellm_params={ + "vertex_project": TEST_PROJECT, + "vertex_location": TEST_LOCATION, + }, + ) + assert url.startswith("https://gdc-endpoint.com/v1/projects/") + + def test_get_complete_url_preformed_base_returned_as_is(self): + config = GDCGeminiConfig() + preformed = f"{TEST_API_BASE}/v1/projects/{TEST_PROJECT}/locations/{TEST_LOCATION}/chat/completions" + url = config.get_complete_url( + api_base=preformed, + api_key=None, + model=TEST_MODEL, + optional_params={"vertex_project": TEST_PROJECT}, + litellm_params={}, + ) + assert url == preformed + + def test_get_complete_url_missing_api_base(self): + config = GDCGeminiConfig() + with pytest.raises(Exception, match="api_base/host is required for GDC Gemini"): + config.get_complete_url( + api_base=None, + api_key=None, + model=TEST_MODEL, + optional_params={ + "vertex_project": TEST_PROJECT, + "vertex_location": TEST_LOCATION, + }, + litellm_params={}, + ) + + def test_get_complete_url_missing_project(self): + config = GDCGeminiConfig() + with pytest.raises(Exception, match="project is required for GDC Gemini"): + config.get_complete_url( + api_base=TEST_API_BASE, + api_key=None, + model=TEST_MODEL, + optional_params={}, + litellm_params={}, + ) + + def test_get_complete_url_missing_location(self): + config = GDCGeminiConfig() + with pytest.raises(Exception, match="location is required for GDC Gemini"): + config.get_complete_url( + api_base=TEST_API_BASE, + api_key=None, + model=TEST_MODEL, + optional_params={"vertex_project": TEST_PROJECT}, + litellm_params={}, + ) + + def test_get_complete_url_accepts_vertex_ai_aliases(self): + config = GDCGeminiConfig() + url = config.get_complete_url( + api_base=TEST_API_BASE, + api_key=None, + model=TEST_MODEL, + optional_params={}, + litellm_params={ + "vertex_ai_project": TEST_PROJECT, + "vertex_ai_location": TEST_LOCATION, + }, + ) + assert ( + url + == f"{TEST_API_BASE}/v1/projects/{TEST_PROJECT}/locations/{TEST_LOCATION}/chat/completions" + ) + + def test_get_complete_url_preformed_base_is_authoritative_over_litellm_params(self): + config = GDCGeminiConfig() + preformed = f"{TEST_API_BASE}/v1/projects/pinned-project/locations/pinned-loc/chat/completions" + url = config.get_complete_url( + api_base=preformed, + api_key=None, + model=TEST_MODEL, + optional_params={"vertex_project": "attacker-optional", "vertex_location": "attacker-loc"}, + litellm_params={ + "vertex_project": "attacker-project", + "vertex_location": "attacker-loc", + }, + ) + assert url == preformed + + def test_get_complete_url_preformed_base_needs_no_project_param(self): + config = GDCGeminiConfig() + preformed = f"{TEST_API_BASE}/v1/projects/pinned-project/locations/pinned-loc/chat/completions" + url = config.get_complete_url( + api_base=preformed, + api_key=None, + model=TEST_MODEL, + optional_params={}, + litellm_params={}, + ) + assert url == preformed + + def test_deployment_project_takes_precedence_over_request(self): + config = GDCGeminiConfig() + url = config.get_complete_url( + api_base=TEST_API_BASE, + api_key=None, + model=TEST_MODEL, + optional_params={ + "vertex_project": "caller-project", + "vertex_location": "caller-location", + }, + litellm_params={ + "vertex_project": "deployment-project", + "vertex_location": "deployment-location", + }, + ) + assert url == ( + f"{TEST_API_BASE}/v1/projects/deployment-project" + "/locations/deployment-location/chat/completions" + ) + + @patch("google.auth.load_credentials_from_dict") + @patch("requests.Session") + def test_validate_environment(self, mock_session, mock_load_creds): + mock_creds = MagicMock() + mock_creds.token = "mock-token" + mock_creds.with_gdch_audience.return_value = mock_creds + mock_load_creds.return_value = (mock_creds, None) + + mock_session_instance = MagicMock() + mock_session.return_value = mock_session_instance + + config = GDCGeminiConfig() + result = config.validate_environment( + headers={}, + model=TEST_MODEL, + messages=[], + optional_params={ + "vertex_project": TEST_PROJECT, + "vertex_location": TEST_LOCATION, + }, + litellm_params={}, + api_key=TEST_API_KEY, + api_base=TEST_API_BASE, + ) + + assert result["Authorization"] == "Bearer mock-token" + assert result["Content-Type"] == "application/json" + assert result["x-goog-user-project"] == f"projects/{TEST_PROJECT}" + + mock_creds.with_gdch_audience.assert_called_once_with(TEST_API_BASE) + mock_creds.refresh.assert_called_once() + assert mock_session_instance.verify is True + + def test_validate_environment_strips_audience_trailing_slash(self): + config = GDCGeminiConfig() + mock_creds = MagicMock() + mock_creds.token = "mock-token" + mock_creds.with_gdch_audience.return_value = mock_creds + + with patch( + "google.auth.load_credentials_from_dict", return_value=(mock_creds, None) + ), patch("requests.Session"): + config.validate_environment( + headers={}, + model=TEST_MODEL, + messages=[], + optional_params={}, + litellm_params={"vertex_project": TEST_PROJECT}, + api_key=TEST_API_KEY, + api_base="https://gdc-endpoint.com/", + ) + + mock_creds.with_gdch_audience.assert_called_once_with("https://gdc-endpoint.com") + + def test_validate_environment_audience_is_host_for_preformed_base(self): + config = GDCGeminiConfig() + mock_creds = MagicMock() + mock_creds.token = "mock-token" + mock_creds.with_gdch_audience.return_value = mock_creds + + with patch( + "google.auth.load_credentials_from_dict", return_value=(mock_creds, None) + ), patch("requests.Session"): + config.validate_environment( + headers={}, + model=TEST_MODEL, + messages=[], + optional_params={}, + litellm_params={ + "vertex_project": "deployment-project", + "vertex_location": "deployment-loc", + }, + api_key=TEST_API_KEY, + api_base=f"{TEST_API_BASE}/v1/projects/embedded/locations/embedded/chat/completions", + ) + + mock_creds.with_gdch_audience.assert_called_once_with(TEST_API_BASE) + + def test_validate_environment_missing_api_base(self, monkeypatch): + monkeypatch.setattr(litellm, "api_base", None, raising=False) + monkeypatch.setattr(litellm, "gdc_api_base", None, raising=False) + config = GDCGeminiConfig() + with pytest.raises(Exception, match="api_base/host is required for GDC Gemini"): + config.validate_environment( + headers={}, + model=TEST_MODEL, + messages=[], + optional_params={}, + litellm_params={"vertex_project": TEST_PROJECT}, + api_key=TEST_API_KEY, + api_base=None, + ) + + def test_validate_environment_missing_api_key(self): + config = GDCGeminiConfig() + with pytest.raises(Exception, match="api_key is required for GDC Gemini"): + config.validate_environment( + headers={}, + model=TEST_MODEL, + messages=[], + optional_params={}, + litellm_params={"vertex_project": TEST_PROJECT}, + api_key=None, + api_base=TEST_API_BASE, + ) + + def test_validate_environment_missing_project(self): + config = GDCGeminiConfig() + with pytest.raises(Exception, match="project is required for GDC Gemini"): + config.validate_environment( + headers={}, + model=TEST_MODEL, + messages=[], + optional_params={}, + litellm_params={}, + api_key=TEST_API_KEY, + api_base=TEST_API_BASE, + ) + + def test_validate_environment_raw_token_used_as_bearer(self): + config = GDCGeminiConfig() + headers = config.validate_environment( + headers={}, + model=TEST_MODEL, + messages=[], + optional_params={}, + litellm_params={"vertex_project": TEST_PROJECT}, + api_key="ya29.raw-access-token", + api_base=TEST_API_BASE, + ) + assert headers["Authorization"] == "Bearer ya29.raw-access-token" + assert headers["x-goog-user-project"] == f"projects/{TEST_PROJECT}" + + def test_validate_environment_bad_credentials_raise_auth_error(self): + config = GDCGeminiConfig() + with patch( + "google.auth.load_credentials_from_dict", + side_effect=ValueError("bad creds"), + ): + with pytest.raises( + Exception, match="Failed to load service account credentials" + ): + config.validate_environment( + headers={}, + model=TEST_MODEL, + messages=[], + optional_params={}, + litellm_params={"vertex_project": TEST_PROJECT}, + api_key=TEST_API_KEY, + api_base=TEST_API_BASE, + ) + + def test_validate_environment_string_false_disables_token_caching(self): + config = GDCGeminiConfig() + mock_creds = MagicMock() + mock_creds.token = "mock-token" + mock_creds.with_gdch_audience.return_value = mock_creds + + with patch( + "google.auth.load_credentials_from_dict", return_value=(mock_creds, None) + ), patch("requests.Session"), patch.object( + config, "_cached_fetch_token" + ) as mock_cached: + config.validate_environment( + headers={}, + model=TEST_MODEL, + messages=[], + optional_params={}, + litellm_params={ + "vertex_project": TEST_PROJECT, + "gdc_token_caching": "false", + }, + api_key=TEST_API_KEY, + api_base=TEST_API_BASE, + ) + + mock_cached.assert_not_called() + + def test_validate_environment_token_caching_path(self): + config = GDCGeminiConfig() + mock_creds = MagicMock() + mock_creds.token = "cached-token" + mock_creds.valid = True + mock_creds.with_gdch_audience.return_value = mock_creds + + with patch( + "google.auth.load_credentials_from_dict", return_value=(mock_creds, None) + ): + headers = config.validate_environment( + headers={}, + model=TEST_MODEL, + messages=[], + optional_params={}, + litellm_params={ + "vertex_project": TEST_PROJECT, + "gdc_token_caching": True, + }, + api_key=TEST_API_KEY, + api_base=TEST_API_BASE, + ) + + assert headers["Authorization"] == "Bearer cached-token" + mock_creds.refresh.assert_not_called() + + def test_validate_environment_preserves_content_type_but_rebinds_quota_project(self): + config = GDCGeminiConfig() + headers = config.validate_environment( + headers={ + "Content-Type": "text/plain", + "x-goog-user-project": "projects/attacker", + }, + model=TEST_MODEL, + messages=[], + optional_params={}, + litellm_params={"vertex_project": TEST_PROJECT}, + api_key="raw-token", + api_base=TEST_API_BASE, + ) + assert headers["Content-Type"] == "text/plain" + assert headers["x-goog-user-project"] == f"projects/{TEST_PROJECT}" + + @pytest.mark.parametrize( + "header_name", ["x-goog-user-project", "X-Goog-User-Project", "X-GOOG-USER-PROJECT"] + ) + def test_validate_environment_strips_caller_forwarded_quota_header(self, header_name): + config = GDCGeminiConfig() + mock_creds = MagicMock() + mock_creds.token = "tok" + mock_creds.with_gdch_audience.return_value = mock_creds + preformed = f"{TEST_API_BASE}/v1/projects/deployment-proj/locations/us-central1/chat/completions" + with patch( + "google.auth.load_credentials_from_dict", return_value=(mock_creds, None) + ): + headers = config.validate_environment( + headers={header_name: "projects/attacker"}, + model=TEST_MODEL, + messages=[], + optional_params={"vertex_project": "attacker-proj"}, + litellm_params={}, + api_key=TEST_API_KEY, + api_base=preformed, + ) + quota_values = [v for k, v in headers.items() if k.lower() == "x-goog-user-project"] + assert quota_values == ["projects/deployment-proj"] + + @pytest.mark.parametrize( + "bad", ["p/locations/l/chat/completions?", "a/b", "a?b", "a#b", "..", "a b", "a:b", "a%2Fb"] + ) + def test_get_complete_url_rejects_project_path_injection(self, bad): + config = GDCGeminiConfig() + with pytest.raises(Exception, match="vertex_project must be a plain identifier"): + config.get_complete_url( + api_base=TEST_API_BASE, + api_key=None, + model=TEST_MODEL, + optional_params={"vertex_project": bad, "vertex_location": TEST_LOCATION}, + litellm_params={}, + ) + + @pytest.mark.parametrize("bad", ["../../evil", "l/chat/completions", "l?x", ".."]) + def test_get_complete_url_rejects_location_path_injection(self, bad): + config = GDCGeminiConfig() + with pytest.raises(Exception, match="vertex_location must be a plain identifier"): + config.get_complete_url( + api_base=TEST_API_BASE, + api_key=None, + model=TEST_MODEL, + optional_params={"vertex_project": TEST_PROJECT, "vertex_location": bad}, + litellm_params={}, + ) + + @pytest.mark.parametrize("good", ["test-project", "us-central1", "123456", "proj_1", "MyProj-2"]) + def test_get_complete_url_accepts_valid_ids(self, good): + config = GDCGeminiConfig() + url = config.get_complete_url( + api_base=TEST_API_BASE, + api_key=None, + model=TEST_MODEL, + optional_params={"vertex_project": good, "vertex_location": good}, + litellm_params={}, + ) + assert url == f"{TEST_API_BASE}/v1/projects/{good}/locations/{good}/chat/completions" + + def test_validate_environment_rejects_project_path_injection(self): + config = GDCGeminiConfig() + with pytest.raises(Exception, match="vertex_project must be a plain identifier"): + config.validate_environment( + headers={}, + model=TEST_MODEL, + messages=[], + optional_params={"vertex_project": "p/../admin"}, + litellm_params={}, + api_key="raw-token", + api_base=TEST_API_BASE, + ) + + def test_validate_environment_quota_header_bound_to_deployment_url(self): + config = GDCGeminiConfig() + mock_creds = MagicMock() + mock_creds.token = "tok" + mock_creds.with_gdch_audience.return_value = mock_creds + preformed = f"{TEST_API_BASE}/v1/projects/deployment-proj/locations/us-central1/chat/completions" + with patch( + "google.auth.load_credentials_from_dict", return_value=(mock_creds, None) + ): + headers = config.validate_environment( + headers={}, + model=TEST_MODEL, + messages=[], + optional_params={"vertex_project": "attacker-proj"}, + litellm_params={}, + api_key=TEST_API_KEY, + api_base=preformed, + ) + assert headers["x-goog-user-project"] == "projects/deployment-proj" + + def test_validate_environment_quota_header_pinned_to_preformed_url(self): + config = GDCGeminiConfig() + mock_creds = MagicMock() + mock_creds.token = "tok" + mock_creds.with_gdch_audience.return_value = mock_creds + preformed = f"{TEST_API_BASE}/v1/projects/url-proj/locations/us-central1/chat/completions" + with patch( + "google.auth.load_credentials_from_dict", return_value=(mock_creds, None) + ): + headers = config.validate_environment( + headers={}, + model=TEST_MODEL, + messages=[], + optional_params={"vertex_project": "attacker-proj"}, + litellm_params={"vertex_project": "override-proj"}, + api_key=TEST_API_KEY, + api_base=preformed, + ) + assert headers["x-goog-user-project"] == "projects/url-proj" + + def test_transform_request(self): + config = GDCGeminiConfig() + data = config.transform_request( + model=TEST_MODEL, + messages=[{"role": "user", "content": "Hello"}], + optional_params={ + "vertex_project": TEST_PROJECT, + "vertex_location": TEST_LOCATION, + }, + litellm_params={"ssl_verify": True}, + headers={}, + ) + assert data["model"] == "gemini-2.5-flash" + assert "vertex_project" not in data + assert "vertex_location" not in data + assert "ssl_verify" not in data + + def test_load_creds_from_key_ignores_file_paths(self, tmp_path): + config = GDCGeminiConfig() + creds_file = tmp_path / "service_account.json" + creds_file.write_text( + '{"type": "gdch_service_account", "project_id": "host-only-project"}' + ) + + creds, is_service_account = config._load_creds_from_key(str(creds_file)) + + assert creds is None + assert is_service_account is False + + def test_load_creds_from_key_rejects_non_gdch_credential_types(self): + config = GDCGeminiConfig() + external_account = ( + '{"type": "external_account", ' + '"token_url": "http://169.254.169.254/latest/api/token", ' + '"credential_source": {"url": "http://169.254.169.254/"}}' + ) + with patch( + "google.auth.load_credentials_from_dict", + return_value=(MagicMock(), None), + ) as mock_load: + with pytest.raises(ValueError, match="GDCH service account"): + config._load_creds_from_key(external_account) + mock_load.assert_not_called() + + def test_validate_environment_rejects_non_gdch_credential_without_refresh(self): + config = GDCGeminiConfig() + mock_creds = MagicMock() + mock_creds.token = "leaked-token" + mock_creds.with_gdch_audience.return_value = mock_creds + malicious = ( + '{"type": "external_account", ' + '"token_url": "http://169.254.169.254/latest/api/token"}' + ) + + with patch( + "google.auth.load_credentials_from_dict", + return_value=(mock_creds, None), + ) as mock_load, patch("requests.Session") as mock_session: + with pytest.raises( + Exception, match="Failed to load service account credentials" + ): + config.validate_environment( + headers={}, + model=TEST_MODEL, + messages=[], + optional_params={}, + litellm_params={"vertex_project": TEST_PROJECT}, + api_key=malicious, + api_base=TEST_API_BASE, + ) + + mock_load.assert_not_called() + mock_session.assert_not_called() + mock_creds.refresh.assert_not_called() + + def test_validate_environment_does_not_read_api_key_file_path(self, tmp_path): + config = GDCGeminiConfig() + creds_file = tmp_path / "service_account.json" + creds_file.write_text( + '{"type": "service_account", "project_id": "host-only-project"}' + ) + + headers = config.validate_environment( + headers={}, + model=TEST_MODEL, + messages=[], + optional_params={}, + litellm_params={ + "vertex_project": TEST_PROJECT, + "vertex_location": TEST_LOCATION, + }, + api_key=str(creds_file), + api_base=TEST_API_BASE, + ) + + assert headers["Authorization"] == f"Bearer {creds_file}" + assert headers["x-goog-user-project"] == f"projects/{TEST_PROJECT}" + + @pytest.mark.parametrize( + "val, env_value, default, expected", + [ + (True, None, True, True), + (False, "true", True, False), + ("literal", None, True, "literal"), + (None, None, True, True), + (None, None, False, False), + (None, "true", False, True), + (None, "1", False, True), + (None, "on", False, True), + (None, "false", True, False), + (None, "0", True, False), + (None, "off", True, False), + (None, "verbose", True, "verbose"), + ], + ) + def test_read_env_bool(self, monkeypatch, val, env_value, default, expected): + config = GDCGeminiConfig() + env_var = "GDC_TEST_FLAG" + if env_value is None: + monkeypatch.delenv(env_var, raising=False) + else: + monkeypatch.setenv(env_var, env_value) + assert config._read_env_bool(val, env_var, default=default) == expected + + def test_cached_fetch_token_keys_by_credential(self): + config = GDCGeminiConfig() + + def make_creds(token): + creds = MagicMock() + creds.with_gdch_audience.return_value = creds + creds.valid = True + creds.token = token + return creds + + creds_a = make_creds("token-a") + creds_b = make_creds("token-b") + + assert ( + config._cached_fetch_token(creds_a, TEST_API_BASE, True, api_key="key-a") + == "token-a" + ) + assert ( + config._cached_fetch_token(creds_b, TEST_API_BASE, True, api_key="key-b") + == "token-b" + ) + # same credential identity reuses the cached entry + config._cached_fetch_token(creds_a, TEST_API_BASE, True, api_key="key-a") + creds_a.with_gdch_audience.assert_called_once() + + def test_cached_fetch_token_refreshes_when_invalid(self): + config = GDCGeminiConfig() + creds = MagicMock() + creds.with_gdch_audience.return_value = creds + creds.valid = False + creds.token = "refreshed" + + with patch.object(config, "_fetch_auth") as mock_fetch: + token = config._cached_fetch_token( + creds, TEST_API_BASE, True, api_key="key" + ) + + assert token == "refreshed" + mock_fetch.assert_called_once() + + def test_init_sets_up_lock_and_cache(self): + config = GDCGeminiConfig() + assert config._gdch_creds_cache == {} + assert config._creds_lock is not None + + +class TestCompleteGDC: + @patch("litellm.main.base_llm_http_handler.completion") + def test_complete_gdc_resolves_key_and_base(self, mock_completion, monkeypatch): + from litellm.main import gdc_transformation + + mock_completion.return_value = MagicMock() + monkeypatch.setattr(litellm, "gdc_key", "resolved-key", raising=False) + monkeypatch.setattr( + litellm, "gdc_api_base", "https://resolved-base.com", raising=False + ) + monkeypatch.setattr(litellm, "api_base", None, raising=False) + + litellm.completion( + model="gdc/gemini-2.5-flash", + messages=[{"role": "user", "content": "hi"}], + vertex_project=TEST_PROJECT, + vertex_location=TEST_LOCATION, + ) + + assert mock_completion.called + _, kwargs = mock_completion.call_args + assert kwargs["custom_llm_provider"] == "gdc" + assert kwargs["api_key"] == "resolved-key" + assert kwargs["api_base"] == "https://resolved-base.com" + assert kwargs["provider_config"] is gdc_transformation + + @patch("litellm.main.base_llm_http_handler.completion") + def test_complete_gdc_prefers_gdc_api_base_over_global( + self, mock_completion, monkeypatch + ): + mock_completion.return_value = MagicMock() + monkeypatch.setattr(litellm, "gdc_key", "resolved-key", raising=False) + monkeypatch.setattr( + litellm, "gdc_api_base", "https://gdc-specific.com", raising=False + ) + monkeypatch.setattr( + litellm, "api_base", "https://other-provider.com", raising=False + ) + + litellm.completion( + model="gdc/gemini-2.5-flash", + messages=[{"role": "user", "content": "hi"}], + vertex_project=TEST_PROJECT, + vertex_location=TEST_LOCATION, + ) + + _, kwargs = mock_completion.call_args + assert kwargs["api_base"] == "https://gdc-specific.com" diff --git a/tests/test_litellm/test_utils.py b/tests/test_litellm/test_utils.py index 6f9f26bf6dd..28b82cf035b 100644 --- a/tests/test_litellm/test_utils.py +++ b/tests/test_litellm/test_utils.py @@ -1345,6 +1345,48 @@ def test_pre_process_non_default_params(model, custom_llm_provider): } +@pytest.mark.parametrize( + "custom_llm_provider, expected", + [ + ("vertex_ai", True), + ("vertex_ai_beta", True), + ("gdc", True), + ("openai", False), + ("bedrock", False), + ("not_a_real_provider", False), + ], +) +def test_provider_supports_vertex_params(custom_llm_provider, expected): + from litellm.utils import _provider_supports_vertex_params + + assert _provider_supports_vertex_params(custom_llm_provider) is expected + + +@pytest.mark.parametrize( + "model, custom_llm_provider, should_keep", + [ + ("gemini-2.5-pro", "vertex_ai", True), + ("gemini-2.5-pro", "vertex_ai_beta", True), + ("gdc/gemini-2.5-flash", "gdc", True), + ("gpt-4o", "openai", False), + ], +) +def test_vertex_params_not_stripped_for_vertex_family( + model, custom_llm_provider, should_keep +): + optional_params = litellm.utils.get_optional_params( + model=model, + custom_llm_provider=custom_llm_provider, + vertex_project="my-project", + vertex_location="us-central1", + ) + assert ("vertex_project" in optional_params) is should_keep + assert ("vertex_location" in optional_params) is should_keep + if should_keep: + assert optional_params["vertex_project"] == "my-project" + assert optional_params["vertex_location"] == "us-central1" + + from litellm.utils import supports_function_calling From 6e023f7cf2f63b009408584bf16e3efcad73254f Mon Sep 17 00:00:00 2001 From: Mateo Wang <277851410+mateo-berri@users.noreply.github.com> Date: Wed, 1 Jul 2026 17:45:57 -0700 Subject: [PATCH 64/79] fix(model_prices): apply claude-sonnet-5 introductory pricing through 2026-08-31 (#31917) * fix(model_prices): apply claude-sonnet-5 introductory pricing through 2026-08-31 Anthropic launched Sonnet 5 with introductory pricing of $2/$10 per million input/output tokens through August 31, 2026 (sticker price $3/$15 applies from September 1, 2026). Bedrock, Vertex AI, and Azure Foundry mirror the introductory rate. LiteLLM was charging the sticker price on all ten claude-sonnet-5 entries, over-billing by 50% during the introductory period. Update input, output, cache write (5m and 1h), and cache read costs on the base entries to the introductory rate, and keep the 10% cross-region premium on the us/eu/au/jp Bedrock inference profiles on top of it. Also add an anthropic-sonnet-5 entry to the dev proxy config. * test: document exact sticker prices to restore on 2026-09-01 --- ...odel_prices_and_context_window_backup.json | 100 +++++++++--------- litellm/proxy/dev_config.yaml | 4 + model_prices_and_context_window.json | 100 +++++++++--------- .../test_claude_sonnet_5_config.py | 41 ++++--- 4 files changed, 131 insertions(+), 114 deletions(-) diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index b3058bb4214..b249b951b8e 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -1672,16 +1672,16 @@ "supports_minimal_reasoning_effort": true }, "anthropic.claude-sonnet-5": { - "cache_creation_input_token_cost": 3.75e-06, - "cache_creation_input_token_cost_above_1hr": 6e-06, - "cache_read_input_token_cost": 3e-07, - "input_cost_per_token": 3e-06, + "cache_creation_input_token_cost": 2.5e-06, + "cache_creation_input_token_cost_above_1hr": 4e-06, + "cache_read_input_token_cost": 2e-07, + "input_cost_per_token": 2e-06, "litellm_provider": "bedrock_converse", "max_input_tokens": 1000000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.5e-05, + "output_cost_per_token": 1e-05, "search_context_cost_per_query": { "search_context_size_high": 0.01, "search_context_size_low": 0.01, @@ -1705,16 +1705,16 @@ "bedrock_output_config_effort_ceiling": "xhigh" }, "global.anthropic.claude-sonnet-5": { - "cache_creation_input_token_cost": 3.75e-06, - "cache_creation_input_token_cost_above_1hr": 6e-06, - "cache_read_input_token_cost": 3e-07, - "input_cost_per_token": 3e-06, + "cache_creation_input_token_cost": 2.5e-06, + "cache_creation_input_token_cost_above_1hr": 4e-06, + "cache_read_input_token_cost": 2e-07, + "input_cost_per_token": 2e-06, "litellm_provider": "bedrock_converse", "max_input_tokens": 1000000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.5e-05, + "output_cost_per_token": 1e-05, "search_context_cost_per_query": { "search_context_size_high": 0.01, "search_context_size_low": 0.01, @@ -1738,16 +1738,16 @@ "bedrock_output_config_effort_ceiling": "xhigh" }, "us.anthropic.claude-sonnet-5": { - "cache_creation_input_token_cost": 4.125e-06, - "cache_creation_input_token_cost_above_1hr": 6.6e-06, - "cache_read_input_token_cost": 3.3e-07, - "input_cost_per_token": 3.3e-06, + "cache_creation_input_token_cost": 2.75e-06, + "cache_creation_input_token_cost_above_1hr": 4.4e-06, + "cache_read_input_token_cost": 2.2e-07, + "input_cost_per_token": 2.2e-06, "litellm_provider": "bedrock_converse", "max_input_tokens": 1000000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.65e-05, + "output_cost_per_token": 1.1e-05, "search_context_cost_per_query": { "search_context_size_high": 0.01, "search_context_size_low": 0.01, @@ -1771,16 +1771,16 @@ "bedrock_output_config_effort_ceiling": "xhigh" }, "eu.anthropic.claude-sonnet-5": { - "cache_creation_input_token_cost": 4.125e-06, - "cache_creation_input_token_cost_above_1hr": 6.6e-06, - "cache_read_input_token_cost": 3.3e-07, - "input_cost_per_token": 3.3e-06, + "cache_creation_input_token_cost": 2.75e-06, + "cache_creation_input_token_cost_above_1hr": 4.4e-06, + "cache_read_input_token_cost": 2.2e-07, + "input_cost_per_token": 2.2e-06, "litellm_provider": "bedrock_converse", "max_input_tokens": 1000000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.65e-05, + "output_cost_per_token": 1.1e-05, "search_context_cost_per_query": { "search_context_size_high": 0.01, "search_context_size_low": 0.01, @@ -1804,16 +1804,16 @@ "bedrock_output_config_effort_ceiling": "xhigh" }, "au.anthropic.claude-sonnet-5": { - "cache_creation_input_token_cost": 4.125e-06, - "cache_creation_input_token_cost_above_1hr": 6.6e-06, - "cache_read_input_token_cost": 3.3e-07, - "input_cost_per_token": 3.3e-06, + "cache_creation_input_token_cost": 2.75e-06, + "cache_creation_input_token_cost_above_1hr": 4.4e-06, + "cache_read_input_token_cost": 2.2e-07, + "input_cost_per_token": 2.2e-06, "litellm_provider": "bedrock_converse", "max_input_tokens": 1000000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.65e-05, + "output_cost_per_token": 1.1e-05, "search_context_cost_per_query": { "search_context_size_high": 0.01, "search_context_size_low": 0.01, @@ -1837,16 +1837,16 @@ "bedrock_output_config_effort_ceiling": "xhigh" }, "jp.anthropic.claude-sonnet-5": { - "cache_creation_input_token_cost": 4.125e-06, - "cache_creation_input_token_cost_above_1hr": 6.6e-06, - "cache_read_input_token_cost": 3.3e-07, - "input_cost_per_token": 3.3e-06, + "cache_creation_input_token_cost": 2.75e-06, + "cache_creation_input_token_cost_above_1hr": 4.4e-06, + "cache_read_input_token_cost": 2.2e-07, + "input_cost_per_token": 2.2e-06, "litellm_provider": "bedrock_converse", "max_input_tokens": 1000000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.65e-05, + "output_cost_per_token": 1.1e-05, "search_context_cost_per_query": { "search_context_size_high": 0.01, "search_context_size_low": 0.01, @@ -2710,16 +2710,16 @@ "supports_vision": true }, "azure_ai/claude-sonnet-5": { - "cache_creation_input_token_cost": 3.75e-06, - "cache_creation_input_token_cost_above_1hr": 6e-06, - "cache_read_input_token_cost": 3e-07, - "input_cost_per_token": 3e-06, + "cache_creation_input_token_cost": 2.5e-06, + "cache_creation_input_token_cost_above_1hr": 4e-06, + "cache_read_input_token_cost": 2e-07, + "input_cost_per_token": 2e-06, "litellm_provider": "azure_ai", "max_input_tokens": 1000000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.5e-05, + "output_cost_per_token": 1e-05, "search_context_cost_per_query": { "search_context_size_high": 0.01, "search_context_size_low": 0.01, @@ -10474,16 +10474,16 @@ "supports_web_search": true }, "claude-sonnet-5": { - "cache_creation_input_token_cost": 3.75e-06, - "cache_creation_input_token_cost_above_1hr": 6e-06, - "cache_read_input_token_cost": 3e-07, - "input_cost_per_token": 3e-06, + "cache_creation_input_token_cost": 2.5e-06, + "cache_creation_input_token_cost_above_1hr": 4e-06, + "cache_read_input_token_cost": 2e-07, + "input_cost_per_token": 2e-06, "litellm_provider": "anthropic", "max_input_tokens": 1000000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.5e-05, + "output_cost_per_token": 1e-05, "search_context_cost_per_query": { "search_context_size_high": 0.01, "search_context_size_low": 0.01, @@ -35210,16 +35210,16 @@ "supports_vision": true }, "vertex_ai/claude-sonnet-5": { - "cache_creation_input_token_cost": 3.75e-06, - "cache_creation_input_token_cost_above_1hr": 6e-06, - "cache_read_input_token_cost": 3e-07, - "input_cost_per_token": 3e-06, + "cache_creation_input_token_cost": 2.5e-06, + "cache_creation_input_token_cost_above_1hr": 4e-06, + "cache_read_input_token_cost": 2e-07, + "input_cost_per_token": 2e-06, "litellm_provider": "vertex_ai-anthropic_models", "max_input_tokens": 1000000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.5e-05, + "output_cost_per_token": 1e-05, "search_context_cost_per_query": { "search_context_size_high": 0.01, "search_context_size_low": 0.01, @@ -42677,16 +42677,16 @@ } }, "vertex_ai/claude-sonnet-5@default": { - "cache_creation_input_token_cost": 3.75e-06, - "cache_creation_input_token_cost_above_1hr": 6e-06, - "cache_read_input_token_cost": 3e-07, - "input_cost_per_token": 3e-06, + "cache_creation_input_token_cost": 2.5e-06, + "cache_creation_input_token_cost_above_1hr": 4e-06, + "cache_read_input_token_cost": 2e-07, + "input_cost_per_token": 2e-06, "litellm_provider": "vertex_ai-anthropic_models", "max_input_tokens": 1000000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.5e-05, + "output_cost_per_token": 1e-05, "search_context_cost_per_query": { "search_context_size_high": 0.01, "search_context_size_low": 0.01, diff --git a/litellm/proxy/dev_config.yaml b/litellm/proxy/dev_config.yaml index 6078161c780..0dc90e658f2 100644 --- a/litellm/proxy/dev_config.yaml +++ b/litellm/proxy/dev_config.yaml @@ -28,6 +28,10 @@ model_list: litellm_params: model: anthropic/claude-opus-4-8 api_key: os.environ/ANTHROPIC_API_KEY + - model_name: anthropic-sonnet-5 + litellm_params: + model: anthropic/claude-sonnet-5 + api_key: os.environ/ANTHROPIC_API_KEY # ---------- Bedrock Invoke ---------- - model_name: bedrock-invoke-haiku-4-5 diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index 6ab6f1bda46..9e9523193c7 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -1672,16 +1672,16 @@ "supports_minimal_reasoning_effort": true }, "anthropic.claude-sonnet-5": { - "cache_creation_input_token_cost": 3.75e-06, - "cache_creation_input_token_cost_above_1hr": 6e-06, - "cache_read_input_token_cost": 3e-07, - "input_cost_per_token": 3e-06, + "cache_creation_input_token_cost": 2.5e-06, + "cache_creation_input_token_cost_above_1hr": 4e-06, + "cache_read_input_token_cost": 2e-07, + "input_cost_per_token": 2e-06, "litellm_provider": "bedrock_converse", "max_input_tokens": 1000000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.5e-05, + "output_cost_per_token": 1e-05, "search_context_cost_per_query": { "search_context_size_high": 0.01, "search_context_size_low": 0.01, @@ -1705,16 +1705,16 @@ "bedrock_output_config_effort_ceiling": "xhigh" }, "global.anthropic.claude-sonnet-5": { - "cache_creation_input_token_cost": 3.75e-06, - "cache_creation_input_token_cost_above_1hr": 6e-06, - "cache_read_input_token_cost": 3e-07, - "input_cost_per_token": 3e-06, + "cache_creation_input_token_cost": 2.5e-06, + "cache_creation_input_token_cost_above_1hr": 4e-06, + "cache_read_input_token_cost": 2e-07, + "input_cost_per_token": 2e-06, "litellm_provider": "bedrock_converse", "max_input_tokens": 1000000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.5e-05, + "output_cost_per_token": 1e-05, "search_context_cost_per_query": { "search_context_size_high": 0.01, "search_context_size_low": 0.01, @@ -1738,16 +1738,16 @@ "bedrock_output_config_effort_ceiling": "xhigh" }, "us.anthropic.claude-sonnet-5": { - "cache_creation_input_token_cost": 4.125e-06, - "cache_creation_input_token_cost_above_1hr": 6.6e-06, - "cache_read_input_token_cost": 3.3e-07, - "input_cost_per_token": 3.3e-06, + "cache_creation_input_token_cost": 2.75e-06, + "cache_creation_input_token_cost_above_1hr": 4.4e-06, + "cache_read_input_token_cost": 2.2e-07, + "input_cost_per_token": 2.2e-06, "litellm_provider": "bedrock_converse", "max_input_tokens": 1000000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.65e-05, + "output_cost_per_token": 1.1e-05, "search_context_cost_per_query": { "search_context_size_high": 0.01, "search_context_size_low": 0.01, @@ -1771,16 +1771,16 @@ "bedrock_output_config_effort_ceiling": "xhigh" }, "eu.anthropic.claude-sonnet-5": { - "cache_creation_input_token_cost": 4.125e-06, - "cache_creation_input_token_cost_above_1hr": 6.6e-06, - "cache_read_input_token_cost": 3.3e-07, - "input_cost_per_token": 3.3e-06, + "cache_creation_input_token_cost": 2.75e-06, + "cache_creation_input_token_cost_above_1hr": 4.4e-06, + "cache_read_input_token_cost": 2.2e-07, + "input_cost_per_token": 2.2e-06, "litellm_provider": "bedrock_converse", "max_input_tokens": 1000000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.65e-05, + "output_cost_per_token": 1.1e-05, "search_context_cost_per_query": { "search_context_size_high": 0.01, "search_context_size_low": 0.01, @@ -1804,16 +1804,16 @@ "bedrock_output_config_effort_ceiling": "xhigh" }, "au.anthropic.claude-sonnet-5": { - "cache_creation_input_token_cost": 4.125e-06, - "cache_creation_input_token_cost_above_1hr": 6.6e-06, - "cache_read_input_token_cost": 3.3e-07, - "input_cost_per_token": 3.3e-06, + "cache_creation_input_token_cost": 2.75e-06, + "cache_creation_input_token_cost_above_1hr": 4.4e-06, + "cache_read_input_token_cost": 2.2e-07, + "input_cost_per_token": 2.2e-06, "litellm_provider": "bedrock_converse", "max_input_tokens": 1000000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.65e-05, + "output_cost_per_token": 1.1e-05, "search_context_cost_per_query": { "search_context_size_high": 0.01, "search_context_size_low": 0.01, @@ -1837,16 +1837,16 @@ "bedrock_output_config_effort_ceiling": "xhigh" }, "jp.anthropic.claude-sonnet-5": { - "cache_creation_input_token_cost": 4.125e-06, - "cache_creation_input_token_cost_above_1hr": 6.6e-06, - "cache_read_input_token_cost": 3.3e-07, - "input_cost_per_token": 3.3e-06, + "cache_creation_input_token_cost": 2.75e-06, + "cache_creation_input_token_cost_above_1hr": 4.4e-06, + "cache_read_input_token_cost": 2.2e-07, + "input_cost_per_token": 2.2e-06, "litellm_provider": "bedrock_converse", "max_input_tokens": 1000000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.65e-05, + "output_cost_per_token": 1.1e-05, "search_context_cost_per_query": { "search_context_size_high": 0.01, "search_context_size_low": 0.01, @@ -2710,16 +2710,16 @@ "supports_vision": true }, "azure_ai/claude-sonnet-5": { - "cache_creation_input_token_cost": 3.75e-06, - "cache_creation_input_token_cost_above_1hr": 6e-06, - "cache_read_input_token_cost": 3e-07, - "input_cost_per_token": 3e-06, + "cache_creation_input_token_cost": 2.5e-06, + "cache_creation_input_token_cost_above_1hr": 4e-06, + "cache_read_input_token_cost": 2e-07, + "input_cost_per_token": 2e-06, "litellm_provider": "azure_ai", "max_input_tokens": 1000000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.5e-05, + "output_cost_per_token": 1e-05, "search_context_cost_per_query": { "search_context_size_high": 0.01, "search_context_size_low": 0.01, @@ -10474,16 +10474,16 @@ "supports_web_search": true }, "claude-sonnet-5": { - "cache_creation_input_token_cost": 3.75e-06, - "cache_creation_input_token_cost_above_1hr": 6e-06, - "cache_read_input_token_cost": 3e-07, - "input_cost_per_token": 3e-06, + "cache_creation_input_token_cost": 2.5e-06, + "cache_creation_input_token_cost_above_1hr": 4e-06, + "cache_read_input_token_cost": 2e-07, + "input_cost_per_token": 2e-06, "litellm_provider": "anthropic", "max_input_tokens": 1000000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.5e-05, + "output_cost_per_token": 1e-05, "search_context_cost_per_query": { "search_context_size_high": 0.01, "search_context_size_low": 0.01, @@ -35384,16 +35384,16 @@ "supports_vision": true }, "vertex_ai/claude-sonnet-5": { - "cache_creation_input_token_cost": 3.75e-06, - "cache_creation_input_token_cost_above_1hr": 6e-06, - "cache_read_input_token_cost": 3e-07, - "input_cost_per_token": 3e-06, + "cache_creation_input_token_cost": 2.5e-06, + "cache_creation_input_token_cost_above_1hr": 4e-06, + "cache_read_input_token_cost": 2e-07, + "input_cost_per_token": 2e-06, "litellm_provider": "vertex_ai-anthropic_models", "max_input_tokens": 1000000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.5e-05, + "output_cost_per_token": 1e-05, "search_context_cost_per_query": { "search_context_size_high": 0.01, "search_context_size_low": 0.01, @@ -42909,16 +42909,16 @@ } }, "vertex_ai/claude-sonnet-5@default": { - "cache_creation_input_token_cost": 3.75e-06, - "cache_creation_input_token_cost_above_1hr": 6e-06, - "cache_read_input_token_cost": 3e-07, - "input_cost_per_token": 3e-06, + "cache_creation_input_token_cost": 2.5e-06, + "cache_creation_input_token_cost_above_1hr": 4e-06, + "cache_read_input_token_cost": 2e-07, + "input_cost_per_token": 2e-06, "litellm_provider": "vertex_ai-anthropic_models", "max_input_tokens": 1000000, "max_output_tokens": 128000, "max_tokens": 128000, "mode": "chat", - "output_cost_per_token": 1.5e-05, + "output_cost_per_token": 1e-05, "search_context_cost_per_query": { "search_context_size_high": 0.01, "search_context_size_low": 0.01, diff --git a/tests/test_litellm/test_claude_sonnet_5_config.py b/tests/test_litellm/test_claude_sonnet_5_config.py index 88a06aea95f..506ffa16597 100644 --- a/tests/test_litellm/test_claude_sonnet_5_config.py +++ b/tests/test_litellm/test_claude_sonnet_5_config.py @@ -76,12 +76,23 @@ def test_sonnet_5_pricing_and_capabilities(): assert info["max_output_tokens"] == 128000 assert info["max_tokens"] == 128000 - # Standard Sonnet pricing: $3 / $15 per MTok, with the 1.25x cache-write - # and 0.1x cache-read multipliers. - assert info["input_cost_per_token"] == 3e-06 - assert info["output_cost_per_token"] == 1.5e-05 - assert info["cache_creation_input_token_cost"] == 3.75e-06 - assert info["cache_read_input_token_cost"] == 3e-07 + # Introductory Sonnet 5 pricing through 2026-08-31: $2 / $10 per MTok, + # with the 1.25x cache-write and 0.1x cache-read multipliers. On + # 2026-09-01 flip these five fields back to the sticker rate, here and + # in both cost-map JSON files (all ten claude-sonnet-5 entries): + # input_cost_per_token: 3e-06 + # output_cost_per_token: 1.5e-05 + # cache_creation_input_token_cost: 3.75e-06 + # cache_creation_input_token_cost_above_1hr: 6e-06 + # cache_read_input_token_cost: 3e-07 + # Regional Bedrock profiles (us./eu./au./jp.) stay at 1.1x those values: + # 3.3e-06 / 1.65e-05 / 4.125e-06 / 6.6e-06 / 3.3e-07 (see + # test_sonnet_5_bedrock_regional_pricing below). + assert info["input_cost_per_token"] == 2e-06 + assert info["output_cost_per_token"] == 1e-05 + assert info["cache_creation_input_token_cost"] == 2.5e-06 + assert info["cache_creation_input_token_cost_above_1hr"] == 4e-06 + assert info["cache_read_input_token_cost"] == 2e-07 # gen-5 adaptive-thinking profile: effort-driven, no sampling params, no # assistant prefill. @@ -102,16 +113,18 @@ def test_sonnet_5_bedrock_regional_pricing(): model_data = _load_root_cost_map() base_pricing = { - "input_cost_per_token": 3e-06, - "output_cost_per_token": 1.5e-05, - "cache_creation_input_token_cost": 3.75e-06, - "cache_read_input_token_cost": 3e-07, + "input_cost_per_token": 2e-06, + "output_cost_per_token": 1e-05, + "cache_creation_input_token_cost": 2.5e-06, + "cache_creation_input_token_cost_above_1hr": 4e-06, + "cache_read_input_token_cost": 2e-07, } regional_pricing = { - "input_cost_per_token": 3.3e-06, - "output_cost_per_token": 1.65e-05, - "cache_creation_input_token_cost": 4.125e-06, - "cache_read_input_token_cost": 3.3e-07, + "input_cost_per_token": 2.2e-06, + "output_cost_per_token": 1.1e-05, + "cache_creation_input_token_cost": 2.75e-06, + "cache_creation_input_token_cost_above_1hr": 4.4e-06, + "cache_read_input_token_cost": 2.2e-07, } expected = { From 8ce6b4d712dcc0486a8b23fdb0ead55097f5bfc1 Mon Sep 17 00:00:00 2001 From: yucheng-berri Date: Wed, 1 Jul 2026 17:58:31 -0700 Subject: [PATCH 65/79] fix(proxy): tighten role gating on /get/config/callbacks response (#31745) The handler returned decrypted callback environment values and alerting routing values verbatim to callers who were not full PROXY_ADMIN. Gate those on full-admin role, matching the posture used on the sibling config-inspection endpoints. Non-sensitive routing fields (host / base URL / port style values) stay visible so the UI can still label which integration is wired up. Full PROXY_ADMIN sees everything unchanged so the edit form round-trips on save. Resolves LIT-4115. --- litellm/proxy/common_utils/callback_utils.py | 17 +- litellm/proxy/proxy_server.py | 64 +++++- tests/proxy_unit_tests/test_proxy_server.py | 12 +- .../proxy/proxy_server/test_routes_config.py | 216 ++++++++++++++++++ tests/test_litellm/proxy/test_proxy_server.py | 20 +- .../test_router_retry_policy_update.py | 8 +- 6 files changed, 315 insertions(+), 22 deletions(-) diff --git a/litellm/proxy/common_utils/callback_utils.py b/litellm/proxy/common_utils/callback_utils.py index 573763d6627..c644ecc3dae 100644 --- a/litellm/proxy/common_utils/callback_utils.py +++ b/litellm/proxy/common_utils/callback_utils.py @@ -611,10 +611,17 @@ def _transform_callback_vars(metadata: Any, transform: Callable[[str, Any], Any] return out -def _is_sensitive_callback_var(key: str) -> bool: - """Match codebase precedent: only credential-bearing fields get encrypted; - routing/identifier fields (host, base_url, project, region) stay plain.""" - if key in _EXTRA_SENSITIVE_CALLBACK_KEYS: +def is_sensitive_callback_key( + key: str, + extra: Optional[set[str]] = None, +) -> bool: + """Return ``True`` if ``key`` is present in ``extra`` (checked as-is), or + if its lowercase form is in ``_EXTRA_SENSITIVE_CALLBACK_KEYS``, or if + ``_CALLBACK_VAR_MASKER.is_sensitive_key`` matches it. + """ + if extra and key in extra: + return True + if key.lower() in _EXTRA_SENSITIVE_CALLBACK_KEYS: return True return _CALLBACK_VAR_MASKER.is_sensitive_key(key) @@ -622,7 +629,7 @@ def _is_sensitive_callback_var(key: str) -> bool: def _encrypt_if_plaintext(key: str, value: Any) -> Any: if not isinstance(value, str) or not value: return value - if not _is_sensitive_callback_var(key): + if not is_sensitive_callback_key(key): return value if value.startswith(_CALLBACK_VAR_ENCRYPTED_PREFIX): # Already encrypted — round-tripping ciphertext (e.g. UI Edit Settings diff --git a/litellm/proxy/proxy_server.py b/litellm/proxy/proxy_server.py index c85faeba1a6..9a338712187 100644 --- a/litellm/proxy/proxy_server.py +++ b/litellm/proxy/proxy_server.py @@ -102,6 +102,7 @@ from litellm.proxy._types import ( ) from litellm.proxy.common_utils.cache_pydantic_utils import CacheCodec from litellm.proxy.common_utils.callback_utils import ( + is_sensitive_callback_key, normalize_callback_names, process_callback, ) @@ -14310,6 +14311,50 @@ async def create_config_audit_log( ) +_EXTRA_SECRET_CALLBACK_ENV_VARS = frozenset( + { + "GALILEO_USERNAME", + "GENERIC_LOGGER_HEADERS", + "OTEL_HEADERS", + "SLACK_WEBHOOK_URL", + "SMTP_USERNAME", + } +) + + +def _redact_callback_env_vars(env_vars: dict[str, Optional[str]]) -> dict[str, Optional[str]]: + """Return a copy of ``env_vars`` with values for keys classified as + sensitive by ``is_sensitive_callback_key`` replaced with ``"REDACTED"``. + ``None`` values pass through unchanged. + """ + return { + key: ( + "REDACTED" + if value is not None and is_sensitive_callback_key(key, extra=_EXTRA_SECRET_CALLBACK_ENV_VARS) + else value + ) + for key, value in env_vars.items() + } + + +def _apply_callback_role_gate(entries: list, is_full_admin: bool) -> list: + if is_full_admin: + return entries + return [{**entry, "variables": _redact_callback_env_vars(entry.get("variables") or {})} for entry in entries] + + +def _apply_alerting_env_role_gate(env_vars: dict, is_full_admin: bool) -> dict: + if is_full_admin: + return mask_sensitive_keys(env_vars, _ALERTING_SENSITIVE_VARS) + return _redact_callback_env_vars(env_vars) + + +def _apply_webhook_role_gate(webhook_map, is_full_admin: bool): + if is_full_admin or not isinstance(webhook_map, dict): + return webhook_map + return {alert_type: "REDACTED" for alert_type in webhook_map} + + @router.get( "/config/field/info", tags=["config.yaml"], @@ -14720,7 +14765,9 @@ async def delete_callback( include_in_schema=False, dependencies=[Depends(user_api_key_auth)], ) -async def get_config(): +async def get_config( + user_api_key_dict: UserAPIKeyAuth = Depends(user_api_key_auth), +): """ For Admin UI - allows admin to view config via UI # return the callbacks and the env variables for the callback @@ -14735,6 +14782,8 @@ async def get_config(): _general_settings = config_data.get("general_settings", {}) environment_variables = config_data.get("environment_variables", {}) + is_full_admin = user_api_key_dict.user_role == LitellmUserRoles.PROXY_ADMIN + _success_callbacks = _litellm_settings.get("success_callback", []) _failure_callbacks = _litellm_settings.get("failure_callback", []) _success_and_failure_callbacks = _litellm_settings.get("callbacks", []) @@ -14776,6 +14825,8 @@ async def get_config(): for _callback in _success_and_failure_callbacks: _data_to_return.append(process_callback(_callback, "success_and_failure", environment_variables)) + _data_to_return = _apply_callback_role_gate(_data_to_return, is_full_admin) + # Check if slack alerting is on _alerting = _general_settings.get("alerting", []) alerting_data = [] @@ -14787,11 +14838,13 @@ async def get_config(): _var: (value if (value := environment_variables.get(_var)) is not None else os.getenv(_var)) for _var in _slack_vars } - _slack_env_vars = mask_sensitive_keys(_slack_env_vars, _ALERTING_SENSITIVE_VARS) + _slack_env_vars = _apply_alerting_env_role_gate(_slack_env_vars, is_full_admin) _alerting_types = proxy_logging_obj.slack_alerting_instance.alert_types _all_alert_types = proxy_logging_obj.slack_alerting_instance._all_possible_alert_types() - _alerts_to_webhook = proxy_logging_obj.slack_alerting_instance.alert_to_webhook_url + _alerts_to_webhook = _apply_webhook_role_gate( + proxy_logging_obj.slack_alerting_instance.alert_to_webhook_url, is_full_admin + ) alerting_data.append( { "name": "slack", @@ -14811,8 +14864,9 @@ async def get_config(): "EMAIL_LOGO_URL", "EMAIL_SUPPORT_CONTACT", ] - _email_env_vars = {_var: environment_variables.get(_var) for _var in _email_vars} - _email_env_vars = mask_sensitive_keys(_email_env_vars, _ALERTING_SENSITIVE_VARS) + _email_env_vars = _apply_alerting_env_role_gate( + {_var: environment_variables.get(_var) for _var in _email_vars}, is_full_admin + ) alerting_data.append( { diff --git a/tests/proxy_unit_tests/test_proxy_server.py b/tests/proxy_unit_tests/test_proxy_server.py index 921fbfa320f..212f7772cad 100644 --- a/tests/proxy_unit_tests/test_proxy_server.py +++ b/tests/proxy_unit_tests/test_proxy_server.py @@ -2844,7 +2844,9 @@ async def test_get_config_callbacks_with_all_types(client_no_auth): async def test_get_config_callbacks_environment_variables(client_no_auth): """ Test that /get/config/callbacks correctly includes environment variables - for each callback type. Values are returned as-is from the config (no decryption). + for each callback type. Under ``client_no_auth`` the resolved role is + not ``PROXY_ADMIN``, so values matched by the redaction helper come back + as ``"REDACTED"`` and other values pass through verbatim. """ from litellm.proxy.proxy_server import ProxyConfig @@ -2886,12 +2888,11 @@ async def test_get_config_callbacks_environment_variables(client_no_auth): assert langfuse_callback["type"] == "success" assert "variables" in langfuse_callback - # Verify langfuse env vars are present (values returned as-is, no decryption) langfuse_vars = langfuse_callback["variables"] assert "LANGFUSE_PUBLIC_KEY" in langfuse_vars - assert langfuse_vars["LANGFUSE_PUBLIC_KEY"] == "test-public-key" + assert langfuse_vars["LANGFUSE_PUBLIC_KEY"] == "REDACTED" assert "LANGFUSE_SECRET_KEY" in langfuse_vars - assert langfuse_vars["LANGFUSE_SECRET_KEY"] == "test-secret-key" + assert langfuse_vars["LANGFUSE_SECRET_KEY"] == "REDACTED" assert "LANGFUSE_HOST" in langfuse_vars assert langfuse_vars["LANGFUSE_HOST"] == "https://cloud.langfuse.com" @@ -2901,14 +2902,13 @@ async def test_get_config_callbacks_environment_variables(client_no_auth): assert otel_callback["type"] == "success_and_failure" assert "variables" in otel_callback - # Verify otel env vars are present otel_vars = otel_callback["variables"] assert "OTEL_EXPORTER" in otel_vars assert otel_vars["OTEL_EXPORTER"] == "otlp" assert "OTEL_ENDPOINT" in otel_vars assert otel_vars["OTEL_ENDPOINT"] == "http://localhost:4317" assert "OTEL_HEADERS" in otel_vars - assert otel_vars["OTEL_HEADERS"] == "key=value" + assert otel_vars["OTEL_HEADERS"] == "REDACTED" @pytest.mark.asyncio diff --git a/tests/test_litellm/proxy/proxy_server/test_routes_config.py b/tests/test_litellm/proxy/proxy_server/test_routes_config.py index df14dc5b5dc..4ac6fc46a61 100644 --- a/tests/test_litellm/proxy/proxy_server/test_routes_config.py +++ b/tests/test_litellm/proxy/proxy_server/test_routes_config.py @@ -741,6 +741,222 @@ def test_get_config_callbacks_internal_error(client, auth_as, mock_prisma, monke ) +_CALLBACK_ENV_FIXTURE = { + "LANGFUSE_PUBLIC_KEY": "pk-public-1234567890", + "LANGFUSE_SECRET_KEY": "sk-langfuse-super-secret", + "LANGFUSE_HOST": "https://cloud.langfuse.com", + "DD_API_KEY": "dd-super-secret-api-key", + "DD_SITE": "datadoghq.com", + "OTEL_HEADERS": "Authorization=Bearer otel-super-secret", + "OTEL_ENDPOINT": "https://otlp.example.com", + "SLACK_WEBHOOK_URL": "https://hooks.slack.com/services/T000/B000/SLACK-WEBHOOK-FIXTURE-SECRET", +} + + +def _install_callbacks_config(monkeypatch, mock_prisma): + from litellm.proxy import proxy_server as ps + + _install_litellm_config(mock_prisma) + monkeypatch.setattr(ps, "prisma_client", mock_prisma) + monkeypatch.setattr(ps, "llm_router", None) + + fake_proxy_config = MagicMock() + fake_proxy_config.get_config = AsyncMock( + return_value={ + "litellm_settings": {"success_callback": ["langfuse", "datadog", "otel"]}, + "general_settings": {"alerting": ["slack"]}, + "environment_variables": dict(_CALLBACK_ENV_FIXTURE), + } + ) + monkeypatch.setattr(ps, "proxy_config", fake_proxy_config) + + +def _callback_variables(body: dict, name: str) -> dict: + return next( + cb["variables"] for cb in body["callbacks"] if cb["name"] == name + ) + + +def test_get_config_callbacks_redacts_secret_env_vars_for_view_only_admin( + client, auth_as, mock_prisma, monkeypatch +): + from litellm.proxy._types import LitellmUserRoles + + _install_callbacks_config(monkeypatch, mock_prisma) + + with auth_as(LitellmUserRoles.PROXY_ADMIN_VIEW_ONLY): + response = client.get("/get/config/callbacks") + assert response.status_code == 200 + body = response.json() + + for secret in ( + _CALLBACK_ENV_FIXTURE["LANGFUSE_SECRET_KEY"], + _CALLBACK_ENV_FIXTURE["DD_API_KEY"], + _CALLBACK_ENV_FIXTURE["OTEL_HEADERS"], + _CALLBACK_ENV_FIXTURE["LANGFUSE_PUBLIC_KEY"], + ): + assert secret not in response.text + + langfuse_vars = _callback_variables(body, "langfuse") + assert langfuse_vars["LANGFUSE_PUBLIC_KEY"] == "REDACTED" + assert langfuse_vars["LANGFUSE_SECRET_KEY"] == "REDACTED" + assert langfuse_vars["LANGFUSE_HOST"] == _CALLBACK_ENV_FIXTURE["LANGFUSE_HOST"] + + datadog_vars = _callback_variables(body, "datadog") + assert datadog_vars["DD_API_KEY"] == "REDACTED" + assert datadog_vars["DD_SITE"] == _CALLBACK_ENV_FIXTURE["DD_SITE"] + + otel_vars = _callback_variables(body, "otel") + assert otel_vars["OTEL_HEADERS"] == "REDACTED" + assert otel_vars["OTEL_ENDPOINT"] == _CALLBACK_ENV_FIXTURE["OTEL_ENDPOINT"] + + +def test_get_config_callbacks_full_admin_still_sees_secret_env_vars( + client, auth_as, mock_prisma, monkeypatch +): + from litellm.proxy._types import LitellmUserRoles + + _install_callbacks_config(monkeypatch, mock_prisma) + + with auth_as(LitellmUserRoles.PROXY_ADMIN): + response = client.get("/get/config/callbacks") + assert response.status_code == 200 + body = response.json() + + langfuse_vars = _callback_variables(body, "langfuse") + assert langfuse_vars["LANGFUSE_SECRET_KEY"] == _CALLBACK_ENV_FIXTURE["LANGFUSE_SECRET_KEY"] + assert langfuse_vars["LANGFUSE_PUBLIC_KEY"] == _CALLBACK_ENV_FIXTURE["LANGFUSE_PUBLIC_KEY"] + + datadog_vars = _callback_variables(body, "datadog") + assert datadog_vars["DD_API_KEY"] == _CALLBACK_ENV_FIXTURE["DD_API_KEY"] + + otel_vars = _callback_variables(body, "otel") + assert otel_vars["OTEL_HEADERS"] == _CALLBACK_ENV_FIXTURE["OTEL_HEADERS"] + + +def test_get_config_callbacks_redacts_slack_webhook_urls_for_view_only_admin( + client, auth_as, mock_prisma, monkeypatch +): + from litellm.proxy import proxy_server as ps + from litellm.proxy._types import LitellmUserRoles + + _install_callbacks_config(monkeypatch, mock_prisma) + + webhooks = { + "spend_reports": "https://hooks.slack.com/services/T000/B000/SPEND-WEBHOOK-SECRET", + "budget_alerts": "https://hooks.slack.com/services/T000/B111/BUDGET-WEBHOOK-SECRET", + } + monkeypatch.setattr( + ps.proxy_logging_obj.slack_alerting_instance, + "alert_to_webhook_url", + webhooks, + raising=False, + ) + + def _slack_block(body): + return next(a for a in body["alerts"] if a["name"] == "slack") + + with auth_as(LitellmUserRoles.PROXY_ADMIN_VIEW_ONLY): + view_resp = client.get("/get/config/callbacks") + assert view_resp.status_code == 200 + for url in webhooks.values(): + assert url not in view_resp.text + assert _CALLBACK_ENV_FIXTURE["SLACK_WEBHOOK_URL"] not in view_resp.text + view_slack = _slack_block(view_resp.json()) + assert view_slack["alerts_to_webhook"] == { + "spend_reports": "REDACTED", + "budget_alerts": "REDACTED", + } + assert view_slack["variables"]["SLACK_WEBHOOK_URL"] == "REDACTED" + + with auth_as(LitellmUserRoles.PROXY_ADMIN): + admin_resp = client.get("/get/config/callbacks") + assert admin_resp.status_code == 200 + admin_slack = _slack_block(admin_resp.json()) + assert admin_slack["alerts_to_webhook"] == webhooks + assert admin_slack["variables"]["SLACK_WEBHOOK_URL"] != "REDACTED" + + +def test_redact_callback_env_vars_helper_handles_none_and_non_secret_keys(): + from litellm.proxy import proxy_server as ps + + out = ps._redact_callback_env_vars( + { + "LANGFUSE_SECRET_KEY": "sk-leak", + "LANGFUSE_HOST": "https://cloud.langfuse.com", + "DD_API_KEY": None, + "GALILEO_USERNAME": "galileo-user-1234", + "GENERIC_LOGGER_HEADERS": "Authorization=Bearer x", + "GCS_PATH_SERVICE_ACCOUNT": "/etc/secrets/gcs.json", + "SLACK_WEBHOOK_URL": "https://hooks.slack.com/services/T/B/token", + "SMTP_USERNAME": "smtp-user-1234", + } + ) + assert out == { + "LANGFUSE_SECRET_KEY": "REDACTED", + "LANGFUSE_HOST": "https://cloud.langfuse.com", + "DD_API_KEY": None, + "GALILEO_USERNAME": "REDACTED", + "GENERIC_LOGGER_HEADERS": "REDACTED", + "GCS_PATH_SERVICE_ACCOUNT": "REDACTED", + "SLACK_WEBHOOK_URL": "REDACTED", + "SMTP_USERNAME": "REDACTED", + } + + +def test_get_config_callbacks_redacts_email_alerting_vars_for_view_only_admin( + client, auth_as, mock_prisma, monkeypatch +): + from litellm.proxy import proxy_server as ps + from litellm.proxy._types import LitellmUserRoles + + _install_litellm_config(mock_prisma) + monkeypatch.setattr(ps, "prisma_client", mock_prisma) + monkeypatch.setattr(ps, "llm_router", None) + + fake_proxy_config = MagicMock() + fake_proxy_config.get_config = AsyncMock( + return_value={ + "litellm_settings": {"success_callback": []}, + "general_settings": {"alerting": ["email"]}, + "environment_variables": { + "SMTP_HOST": "smtp.resend.com", + "SMTP_PORT": "587", + "SMTP_USERNAME": "smtp-user-fixture-1234", + "SMTP_PASSWORD": "smtp-password-fixture-1234", + "SMTP_SENDER_EMAIL": "alerts@example.com", + "TEST_EMAIL_ADDRESS": "admin@example.com", + "EMAIL_LOGO_URL": "https://example.com/logo.png", + "EMAIL_SUPPORT_CONTACT": "support@example.com", + }, + } + ) + monkeypatch.setattr(ps, "proxy_config", fake_proxy_config) + + def _email_block(body): + return next(a for a in body["alerts"] if a["name"] == "email") + + with auth_as(LitellmUserRoles.PROXY_ADMIN_VIEW_ONLY): + view_resp = client.get("/get/config/callbacks") + assert view_resp.status_code == 200 + for secret in ("smtp-user-fixture-1234", "smtp-password-fixture-1234"): + assert secret not in view_resp.text + view_email = _email_block(view_resp.json())["variables"] + assert view_email["SMTP_PASSWORD"] == "REDACTED" + assert view_email["SMTP_USERNAME"] == "REDACTED" + assert view_email["SMTP_HOST"] == "smtp.resend.com" + assert view_email["SMTP_PORT"] == "587" + assert view_email["SMTP_SENDER_EMAIL"] == "alerts@example.com" + + with auth_as(LitellmUserRoles.PROXY_ADMIN): + admin_resp = client.get("/get/config/callbacks") + assert admin_resp.status_code == 200 + admin_email = _email_block(admin_resp.json())["variables"] + assert admin_email["SMTP_USERNAME"] == "smtp-user-fixture-1234" + assert admin_email["SMTP_PASSWORD"] != "REDACTED" + assert admin_email["SMTP_HOST"] == "smtp.resend.com" + + # --------------------------------------------------------------------------- # GET /config/yaml # --------------------------------------------------------------------------- diff --git a/tests/test_litellm/proxy/test_proxy_server.py b/tests/test_litellm/proxy/test_proxy_server.py index 68122bbba3b..533c37e690e 100644 --- a/tests/test_litellm/proxy/test_proxy_server.py +++ b/tests/test_litellm/proxy/test_proxy_server.py @@ -896,7 +896,9 @@ def test_get_config_custom_callback_api_env_vars(monkeypatch): # Bypass auth dependency original_overrides = app.dependency_overrides.copy() - app.dependency_overrides[user_api_key_auth] = lambda: MagicMock() + app.dependency_overrides[user_api_key_auth] = lambda: UserAPIKeyAuth( + user_role=LitellmUserRoles.PROXY_ADMIN, api_key="sk-1234" + ) client = TestClient(app) try: @@ -950,7 +952,9 @@ def test_get_config_returns_email_settings(monkeypatch): monkeypatch.setattr(proxy_config, "get_config", AsyncMock(return_value=config_data)) original_overrides = app.dependency_overrides.copy() - app.dependency_overrides[user_api_key_auth] = lambda: MagicMock() + app.dependency_overrides[user_api_key_auth] = lambda: UserAPIKeyAuth( + user_role=LitellmUserRoles.PROXY_ADMIN, api_key="sk-1234" + ) client = TestClient(app) try: @@ -1007,7 +1011,9 @@ def test_get_config_returns_slack_webhook(monkeypatch): monkeypatch.setattr(proxy_config, "get_config", AsyncMock(return_value=config_data)) original_overrides = app.dependency_overrides.copy() - app.dependency_overrides[user_api_key_auth] = lambda: MagicMock() + app.dependency_overrides[user_api_key_auth] = lambda: UserAPIKeyAuth( + user_role=LitellmUserRoles.PROXY_ADMIN, api_key="sk-1234" + ) client = TestClient(app) try: @@ -1061,7 +1067,9 @@ def test_get_config_cleared_slack_webhook_not_overridden_by_os_env(monkeypatch): monkeypatch.setattr(proxy_config, "get_config", AsyncMock(return_value=config_data)) original_overrides = app.dependency_overrides.copy() - app.dependency_overrides[user_api_key_auth] = lambda: MagicMock() + app.dependency_overrides[user_api_key_auth] = lambda: UserAPIKeyAuth( + user_role=LitellmUserRoles.PROXY_ADMIN, api_key="sk-1234" + ) client = TestClient(app) try: @@ -5205,7 +5213,9 @@ def test_get_config_normalizes_string_callbacks(monkeypatch): monkeypatch.setattr(proxy_config, "get_config", AsyncMock(return_value=config_data)) original_overrides = app.dependency_overrides.copy() - app.dependency_overrides[user_api_key_auth] = lambda: MagicMock() + app.dependency_overrides[user_api_key_auth] = lambda: UserAPIKeyAuth( + user_role=LitellmUserRoles.PROXY_ADMIN, api_key="sk-1234" + ) client = TestClient(app) try: diff --git a/tests/test_litellm/test_router_retry_policy_update.py b/tests/test_litellm/test_router_retry_policy_update.py index 450391fd503..3fc6bc71b84 100644 --- a/tests/test_litellm/test_router_retry_policy_update.py +++ b/tests/test_litellm/test_router_retry_policy_update.py @@ -273,7 +273,13 @@ async def test_config_update_persists_and_reads_back_retry_policy(monkeypatch): assert isinstance(router.retry_policy, RetryPolicy) assert router.retry_policy.RateLimitErrorRetries == 7 - read_back = (await proxy_server.get_config())["router_settings"]["retry_policy"] + read_back = ( + await proxy_server.get_config( + user_api_key_dict=UserAPIKeyAuth( + user_role=LitellmUserRoles.PROXY_ADMIN, api_key="sk-1234" + ) + ) + )["router_settings"]["retry_policy"] assert read_back.BadRequestErrorRetries == 5 assert read_back.TimeoutErrorRetries == 3 assert read_back.RateLimitErrorRetries == 7 From bd9db3691ed7f6d37f4c7cb85243113c20bc2821 Mon Sep 17 00:00:00 2001 From: Mateo Wang <277851410+mateo-berri@users.noreply.github.com> Date: Wed, 1 Jul 2026 18:44:57 -0700 Subject: [PATCH 66/79] chore(lint): remove dead E501 config, fix stale blame-ignore SHAs, note 120 line width (#31927) * chore(lint): remove dead E501 config, fix stale blame-ignore SHAs, note 120 width in CLAUDE.md E501 sat in both lint.ignore and lint.extend-select in ruff.toml; ignore wins, so no line length was linted at all (verified: a 130-char line passes ruff check while T201 fires). Remove it from both lists so the config tells the truth: the formatter's wrap width is the only line-length control, matching how the repo has actually behaved since E501 was ignored in Oct 2024 .git-blame-ignore-revs listed the pre-squash PR-head SHAs for the two ruff reformat commits (#31317, #31518), which never landed on the branch, so git blame ignored nothing. Replace them with the squash-merge SHAs that are actually in history Also document in CLAUDE.md that the line length is 120 (ruff.toml), not 88, so agents stop wrapping to the old Black width * fix: make CLAUDE.md more concise * fix: make the guideline more clear --- .git-blame-ignore-revs | 4 ++-- CLAUDE.md | 2 ++ Makefile | 2 +- ruff.toml | 4 ++-- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index 7e705ec4f8f..2527239b904 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -13,7 +13,7 @@ 7edf3a9cb55548b143df1692f4ed7c4681d7fcf7 # style: reformat litellm/ with ruff format (#31317) -430b5b8f1b12dc261a49fda99ac5d1b22381a428 +17bfd415aeb5a57fb646b5cc67da1c730aa7c50b # style: unify ruff format width on 120 (#31518) -3dfbeabe626d203ac9de86024519d9a96c484ce4 +48b5a5a0cc5a694a11219416ee0b6eb6e620e74e diff --git a/CLAUDE.md b/CLAUDE.md index a492aabd02d..7d9a6367f18 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -33,6 +33,8 @@ If you ever make public-facing PR descriptions, comments, issues, commit message Don't hesitate to use values in .env to get needed API keys and other secrets, as long as you never add them to conversation history, commit them, or include them in GitHub issues / PRs +Python max line length is 120, not 88 + Run tests before you commit. Also, run `make pre-commit` right before each commit, which generates types (as needed) and formats/lints your code. Any errors found must be fixed. It only runs when there are staged frontend and/or backend changes and calculates violations, generates types, etc. based on the worktree, so stage what you need or stash/delete unwanted files in litellm/ or ui/ (where backend and frontend lint run, respectively) before running it. If it fails because dashboard api types are stale, it already regenerated them for you. You just need to stage the schema.d.ts, re-run `make pre-commit` to confirm it passes, and commit When you fix violations gated by `ruff-strict-budget.json`, `type-discipline-budget.json`, or `basedpyright-code-budget.json`, run `make lint-budget-update` and commit the lowered limits so the ceilings ratchet down instead of leaving stale headroom. It measures the working tree, so it must contain exactly the fixes you're committing diff --git a/Makefile b/Makefile index c3fa21c156c..2cc4ec3e45a 100644 --- a/Makefile +++ b/Makefile @@ -88,7 +88,7 @@ install-hooks: # Formatting # Wrap width is ruff.toml's single source of truth (line-length = 120), shared by the -# formatter, E501, and the import sorter so there's no 88-vs-120 split to reconcile. +# formatter and the import sorter so there's no 88-vs-120 split to reconcile. format: install-dev cd litellm && $(UV_RUN) ruff format --exclude '/enterprise/' . && cd .. diff --git a/ruff.toml b/ruff.toml index a09bc663ff1..2ea9d7260fb 100644 --- a/ruff.toml +++ b/ruff.toml @@ -1,5 +1,5 @@ -lint.ignore = ["F405", "E402", "E501", "F403"] -lint.extend-select = ["E501", "T20", "PGH004", "RUF008", "RUF009", "RUF100"] +lint.ignore = ["F405", "E402", "F403"] +lint.extend-select = ["T20", "PGH004", "RUF008", "RUF009", "RUF100"] # RUF100 (unused-noqa) only knows the rules enabled in THIS config, so it would strip # `# noqa` directives that protect rules enforced elsewhere. List those codes as external # so RUF100 leaves their directives alone: the strict gate (ruff-strict.toml) and upstream From 85f924148a299903fadf568e40b53f8b888016ae Mon Sep 17 00:00:00 2001 From: Mateo Wang <277851410+mateo-berri@users.noreply.github.com> Date: Wed, 1 Jul 2026 19:08:17 -0700 Subject: [PATCH 67/79] fix(bedrock/converse): drop toolSpec.strict for Opus 4.7/4.8 (#31582) (#31923) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(bedrock/converse): drop toolSpec.strict for Opus 4.7/4.8 Bedrock Converse routes Claude Opus 4.7/4.8 through an Anthropic-compatible validator that maps toolSpec to the native tool shape and rejects the extra `strict` key with `tools.N.custom.strict: Extra inputs are not permitted`, even though Anthropic's native API accepts `strict` as a top-level tool field for the same models. Sonnet 4.5/4.6 and Opus <=4.6 accept `toolSpec.strict` unchanged. The existing gate `get_bedrock_base_model(model).startswith("anthropic")` (introduced in #29814 to forward `strict` for Claude on Bedrock Converse) is too broad and regressed Opus 4.7/4.8 callers — see #31582. Replace the inline check with a small `bedrock_converse_supports_strict_tools` helper that excludes the Opus 4.7/4.8 family from strict forwarding. All other Anthropic models on Bedrock keep the existing behavior. Closes #31582. * fix(bedrock/converse): move strict-tools regression to a clean test file The original regression test was added to test_litellm_core_utils_prompt_templates_factory.py, which has pre-existing ruff-format violations throughout (multi-line asserts that fit on one line). The lint workflow runs `ruff format --check` on changed files only, so touching that file surfaces those pre-existing violations and fails CI for unrelated reasons. Move the #31582 regression coverage into a new dedicated test file so the format check stays green. Also collapses the helper's `not any(...)` onto a single line to satisfy ruff format. Covers: #31582 * refactor(bedrock/converse): drive strict-tools gate from model cost map Replace the hardcoded Opus 4.7/4.8 pattern list with a bedrock_converse_supports_strict_tools flag on the affected entries in model_prices_and_context_window.json, resolved via get_model_info with a local cost map fallback, so future models with the same restriction only need a JSON update * chore: revert unrelated credential_migration.py reformat --------- Co-authored-by: ly-wang19 --- .../prompt_templates/factory.py | 9 +- litellm/llms/bedrock/common_utils.py | 47 ++++++++ ...odel_prices_and_context_window_backup.json | 11 ++ litellm/types/utils.py | 1 + litellm/utils.py | 1 + model_prices_and_context_window.json | 11 ++ ...edrock_converse_strict_tools_opus_47_48.py | 107 ++++++++++++++++++ tests/test_litellm/test_utils.py | 1 + 8 files changed, 185 insertions(+), 3 deletions(-) create mode 100644 tests/test_litellm/litellm_core_utils/prompt_templates/test_bedrock_converse_strict_tools_opus_47_48.py diff --git a/litellm/litellm_core_utils/prompt_templates/factory.py b/litellm/litellm_core_utils/prompt_templates/factory.py index c2448430387..c1635158d3b 100644 --- a/litellm/litellm_core_utils/prompt_templates/factory.py +++ b/litellm/litellm_core_utils/prompt_templates/factory.py @@ -5035,15 +5035,18 @@ def _bedrock_tools_pt(tools: List, model: Optional[str] = None) -> List[BedrockT ] """ from litellm.llms.bedrock.common_utils import ( - get_bedrock_base_model, + bedrock_converse_supports_strict_tools, normalize_json_schema_custom_types_to_object, ) from litellm.litellm_core_utils.prompt_templates.common_utils import unpack_defs _valid_json_schema_root_types = frozenset(("array", "boolean", "integer", "null", "number", "object", "string")) # Only Claude on Bedrock honours strict tool schemas; other families - # (Nova, Llama, GPT-OSS) reject the strict field outright. - supports_strict_tools = bool(model and get_bedrock_base_model(model).startswith("anthropic")) + # (Nova, Llama, GPT-OSS) reject the strict field outright. Opus 4.7/4.8 + # also reject `strict` on Bedrock Converse (see #31582) — their validator + # maps toolSpec to the native Anthropic tool shape, which has no strict + # field, even though Anthropic's native API accepts it as a top-level key. + supports_strict_tools = bool(model and bedrock_converse_supports_strict_tools(model)) tool_block_list: List[BedrockToolBlock] = [] for tool_idx, tool in enumerate(tools): # Check if tool is already a BedrockToolBlock (e.g., systemTool for Nova grounding) diff --git a/litellm/llms/bedrock/common_utils.py b/litellm/llms/bedrock/common_utils.py index 467e1050c99..df432a4d7e3 100644 --- a/litellm/llms/bedrock/common_utils.py +++ b/litellm/llms/bedrock/common_utils.py @@ -4,9 +4,11 @@ from __future__ import annotations Common utilities used across bedrock chat/embedding/image generation """ +import contextlib import functools import json import os +import re from typing import ( TYPE_CHECKING, Any, @@ -718,6 +720,51 @@ def is_claude_4_5_on_bedrock(model: str) -> bool: return any(pattern in model_lower for pattern in claude_4_5_patterns) +_BEDROCK_MODEL_VERSION_SUFFIX_RE = re.compile(r"-v\d+(?::\d+)?$") + + +def bedrock_converse_supports_strict_tools(model: str) -> bool: + """ + Whether ``toolSpec.strict`` can be forwarded to Bedrock Converse for ``model``. + + Non-Anthropic Bedrock families (Nova, Llama, GPT-OSS) reject the field + outright. Anthropic models forward it unless their entry in + ``model_prices_and_context_window.json`` sets + ``bedrock_converse_supports_strict_tools: false`` — Bedrock routes those + (Opus 4.7/4.8, see #31582) through a stricter validator that rejects the + ``strict`` key on ``toolSpec`` even though Anthropic's native API accepts + it as a top-level tool field. + """ + base = get_bedrock_base_model(model) + if not base.startswith("anthropic"): + return False + flag = _get_bedrock_converse_strict_tools_flag(base) + return flag if flag is not None else True + + +def _get_bedrock_converse_strict_tools_flag(base_model: str) -> Optional[bool]: + candidates = dict.fromkeys((base_model, _BEDROCK_MODEL_VERSION_SUFFIX_RE.sub("", base_model))) + for candidate in candidates: + with contextlib.suppress(Exception): + model_info = get_cached_model_info()( + model=candidate, + custom_llm_provider="bedrock", + ) + + flag = model_info.get("bedrock_converse_supports_strict_tools") + if isinstance(flag, bool): + return flag + + model_cost_key = model_info.get("key") + if isinstance(model_cost_key, str): + local_flag = ( + _get_local_model_cost_map().get(model_cost_key, {}).get("bedrock_converse_supports_strict_tools") + ) + if isinstance(local_flag, bool): + return local_flag + return None + + def normalize_bedrock_opus_output_config_effort(model: str, output_config: Any) -> None: """ Normalize Anthropic ``output_config.effort`` values for Bedrock Opus ids. diff --git a/litellm/model_prices_and_context_window_backup.json b/litellm/model_prices_and_context_window_backup.json index b249b951b8e..1a45731e915 100644 --- a/litellm/model_prices_and_context_window_backup.json +++ b/litellm/model_prices_and_context_window_backup.json @@ -1154,6 +1154,7 @@ "bedrock_output_config_effort_ceiling": "max" }, "anthropic.claude-opus-4-7": { + "bedrock_converse_supports_strict_tools": false, "supports_adaptive_thinking": true, "cache_creation_input_token_cost": 6.25e-06, "cache_creation_input_token_cost_above_1hr": 1e-05, @@ -1203,6 +1204,7 @@ "supports_output_config": true }, "global.anthropic.claude-opus-4-7": { + "bedrock_converse_supports_strict_tools": false, "supports_adaptive_thinking": true, "cache_creation_input_token_cost": 6.25e-06, "cache_creation_input_token_cost_above_1hr": 1e-05, @@ -1237,6 +1239,7 @@ "bedrock_output_config_effort_ceiling": "xhigh" }, "us.anthropic.claude-opus-4-7": { + "bedrock_converse_supports_strict_tools": false, "supports_adaptive_thinking": true, "cache_creation_input_token_cost": 6.875e-06, "cache_creation_input_token_cost_above_1hr": 1.1e-05, @@ -1271,6 +1274,7 @@ "bedrock_output_config_effort_ceiling": "xhigh" }, "eu.anthropic.claude-opus-4-7": { + "bedrock_converse_supports_strict_tools": false, "supports_adaptive_thinking": true, "cache_creation_input_token_cost": 6.875e-06, "cache_creation_input_token_cost_above_1hr": 1.1e-05, @@ -1305,6 +1309,7 @@ "bedrock_output_config_effort_ceiling": "xhigh" }, "au.anthropic.claude-opus-4-7": { + "bedrock_converse_supports_strict_tools": false, "supports_adaptive_thinking": true, "cache_creation_input_token_cost": 6.875e-06, "cache_creation_input_token_cost_above_1hr": 1.1e-05, @@ -1471,6 +1476,7 @@ "bedrock_output_config_effort_ceiling": "xhigh" }, "anthropic.claude-opus-4-8": { + "bedrock_converse_supports_strict_tools": false, "supports_adaptive_thinking": true, "cache_creation_input_token_cost": 6.25e-06, "cache_creation_input_token_cost_above_1hr": 1e-05, @@ -1505,6 +1511,7 @@ "bedrock_output_config_effort_ceiling": "xhigh" }, "global.anthropic.claude-opus-4-8": { + "bedrock_converse_supports_strict_tools": false, "supports_adaptive_thinking": true, "cache_creation_input_token_cost": 6.25e-06, "cache_creation_input_token_cost_above_1hr": 1e-05, @@ -1539,6 +1546,7 @@ "bedrock_output_config_effort_ceiling": "xhigh" }, "us.anthropic.claude-opus-4-8": { + "bedrock_converse_supports_strict_tools": false, "supports_adaptive_thinking": true, "cache_creation_input_token_cost": 6.875e-06, "cache_creation_input_token_cost_above_1hr": 1.1e-05, @@ -1573,6 +1581,7 @@ "bedrock_output_config_effort_ceiling": "xhigh" }, "eu.anthropic.claude-opus-4-8": { + "bedrock_converse_supports_strict_tools": false, "supports_adaptive_thinking": true, "cache_creation_input_token_cost": 6.875e-06, "cache_creation_input_token_cost_above_1hr": 1.1e-05, @@ -1607,6 +1616,7 @@ "bedrock_output_config_effort_ceiling": "xhigh" }, "au.anthropic.claude-opus-4-8": { + "bedrock_converse_supports_strict_tools": false, "supports_adaptive_thinking": true, "cache_creation_input_token_cost": 6.875e-06, "cache_creation_input_token_cost_above_1hr": 1.1e-05, @@ -1641,6 +1651,7 @@ "bedrock_output_config_effort_ceiling": "xhigh" }, "jp.anthropic.claude-opus-4-7": { + "bedrock_converse_supports_strict_tools": false, "cache_creation_input_token_cost": 6.875e-06, "cache_read_input_token_cost": 5.5e-07, "input_cost_per_token": 5.5e-06, diff --git a/litellm/types/utils.py b/litellm/types/utils.py index 0e2a6b24806..997498803ac 100644 --- a/litellm/types/utils.py +++ b/litellm/types/utils.py @@ -152,6 +152,7 @@ class ProviderSpecificModelInfo(TypedDict, total=False): supports_output_config: Optional[bool] supports_image_size: Optional[bool] bedrock_output_config_effort_ceiling: Optional[Literal["low", "medium", "high", "max", "xhigh"]] + bedrock_converse_supports_strict_tools: Optional[bool] class SearchContextCostPerQuery(TypedDict, total=False): diff --git a/litellm/utils.py b/litellm/utils.py index 226b94913b5..b5f77d75b93 100644 --- a/litellm/utils.py +++ b/litellm/utils.py @@ -5465,6 +5465,7 @@ def _get_model_info_helper( supports_xhigh_reasoning_effort=_model_info.get("supports_xhigh_reasoning_effort", None), supports_max_reasoning_effort=_model_info.get("supports_max_reasoning_effort", None), bedrock_output_config_effort_ceiling=_model_info.get("bedrock_output_config_effort_ceiling", None), + bedrock_converse_supports_strict_tools=_model_info.get("bedrock_converse_supports_strict_tools", None), supports_computer_use=_model_info.get("supports_computer_use", None), search_context_cost_per_query=_model_info.get("search_context_cost_per_query", None), web_search_billing_unit=_model_info.get("web_search_billing_unit", None), diff --git a/model_prices_and_context_window.json b/model_prices_and_context_window.json index 9e9523193c7..006c04f5ecb 100644 --- a/model_prices_and_context_window.json +++ b/model_prices_and_context_window.json @@ -1154,6 +1154,7 @@ "bedrock_output_config_effort_ceiling": "max" }, "anthropic.claude-opus-4-7": { + "bedrock_converse_supports_strict_tools": false, "supports_adaptive_thinking": true, "cache_creation_input_token_cost": 6.25e-06, "cache_creation_input_token_cost_above_1hr": 1e-05, @@ -1203,6 +1204,7 @@ "supports_output_config": true }, "global.anthropic.claude-opus-4-7": { + "bedrock_converse_supports_strict_tools": false, "supports_adaptive_thinking": true, "cache_creation_input_token_cost": 6.25e-06, "cache_creation_input_token_cost_above_1hr": 1e-05, @@ -1237,6 +1239,7 @@ "bedrock_output_config_effort_ceiling": "xhigh" }, "us.anthropic.claude-opus-4-7": { + "bedrock_converse_supports_strict_tools": false, "supports_adaptive_thinking": true, "cache_creation_input_token_cost": 6.875e-06, "cache_creation_input_token_cost_above_1hr": 1.1e-05, @@ -1271,6 +1274,7 @@ "bedrock_output_config_effort_ceiling": "xhigh" }, "eu.anthropic.claude-opus-4-7": { + "bedrock_converse_supports_strict_tools": false, "supports_adaptive_thinking": true, "cache_creation_input_token_cost": 6.875e-06, "cache_creation_input_token_cost_above_1hr": 1.1e-05, @@ -1305,6 +1309,7 @@ "bedrock_output_config_effort_ceiling": "xhigh" }, "au.anthropic.claude-opus-4-7": { + "bedrock_converse_supports_strict_tools": false, "supports_adaptive_thinking": true, "cache_creation_input_token_cost": 6.875e-06, "cache_creation_input_token_cost_above_1hr": 1.1e-05, @@ -1471,6 +1476,7 @@ "bedrock_output_config_effort_ceiling": "xhigh" }, "anthropic.claude-opus-4-8": { + "bedrock_converse_supports_strict_tools": false, "supports_adaptive_thinking": true, "cache_creation_input_token_cost": 6.25e-06, "cache_creation_input_token_cost_above_1hr": 1e-05, @@ -1505,6 +1511,7 @@ "bedrock_output_config_effort_ceiling": "xhigh" }, "global.anthropic.claude-opus-4-8": { + "bedrock_converse_supports_strict_tools": false, "supports_adaptive_thinking": true, "cache_creation_input_token_cost": 6.25e-06, "cache_creation_input_token_cost_above_1hr": 1e-05, @@ -1539,6 +1546,7 @@ "bedrock_output_config_effort_ceiling": "xhigh" }, "us.anthropic.claude-opus-4-8": { + "bedrock_converse_supports_strict_tools": false, "supports_adaptive_thinking": true, "cache_creation_input_token_cost": 6.875e-06, "cache_creation_input_token_cost_above_1hr": 1.1e-05, @@ -1573,6 +1581,7 @@ "bedrock_output_config_effort_ceiling": "xhigh" }, "eu.anthropic.claude-opus-4-8": { + "bedrock_converse_supports_strict_tools": false, "supports_adaptive_thinking": true, "cache_creation_input_token_cost": 6.875e-06, "cache_creation_input_token_cost_above_1hr": 1.1e-05, @@ -1607,6 +1616,7 @@ "bedrock_output_config_effort_ceiling": "xhigh" }, "au.anthropic.claude-opus-4-8": { + "bedrock_converse_supports_strict_tools": false, "supports_adaptive_thinking": true, "cache_creation_input_token_cost": 6.875e-06, "cache_creation_input_token_cost_above_1hr": 1.1e-05, @@ -1641,6 +1651,7 @@ "bedrock_output_config_effort_ceiling": "xhigh" }, "jp.anthropic.claude-opus-4-7": { + "bedrock_converse_supports_strict_tools": false, "cache_creation_input_token_cost": 6.875e-06, "cache_read_input_token_cost": 5.5e-07, "input_cost_per_token": 5.5e-06, diff --git a/tests/test_litellm/litellm_core_utils/prompt_templates/test_bedrock_converse_strict_tools_opus_47_48.py b/tests/test_litellm/litellm_core_utils/prompt_templates/test_bedrock_converse_strict_tools_opus_47_48.py new file mode 100644 index 00000000000..26096c49468 --- /dev/null +++ b/tests/test_litellm/litellm_core_utils/prompt_templates/test_bedrock_converse_strict_tools_opus_47_48.py @@ -0,0 +1,107 @@ +"""Regression tests for Bedrock Converse ``toolSpec.strict`` forwarding. + +Bedrock Converse routes Claude Opus 4.7/4.8 through an Anthropic-compatible +validator that rejects ``toolSpec.strict`` even though Anthropic's native API +accepts ``strict`` as a top-level tool field for the same models. See +BerriAI/litellm#31582. +""" + +import pytest + +from litellm.litellm_core_utils.prompt_templates.factory import _bedrock_tools_pt +from litellm.llms.bedrock.common_utils import bedrock_converse_supports_strict_tools + + +_STRICT_TOOL = [ + { + "type": "function", + "function": { + "name": "get_weather", + "strict": True, + "description": "Get the weather for a city", + "parameters": { + "type": "object", + "properties": { + "city": {"type": "string"}, + "unit": {"type": "string", "enum": ["celsius"]}, + }, + "required": ["city", "unit"], + "additionalProperties": False, + }, + }, + } +] + + +@pytest.mark.parametrize( + "model_id", + [ + "bedrock/us.anthropic.claude-opus-4-7", + "bedrock/us.anthropic.claude-opus-4-8", + "anthropic.claude-opus-4-7", + "anthropic.claude-opus-4-8", + "anthropic.claude-opus-4-7-v1:0", + "bedrock/eu.anthropic.claude-opus-4-8-v1:0", + "bedrock/global.anthropic.claude-opus-4-7", + ], +) +def test_bedrock_tools_pt_strict_dropped_for_opus_47_48(model_id: str) -> None: + """Opus 4.7/4.8 on Bedrock Converse reject toolSpec.strict — must be dropped.""" + result = _bedrock_tools_pt(_STRICT_TOOL, model=model_id) + assert "strict" not in result[0]["toolSpec"], f"strict leaked into toolSpec for {model_id}: {result[0]['toolSpec']}" + + +@pytest.mark.parametrize( + "model_id", + [ + "anthropic.claude-sonnet-4-5-20250929-v1:0", + "bedrock/us.anthropic.claude-sonnet-4-6", + "bedrock/us.anthropic.claude-opus-4-6", + "bedrock/us.anthropic.claude-opus-4-5", + ], +) +def test_bedrock_tools_pt_strict_kept_for_other_anthropic(model_id: str) -> None: + """Sonnet 4.5/4.6 and Opus <=4.6 accept toolSpec.strict — keep forwarding it.""" + result = _bedrock_tools_pt(_STRICT_TOOL, model=model_id) + assert result[0]["toolSpec"]["strict"] is True, f"strict missing for {model_id}: {result[0]['toolSpec']}" + + +@pytest.mark.parametrize( + "model_id", + [ + "us.amazon.nova-micro-v1:0", + "meta.llama3-2-11b-instruct-v1:0", + ], +) +def test_bedrock_tools_pt_strict_dropped_for_non_anthropic(model_id: str) -> None: + """Non-Anthropic Bedrock families reject toolSpec.strict — must be dropped.""" + result = _bedrock_tools_pt(_STRICT_TOOL, model=model_id) + assert "strict" not in result[0]["toolSpec"] + + +def test_bedrock_converse_supports_strict_tools_helper() -> None: + """Direct check for the gate helper used by factory.py.""" + assert bedrock_converse_supports_strict_tools("bedrock/us.anthropic.claude-opus-4-7") is False + assert bedrock_converse_supports_strict_tools("bedrock/us.anthropic.claude-opus-4-8") is False + assert bedrock_converse_supports_strict_tools("anthropic.claude-sonnet-4-5-20250929-v1:0") is True + assert bedrock_converse_supports_strict_tools("bedrock/us.anthropic.claude-opus-4-6") is True + assert bedrock_converse_supports_strict_tools("us.amazon.nova-micro-v1:0") is False + assert bedrock_converse_supports_strict_tools("") is False + + +@pytest.mark.parametrize( + "cost_map_key", + [ + "anthropic.claude-opus-4-7", + "us.anthropic.claude-opus-4-7", + "anthropic.claude-opus-4-8", + "us.anthropic.claude-opus-4-8", + ], +) +def test_strict_tools_flag_set_in_model_cost_map(cost_map_key: str) -> None: + """The gate is driven by ``bedrock_converse_supports_strict_tools: false`` in + ``model_prices_and_context_window.json``, not hardcoded model patterns.""" + from litellm.litellm_core_utils.get_model_cost_map import GetModelCostMap + + cost_map = GetModelCostMap.load_local_model_cost_map() + assert cost_map[cost_map_key]["bedrock_converse_supports_strict_tools"] is False diff --git a/tests/test_litellm/test_utils.py b/tests/test_litellm/test_utils.py index 28b82cf035b..2432b377d54 100644 --- a/tests/test_litellm/test_utils.py +++ b/tests/test_litellm/test_utils.py @@ -858,6 +858,7 @@ def test_aaamodel_prices_and_context_window_json_is_valid(): "type": "string", "enum": ["low", "medium", "high", "max", "xhigh"], }, + "bedrock_converse_supports_strict_tools": {"type": "boolean"}, "tpm": {"type": "number"}, "provider_specific_entry": {"type": "object"}, "supported_endpoints": { From c4f28ce2874f82473f171d055335c322ba5cf31b Mon Sep 17 00:00:00 2001 From: Mateo Wang <277851410+mateo-berri@users.noreply.github.com> Date: Wed, 1 Jul 2026 19:11:18 -0700 Subject: [PATCH 68/79] fix(bedrock): trigger Nova Sonic generation on response.create so realtime sessions stop hanging (#31924) * fix(bedrock): trigger Nova Sonic generation on response.create so realtime sessions stop hanging (LIT-2239) * fix(bedrock): reopen audio content at client sample rate after trigger block * test(bedrock): cover realtime handler disconnect flush and stream-end guard * fix(bedrock): always close realtime input stream even if close flush fails * fix(lint): use contextlib.suppress in bedrock realtime cleanup to satisfy BLE001 budget * fix(bedrock): suppress bedrock close send errors per-message so promptEnd/sessionEnd still flush --------- Co-authored-by: Cursor Agent --- litellm/llms/bedrock/realtime/handler.py | 37 ++- .../llms/bedrock/realtime/transformation.py | 146 ++++++++- .../llms/bedrock/realtime/trigger_audio.py | 208 ++++++++++++ ruff-strict-budget.json | 4 +- .../realtime/test_bedrock_realtime_handler.py | 174 +++++++++++ .../test_bedrock_realtime_transformation.py | 295 +++++++++++++----- 6 files changed, 768 insertions(+), 96 deletions(-) create mode 100644 litellm/llms/bedrock/realtime/trigger_audio.py create mode 100644 tests/test_litellm/llms/bedrock/realtime/test_bedrock_realtime_handler.py diff --git a/litellm/llms/bedrock/realtime/handler.py b/litellm/llms/bedrock/realtime/handler.py index 6db2571090a..557ee3348d5 100644 --- a/litellm/llms/bedrock/realtime/handler.py +++ b/litellm/llms/bedrock/realtime/handler.py @@ -5,6 +5,7 @@ This uses aws_sdk_bedrock_runtime for bidirectional streaming with Nova Sonic. """ import asyncio +import contextlib import json from typing import Any, Optional @@ -156,12 +157,19 @@ class BedrockRealtime(BaseAWSLLM): session_state: dict, ): """Forward messages from client WebSocket to Bedrock stream.""" - try: - from aws_sdk_bedrock_runtime.models import ( - BidirectionalInputPayloadPart, - InvokeModelWithBidirectionalStreamInputChunk, - ) + from aws_sdk_bedrock_runtime.models import ( + BidirectionalInputPayloadPart, + InvokeModelWithBidirectionalStreamInputChunk, + ) + async def send_to_bedrock(bedrock_message: str) -> None: + event = InvokeModelWithBidirectionalStreamInputChunk( + value=BidirectionalInputPayloadPart(bytes_=bedrock_message.encode("utf-8")) + ) + await bedrock_stream.input_stream.send(event) + verbose_proxy_logger.debug(f"Bedrock Realtime: Sent to Bedrock: {bedrock_message[:200]}") + + try: while True: # Receive message from client message = await client_ws.receive_text() @@ -176,19 +184,15 @@ class BedrockRealtime(BaseAWSLLM): # Send transformed messages to Bedrock for bedrock_message in transformed_messages: - event = InvokeModelWithBidirectionalStreamInputChunk( - value=BidirectionalInputPayloadPart(bytes_=bedrock_message.encode("utf-8")) - ) - await bedrock_stream.input_stream.send(event) - verbose_proxy_logger.debug(f"Bedrock Realtime: Sent to Bedrock: {bedrock_message[:200]}") + await send_to_bedrock(bedrock_message) except Exception as e: verbose_proxy_logger.debug(f"Client to Bedrock forwarding ended: {e}", exc_info=True) - # Close the Bedrock stream input - try: + for close_message in transformation_config.session_close_messages(): + with contextlib.suppress(Exception): + await send_to_bedrock(close_message) + with contextlib.suppress(Exception): await bedrock_stream.input_stream.close() - except Exception: - pass async def _forward_bedrock_to_client( self, @@ -206,6 +210,10 @@ class BedrockRealtime(BaseAWSLLM): output = await bedrock_stream.await_output() result = await output[1].receive() + if result is None: + verbose_proxy_logger.debug("Bedrock Realtime: Bedrock stream ended") + break + if result.value and result.value.bytes_: bedrock_response = result.value.bytes_.decode("utf-8") verbose_proxy_logger.debug(f"Bedrock Realtime: Received from Bedrock: {bedrock_response[:200]}") @@ -252,6 +260,7 @@ class BedrockRealtime(BaseAWSLLM): except Exception as e: verbose_proxy_logger.debug(f"Bedrock to client forwarding ended: {e}", exc_info=True) + finally: # Close the client WebSocket try: await client_ws.close() diff --git a/litellm/llms/bedrock/realtime/transformation.py b/litellm/llms/bedrock/realtime/transformation.py index 498567a4ecf..fe5f0584e03 100644 --- a/litellm/llms/bedrock/realtime/transformation.py +++ b/litellm/llms/bedrock/realtime/transformation.py @@ -4,14 +4,18 @@ This file contains the transformation logic for Bedrock Nova Sonic realtime API. Transforms between OpenAI Realtime API format and Bedrock Nova Sonic format. """ +import base64 import json import uuid as uuid_lib from typing import Any, List, Optional, Union +from pydantic import BaseModel + from litellm._logging import verbose_logger from litellm._uuid import uuid from litellm.litellm_core_utils.litellm_logging import Logging as LiteLLMLoggingObj from litellm.llms.base_llm.realtime.transformation import BaseRealtimeConfig +from litellm.llms.bedrock.realtime.trigger_audio import ready_trigger_pcm from litellm.types.llms.openai import ( OpenAIRealtimeContentPartDone, OpenAIRealtimeDoneEvent, @@ -35,6 +39,17 @@ from litellm.types.realtime import ( from litellm.utils import get_empty_usage +class BedrockContentEnd(BaseModel): + stopReason: Optional[str] = None + + +TRIGGER_AUDIO_SAMPLE_RATE_HERTZ = 16000 +TRIGGER_AUDIO_BYTES_PER_SECOND = TRIGGER_AUDIO_SAMPLE_RATE_HERTZ * 2 +TRIGGER_LEADING_SILENCE = bytes(TRIGGER_AUDIO_BYTES_PER_SECOND // 2) +TRIGGER_TRAILING_SILENCE = bytes(TRIGGER_AUDIO_BYTES_PER_SECOND * 3) +TRIGGER_AUDIO_CHUNK_SIZE = 1024 + + class BedrockRealtimeConfig(BaseRealtimeConfig): """Configuration for Bedrock Nova Sonic realtime transformations.""" @@ -43,6 +58,8 @@ class BedrockRealtimeConfig(BaseRealtimeConfig): self.prompt_name = str(uuid_lib.uuid4()) self.content_name = str(uuid_lib.uuid4()) self.audio_content_name = str(uuid_lib.uuid4()) + self.prompt_started = False + self.client_audio_streamed = False # Default configuration values # Inference configuration @@ -247,6 +264,7 @@ class BedrockRealtimeConfig(BaseRealtimeConfig): prompt_start = {"event": {"promptStart": prompt_start_config}} messages.append(json.dumps(prompt_start)) + self.prompt_started = True # Send system prompt if provided instructions = session_config.get("instructions") @@ -304,8 +322,22 @@ class BedrockRealtimeConfig(BaseRealtimeConfig): List of Bedrock format messages (JSON strings) """ verbose_logger.debug("Handling input_audio_buffer.append") + self.client_audio_streamed = True messages: List[str] = [] + if hasattr(self, "_audio_content_started") and self._audio_content_sample_rate != self.input_sample_rate_hertz: + mismatched_content_end = { + "event": { + "contentEnd": { + "promptName": self.prompt_name, + "contentName": self.audio_content_name, + } + } + } + messages.append(json.dumps(mismatched_content_end)) + delattr(self, "_audio_content_started") + self.audio_content_name = str(uuid_lib.uuid4()) + # Check if we need to start audio content if not hasattr(self, "_audio_content_started"): audio_content_start = { @@ -329,6 +361,7 @@ class BedrockRealtimeConfig(BaseRealtimeConfig): } messages.append(json.dumps(audio_content_start)) self._audio_content_started = True + self._audio_content_sample_rate = self.input_sample_rate_hertz # Send audio chunk audio_data = json_message.get("audio", "") @@ -383,7 +416,6 @@ class BedrockRealtimeConfig(BaseRealtimeConfig): List of Bedrock format messages (JSON strings) """ verbose_logger.debug("Handling conversation.item.create") - messages: List[str] = [] item = json_message.get("item", {}) item_type = item.get("type") @@ -392,6 +424,8 @@ class BedrockRealtimeConfig(BaseRealtimeConfig): if item_type == "function_call_output": return self.transform_conversation_item_create_tool_result_event(json_message) + messages: list[str] = [] + # Handle regular message if item_type == "message": content = item.get("content", []) @@ -443,6 +477,12 @@ class BedrockRealtimeConfig(BaseRealtimeConfig): """ Transform response.create event to Bedrock format. + Nova Sonic only starts generating after it detects user speech, so text-only + sessions never get a response on their own. Injecting a short spoken "ready" + utterance (followed by silence) makes the model respond to the pending + interactive text input. Sessions where the client streams its own audio rely + on Nova Sonic's built-in turn detection instead. + Args: json_message: OpenAI response.create message @@ -450,8 +490,53 @@ class BedrockRealtimeConfig(BaseRealtimeConfig): List of Bedrock format messages (JSON strings) """ verbose_logger.debug("Handling response.create") - # Bedrock starts generating automatically, no explicit trigger needed - return [] + if not self.prompt_started or self.client_audio_streamed: + return [] + + messages: list[str] = [] + if not hasattr(self, "_audio_content_started"): + trigger_content_start = { + "event": { + "contentStart": { + "promptName": self.prompt_name, + "contentName": self.audio_content_name, + "type": "AUDIO", + "interactive": True, + "role": "USER", + "audioInputConfiguration": { + "mediaType": self.input_media_type, + "sampleRateHertz": TRIGGER_AUDIO_SAMPLE_RATE_HERTZ, + "sampleSizeBits": self.input_sample_size_bits, + "channelCount": self.input_channel_count, + "audioType": self.input_audio_type, + "encoding": self.input_encoding, + }, + } + } + } + messages.append(json.dumps(trigger_content_start)) + self._audio_content_started = True + self._audio_content_sample_rate = TRIGGER_AUDIO_SAMPLE_RATE_HERTZ + + messages.extend(self._response_trigger_audio_messages()) + return messages + + def _response_trigger_audio_messages(self) -> list[str]: + pcm = TRIGGER_LEADING_SILENCE + ready_trigger_pcm() + TRIGGER_TRAILING_SILENCE + return [ + json.dumps( + { + "event": { + "audioInput": { + "promptName": self.prompt_name, + "contentName": self.audio_content_name, + "content": base64.b64encode(pcm[offset : offset + TRIGGER_AUDIO_CHUNK_SIZE]).decode(), + } + } + } + ) + for offset in range(0, len(pcm), TRIGGER_AUDIO_CHUNK_SIZE) + ] def transform_response_cancel_event(self, json_message: dict) -> List[str]: """ @@ -467,6 +552,35 @@ class BedrockRealtimeConfig(BaseRealtimeConfig): # Send interrupt signal if needed return [] + def session_close_messages(self) -> list[str]: + """ + Build the Bedrock events that gracefully close the session + (contentEnd for any open audio content, promptEnd, sessionEnd). + + Returns: + List of Bedrock format messages (JSON strings) + """ + if not self.prompt_started: + return [] + + messages: list[str] = [] + if hasattr(self, "_audio_content_started"): + audio_content_end = { + "event": { + "contentEnd": { + "promptName": self.prompt_name, + "contentName": self.audio_content_name, + } + } + } + messages.append(json.dumps(audio_content_end)) + delattr(self, "_audio_content_started") + + messages.append(json.dumps({"event": {"promptEnd": {"promptName": self.prompt_name}}})) + messages.append(json.dumps({"event": {"sessionEnd": {}}})) + self.prompt_started = False + return messages + def transform_realtime_request( self, message: str, @@ -837,10 +951,11 @@ class BedrockRealtimeConfig(BaseRealtimeConfig): Optional[ALL_DELTA_TYPES], ]: """ - Transform Bedrock promptEnd event to OpenAI response.done. + Transform a Bedrock end-of-response event (promptEnd, completionEnd, or an + END_TURN contentEnd) to OpenAI response.done. Args: - event: Bedrock promptEnd event + event: Bedrock event that ends the response current_response_id: Current response ID current_conversation_id: Current conversation ID @@ -848,7 +963,18 @@ class BedrockRealtimeConfig(BaseRealtimeConfig): Tuple of (events, reset_output_item_id, reset_response_id, reset_delta_type) """ verbose_logger.debug("Handling promptEnd") + return self._response_done_events(current_response_id, current_conversation_id) + def _response_done_events( + self, + current_response_id: Optional[str], + current_conversation_id: Optional[str], + ) -> tuple[ + List[OpenAIRealtimeEvents], + Optional[str], + Optional[str], + Optional[ALL_DELTA_TYPES], + ]: if not current_response_id or not current_conversation_id: return [], None, None, None @@ -1084,6 +1210,14 @@ class BedrockRealtimeConfig(BaseRealtimeConfig): current_delta_chunks, ) returned_messages.extend(events) + if BedrockContentEnd.model_validate(event["contentEnd"]).stopReason == "END_TURN": + ( + done_events, + current_output_item_id, + current_response_id, + current_delta_type, + ) = self._response_done_events(current_response_id, current_conversation_id) + returned_messages.extend(done_events) elif "toolUse" in event: events, tool_call_id, tool_name = self.transform_tool_use_event( @@ -1093,7 +1227,7 @@ class BedrockRealtimeConfig(BaseRealtimeConfig): # Store tool call info for potential use verbose_logger.debug(f"Tool use event: {tool_name} (ID: {tool_call_id})") - elif "promptEnd" in event: + elif "promptEnd" in event or "completionEnd" in event: ( events, current_output_item_id, diff --git a/litellm/llms/bedrock/realtime/trigger_audio.py b/litellm/llms/bedrock/realtime/trigger_audio.py new file mode 100644 index 00000000000..5783dae54bb --- /dev/null +++ b/litellm/llms/bedrock/realtime/trigger_audio.py @@ -0,0 +1,208 @@ +""" +Pre-rendered spoken "ready" trigger audio (16kHz, 16-bit, mono PCM), generated with Amazon Polly. + +Amazon Nova Sonic v1 only starts generating after it hears the user speak, so text-only realtime +sessions inject this short utterance to trigger a response (same approach as Pipecat's +AWSNovaSonicLLMService assistant-response trigger). +""" + +import base64 +import gzip +from functools import lru_cache + +READY_TRIGGER_PCM_16KHZ_MONO_GZIP_B64 = ( + "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" + "AYxHlHJ2PgAA" +) + + +@lru_cache(maxsize=1) +def ready_trigger_pcm() -> bytes: + return gzip.decompress(base64.b64decode(READY_TRIGGER_PCM_16KHZ_MONO_GZIP_B64)) diff --git a/ruff-strict-budget.json b/ruff-strict-budget.json index f5aa600ab84..85ff7fcbf7d 100644 --- a/ruff-strict-budget.json +++ b/ruff-strict-budget.json @@ -60,7 +60,7 @@ "limit": 4 }, "BLE001": { - "limit": 2904 + "limit": 2903 }, "C401": { "limit": 11 @@ -255,7 +255,7 @@ "limit": 480 }, "S110": { - "limit": 237 + "limit": 236 }, "S112": { "limit": 24 diff --git a/tests/test_litellm/llms/bedrock/realtime/test_bedrock_realtime_handler.py b/tests/test_litellm/llms/bedrock/realtime/test_bedrock_realtime_handler.py new file mode 100644 index 00000000000..18e48169bc1 --- /dev/null +++ b/tests/test_litellm/llms/bedrock/realtime/test_bedrock_realtime_handler.py @@ -0,0 +1,174 @@ +import json +import os +import sys +import types +from unittest.mock import MagicMock + +import pytest + +sys.path.insert(0, os.path.abspath("../../../../..")) # Adds the parent directory to the system path + +from litellm.llms.bedrock.realtime.handler import BedrockRealtime +from litellm.llms.bedrock.realtime.transformation import BedrockRealtimeConfig + + +class FakePayloadPart: + def __init__(self, bytes_): + self.bytes_ = bytes_ + + +class FakeInputChunk: + def __init__(self, value): + self.value = value + + +class FakeInputStream: + def __init__(self): + self.sent = [] + self.closed = False + + async def send(self, event): + self.sent.append(event) + + async def close(self): + self.closed = True + + +class SendFailingInputStream(FakeInputStream): + async def send(self, event): + raise RuntimeError("bedrock send failed") + + +class FailOnPromptEndStream(FakeInputStream): + async def send(self, event): + payload = json.loads(event.value.bytes_.decode("utf-8")) + if "promptEnd" in payload.get("event", {}): + raise RuntimeError("bedrock rejected promptEnd") + self.sent.append(event) + + +class FakeBedrockStream: + def __init__(self, input_stream=None): + self.input_stream = input_stream if input_stream is not None else FakeInputStream() + + +class DisconnectingClientWS: + def __init__(self, messages): + self._messages = list(messages) + + async def receive_text(self): + if self._messages: + return self._messages.pop(0) + raise RuntimeError("client disconnected") + + +class ClosableClientWS: + def __init__(self): + self.closed = False + + async def close(self): + self.closed = True + + +class EndedBedrockReceiver: + async def receive(self): + return None + + +class EndedBedrockStream: + async def await_output(self): + return (None, EndedBedrockReceiver()) + + +@pytest.fixture +def stub_aws_models(monkeypatch): + package = types.ModuleType("aws_sdk_bedrock_runtime") + models = types.ModuleType("aws_sdk_bedrock_runtime.models") + models.BidirectionalInputPayloadPart = FakePayloadPart + models.InvokeModelWithBidirectionalStreamInputChunk = FakeInputChunk + package.models = models + monkeypatch.setitem(sys.modules, "aws_sdk_bedrock_runtime", package) + monkeypatch.setitem(sys.modules, "aws_sdk_bedrock_runtime.models", models) + + +class TestBedrockRealtimeHandler: + """Client disconnect must close the Bedrock session gracefully (LIT-2239 regression)""" + + @pytest.mark.asyncio + async def test_client_disconnect_flushes_session_close_messages(self, stub_aws_models): + handler = BedrockRealtime() + config = BedrockRealtimeConfig() + stream = FakeBedrockStream() + client_ws = DisconnectingClientWS( + [json.dumps({"type": "session.update", "session": {"instructions": "You are helpful."}})] + ) + + await handler._forward_client_to_bedrock(client_ws, stream, config, "amazon.nova-sonic-v1:0", {}) + + sent_events = [json.loads(chunk.value.bytes_.decode("utf-8")) for chunk in stream.input_stream.sent] + event_names = [next(iter(event["event"])) for event in sent_events] + assert event_names[0] == "sessionStart" + assert event_names[-2:] == ["promptEnd", "sessionEnd"] + assert stream.input_stream.closed + + @pytest.mark.asyncio + async def test_client_disconnect_before_session_update_sends_nothing(self, stub_aws_models): + handler = BedrockRealtime() + config = BedrockRealtimeConfig() + stream = FakeBedrockStream() + + await handler._forward_client_to_bedrock( + DisconnectingClientWS([]), stream, config, "amazon.nova-sonic-v1:0", {} + ) + + assert stream.input_stream.sent == [] + assert stream.input_stream.closed + + @pytest.mark.asyncio + async def test_input_stream_closed_even_when_close_flush_fails(self, stub_aws_models): + handler = BedrockRealtime() + config = BedrockRealtimeConfig() + stream = FakeBedrockStream(input_stream=SendFailingInputStream()) + client_ws = DisconnectingClientWS( + [json.dumps({"type": "session.update", "session": {"instructions": "You are helpful."}})] + ) + + await handler._forward_client_to_bedrock(client_ws, stream, config, "amazon.nova-sonic-v1:0", {}) + + assert stream.input_stream.closed + + @pytest.mark.asyncio + async def test_close_flush_continues_after_partial_send_failure(self, stub_aws_models): + handler = BedrockRealtime() + config = BedrockRealtimeConfig() + stream = FakeBedrockStream(input_stream=FailOnPromptEndStream()) + client_ws = DisconnectingClientWS( + [json.dumps({"type": "session.update", "session": {"instructions": "You are helpful."}})] + ) + + await handler._forward_client_to_bedrock(client_ws, stream, config, "amazon.nova-sonic-v1:0", {}) + + sent_events = [json.loads(chunk.value.bytes_.decode("utf-8")) for chunk in stream.input_stream.sent] + event_names = [next(iter(event["event"])) for event in sent_events] + assert "sessionEnd" in event_names + assert stream.input_stream.closed + + @pytest.mark.asyncio + async def test_bedrock_stream_end_closes_client_websocket(self): + handler = BedrockRealtime() + client_ws = ClosableClientWS() + + await handler._forward_bedrock_to_client( + EndedBedrockStream(), + client_ws, + BedrockRealtimeConfig(), + "amazon.nova-sonic-v1:0", + MagicMock(), + {}, + ) + + assert client_ws.closed + + +if __name__ == "__main__": + pytest.main([__file__, "-v"]) diff --git a/tests/test_litellm/llms/bedrock/realtime/test_bedrock_realtime_transformation.py b/tests/test_litellm/llms/bedrock/realtime/test_bedrock_realtime_transformation.py index bf15727f4b4..a68aa603b26 100644 --- a/tests/test_litellm/llms/bedrock/realtime/test_bedrock_realtime_transformation.py +++ b/tests/test_litellm/llms/bedrock/realtime/test_bedrock_realtime_transformation.py @@ -5,11 +5,16 @@ from unittest.mock import MagicMock import pytest -sys.path.insert( - 0, os.path.abspath("../../../../..") -) # Adds the parent directory to the system path +sys.path.insert(0, os.path.abspath("../../../../..")) # Adds the parent directory to the system path -from litellm.llms.bedrock.realtime.transformation import BedrockRealtimeConfig +import base64 + +from litellm.llms.bedrock.realtime.transformation import ( + TRIGGER_LEADING_SILENCE, + TRIGGER_TRAILING_SILENCE, + BedrockRealtimeConfig, +) +from litellm.llms.bedrock.realtime.trigger_audio import ready_trigger_pcm from litellm.types.llms.openai import OpenAIRealtimeEventTypes @@ -67,19 +72,14 @@ class TestBedrockRealtimeConfig: } ] - session_config = config.session_configuration_request( - "amazon.nova-sonic-v1:0", tools=tools - ) + session_config = config.session_configuration_request("amazon.nova-sonic-v1:0", tools=tools) session_dict = json.loads(session_config) prompt_start = session_dict["prompt_start"]["event"]["promptStart"] assert "toolConfiguration" in prompt_start assert "tools" in prompt_start["toolConfiguration"] assert len(prompt_start["toolConfiguration"]["tools"]) == 1 - assert ( - prompt_start["toolConfiguration"]["tools"][0]["toolSpec"]["name"] - == "get_weather" - ) + assert prompt_start["toolConfiguration"]["tools"][0]["toolSpec"]["name"] == "get_weather" def test_transform_tools_to_bedrock_format(self): """Test OpenAI tool format to Bedrock format transformation""" @@ -93,9 +93,7 @@ class TestBedrockRealtimeConfig: "description": "Get current weather", "parameters": { "type": "object", - "properties": { - "location": {"type": "string", "description": "City name"} - }, + "properties": {"location": {"type": "string", "description": "City name"}}, "required": ["location"], }, }, @@ -120,18 +118,11 @@ class TestBedrockRealtimeConfig: # Test PCM16 format assert config._map_audio_format_to_sample_rate("pcm16", is_output=True) == 24000 - assert ( - config._map_audio_format_to_sample_rate("pcm16", is_output=False) == 16000 - ) + assert config._map_audio_format_to_sample_rate("pcm16", is_output=False) == 16000 # Test G.711 formats - assert ( - config._map_audio_format_to_sample_rate("g711_ulaw", is_output=True) == 8000 - ) - assert ( - config._map_audio_format_to_sample_rate("g711_alaw", is_output=False) - == 8000 - ) + assert config._map_audio_format_to_sample_rate("g711_ulaw", is_output=True) == 8000 + assert config._map_audio_format_to_sample_rate("g711_alaw", is_output=False) == 8000 def test_transform_session_update_event(self): """Test session.update event transformation""" @@ -158,12 +149,7 @@ class TestBedrockRealtimeConfig: # Verify session start message session_start = json.loads(messages[0]) - assert ( - session_start["event"]["sessionStart"]["inferenceConfiguration"][ - "temperature" - ] - == 0.9 - ) + assert session_start["event"]["sessionStart"]["inferenceConfiguration"]["temperature"] == 0.9 def test_transform_session_update_with_tools(self): """Test session.update with tools""" @@ -237,12 +223,7 @@ class TestBedrockRealtimeConfig: content_start = json.loads(messages[0]) assert content_start["event"]["contentStart"]["type"] == "TOOL" assert content_start["event"]["contentStart"]["role"] == "TOOL" - assert ( - content_start["event"]["contentStart"]["toolResultInputConfiguration"][ - "toolUseId" - ] - == "call_123" - ) + assert content_start["event"]["contentStart"]["toolResultInputConfiguration"]["toolUseId"] == "call_123" def test_transform_input_audio_buffer_append(self): """Test input_audio_buffer.append transformation""" @@ -260,12 +241,7 @@ class TestBedrockRealtimeConfig: content_start = json.loads(messages[0]) assert content_start["event"]["contentStart"]["type"] == "AUDIO" - assert ( - content_start["event"]["contentStart"]["audioInputConfiguration"][ - "sampleRateHertz" - ] - == 16000 - ) + assert content_start["event"]["contentStart"]["audioInputConfiguration"]["sampleRateHertz"] == 16000 audio_input = json.loads(messages[1]) assert audio_input["event"]["audioInput"]["content"] == "base64_audio_data_here" @@ -286,6 +262,144 @@ class TestBedrockRealtimeConfig: assert "contentEnd" in content_end["event"] +class TestBedrockRealtimeResponseCreate: + """response.create must trigger Nova Sonic generation (LIT-2239 regression)""" + + def _start_session(self, config): + config.transform_realtime_request( + json.dumps( + { + "type": "session.update", + "session": {"instructions": "You are a helpful assistant."}, + } + ), + "amazon.nova-sonic-v1:0", + ) + + def test_response_create_before_session_update_is_noop(self): + config = BedrockRealtimeConfig() + + messages = config.transform_realtime_request(json.dumps({"type": "response.create"}), "amazon.nova-sonic-v1:0") + + assert messages == [] + + def test_response_create_emits_spoken_trigger_audio(self): + config = BedrockRealtimeConfig() + self._start_session(config) + + messages = config.transform_realtime_request(json.dumps({"type": "response.create"}), "amazon.nova-sonic-v1:0") + + assert len(messages) > 1 + + content_start = json.loads(messages[0])["event"]["contentStart"] + assert content_start["promptName"] == config.prompt_name + assert content_start["contentName"] == config.audio_content_name + assert content_start["type"] == "AUDIO" + assert content_start["interactive"] is True + assert content_start["role"] == "USER" + assert content_start["audioInputConfiguration"]["sampleRateHertz"] == 16000 + + audio_events = [json.loads(message)["event"]["audioInput"] for message in messages[1:]] + assert all(event["promptName"] == config.prompt_name for event in audio_events) + assert all(event["contentName"] == config.audio_content_name for event in audio_events) + + sent_pcm = b"".join(base64.b64decode(event["content"]) for event in audio_events) + assert sent_pcm == TRIGGER_LEADING_SILENCE + ready_trigger_pcm() + TRIGGER_TRAILING_SILENCE + + def test_second_response_create_reuses_open_audio_content(self): + config = BedrockRealtimeConfig() + self._start_session(config) + + first = config.transform_realtime_request(json.dumps({"type": "response.create"}), "amazon.nova-sonic-v1:0") + second = config.transform_realtime_request(json.dumps({"type": "response.create"}), "amazon.nova-sonic-v1:0") + + assert len(second) == len(first) - 1 + assert all("audioInput" in json.loads(message)["event"] for message in second) + + def test_response_create_is_noop_when_client_streams_audio(self): + config = BedrockRealtimeConfig() + self._start_session(config) + config.transform_realtime_request( + json.dumps({"type": "input_audio_buffer.append", "audio": "c2lsZW5jZQ=="}), + "amazon.nova-sonic-v1:0", + ) + + messages = config.transform_realtime_request(json.dumps({"type": "response.create"}), "amazon.nova-sonic-v1:0") + + assert messages == [] + + def test_client_audio_after_trigger_reopens_block_at_client_sample_rate(self): + config = BedrockRealtimeConfig() + config.transform_realtime_request( + json.dumps( + { + "type": "session.update", + "session": { + "instructions": "You are a helpful assistant.", + "input_audio_format": "g711_ulaw", + }, + } + ), + "amazon.nova-sonic-v1:0", + ) + config.transform_realtime_request(json.dumps({"type": "response.create"}), "amazon.nova-sonic-v1:0") + trigger_content_name = config.audio_content_name + + messages = config.transform_realtime_request( + json.dumps({"type": "input_audio_buffer.append", "audio": "c2lsZW5jZQ=="}), + "amazon.nova-sonic-v1:0", + ) + + events = [json.loads(message)["event"] for message in messages] + assert [next(iter(event)) for event in events] == [ + "contentEnd", + "contentStart", + "audioInput", + ] + assert events[0]["contentEnd"]["contentName"] == trigger_content_name + new_content_start = events[1]["contentStart"] + assert new_content_start["contentName"] == config.audio_content_name + assert new_content_start["contentName"] != trigger_content_name + assert new_content_start["audioInputConfiguration"]["sampleRateHertz"] == 8000 + assert events[2]["audioInput"]["contentName"] == config.audio_content_name + + def test_client_audio_after_trigger_reuses_block_at_matching_sample_rate(self): + config = BedrockRealtimeConfig() + self._start_session(config) + config.transform_realtime_request(json.dumps({"type": "response.create"}), "amazon.nova-sonic-v1:0") + trigger_content_name = config.audio_content_name + + messages = config.transform_realtime_request( + json.dumps({"type": "input_audio_buffer.append", "audio": "c2lsZW5jZQ=="}), + "amazon.nova-sonic-v1:0", + ) + + assert len(messages) == 1 + audio_input = json.loads(messages[0])["event"]["audioInput"] + assert audio_input["contentName"] == trigger_content_name + + def test_session_close_messages_close_audio_prompt_and_session(self): + config = BedrockRealtimeConfig() + self._start_session(config) + config.transform_realtime_request(json.dumps({"type": "response.create"}), "amazon.nova-sonic-v1:0") + + close_messages = [json.loads(message)["event"] for message in config.session_close_messages()] + + assert [next(iter(event)) for event in close_messages] == [ + "contentEnd", + "promptEnd", + "sessionEnd", + ] + assert close_messages[0]["contentEnd"]["contentName"] == config.audio_content_name + assert close_messages[1]["promptEnd"]["promptName"] == config.prompt_name + assert config.session_close_messages() == [] + + def test_session_close_messages_before_session_update_is_empty(self): + config = BedrockRealtimeConfig() + + assert config.session_close_messages() == [] + + class TestBedrockRealtimeResponseTransformation: """Test suite for response transformation""" @@ -296,11 +410,7 @@ class TestBedrockRealtimeResponseTransformation: logging_obj.litellm_trace_id = "trace_123" bedrock_message = { - "event": { - "sessionStart": { - "inferenceConfiguration": {"maxTokens": 1024, "temperature": 0.7} - } - } + "event": {"sessionStart": {"inferenceConfiguration": {"maxTokens": 1024, "temperature": 0.7}}} } result = config.transform_realtime_response( @@ -330,9 +440,7 @@ class TestBedrockRealtimeResponseTransformation: logging_obj.litellm_trace_id = "trace_123" # First create a content start to initialize IDs - content_start_message = { - "event": {"contentStart": {"role": "ASSISTANT", "type": "TEXT"}} - } + content_start_message = {"event": {"contentStart": {"role": "ASSISTANT", "type": "TEXT"}}} result1 = config.transform_realtime_response( json.dumps(content_start_message), @@ -368,9 +476,7 @@ class TestBedrockRealtimeResponseTransformation: ) # Check for text delta - text_deltas = [ - msg for msg in result2["response"] if msg["type"] == "response.text.delta" - ] + text_deltas = [msg for msg in result2["response"] if msg["type"] == "response.text.delta"] assert len(text_deltas) == 1 assert text_deltas[0]["delta"] == "Hello, world!" @@ -384,9 +490,7 @@ class TestBedrockRealtimeResponseTransformation: logging_obj.litellm_trace_id = "trace_123" # First create a content start for audio - content_start_message = { - "event": {"contentStart": {"role": "ASSISTANT", "type": "AUDIO"}} - } + content_start_message = {"event": {"contentStart": {"role": "ASSISTANT", "type": "AUDIO"}}} result1 = config.transform_realtime_response( json.dumps(content_start_message), @@ -404,9 +508,7 @@ class TestBedrockRealtimeResponseTransformation: ) # Now send audio output - audio_output_message = { - "event": {"audioOutput": {"content": "base64_audio_content"}} - } + audio_output_message = {"event": {"audioOutput": {"content": "base64_audio_content"}}} result2 = config.transform_realtime_response( json.dumps(audio_output_message), @@ -424,9 +526,7 @@ class TestBedrockRealtimeResponseTransformation: ) # Check for audio delta - audio_deltas = [ - msg for msg in result2["response"] if msg["type"] == "response.audio.delta" - ] + audio_deltas = [msg for msg in result2["response"] if msg["type"] == "response.audio.delta"] assert len(audio_deltas) == 1 assert audio_deltas[0]["delta"] == "base64_audio_content" @@ -504,14 +604,67 @@ class TestBedrockRealtimeResponseTransformation: # Should have text.done, content_part.done, and output_item.done assert len(result["response"]) == 3 - text_done = [ - msg for msg in result["response"] if msg["type"] == "response.text.done" - ][0] + text_done = [msg for msg in result["response"] if msg["type"] == "response.text.done"][0] assert text_done["text"] == "Hello, world!" # Delta chunks should be reset assert result["current_delta_chunks"] is None + def test_content_end_end_turn_emits_response_done(self): + """END_TURN contentEnd must produce response.done (LIT-2239 regression)""" + config = BedrockRealtimeConfig() + logging_obj = MagicMock() + logging_obj.litellm_trace_id = "trace_123" + + content_end_message = {"event": {"contentEnd": {"stopReason": "END_TURN", "type": "AUDIO"}}} + + result = config.transform_realtime_response( + json.dumps(content_end_message), + "amazon.nova-sonic-v1:0", + logging_obj, + realtime_response_transform_input={ + "session_configuration_request": json.dumps({"configured": True}), + "current_output_item_id": "item_123", + "current_response_id": "resp_123", + "current_conversation_id": "conv_123", + "current_delta_chunks": [], + "current_item_chunks": [], + "current_delta_type": "audio", + }, + ) + + response_done_events = [msg for msg in result["response"] if msg["type"] == "response.done"] + assert len(response_done_events) == 1 + assert response_done_events[0]["response"]["status"] == "completed" + assert result["current_output_item_id"] is None + assert result["current_response_id"] is None + assert result["current_delta_type"] is None + + def test_content_end_partial_turn_does_not_emit_response_done(self): + config = BedrockRealtimeConfig() + logging_obj = MagicMock() + logging_obj.litellm_trace_id = "trace_123" + + content_end_message = {"event": {"contentEnd": {"stopReason": "PARTIAL_TURN", "type": "TEXT"}}} + + result = config.transform_realtime_response( + json.dumps(content_end_message), + "amazon.nova-sonic-v1:0", + logging_obj, + realtime_response_transform_input={ + "session_configuration_request": json.dumps({"configured": True}), + "current_output_item_id": "item_123", + "current_response_id": "resp_123", + "current_conversation_id": "conv_123", + "current_delta_chunks": [], + "current_item_chunks": [], + "current_delta_type": "text", + }, + ) + + assert all(msg["type"] != "response.done" for msg in result["response"]) + assert result["current_response_id"] == "resp_123" + def test_transform_prompt_end_response(self): """Test promptEnd response transformation""" config = BedrockRealtimeConfig() @@ -552,9 +705,7 @@ class TestBedrockRealtimeResponseTransformation: logging_obj.litellm_trace_id = "trace_123" # Create a sequence of messages - content_start = { - "event": {"contentStart": {"role": "ASSISTANT", "type": "TEXT"}} - } + content_start = {"event": {"contentStart": {"role": "ASSISTANT", "type": "TEXT"}}} text_output1 = {"event": {"textOutput": {"content": "Hello"}}} text_output2 = {"event": {"textOutput": {"content": " world"}}} @@ -600,9 +751,7 @@ class TestBedrockRealtimeResponseTransformation: logging_obj.litellm_trace_id = "trace_123" # Create a sequence of messages - content_start = { - "event": {"contentStart": {"role": "ASSISTANT", "type": "TEXT"}} - } + content_start = {"event": {"contentStart": {"role": "ASSISTANT", "type": "TEXT"}}} text_output = {"event": {"textOutput": {"content": "Hello"}}} all_events = [] @@ -636,9 +785,7 @@ class TestBedrockRealtimeResponseTransformation: ) # Check all response_ids are the same - response_ids = [ - event["response_id"] for event in all_events if "response_id" in event - ] + response_ids = [event["response_id"] for event in all_events if "response_id" in event] assert len(set(response_ids)) == 1, "Response IDs should be consistent" From 2a9dbc4c0d2673ee50469229fff60776ceb68c1f Mon Sep 17 00:00:00 2001 From: ryan-crabbe-berri Date: Wed, 1 Jul 2026 20:13:58 -0700 Subject: [PATCH 69/79] chore(ui): remove unused dep, delete dead file, and unblock knip (#31933) Knip flagged remark-gfm as unused and date-fns as imported-but-undeclared, so drop remark-gfm (which prunes its transitive markdown subtree from the lockfile) and declare date-fns, which keyExpiryUtils.ts imports but only received transitively. Also delete the dead memory/components/index.tsx barrel, since nothing imports it once the page pulls MemoryView from its module directly Knip itself could not run: its Playwright plugin imports every config referenced by a --config flag in package.json scripts, and migration.serverRootPath.config.ts threw at import time when SERVER_ROOT_PATH was unset. Move that guard into a config-specific globalSetup so importing the config is side-effect-free; the check still fires loudly before any test runs when the prefix is missing --- .../migration.serverRootPath.config.ts | 10 +- .../migration.serverRootPath.globalSetup.ts | 12 + ui/litellm-dashboard/package-lock.json | 295 +----------------- ui/litellm-dashboard/package.json | 2 +- .../(dashboard)/memory/components/index.tsx | 1 - 5 files changed, 15 insertions(+), 305 deletions(-) create mode 100644 ui/litellm-dashboard/e2e_tests/migration.serverRootPath.globalSetup.ts delete mode 100644 ui/litellm-dashboard/src/app/(dashboard)/memory/components/index.tsx diff --git a/ui/litellm-dashboard/e2e_tests/migration.serverRootPath.config.ts b/ui/litellm-dashboard/e2e_tests/migration.serverRootPath.config.ts index 205348463c8..d32f59b16bf 100644 --- a/ui/litellm-dashboard/e2e_tests/migration.serverRootPath.config.ts +++ b/ui/litellm-dashboard/e2e_tests/migration.serverRootPath.config.ts @@ -6,14 +6,6 @@ import { defineConfig, devices } from "@playwright/test"; * running. globalSetup logs in at `${SERVER_ROOT_PATH}/ui/login` so the admin * storage state is valid under the prefix. */ -if (!process.env.SERVER_ROOT_PATH) { - throw new Error( - "migration.serverRootPath.config.ts requires SERVER_ROOT_PATH to be set (e.g. SERVER_ROOT_PATH=/litellm). " + - "Without it this config silently re-runs the default mount and never exercises the prefix. " + - "For the root-less run use the default playwright.config.ts (npm run e2e:migration).", - ); -} - export default defineConfig({ testDir: "./tests/migration", testMatch: ["migratedPages.spec.ts"], @@ -34,5 +26,5 @@ export default defineConfig({ projects: [{ name: "chromium", use: { ...devices["Desktop Chrome"] } }], timeout: 3 * 60 * 1000, expect: { timeout: 10 * 1000 }, - globalSetup: require.resolve("./globalSetup"), + globalSetup: require.resolve("./migration.serverRootPath.globalSetup"), }); diff --git a/ui/litellm-dashboard/e2e_tests/migration.serverRootPath.globalSetup.ts b/ui/litellm-dashboard/e2e_tests/migration.serverRootPath.globalSetup.ts new file mode 100644 index 00000000000..d11f49dae74 --- /dev/null +++ b/ui/litellm-dashboard/e2e_tests/migration.serverRootPath.globalSetup.ts @@ -0,0 +1,12 @@ +import globalSetup from "./globalSetup"; + +export default async function migrationServerRootPathGlobalSetup() { + if (!process.env.SERVER_ROOT_PATH) { + throw new Error( + "migration.serverRootPath.config.ts requires SERVER_ROOT_PATH to be set (e.g. SERVER_ROOT_PATH=/litellm). " + + "Without it this config silently re-runs the default mount and never exercises the prefix. " + + "For the root-less run use the default playwright.config.ts (npm run e2e:migration).", + ); + } + await globalSetup(); +} diff --git a/ui/litellm-dashboard/package-lock.json b/ui/litellm-dashboard/package-lock.json index 2afc145d15b..828edde278b 100644 --- a/ui/litellm-dashboard/package-lock.json +++ b/ui/litellm-dashboard/package-lock.json @@ -18,6 +18,7 @@ "@types/papaparse": "5.5.2", "antd": "5.29.3", "cva": "1.0.0-beta.4", + "date-fns": "3.6.0", "dayjs": "1.11.19", "jwt-decode": "4.0.0", "lucide-react": "0.513.0", @@ -31,7 +32,6 @@ "react-json-view-lite": "2.5.0", "react-markdown": "9.1.0", "react-syntax-highlighter": "15.6.6", - "remark-gfm": "4.0.1", "tailwind-merge": "3.4.0", "uuid": "14.0.0" }, @@ -8601,16 +8601,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/markdown-table": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", - "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -8620,34 +8610,6 @@ "node": ">= 0.4" } }, - "node_modules/mdast-util-find-and-replace": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz", - "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "escape-string-regexp": "^5.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/mdast-util-from-markdown": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", @@ -8672,107 +8634,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/mdast-util-gfm": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz", - "integrity": "sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==", - "license": "MIT", - "dependencies": { - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-gfm-autolink-literal": "^2.0.0", - "mdast-util-gfm-footnote": "^2.0.0", - "mdast-util-gfm-strikethrough": "^2.0.0", - "mdast-util-gfm-table": "^2.0.0", - "mdast-util-gfm-task-list-item": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-autolink-literal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", - "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "ccount": "^2.0.0", - "devlop": "^1.0.0", - "mdast-util-find-and-replace": "^3.0.0", - "micromark-util-character": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-footnote": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.1.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-strikethrough": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", - "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", - "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "markdown-table": "^3.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-gfm-task-list-item": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", - "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "devlop": "^1.0.0", - "mdast-util-from-markdown": "^2.0.0", - "mdast-util-to-markdown": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/mdast-util-mdx-expression": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", @@ -8987,127 +8848,6 @@ "micromark-util-types": "^2.0.0" } }, - "node_modules/micromark-extension-gfm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", - "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", - "license": "MIT", - "dependencies": { - "micromark-extension-gfm-autolink-literal": "^2.0.0", - "micromark-extension-gfm-footnote": "^2.0.0", - "micromark-extension-gfm-strikethrough": "^2.0.0", - "micromark-extension-gfm-table": "^2.0.0", - "micromark-extension-gfm-tagfilter": "^2.0.0", - "micromark-extension-gfm-task-list-item": "^2.0.0", - "micromark-util-combine-extensions": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-autolink-literal": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", - "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-footnote": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-core-commonmark": "^2.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-normalize-identifier": "^2.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-strikethrough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", - "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-util-chunked": "^2.0.0", - "micromark-util-classify-character": "^2.0.0", - "micromark-util-resolve-all": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-table": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz", - "integrity": "sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-tagfilter": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", - "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", - "license": "MIT", - "dependencies": { - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-gfm-task-list-item": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", - "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/micromark-factory-destination": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", @@ -11701,24 +11441,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/remark-gfm": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz", - "integrity": "sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-gfm": "^3.0.0", - "micromark-extension-gfm": "^3.0.0", - "remark-parse": "^11.0.0", - "remark-stringify": "^11.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remark-parse": { "version": "11.0.0", "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", @@ -11752,21 +11474,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-stringify": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", - "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^4.0.0", - "mdast-util-to-markdown": "^2.0.0", - "unified": "^11.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", diff --git a/ui/litellm-dashboard/package.json b/ui/litellm-dashboard/package.json index a8948f4be34..0097e8c6559 100644 --- a/ui/litellm-dashboard/package.json +++ b/ui/litellm-dashboard/package.json @@ -34,6 +34,7 @@ "@types/papaparse": "5.5.2", "antd": "5.29.3", "cva": "1.0.0-beta.4", + "date-fns": "3.6.0", "dayjs": "1.11.19", "jwt-decode": "4.0.0", "lucide-react": "0.513.0", @@ -47,7 +48,6 @@ "react-json-view-lite": "2.5.0", "react-markdown": "9.1.0", "react-syntax-highlighter": "15.6.6", - "remark-gfm": "4.0.1", "tailwind-merge": "3.4.0", "uuid": "14.0.0" }, diff --git a/ui/litellm-dashboard/src/app/(dashboard)/memory/components/index.tsx b/ui/litellm-dashboard/src/app/(dashboard)/memory/components/index.tsx deleted file mode 100644 index 8b1c720148a..00000000000 --- a/ui/litellm-dashboard/src/app/(dashboard)/memory/components/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export { MemoryView, default } from "./MemoryView"; From 3d644e1f9dd5985a7796051b9b08b696e7e19ba7 Mon Sep 17 00:00:00 2001 From: ryan-crabbe-berri Date: Wed, 1 Jul 2026 20:14:07 -0700 Subject: [PATCH 70/79] refactor(ui): colocate users page into route-level _components (#31897) Moves the user-management component tree (view_users plus BulkEditUsers, edit_user, DefaultUserSettings, user_edit_view, and the view_users table/columns/info-view) out of the shared src/components dump into the users route segment under _components, now that the app router owns the route. The page imports from a trimmed ./_components barrel UserInfo moves into networking.tsx beside UserListResponse, its real owner: networking defines the user API response shapes that embed it, and previously reached up into a view folder (components/view_users/types) to import the type. Defining it in networking removes that backwards data-layer-to-view dependency and drains the view_users/ folder entirely. CreateUserButton and onboarding_link stay in components/ since the create-key flow also consumes them Relative imports in the moved files are rewritten to @/components/* absolute paths, and the eight pre-existing eslint-suppressions entries are re-keyed to the new paths so the move stays behavior and lint neutral Verified: the moved suites pass with the same 75 assertions as before the move, tsc and eslint are clean, and next build compiles the /users route --- ui/litellm-dashboard/eslint-suppressions.json | 16 ++++++++-------- .../users/_components}/BulkEditUsers.test.tsx | 8 ++++---- .../users/_components}/BulkEditUsers.tsx | 4 ++-- .../_components}/DefaultUserSettings.test.tsx | 8 ++++---- .../users/_components}/DefaultUserSettings.tsx | 10 ++++++---- .../users/_components}/edit_user.tsx | 4 ++-- .../(dashboard)/users/_components/index.tsx | 1 + .../users/_components}/user_edit_view.test.tsx | 6 +++--- .../users/_components}/user_edit_view.tsx | 8 ++++---- .../users/_components}/view_users.test.tsx | 4 ++-- .../users/_components}/view_users.tsx | 14 +++++++------- .../users/_components}/view_users/columns.tsx | 2 +- .../_components}/view_users/table.test.tsx | 2 +- .../users/_components}/view_users/table.tsx | 2 +- .../view_users/user_info_view.test.tsx | 2 +- .../_components}/view_users/user_info_view.tsx | 12 ++++++------ .../src/app/(dashboard)/users/page.tsx | 2 +- .../src/components/networking.tsx | 18 ++++++++++++++++-- .../src/components/view_users/types.ts | 15 --------------- .../tests/CreateKeyPage.expiredToken.test.tsx | 1 - 20 files changed, 70 insertions(+), 69 deletions(-) rename ui/litellm-dashboard/src/{components => app/(dashboard)/users/_components}/BulkEditUsers.test.tsx (97%) rename ui/litellm-dashboard/src/{components => app/(dashboard)/users/_components}/BulkEditUsers.tsx (99%) rename ui/litellm-dashboard/src/{components => app/(dashboard)/users/_components}/DefaultUserSettings.test.tsx (94%) rename ui/litellm-dashboard/src/{components => app/(dashboard)/users/_components}/DefaultUserSettings.tsx (97%) rename ui/litellm-dashboard/src/{components => app/(dashboard)/users/_components}/edit_user.tsx (95%) create mode 100644 ui/litellm-dashboard/src/app/(dashboard)/users/_components/index.tsx rename ui/litellm-dashboard/src/{components => app/(dashboard)/users/_components}/user_edit_view.test.tsx (98%) rename ui/litellm-dashboard/src/{components => app/(dashboard)/users/_components}/user_edit_view.tsx (95%) rename ui/litellm-dashboard/src/{components => app/(dashboard)/users/_components}/view_users.test.tsx (98%) rename ui/litellm-dashboard/src/{components => app/(dashboard)/users/_components}/view_users.tsx (97%) rename ui/litellm-dashboard/src/{components => app/(dashboard)/users/_components}/view_users/columns.tsx (99%) rename ui/litellm-dashboard/src/{components => app/(dashboard)/users/_components}/view_users/table.test.tsx (99%) rename ui/litellm-dashboard/src/{components => app/(dashboard)/users/_components}/view_users/table.tsx (99%) rename ui/litellm-dashboard/src/{components => app/(dashboard)/users/_components}/view_users/user_info_view.test.tsx (99%) rename ui/litellm-dashboard/src/{components => app/(dashboard)/users/_components}/view_users/user_info_view.tsx (98%) delete mode 100644 ui/litellm-dashboard/src/components/view_users/types.ts diff --git a/ui/litellm-dashboard/eslint-suppressions.json b/ui/litellm-dashboard/eslint-suppressions.json index 7a3c8f4a42c..7ea13deb934 100644 --- a/ui/litellm-dashboard/eslint-suppressions.json +++ b/ui/litellm-dashboard/eslint-suppressions.json @@ -376,7 +376,7 @@ "count": 1 } }, - "src/components/DefaultUserSettings.tsx": { + "src/app/(dashboard)/users/_components/DefaultUserSettings.tsx": { "no-restricted-imports": { "count": 1 } @@ -1001,7 +1001,7 @@ "count": 1 } }, - "src/components/edit_user.tsx": { + "src/app/(dashboard)/users/_components/edit_user.tsx": { "no-restricted-imports": { "count": 1 } @@ -1957,12 +1957,12 @@ "count": 2 } }, - "src/components/user_edit_view.test.tsx": { + "src/app/(dashboard)/users/_components/user_edit_view.test.tsx": { "react/display-name": { "count": 1 } }, - "src/components/user_edit_view.tsx": { + "src/app/(dashboard)/users/_components/user_edit_view.tsx": { "no-restricted-imports": { "count": 1 }, @@ -2047,7 +2047,7 @@ "count": 2 } }, - "src/components/view_users.tsx": { + "src/app/(dashboard)/users/_components/view_users.tsx": { "no-restricted-imports": { "count": 1 }, @@ -2055,7 +2055,7 @@ "count": 1 } }, - "src/components/view_users/columns.tsx": { + "src/app/(dashboard)/users/_components/view_users/columns.tsx": { "max-params": { "count": 1 }, @@ -2063,12 +2063,12 @@ "count": 1 } }, - "src/components/view_users/table.tsx": { + "src/app/(dashboard)/users/_components/view_users/table.tsx": { "no-restricted-imports": { "count": 1 } }, - "src/components/view_users/user_info_view.tsx": { + "src/app/(dashboard)/users/_components/view_users/user_info_view.tsx": { "no-restricted-imports": { "count": 1 }, diff --git a/ui/litellm-dashboard/src/components/BulkEditUsers.test.tsx b/ui/litellm-dashboard/src/app/(dashboard)/users/_components/BulkEditUsers.test.tsx similarity index 97% rename from ui/litellm-dashboard/src/components/BulkEditUsers.test.tsx rename to ui/litellm-dashboard/src/app/(dashboard)/users/_components/BulkEditUsers.test.tsx index f0af295017e..f16f5325952 100644 --- a/ui/litellm-dashboard/src/components/BulkEditUsers.test.tsx +++ b/ui/litellm-dashboard/src/app/(dashboard)/users/_components/BulkEditUsers.test.tsx @@ -1,11 +1,11 @@ import userEvent from "@testing-library/user-event"; import { describe, expect, it, vi, beforeEach } from "vitest"; -import { renderWithProviders, screen, waitFor } from "../../tests/test-utils"; +import { renderWithProviders, screen, waitFor } from "../../../../../tests/test-utils"; import BulkEditUserModal from "./BulkEditUsers"; -import { userBulkUpdateUserCall, teamBulkMemberAddCall } from "./networking"; -import NotificationsManager from "./molecules/notifications_manager"; +import { userBulkUpdateUserCall, teamBulkMemberAddCall } from "@/components/networking"; +import NotificationsManager from "@/components/molecules/notifications_manager"; -vi.mock("./networking", () => ({ +vi.mock("@/components/networking", () => ({ userBulkUpdateUserCall: vi.fn(), teamBulkMemberAddCall: vi.fn(), })); diff --git a/ui/litellm-dashboard/src/components/BulkEditUsers.tsx b/ui/litellm-dashboard/src/app/(dashboard)/users/_components/BulkEditUsers.tsx similarity index 99% rename from ui/litellm-dashboard/src/components/BulkEditUsers.tsx rename to ui/litellm-dashboard/src/app/(dashboard)/users/_components/BulkEditUsers.tsx index 7bcfd793604..f22de171d68 100644 --- a/ui/litellm-dashboard/src/components/BulkEditUsers.tsx +++ b/ui/litellm-dashboard/src/app/(dashboard)/users/_components/BulkEditUsers.tsx @@ -1,8 +1,8 @@ import React, { useState } from "react"; import { Modal, Typography, Divider, Table, Select, InputNumber, Card, Space, Checkbox } from "antd"; -import { userBulkUpdateUserCall, teamBulkMemberAddCall, Member } from "./networking"; +import { userBulkUpdateUserCall, teamBulkMemberAddCall, Member } from "@/components/networking"; import { UserEditView } from "./user_edit_view"; -import NotificationsManager from "./molecules/notifications_manager"; +import NotificationsManager from "@/components/molecules/notifications_manager"; import MessageManager from "@/components/molecules/message_manager"; const { Text, Title } = Typography; diff --git a/ui/litellm-dashboard/src/components/DefaultUserSettings.test.tsx b/ui/litellm-dashboard/src/app/(dashboard)/users/_components/DefaultUserSettings.test.tsx similarity index 94% rename from ui/litellm-dashboard/src/components/DefaultUserSettings.test.tsx rename to ui/litellm-dashboard/src/app/(dashboard)/users/_components/DefaultUserSettings.test.tsx index 78d50fa7f31..06dafcfcffd 100644 --- a/ui/litellm-dashboard/src/components/DefaultUserSettings.test.tsx +++ b/ui/litellm-dashboard/src/app/(dashboard)/users/_components/DefaultUserSettings.test.tsx @@ -1,15 +1,15 @@ import { act, fireEvent, render, screen, waitFor } from "@testing-library/react"; import { beforeEach, describe, expect, it, vi } from "vitest"; import DefaultUserSettings from "./DefaultUserSettings"; -import * as networking from "./networking"; +import * as networking from "@/components/networking"; -vi.mock("./networking", () => ({ +vi.mock("@/components/networking", () => ({ getInternalUserSettings: vi.fn(), updateInternalUserSettings: vi.fn(), modelAvailableCall: vi.fn(), })); -vi.mock("./common_components/budget_duration_dropdown", () => ({ +vi.mock("@/components/common_components/budget_duration_dropdown", () => ({ default: ({ value, onChange }: { value: string | null; onChange: (value: string | null) => void }) => (

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ʤPcM!+l=G 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 PgcM)YIg3xFy)bQz^w-tm2-$ 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 HZ$J4TI|K-k literal 0 HcmV?d00001 diff --git a/litellm/proxy/_experimental/out/assets/logos/a2a_agent.png b/litellm/proxy/_experimental/out/assets/logos/a2a_agent.png new file mode 100644 index 0000000000000000000000000000000000000000..305ae1acaf434f9b4151cdabdc86038abdd34f00 GIT binary patch literal 72568 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